Compare commits
	
		
			No commits in common. "b944d58943319cf06724bc044b9898f55737837c" and "b027114b6db2d1207ba6194299821ccdca52f3c5" have entirely different histories.
		
	
	
		
			b944d58943
			...
			b027114b6d
		
	
		
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -160,6 +160,3 @@ cython_debug/ | |||||||
| #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | #  option (not recommended) you can uncomment the following to ignore the entire idea folder. | ||||||
| #.idea/ | #.idea/ | ||||||
| 
 | 
 | ||||||
| # Project specific |  | ||||||
| **/archives |  | ||||||
| **/media |  | ||||||
|  | |||||||
| @ -1,21 +0,0 @@ | |||||||
| 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) |  | ||||||
| @ -1,6 +0,0 @@ | |||||||
| from django.apps import AppConfig |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| class CollectorConfig(AppConfig): |  | ||||||
|     default_auto_field = 'django.db.models.BigAutoField' |  | ||||||
|     name = 'collector' |  | ||||||
| @ -1,52 +0,0 @@ | |||||||
| # 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)), |  | ||||||
|             ], |  | ||||||
|         ), |  | ||||||
|     ] |  | ||||||
| @ -1,69 +0,0 @@ | |||||||
| 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) |  | ||||||
| @ -1,3 +0,0 @@ | |||||||
| from django.test import TestCase |  | ||||||
| 
 |  | ||||||
| # Create your tests here. |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| 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") |  | ||||||
| ] |  | ||||||
| @ -1,25 +0,0 @@ | |||||||
| # 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>') |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| """ |  | ||||||
| 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() |  | ||||||
| @ -1,128 +0,0 @@ | |||||||
| 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/' |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| """ |  | ||||||
| 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 |  | ||||||
|     ) |  | ||||||
| @ -1,16 +0,0 @@ | |||||||
| """ |  | ||||||
| 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() |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| #!/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
									
									
									
								
							
							
						
						
									
										224
									
								
								poetry.lock
									
									
									
										generated
									
									
									
								
							| @ -1,224 +0,0 @@ | |||||||
| # 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" |  | ||||||
| @ -1,22 +0,0 @@ | |||||||
| [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