Compare commits
	
		
			4 Commits
		
	
	
		
			b027114b6d
			...
			b944d58943
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| b944d58943 | |||
| 4f288f04ff | |||
| 2f3c112e71 | |||
| 3c9c7fcbf3 | 
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -160,3 +160,6 @@ cython_debug/ | ||||
| #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | ||||
| #.idea/ | ||||
| 
 | ||||
| # Project specific | ||||
| **/archives | ||||
| **/media | ||||
|  | ||||
							
								
								
									
										0
									
								
								logs_collector/collector/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								logs_collector/collector/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										21
									
								
								logs_collector/collector/admin.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								logs_collector/collector/admin.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,21 @@ | ||||
| from django.contrib import admin | ||||
| 
 | ||||
| from .models import Platform, Archive, Ticket | ||||
| 
 | ||||
| 
 | ||||
| # Register your models here. | ||||
| class PlatformAdmin(admin.ModelAdmin): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class TicketAdmin(admin.ModelAdmin): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| class ArchiveAdmin(admin.ModelAdmin): | ||||
|     pass | ||||
| 
 | ||||
| 
 | ||||
| admin.site.register(Platform, PlatformAdmin) | ||||
| admin.site.register(Ticket, TicketAdmin) | ||||
| admin.site.register(Archive, ArchiveAdmin) | ||||
							
								
								
									
										6
									
								
								logs_collector/collector/apps.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								logs_collector/collector/apps.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,6 @@ | ||||
| from django.apps import AppConfig | ||||
| 
 | ||||
| 
 | ||||
| class CollectorConfig(AppConfig): | ||||
|     default_auto_field = 'django.db.models.BigAutoField' | ||||
|     name = 'collector' | ||||
							
								
								
									
										52
									
								
								logs_collector/collector/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								logs_collector/collector/migrations/0001_initial.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,52 @@ | ||||
| # Generated by Django 4.2 on 2023-07-27 02:04 | ||||
| 
 | ||||
| import collector.models | ||||
| from django.conf import settings | ||||
| import django.core.files.storage | ||||
| from django.db import migrations, models | ||||
| import django.db.models.deletion | ||||
| import pathlib | ||||
| 
 | ||||
| 
 | ||||
| class Migration(migrations.Migration): | ||||
| 
 | ||||
|     initial = True | ||||
| 
 | ||||
|     dependencies = [ | ||||
|         migrations.swappable_dependency(settings.AUTH_USER_MODEL), | ||||
|     ] | ||||
| 
 | ||||
|     operations = [ | ||||
|         migrations.CreateModel( | ||||
|             name='Platform', | ||||
|             fields=[ | ||||
|                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('name', models.CharField(max_length=20)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='Ticket', | ||||
|             fields=[ | ||||
|                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('number', models.IntegerField()), | ||||
|                 ('resolved', models.BooleanField(default=False)), | ||||
|                 ('note', models.TextField(blank=True)), | ||||
|                 ('time_create', models.DateTimeField(auto_now_add=True)), | ||||
|                 ('time_update', models.DateTimeField(auto_now=True)), | ||||
|                 ('platform', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='collector.platform')), | ||||
|                 ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), | ||||
|             ], | ||||
|         ), | ||||
|         migrations.CreateModel( | ||||
|             name='Archive', | ||||
|             fields=[ | ||||
|                 ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), | ||||
|                 ('file', models.FileField(blank=True, null=True, storage=django.core.files.storage.FileSystemStorage(base_url='/archives/', location=pathlib.PurePosixPath('/home/stepan/Documents/Dev/ISPsystem/logs-collector/logs_collector/archives')), upload_to=collector.models.logs_dir_path)), | ||||
|                 ('sha1', models.CharField(editable=False, max_length=1024)), | ||||
|                 ('time_create', models.DateTimeField(auto_now_add=True)), | ||||
|                 ('time_update', models.DateTimeField(auto_now=True)), | ||||
|                 ('ticket', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='collector.ticket')), | ||||
|                 ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)), | ||||
|             ], | ||||
|         ), | ||||
|     ] | ||||
							
								
								
									
										0
									
								
								logs_collector/collector/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								logs_collector/collector/migrations/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										69
									
								
								logs_collector/collector/models.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										69
									
								
								logs_collector/collector/models.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,69 @@ | ||||
| import hashlib | ||||
| from functools import partial | ||||
| 
 | ||||
| from django.contrib.auth.models import User | ||||
| from django.db import models | ||||
| from django.conf import settings | ||||
| from django.core.files.storage import FileSystemStorage | ||||
| from django.db.models import FileField | ||||
| 
 | ||||
| 
 | ||||
| # Create a custom storage location, using a value from your settings file | ||||
| sensitive_upload_storage = FileSystemStorage( | ||||
|     location=settings.MEDIA_ROOT_FOR_SENSITIVE_FILES, | ||||
|     base_url=settings.MEDIA_URL_FOR_SENSITIVE_FILES | ||||
| ) | ||||
| # ... and a file field that will use the custom storage | ||||
| AuthenticatedFileField = partial(FileField, storage=sensitive_upload_storage) | ||||
| 
 | ||||
| 
 | ||||
| def logs_dir_path(instance, filename): | ||||
|     # file will be uploaded to | ||||
|     # MEDIA_ROOT_FOR_SENSITIVE_FILES/<ticket>/<filename> | ||||
|     return f'{instance.ticket}/{filename}' | ||||
| 
 | ||||
| 
 | ||||
| class Archive(models.Model): | ||||
|     file = AuthenticatedFileField( | ||||
|         upload_to=logs_dir_path, | ||||
|         blank=True, | ||||
|         null=True | ||||
|     ) | ||||
|     sha1 = models.CharField(max_length=1024, editable=False) | ||||
|     time_create = models.DateTimeField(auto_now_add=True) | ||||
|     time_update = models.DateTimeField(auto_now=True) | ||||
|     ticket = models.ForeignKey('Ticket', on_delete=models.CASCADE) | ||||
|     user = models.ForeignKey(User, on_delete=models.CASCADE) | ||||
| 
 | ||||
|     def save(self, *args, **kwargs): | ||||
|         # calculate sha 1 hash sum and write sha1 field to db | ||||
|         with self.file.open('rb') as f: | ||||
|             sha1 = hashlib.sha1() | ||||
|             for byte_block in iter(lambda: f.read(4096), b""): | ||||
|                 sha1.update(byte_block) | ||||
|             self.sha1 = sha1.hexdigest() | ||||
|             # Call the "real" save() method | ||||
|             super().save(*args, **kwargs) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return str(self.file) | ||||
| 
 | ||||
| 
 | ||||
| class Platform(models.Model): | ||||
|     name = models.CharField(max_length=20) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return self.name | ||||
| 
 | ||||
| 
 | ||||
| class Ticket(models.Model): | ||||
|     number = models.IntegerField() | ||||
|     resolved = models.BooleanField(default=False) | ||||
|     note = models.TextField(blank=True) | ||||
|     time_create = models.DateTimeField(auto_now_add=True) | ||||
|     time_update = models.DateTimeField(auto_now=True) | ||||
|     platform = models.ForeignKey('Platform', on_delete=models.CASCADE) | ||||
|     user = models.ForeignKey(User, on_delete=models.CASCADE) | ||||
| 
 | ||||
|     def __str__(self): | ||||
|         return str(self.number) | ||||
							
								
								
									
										3
									
								
								logs_collector/collector/tests.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								logs_collector/collector/tests.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,3 @@ | ||||
| from django.test import TestCase | ||||
| 
 | ||||
| # Create your tests here. | ||||
							
								
								
									
										9
									
								
								logs_collector/collector/urls.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								logs_collector/collector/urls.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,9 @@ | ||||
| from django.urls import path | ||||
| from . import views | ||||
| 
 | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|     path('', views.index, name='index',), | ||||
|     path('test/<str:path>/', views.test_page, name='test_page'), | ||||
|     path('archives/<ticket>/<archive>', views.download, name="download") | ||||
| ] | ||||
							
								
								
									
										0
									
								
								logs_collector/collector/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								logs_collector/collector/utils.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										25
									
								
								logs_collector/collector/views.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								logs_collector/collector/views.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,25 @@ | ||||
| # from django.shortcuts import render | ||||
| from django.contrib.auth.decorators import login_required | ||||
| from django.http import FileResponse, HttpResponse, Http404 | ||||
| from .models import Archive | ||||
| 
 | ||||
| 
 | ||||
| # Create your views here. | ||||
| # handles the url "/archives/{PATH}"". | ||||
| @login_required | ||||
| def download(request, ticket, file): | ||||
|     path = f'{ticket}/{file}' | ||||
|     try: | ||||
|         file = Archive.objects.get(file=path) | ||||
|     except Archive.DoesNotExist: | ||||
|         return Http404 | ||||
| 
 | ||||
|     return FileResponse(file.file) | ||||
| 
 | ||||
| 
 | ||||
| def index(request): | ||||
|     return HttpResponse('<h1>Index Page</h1>') | ||||
| 
 | ||||
| 
 | ||||
| def test_page(request, path): | ||||
|     return HttpResponse(f'<h1>{path} Page</h1>') | ||||
							
								
								
									
										0
									
								
								logs_collector/logs_collector/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								logs_collector/logs_collector/__init__.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										16
									
								
								logs_collector/logs_collector/asgi.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								logs_collector/logs_collector/asgi.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| """ | ||||
| ASGI config for logs_collector project. | ||||
| 
 | ||||
| It exposes the ASGI callable as a module-level variable named ``application``. | ||||
| 
 | ||||
| For more information on this file, see | ||||
| https://docs.djangoproject.com/en/4.2/howto/deployment/asgi/ | ||||
| """ | ||||
| 
 | ||||
| import os | ||||
| 
 | ||||
| from django.core.asgi import get_asgi_application | ||||
| 
 | ||||
| os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logs_collector.settings') | ||||
| 
 | ||||
| application = get_asgi_application() | ||||
							
								
								
									
										128
									
								
								logs_collector/logs_collector/settings.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										128
									
								
								logs_collector/logs_collector/settings.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,128 @@ | ||||
| import environ | ||||
| from pathlib import Path | ||||
| 
 | ||||
| 
 | ||||
| env = environ.Env( | ||||
|     # set casting default value | ||||
|     DEBUG=(bool, False) | ||||
| ) | ||||
| # Build paths inside the project like this: BASE_DIR / 'subdir'. | ||||
| BASE_DIR = Path(__file__).resolve().parent.parent | ||||
| 
 | ||||
| environ.Env.read_env(BASE_DIR / '.env') | ||||
| 
 | ||||
| 
 | ||||
| # SECURITY WARNING: keep the secret key used in production secret! | ||||
| SECRET_KEY = env('SECRET_KEY') | ||||
| 
 | ||||
| # SECURITY WARNING: don't run with debug turned on in production! | ||||
| DEBUG = env('DEBUG') | ||||
| 
 | ||||
| ALLOWED_HOSTS = env.list("ALLOWED_HOSTS", default=["*"]) | ||||
| 
 | ||||
| # TODO: required for docker image | ||||
| # CSRF_TRUSTED_ORIGINS = env.list("CSRF_TRUSTED_ORIGINS", default=["*"]) | ||||
| 
 | ||||
| 
 | ||||
| # Application definition | ||||
| 
 | ||||
| INSTALLED_APPS = [ | ||||
|     'django.contrib.admin', | ||||
|     'django.contrib.auth', | ||||
|     'django.contrib.contenttypes', | ||||
|     'django.contrib.sessions', | ||||
|     'django.contrib.messages', | ||||
|     'django.contrib.staticfiles', | ||||
|     'collector.apps.CollectorConfig',  # main app | ||||
|     'rest_framework', | ||||
|     'django_cleanup.apps.CleanupConfig',  # required bottom | ||||
| ] | ||||
| 
 | ||||
| MIDDLEWARE = [ | ||||
|     'django.middleware.security.SecurityMiddleware', | ||||
|     'django.contrib.sessions.middleware.SessionMiddleware', | ||||
|     'django.middleware.common.CommonMiddleware', | ||||
|     'django.middleware.csrf.CsrfViewMiddleware', | ||||
|     'django.contrib.auth.middleware.AuthenticationMiddleware', | ||||
|     'django.contrib.messages.middleware.MessageMiddleware', | ||||
|     'django.middleware.clickjacking.XFrameOptionsMiddleware', | ||||
| ] | ||||
| 
 | ||||
| ROOT_URLCONF = 'logs_collector.urls' | ||||
| 
 | ||||
| TEMPLATES = [ | ||||
|     { | ||||
|         'BACKEND': 'django.template.backends.django.DjangoTemplates', | ||||
|         'DIRS': [], | ||||
|         'APP_DIRS': True, | ||||
|         'OPTIONS': { | ||||
|             'context_processors': [ | ||||
|                 'django.template.context_processors.debug', | ||||
|                 'django.template.context_processors.request', | ||||
|                 'django.contrib.auth.context_processors.auth', | ||||
|                 'django.contrib.messages.context_processors.messages', | ||||
|             ], | ||||
|         }, | ||||
|     }, | ||||
| ] | ||||
| 
 | ||||
| WSGI_APPLICATION = 'logs_collector.wsgi.application' | ||||
| 
 | ||||
| 
 | ||||
| # Database | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#databases | ||||
| 
 | ||||
| DATABASES = { | ||||
|     'default': env.db_url( | ||||
|         'SQLITE_URL', | ||||
|         default=f'sqlite:///{BASE_DIR / "db.sqlite3"}' | ||||
|     ) | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| # Password validation | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#auth-password-validators | ||||
| 
 | ||||
| AUTH_PASSWORD_VALIDATORS = [ | ||||
|     { | ||||
|         'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',  # noqa:E501 | ||||
|     }, | ||||
|     { | ||||
|         'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',  # noqa:E501 | ||||
|     }, | ||||
|     { | ||||
|         'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',  # noqa:E501 | ||||
|     }, | ||||
|     { | ||||
|         'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',  # noqa:E501 | ||||
|     }, | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
| # Internationalization | ||||
| # https://docs.djangoproject.com/en/4.2/topics/i18n/ | ||||
| 
 | ||||
| LANGUAGE_CODE = 'en-us' | ||||
| 
 | ||||
| TIME_ZONE = 'Asia/Irkutsk' | ||||
| 
 | ||||
| USE_I18N = True | ||||
| 
 | ||||
| USE_TZ = True | ||||
| 
 | ||||
| 
 | ||||
| # Static files (CSS, JavaScript, Images) | ||||
| # https://docs.djangoproject.com/en/4.2/howto/static-files/ | ||||
| 
 | ||||
| STATIC_URL = 'static/' | ||||
| 
 | ||||
| # Default primary key field type | ||||
| # https://docs.djangoproject.com/en/4.2/ref/settings/#default-auto-field | ||||
| 
 | ||||
| DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField' | ||||
| 
 | ||||
| MEDIA_ROOT = BASE_DIR / 'media' | ||||
| MEDIA_URL = 'media/' | ||||
| 
 | ||||
| MEDIA_ROOT_FOR_SENSITIVE_FILES = BASE_DIR / 'archives' | ||||
| MEDIA_URL_FOR_SENSITIVE_FILES = '/archives/' | ||||
							
								
								
									
										33
									
								
								logs_collector/logs_collector/urls.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								logs_collector/logs_collector/urls.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,33 @@ | ||||
| """ | ||||
| URL configuration for logs_collector project. | ||||
| 
 | ||||
| The `urlpatterns` list routes URLs to views. For more information please see: | ||||
|     https://docs.djangoproject.com/en/4.2/topics/http/urls/ | ||||
| Examples: | ||||
| Function views | ||||
|     1. Add an import:  from my_app import views | ||||
|     2. Add a URL to urlpatterns:  path('', views.home, name='home') | ||||
| Class-based views | ||||
|     1. Add an import:  from other_app.views import Home | ||||
|     2. Add a URL to urlpatterns:  path('', Home.as_view(), name='home') | ||||
| Including another URLconf | ||||
|     1. Import the include() function: from django.urls import include, path | ||||
|     2. Add a URL to urlpatterns:  path('blog/', include('blog.urls')) | ||||
| """ | ||||
| from django.conf.urls.static import static | ||||
| from django.contrib import admin | ||||
| from django.urls import path, include | ||||
| 
 | ||||
| from logs_collector import settings | ||||
| 
 | ||||
| 
 | ||||
| urlpatterns = [ | ||||
|     path('admin/', admin.site.urls), | ||||
|     path('', include('collector.urls')), | ||||
| ] | ||||
| 
 | ||||
| 
 | ||||
| if settings.DEBUG: | ||||
|     urlpatterns += static( | ||||
|         settings.MEDIA_URL, document_root=settings.MEDIA_ROOT | ||||
|     ) | ||||
							
								
								
									
										16
									
								
								logs_collector/logs_collector/wsgi.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								logs_collector/logs_collector/wsgi.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | ||||
| """ | ||||
| WSGI config for logs_collector project. | ||||
| 
 | ||||
| It exposes the WSGI callable as a module-level variable named ``application``. | ||||
| 
 | ||||
| For more information on this file, see | ||||
| https://docs.djangoproject.com/en/4.2/howto/deployment/wsgi/ | ||||
| """ | ||||
| 
 | ||||
| import os | ||||
| 
 | ||||
| from django.core.wsgi import get_wsgi_application | ||||
| 
 | ||||
| os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logs_collector.settings') | ||||
| 
 | ||||
| application = get_wsgi_application() | ||||
							
								
								
									
										22
									
								
								logs_collector/manage.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								logs_collector/manage.py
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,22 @@ | ||||
| #!/usr/bin/env python | ||||
| """Django's command-line utility for administrative tasks.""" | ||||
| import os | ||||
| import sys | ||||
| 
 | ||||
| 
 | ||||
| def main(): | ||||
|     """Run administrative tasks.""" | ||||
|     os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'logs_collector.settings') | ||||
|     try: | ||||
|         from django.core.management import execute_from_command_line | ||||
|     except ImportError as exc: | ||||
|         raise ImportError( | ||||
|             "Couldn't import Django. Are you sure it's installed and " | ||||
|             "available on your PYTHONPATH environment variable? Did you " | ||||
|             "forget to activate a virtual environment?" | ||||
|         ) from exc | ||||
|     execute_from_command_line(sys.argv) | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     main() | ||||
							
								
								
									
										224
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								poetry.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @ -0,0 +1,224 @@ | ||||
| # This file is automatically @generated by Poetry 1.5.1 and should not be changed by hand. | ||||
| 
 | ||||
| [[package]] | ||||
| name = "asgiref" | ||||
| version = "3.7.2" | ||||
| description = "ASGI specs, helper code, and adapters" | ||||
| optional = false | ||||
| python-versions = ">=3.7" | ||||
| files = [ | ||||
|     {file = "asgiref-3.7.2-py3-none-any.whl", hash = "sha256:89b2ef2247e3b562a16eef663bc0e2e703ec6468e2fa8a5cd61cd449786d4f6e"}, | ||||
|     {file = "asgiref-3.7.2.tar.gz", hash = "sha256:9e0ce3aa93a819ba5b45120216b23878cf6e8525eb3848653452b4192b92afed"}, | ||||
| ] | ||||
| 
 | ||||
| [package.dependencies] | ||||
| typing-extensions = {version = ">=4", markers = "python_version < \"3.11\""} | ||||
| 
 | ||||
| [package.extras] | ||||
| tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "django" | ||||
| version = "4.2" | ||||
| description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." | ||||
| optional = false | ||||
| python-versions = ">=3.8" | ||||
| files = [ | ||||
|     {file = "Django-4.2-py3-none-any.whl", hash = "sha256:ad33ed68db9398f5dfb33282704925bce044bef4261cd4fb59e4e7f9ae505a78"}, | ||||
|     {file = "Django-4.2.tar.gz", hash = "sha256:c36e2ab12824e2ac36afa8b2515a70c53c7742f0d6eaefa7311ec379558db997"}, | ||||
| ] | ||||
| 
 | ||||
| [package.dependencies] | ||||
| asgiref = ">=3.6.0,<4" | ||||
| sqlparse = ">=0.3.1" | ||||
| tzdata = {version = "*", markers = "sys_platform == \"win32\""} | ||||
| 
 | ||||
| [package.extras] | ||||
| argon2 = ["argon2-cffi (>=19.1.0)"] | ||||
| bcrypt = ["bcrypt"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "django-cleanup" | ||||
| version = "8.0.0" | ||||
| description = "Deletes old files." | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| files = [ | ||||
|     {file = "django-cleanup-8.0.0.tar.gz", hash = "sha256:c739a05544e1e48dc848871c870dbf1595f8533d24523bc67360e43562edaf0d"}, | ||||
|     {file = "django_cleanup-8.0.0-py2.py3-none-any.whl", hash = "sha256:8cd8872d67fe1501b19a843d006cdb5673cfbb74ac3d6d8f2c60e8e7723a7f5b"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "django-environ" | ||||
| version = "0.10.0" | ||||
| description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." | ||||
| optional = false | ||||
| python-versions = ">=3.5,<4" | ||||
| files = [ | ||||
|     {file = "django-environ-0.10.0.tar.gz", hash = "sha256:b3559a91439c9d774a9e0c1ced872364772c612cdf6dc919506a2b13f7a77225"}, | ||||
|     {file = "django_environ-0.10.0-py2.py3-none-any.whl", hash = "sha256:510f8c9c1d0a38b0815f91504270c29440a0cf44fab07f55942fa8d31bbb9be6"}, | ||||
| ] | ||||
| 
 | ||||
| [package.extras] | ||||
| develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] | ||||
| docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] | ||||
| testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "djangorestframework" | ||||
| version = "3.14.0" | ||||
| description = "Web APIs for Django, made easy." | ||||
| optional = false | ||||
| python-versions = ">=3.6" | ||||
| files = [ | ||||
|     {file = "djangorestframework-3.14.0-py3-none-any.whl", hash = "sha256:eb63f58c9f218e1a7d064d17a70751f528ed4e1d35547fdade9aaf4cd103fd08"}, | ||||
|     {file = "djangorestframework-3.14.0.tar.gz", hash = "sha256:579a333e6256b09489cbe0a067e66abe55c6595d8926be6b99423786334350c8"}, | ||||
| ] | ||||
| 
 | ||||
| [package.dependencies] | ||||
| django = ">=3.0" | ||||
| pytz = "*" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "djangorestframework-simplejwt" | ||||
| version = "5.2.2" | ||||
| description = "A minimal JSON Web Token authentication plugin for Django REST Framework" | ||||
| optional = false | ||||
| python-versions = ">=3.7" | ||||
| files = [ | ||||
|     {file = "djangorestframework_simplejwt-5.2.2-py3-none-any.whl", hash = "sha256:4c0d2e2513e12587d93501ac091781684a216c3ee614eb3b5a10586aef5ca845"}, | ||||
|     {file = "djangorestframework_simplejwt-5.2.2.tar.gz", hash = "sha256:d27d4bcac2c6394f678dea8b4d0d511c6e18a7f2eb8aaeeb8a7de601aeb77c42"}, | ||||
| ] | ||||
| 
 | ||||
| [package.dependencies] | ||||
| django = "*" | ||||
| djangorestframework = "*" | ||||
| pyjwt = ">=1.7.1,<3" | ||||
| 
 | ||||
| [package.extras] | ||||
| crypto = ["cryptography (>=3.3.1)"] | ||||
| dev = ["Sphinx (>=1.6.5,<2)", "cryptography", "flake8", "ipython", "isort", "pep8", "pytest", "pytest-cov", "pytest-django", "pytest-watch", "pytest-xdist", "python-jose (==3.3.0)", "sphinx-rtd-theme (>=0.1.9)", "tox", "twine", "wheel"] | ||||
| doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"] | ||||
| lint = ["flake8", "isort", "pep8"] | ||||
| python-jose = ["python-jose (==3.3.0)"] | ||||
| test = ["cryptography", "pytest", "pytest-cov", "pytest-django", "pytest-xdist", "tox"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "flake8" | ||||
| version = "6.0.0" | ||||
| description = "the modular source code checker: pep8 pyflakes and co" | ||||
| optional = false | ||||
| python-versions = ">=3.8.1" | ||||
| files = [ | ||||
|     {file = "flake8-6.0.0-py2.py3-none-any.whl", hash = "sha256:3833794e27ff64ea4e9cf5d410082a8b97ff1a06c16aa3d2027339cd0f1195c7"}, | ||||
|     {file = "flake8-6.0.0.tar.gz", hash = "sha256:c61007e76655af75e6785a931f452915b371dc48f56efd765247c8fe68f2b181"}, | ||||
| ] | ||||
| 
 | ||||
| [package.dependencies] | ||||
| mccabe = ">=0.7.0,<0.8.0" | ||||
| pycodestyle = ">=2.10.0,<2.11.0" | ||||
| pyflakes = ">=3.0.0,<3.1.0" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "mccabe" | ||||
| version = "0.7.0" | ||||
| description = "McCabe checker, plugin for flake8" | ||||
| optional = false | ||||
| python-versions = ">=3.6" | ||||
| files = [ | ||||
|     {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, | ||||
|     {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pycodestyle" | ||||
| version = "2.10.0" | ||||
| description = "Python style guide checker" | ||||
| optional = false | ||||
| python-versions = ">=3.6" | ||||
| files = [ | ||||
|     {file = "pycodestyle-2.10.0-py2.py3-none-any.whl", hash = "sha256:8a4eaf0d0495c7395bdab3589ac2db602797d76207242c17d470186815706610"}, | ||||
|     {file = "pycodestyle-2.10.0.tar.gz", hash = "sha256:347187bdb476329d98f695c213d7295a846d1152ff4fe9bacb8a9590b8ee7053"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pyflakes" | ||||
| version = "3.0.1" | ||||
| description = "passive checker of Python programs" | ||||
| optional = false | ||||
| python-versions = ">=3.6" | ||||
| files = [ | ||||
|     {file = "pyflakes-3.0.1-py2.py3-none-any.whl", hash = "sha256:ec55bf7fe21fff7f1ad2f7da62363d749e2a470500eab1b555334b67aa1ef8cf"}, | ||||
|     {file = "pyflakes-3.0.1.tar.gz", hash = "sha256:ec8b276a6b60bd80defed25add7e439881c19e64850afd9b346283d4165fd0fd"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pyjwt" | ||||
| version = "2.8.0" | ||||
| description = "JSON Web Token implementation in Python" | ||||
| optional = false | ||||
| python-versions = ">=3.7" | ||||
| files = [ | ||||
|     {file = "PyJWT-2.8.0-py3-none-any.whl", hash = "sha256:59127c392cc44c2da5bb3192169a91f429924e17aff6534d70fdc02ab3e04320"}, | ||||
|     {file = "PyJWT-2.8.0.tar.gz", hash = "sha256:57e28d156e3d5c10088e0c68abb90bfac3df82b40a71bd0daa20c65ccd5c23de"}, | ||||
| ] | ||||
| 
 | ||||
| [package.extras] | ||||
| crypto = ["cryptography (>=3.4.0)"] | ||||
| dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] | ||||
| docs = ["sphinx (>=4.5.0,<5.0.0)", "sphinx-rtd-theme", "zope.interface"] | ||||
| tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pytz" | ||||
| version = "2023.3" | ||||
| description = "World timezone definitions, modern and historical" | ||||
| optional = false | ||||
| python-versions = "*" | ||||
| files = [ | ||||
|     {file = "pytz-2023.3-py2.py3-none-any.whl", hash = "sha256:a151b3abb88eda1d4e34a9814df37de2a80e301e68ba0fd856fb9b46bfbbbffb"}, | ||||
|     {file = "pytz-2023.3.tar.gz", hash = "sha256:1d8ce29db189191fb55338ee6d0387d82ab59f3d00eac103412d64e0ebd0c588"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "sqlparse" | ||||
| version = "0.4.4" | ||||
| description = "A non-validating SQL parser." | ||||
| optional = false | ||||
| python-versions = ">=3.5" | ||||
| files = [ | ||||
|     {file = "sqlparse-0.4.4-py3-none-any.whl", hash = "sha256:5430a4fe2ac7d0f93e66f1efc6e1338a41884b7ddf2a350cedd20ccc4d9d28f3"}, | ||||
|     {file = "sqlparse-0.4.4.tar.gz", hash = "sha256:d446183e84b8349fa3061f0fe7f06ca94ba65b426946ffebe6e3e8295332420c"}, | ||||
| ] | ||||
| 
 | ||||
| [package.extras] | ||||
| dev = ["build", "flake8"] | ||||
| doc = ["sphinx"] | ||||
| test = ["pytest", "pytest-cov"] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "typing-extensions" | ||||
| version = "4.7.1" | ||||
| description = "Backported and Experimental Type Hints for Python 3.7+" | ||||
| optional = false | ||||
| python-versions = ">=3.7" | ||||
| files = [ | ||||
|     {file = "typing_extensions-4.7.1-py3-none-any.whl", hash = "sha256:440d5dd3af93b060174bf433bccd69b0babc3b15b1a8dca43789fd7f61514b36"}, | ||||
|     {file = "typing_extensions-4.7.1.tar.gz", hash = "sha256:b75ddc264f0ba5615db7ba217daeb99701ad295353c45f9e95963337ceeeffb2"}, | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tzdata" | ||||
| version = "2023.3" | ||||
| description = "Provider of IANA time zone data" | ||||
| optional = false | ||||
| python-versions = ">=2" | ||||
| files = [ | ||||
|     {file = "tzdata-2023.3-py2.py3-none-any.whl", hash = "sha256:7e65763eef3120314099b6939b5546db7adce1e7d6f2e179e3df563c70511eda"}, | ||||
|     {file = "tzdata-2023.3.tar.gz", hash = "sha256:11ef1e08e54acb0d4f95bdb1be05da659673de4acbd21bf9c69e94cc5e907a3a"}, | ||||
| ] | ||||
| 
 | ||||
| [metadata] | ||||
| lock-version = "2.0" | ||||
| python-versions = "^3.10" | ||||
| content-hash = "82580779974f9b9a09d2b46c9d92491e870b66363e634d34252a31338da1aeff" | ||||
							
								
								
									
										22
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								pyproject.toml
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,22 @@ | ||||
| [tool.poetry] | ||||
| name = "logs-collector" | ||||
| version = "0.1.0" | ||||
| description = "Server side for receiving and storing log files" | ||||
| authors = ["MOIS3Y <s.zhukovskii@ispsystem.com>"] | ||||
| readme = "README.md" | ||||
| packages = [{include = "logs_collector"}] | ||||
| 
 | ||||
| [tool.poetry.dependencies] | ||||
| python = "^3.10" | ||||
| Django = "4.2" | ||||
| djangorestframework = "^3.14.0" | ||||
| djangorestframework-simplejwt = "^5.2.2" | ||||
| django-environ = "^0.10.0" | ||||
| django-cleanup = "^8.0.0" | ||||
| 
 | ||||
| [tool.poetry.group.dev.dependencies] | ||||
| flake8 = "^6.0.0" | ||||
| 
 | ||||
| [build-system] | ||||
| requires = ["poetry-core"] | ||||
| build-backend = "poetry.core.masonry.api" | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user