From b2cadc0a8b61fa4fb2a487f8da6a952f79cbc991 Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Mon, 5 Sep 2022 15:51:11 +0300 Subject: [PATCH 01/73] Drop and recreate migrations --- apps/core/migrations/0001_initial.py | 28 --- .../migrations/0002_auto_20210822_1326.py | 23 -- .../migrations/0003_delete_taskcontrol.py | 16 -- apps/core/migrations/__init__.py | 0 apps/login/migrations/0001_initial.py | 44 ---- .../migrations/0002_auto_20210310_0728.py | 26 -- apps/login/migrations/0003_delete_profile.py | 16 -- apps/login/migrations/__init__.py | 0 apps/parse/migrations/0001_initial.py | 236 +++++------------- .../migrations/0002_auto_20210413_0228.py | 62 ----- .../migrations/0003_auto_20210529_0806.py | 41 --- .../migrations/0004_auto_20210603_1543.py | 28 --- .../migrations/0005_auto_20210604_1118.py | 63 ----- apps/parse/migrations/0006_manga_alt_title.py | 18 -- .../migrations/0007_auto_20210607_1923.py | 70 ------ apps/parse/migrations/0008_taskcontrol.py | 21 -- .../migrations/0009_auto_20210616_1353.py | 48 ---- .../migrations/0010_delete_taskcontrol.py | 16 -- .../migrations/0011_auto_20210622_1319.py | 75 ------ .../migrations/0012_auto_20210622_1333.py | 21 -- .../migrations/0013_auto_20210623_1144.py | 35 --- .../migrations/0014_auto_20210623_1239.py | 23 -- .../migrations/0015_auto_20210623_1321.py | 34 --- apps/parse/migrations/0016_manga_rating.py | 18 -- .../migrations/0017_auto_20210618_1048.py | 29 --- .../migrations/0018_auto_20210629_1400.py | 32 --- .../0019_rename_volumes_manga_chapters.py | 18 -- .../migrations/0020_auto_20210727_2035.py | 43 ---- .../migrations/0021_change_rating_scale.py | 13 - .../migrations/0022_auto_20210831_1152.py | 43 ---- .../migrations/0023_readmanga_live_to_io.py | 18 -- .../migrations/0024_auto_20210930_1807.py | 23 -- apps/parse/migrations/0025_chapters_to_fk.py | 37 --- .../migrations/0026_auto_20211112_1448.py | 19 -- .../migrations/0027_auto_20211226_2232.py | 18 -- 35 files changed, 62 insertions(+), 1193 deletions(-) delete mode 100644 apps/core/migrations/0001_initial.py delete mode 100644 apps/core/migrations/0002_auto_20210822_1326.py delete mode 100644 apps/core/migrations/0003_delete_taskcontrol.py delete mode 100644 apps/core/migrations/__init__.py delete mode 100644 apps/login/migrations/0001_initial.py delete mode 100644 apps/login/migrations/0002_auto_20210310_0728.py delete mode 100644 apps/login/migrations/0003_delete_profile.py delete mode 100644 apps/login/migrations/__init__.py delete mode 100644 apps/parse/migrations/0002_auto_20210413_0228.py delete mode 100644 apps/parse/migrations/0003_auto_20210529_0806.py delete mode 100644 apps/parse/migrations/0004_auto_20210603_1543.py delete mode 100644 apps/parse/migrations/0005_auto_20210604_1118.py delete mode 100644 apps/parse/migrations/0006_manga_alt_title.py delete mode 100644 apps/parse/migrations/0007_auto_20210607_1923.py delete mode 100644 apps/parse/migrations/0008_taskcontrol.py delete mode 100644 apps/parse/migrations/0009_auto_20210616_1353.py delete mode 100644 apps/parse/migrations/0010_delete_taskcontrol.py delete mode 100644 apps/parse/migrations/0011_auto_20210622_1319.py delete mode 100644 apps/parse/migrations/0012_auto_20210622_1333.py delete mode 100644 apps/parse/migrations/0013_auto_20210623_1144.py delete mode 100644 apps/parse/migrations/0014_auto_20210623_1239.py delete mode 100644 apps/parse/migrations/0015_auto_20210623_1321.py delete mode 100644 apps/parse/migrations/0016_manga_rating.py delete mode 100644 apps/parse/migrations/0017_auto_20210618_1048.py delete mode 100644 apps/parse/migrations/0018_auto_20210629_1400.py delete mode 100644 apps/parse/migrations/0019_rename_volumes_manga_chapters.py delete mode 100644 apps/parse/migrations/0020_auto_20210727_2035.py delete mode 100644 apps/parse/migrations/0021_change_rating_scale.py delete mode 100644 apps/parse/migrations/0022_auto_20210831_1152.py delete mode 100644 apps/parse/migrations/0023_readmanga_live_to_io.py delete mode 100644 apps/parse/migrations/0024_auto_20210930_1807.py delete mode 100644 apps/parse/migrations/0025_chapters_to_fk.py delete mode 100644 apps/parse/migrations/0026_auto_20211112_1448.py delete mode 100644 apps/parse/migrations/0027_auto_20211226_2232.py diff --git a/apps/core/migrations/0001_initial.py b/apps/core/migrations/0001_initial.py deleted file mode 100644 index b6d32830..00000000 --- a/apps/core/migrations/0001_initial.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-16 20:56 - -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='TaskControl', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('task_status', models.BooleanField(default=False)), - ('task_name', models.CharField(max_length=255, unique=True)), - ], - options={ - 'abstract': False, - }, - ), - ] diff --git a/apps/core/migrations/0002_auto_20210822_1326.py b/apps/core/migrations/0002_auto_20210822_1326.py deleted file mode 100644 index 82a2ca22..00000000 --- a/apps/core/migrations/0002_auto_20210822_1326.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.6 on 2021-08-22 13:26 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0001_initial'), - ] - - operations = [ - migrations.RenameField( - model_name='taskcontrol', - old_name='task_name', - new_name='name', - ), - migrations.RenameField( - model_name='taskcontrol', - old_name='task_status', - new_name='status', - ), - ] diff --git a/apps/core/migrations/0003_delete_taskcontrol.py b/apps/core/migrations/0003_delete_taskcontrol.py deleted file mode 100644 index fb334105..00000000 --- a/apps/core/migrations/0003_delete_taskcontrol.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.1 on 2021-11-05 14:53 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('core', '0002_auto_20210822_1326'), - ] - - operations = [ - migrations.DeleteModel( - name='TaskControl', - ), - ] diff --git a/apps/core/migrations/__init__.py b/apps/core/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/login/migrations/0001_initial.py b/apps/login/migrations/0001_initial.py deleted file mode 100644 index bbb1b0ac..00000000 --- a/apps/login/migrations/0001_initial.py +++ /dev/null @@ -1,44 +0,0 @@ - - -import django.contrib.auth.models -import django.contrib.auth.validators -import django.utils.timezone -from django.db import migrations, models - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ('auth', '0012_alter_user_first_name_max_length'), - ] - - operations = [ - migrations.CreateModel( - name='Profile', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('password', models.CharField(max_length=128, verbose_name='password')), - ('last_login', models.DateTimeField(blank=True, null=True, verbose_name='last login')), - ('is_superuser', models.BooleanField(default=False, help_text='Designates that this user has all permissions without explicitly assigning them.', verbose_name='superuser status')), - ('username', models.CharField(error_messages={'unique': 'A user with that username already exists.'}, help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, unique=True, validators=[django.contrib.auth.validators.UnicodeUsernameValidator()], verbose_name='username')), - ('first_name', models.CharField(blank=True, max_length=150, verbose_name='first name')), - ('last_name', models.CharField(blank=True, max_length=150, verbose_name='last name')), - ('email', models.EmailField(blank=True, max_length=254, verbose_name='email address')), - ('is_staff', models.BooleanField(default=False, help_text='Designates whether the user can log into this admin site.', verbose_name='staff status')), - ('is_active', models.BooleanField(default=True, help_text='Designates whether this user should be treated as active. Unselect this instead of deleting accounts.', verbose_name='active')), - ('date_joined', models.DateTimeField(default=django.utils.timezone.now, verbose_name='date joined')), - ('groups', models.ManyToManyField(blank=True, help_text='The groups this user belongs to. A user will get all permissions granted to each of their groups.', related_name='user_set', related_query_name='user', to='auth.Group', verbose_name='groups')), - ('user_permissions', models.ManyToManyField(blank=True, help_text='Specific permissions for this user.', related_name='user_set', related_query_name='user', to='auth.Permission', verbose_name='user permissions')), - ], - options={ - 'verbose_name': 'user', - 'verbose_name_plural': 'users', - 'abstract': False, - }, - managers=[ - ('objects', django.contrib.auth.models.UserManager()), - ], - ), - ] diff --git a/apps/login/migrations/0002_auto_20210310_0728.py b/apps/login/migrations/0002_auto_20210310_0728.py deleted file mode 100644 index 98d01bb9..00000000 --- a/apps/login/migrations/0002_auto_20210310_0728.py +++ /dev/null @@ -1,26 +0,0 @@ -# Generated by Django 3.1.7 on 2021-03-10 07:28 - -import django.utils.timezone -import django_extensions.db.fields -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('login', '0001_initial'), - ] - - operations = [ - migrations.AddField( - model_name='profile', - name='created', - field=django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, default=django.utils.timezone.now, verbose_name='created'), - preserve_default=False, - ), - migrations.AddField( - model_name='profile', - name='modified', - field=django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified'), - ), - ] diff --git a/apps/login/migrations/0003_delete_profile.py b/apps/login/migrations/0003_delete_profile.py deleted file mode 100644 index c5e1b3db..00000000 --- a/apps/login/migrations/0003_delete_profile.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.2 on 2021-04-12 13:57 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ("login", "0002_auto_20210310_0728"), - ] - - operations = [ - migrations.DeleteModel( - name="Profile", - ), - ] diff --git a/apps/login/migrations/__init__.py b/apps/login/migrations/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/parse/migrations/0001_initial.py b/apps/parse/migrations/0001_initial.py index 4038ab01..62331670 100644 --- a/apps/parse/migrations/0001_initial.py +++ b/apps/parse/migrations/0001_initial.py @@ -1,224 +1,112 @@ -# Generated by Django 3.2 on 2021-04-12 14:32 +# Generated by Django 4.1.1 on 2022-09-05 12:50 +from django.db import migrations, models import django.db.models.deletion import django_extensions.db.fields -from django.db import migrations, models -from apps.core.abc.models import BaseModel class Migration(migrations.Migration): initial = True - dependencies = [] + dependencies = [ + ] operations = [ migrations.CreateModel( - name="Author", + name='Category', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="author_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('name', models.TextField(unique=True)), ], options={ - "get_latest_by": "modified", - "abstract": False, + 'abstract': False, }, - bases=(BaseModel, models.Model), ), migrations.CreateModel( - name="Category", + name='Genre', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="category_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('name', models.TextField(unique=True)), ], options={ - "get_latest_by": "modified", - "abstract": False, + 'abstract': False, }, - bases=(BaseModel, models.Model), ), migrations.CreateModel( - name="Genre", + name='Manga', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="genre_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('title', models.TextField()), + ('alt_title', models.TextField(blank=True, null=True)), + ('rating', models.DecimalField(decimal_places=2, default=0, max_digits=4)), + ('thumbnail', models.URLField(blank=True, default='', max_length=2000)), + ('image', models.URLField(blank=True, default='', max_length=2000)), + ('description', models.TextField(blank=True, default='')), + ('status', models.TextField(blank=True, null=True)), + ('year', models.TextField(blank=True, null=True)), + ('source_url', models.URLField(max_length=2000, unique=True)), + ('rss_url', models.URLField(blank=True, max_length=2000, null=True)), + ('updated_detail', models.DateTimeField(blank=True, null=True)), + ('categories', models.ManyToManyField(blank=True, related_name='mangas', to='parse.category')), + ('genres', models.ManyToManyField(blank=True, related_name='mangas', to='parse.genre')), ], options={ - "get_latest_by": "modified", - "abstract": False, + 'abstract': False, }, - bases=(BaseModel, models.Model), ), migrations.CreateModel( - name="Illustrator", + name='Person', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="illustrator_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), + ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), + ('name', models.TextField(unique=True)), ], options={ - "get_latest_by": "modified", - "abstract": False, + 'abstract': False, }, - bases=(BaseModel, models.Model), ), migrations.CreateModel( - name="ScreenWriter", + name='PersonRelatedToManga', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="screenwriter_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('role', models.TextField(choices=[('author', 'Author'), ('illustrator', 'Illustrator'), ('screenwriter', 'Screenwriter'), ('translator', 'Translator')])), + ('manga', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='person_relations', to='parse.manga')), + ('person', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manga_relations', to='parse.person')), ], - options={ - "get_latest_by": "modified", - "abstract": False, - }, - bases=(BaseModel, models.Model), + ), + migrations.AddField( + model_name='manga', + name='people_related', + field=models.ManyToManyField(related_name='mangas', through='parse.PersonRelatedToManga', to='parse.person'), ), migrations.CreateModel( - name="Translator", + name='Chapter', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(unique=True, verbose_name="translator_name")), + ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), + ('title', models.TextField()), + ('link', models.URLField(max_length=2000)), + ('number', models.FloatField()), + ('volume', models.FloatField()), + ('manga', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='chapters', to='parse.manga')), ], - options={ - "get_latest_by": "modified", - "abstract": False, - }, - bases=(BaseModel, models.Model), ), migrations.CreateModel( - name="Manga", + name='Author', fields=[ - ( - "created", - django_extensions.db.fields.CreationDateTimeField( - auto_now_add=True, verbose_name="created" - ), - ), - ( - "modified", - django_extensions.db.fields.ModificationDateTimeField( - auto_now=True, verbose_name="modified" - ), - ), - ("name", models.TextField(blank=True, null=True, verbose_name="manga_name")), - ( - "self_url", - models.URLField(max_length=1000, unique=True, verbose_name="manga_url"), - ), - ("description", models.TextField(verbose_name="manga_description")), - ("status", models.TextField(blank=True, null=True, verbose_name="status")), - ("year", models.TextField(blank=True, null=True, verbose_name="year")), - ("image_url", models.URLField(default="", verbose_name="image_url")), - ( - "chapters", - models.JSONField(default=dict), - ), - ("technical_params", models.JSONField(default=dict)), - ( - "author", - models.ForeignKey( - blank=True, - null=True, - on_delete=django.db.models.deletion.SET_NULL, - related_name="mangas", - to="parse.author", - ), - ), - ( - "categories", - models.ManyToManyField(related_name="mangas", to="parse.Category"), - ), - ( - "genres", - models.ManyToManyField(related_name="mangas", to="parse.Genre"), - ), - ( - "illustrators", - models.ManyToManyField( - related_name="mangas", to="parse.Illustrator" - ), - ), - ( - "screenwriters", - models.ManyToManyField( - related_name="mangas", to="parse.ScreenWriter" - ), - ), - ( - "translators", - models.ManyToManyField(related_name="mangas", to="parse.Translator"), - ), ], options={ - "get_latest_by": "modified", - "abstract": False, + 'proxy': True, + 'indexes': [], + 'constraints': [], }, - bases=(BaseModel, models.Model), + bases=('parse.person',), ), ] diff --git a/apps/parse/migrations/0002_auto_20210413_0228.py b/apps/parse/migrations/0002_auto_20210413_0228.py deleted file mode 100644 index 60d2f5d9..00000000 --- a/apps/parse/migrations/0002_auto_20210413_0228.py +++ /dev/null @@ -1,62 +0,0 @@ -# Generated by Django 3.2 on 2021-04-13 02:28 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("parse", "0001_initial"), - ] - - operations = [ - migrations.AlterField( - model_name="author", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="category", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="genre", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="illustrator", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="manga", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="screenwriter", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - migrations.AlterField( - model_name="translator", - name="id", - field=models.AutoField( - auto_created=True, primary_key=True, serialize=False, verbose_name="ID" - ), - ), - ] diff --git a/apps/parse/migrations/0003_auto_20210529_0806.py b/apps/parse/migrations/0003_auto_20210529_0806.py deleted file mode 100644 index ca359436..00000000 --- a/apps/parse/migrations/0003_auto_20210529_0806.py +++ /dev/null @@ -1,41 +0,0 @@ -# Generated by Django 3.2.3 on 2021-05-29 08:06 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0002_auto_20210413_0228'), - ] - - operations = [ - migrations.AlterModelOptions( - name='author', - options={}, - ), - migrations.AlterModelOptions( - name='category', - options={}, - ), - migrations.AlterModelOptions( - name='genre', - options={}, - ), - migrations.AlterModelOptions( - name='illustrator', - options={}, - ), - migrations.AlterModelOptions( - name='manga', - options={}, - ), - migrations.AlterModelOptions( - name='screenwriter', - options={}, - ), - migrations.AlterModelOptions( - name='translator', - options={}, - ), - ] diff --git a/apps/parse/migrations/0004_auto_20210603_1543.py b/apps/parse/migrations/0004_auto_20210603_1543.py deleted file mode 100644 index 20829ff9..00000000 --- a/apps/parse/migrations/0004_auto_20210603_1543.py +++ /dev/null @@ -1,28 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-03 15:43 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("parse", "0003_auto_20210529_0806"), - ] - - operations = [ - migrations.RenameField( - model_name="manga", - old_name="name", - new_name="title", - ), - migrations.AlterField( - model_name="manga", - name="description", - field=models.TextField(), - ), - migrations.AlterField( - model_name="manga", - name="self_url", - field=models.URLField(max_length=1000, unique=True), - ), - ] diff --git a/apps/parse/migrations/0005_auto_20210604_1118.py b/apps/parse/migrations/0005_auto_20210604_1118.py deleted file mode 100644 index 1e633d2e..00000000 --- a/apps/parse/migrations/0005_auto_20210604_1118.py +++ /dev/null @@ -1,63 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-04 11:18 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ("parse", "0004_auto_20210603_1543"), - ] - - operations = [ - migrations.AlterField( - model_name="author", - name="name", - field=models.TextField(unique=True), - ), - migrations.AlterField( - model_name="category", - name="name", - field=models.TextField(unique=True), - ), - migrations.AlterField( - model_name="genre", - name="name", - field=models.TextField(unique=True), - ), - migrations.AlterField( - model_name="illustrator", - name="name", - field=models.TextField(unique=True), - ), - migrations.AlterField( - model_name="manga", - name="image_url", - field=models.URLField(default="", verbose_name="thumbnail url"), - ), - migrations.AlterField( - model_name="manga", - name="status", - field=models.TextField(blank=True, null=True), - ), - migrations.AlterField( - model_name="manga", - name="title", - field=models.TextField(blank=True, null=True), - ), - migrations.AlterField( - model_name="manga", - name="year", - field=models.TextField(blank=True, null=True), - ), - migrations.AlterField( - model_name="screenwriter", - name="name", - field=models.TextField(unique=True), - ), - migrations.AlterField( - model_name="translator", - name="name", - field=models.TextField(unique=True), - ), - ] diff --git a/apps/parse/migrations/0006_manga_alt_title.py b/apps/parse/migrations/0006_manga_alt_title.py deleted file mode 100644 index b7880c65..00000000 --- a/apps/parse/migrations/0006_manga_alt_title.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-05 10:34 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0005_auto_20210604_1118'), - ] - - operations = [ - migrations.AddField( - model_name='manga', - name='alt_title', - field=models.TextField(blank=True, null=True), - ), - ] diff --git a/apps/parse/migrations/0007_auto_20210607_1923.py b/apps/parse/migrations/0007_auto_20210607_1923.py deleted file mode 100644 index b4de9788..00000000 --- a/apps/parse/migrations/0007_auto_20210607_1923.py +++ /dev/null @@ -1,70 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-07 19:23 - -import django.db.models.deletion -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0006_manga_alt_title'), - ] - - operations = [ - migrations.CreateModel( - name='Person', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('name', models.TextField(unique=True)), - ], - options={ - 'abstract': False, - }, - ), - migrations.CreateModel( - name='PersonRole', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('person_role', models.CharField(choices=[('Illustrator', 'Illustrator'), ('SCREENWRITER', 'Screenwriter'), ('TRANSLATOR', 'Translator')], max_length=15)), - ], - options={ - 'abstract': False, - }, - ), - migrations.RemoveField( - model_name='manga', - name='illustrators', - ), - migrations.RemoveField( - model_name='manga', - name='screenwriters', - ), - migrations.RemoveField( - model_name='manga', - name='translators', - ), - migrations.DeleteModel( - name='Illustrator', - ), - migrations.DeleteModel( - name='ScreenWriter', - ), - migrations.DeleteModel( - name='Translator', - ), - migrations.AddField( - model_name='personrole', - name='manga', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mangas', to='parse.manga'), - ), - migrations.AddField( - model_name='personrole', - name='person', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='persons', to='parse.person'), - ), - ] diff --git a/apps/parse/migrations/0008_taskcontrol.py b/apps/parse/migrations/0008_taskcontrol.py deleted file mode 100644 index 1f13e92b..00000000 --- a/apps/parse/migrations/0008_taskcontrol.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-12 13:57 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0007_auto_20210607_1923'), - ] - - operations = [ - migrations.CreateModel( - name='TaskControl', - fields=[ - ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('task_status', models.BooleanField(default=False)), - ('task_name', models.CharField(max_length=255)), - ], - ), - ] diff --git a/apps/parse/migrations/0009_auto_20210616_1353.py b/apps/parse/migrations/0009_auto_20210616_1353.py deleted file mode 100644 index 4636fe8f..00000000 --- a/apps/parse/migrations/0009_auto_20210616_1353.py +++ /dev/null @@ -1,48 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-16 13:53 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0008_taskcontrol'), - ] - - operations = [ - migrations.AlterField( - model_name='author', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='category', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='genre', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='manga', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='person', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='personrole', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='taskcontrol', - name='id', - field=models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/apps/parse/migrations/0010_delete_taskcontrol.py b/apps/parse/migrations/0010_delete_taskcontrol.py deleted file mode 100644 index 103e82b4..00000000 --- a/apps/parse/migrations/0010_delete_taskcontrol.py +++ /dev/null @@ -1,16 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-16 20:55 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0009_auto_20210616_1353'), - ] - - operations = [ - migrations.DeleteModel( - name='TaskControl', - ), - ] diff --git a/apps/parse/migrations/0011_auto_20210622_1319.py b/apps/parse/migrations/0011_auto_20210622_1319.py deleted file mode 100644 index 64c6d02c..00000000 --- a/apps/parse/migrations/0011_auto_20210622_1319.py +++ /dev/null @@ -1,75 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-22 13:19 - -import django.db.models.deletion -import django_extensions.db.fields -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0010_delete_taskcontrol'), - ] - - operations = [ - migrations.RenameField( - model_name='manga', - old_name='self_url', - new_name='source_url', - ), - migrations.AlterField( - model_name='manga', - name='source_url', - field=models.URLField(default=1, max_length=2000, unique=True), - preserve_default=False, - ), - migrations.CreateModel( - name='PersonRelatedToManga', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('created', django_extensions.db.fields.CreationDateTimeField(auto_now_add=True, verbose_name='created')), - ('modified', django_extensions.db.fields.ModificationDateTimeField(auto_now=True, verbose_name='modified')), - ('role', models.TextField(choices=[('author', 'Author'), ('illustrator', 'Illustrator'), ('screenwriter', 'Screenwriter'), ('translator', 'Translator')])), - ], - options={ - 'abstract': False, - }, - ), - migrations.RemoveField( - model_name='personrole', - name='manga', - ), - migrations.RemoveField( - model_name='personrole', - name='person', - ), - migrations.RemoveField( - model_name='manga', - name='author', - ), - migrations.RemoveField( - model_name='manga', - name='technical_params', - ), - migrations.DeleteModel( - name='Author', - ), - migrations.DeleteModel( - name='PersonRole', - ), - migrations.AddField( - model_name='personrelatedtomanga', - name='manga', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='mangas', to='parse.manga'), - ), - migrations.AddField( - model_name='personrelatedtomanga', - name='person', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='persons', to='parse.person'), - ), - migrations.AddField( - model_name='manga', - name='people_related', - field=models.ManyToManyField(related_name='mangas', through='parse.PersonRelatedToManga', to='parse.Person'), - ), - ] diff --git a/apps/parse/migrations/0012_auto_20210622_1333.py b/apps/parse/migrations/0012_auto_20210622_1333.py deleted file mode 100644 index 23e6a1b1..00000000 --- a/apps/parse/migrations/0012_auto_20210622_1333.py +++ /dev/null @@ -1,21 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-22 13:33 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0011_auto_20210622_1319'), - ] - - operations = [ - migrations.RemoveField( - model_name='personrelatedtomanga', - name='created', - ), - migrations.RemoveField( - model_name='personrelatedtomanga', - name='modified', - ), - ] diff --git a/apps/parse/migrations/0013_auto_20210623_1144.py b/apps/parse/migrations/0013_auto_20210623_1144.py deleted file mode 100644 index ff3f9643..00000000 --- a/apps/parse/migrations/0013_auto_20210623_1144.py +++ /dev/null @@ -1,35 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-23 11:44 - -import django.db.models.deletion -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0012_auto_20210622_1333'), - ] - - operations = [ - migrations.CreateModel( - name='Author', - fields=[ - ], - options={ - 'proxy': True, - 'indexes': [], - 'constraints': [], - }, - bases=('parse.person',), - ), - migrations.AlterField( - model_name='personrelatedtomanga', - name='manga', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='person_relations', to='parse.manga'), - ), - migrations.AlterField( - model_name='personrelatedtomanga', - name='person', - field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='manga_relations', to='parse.person'), - ), - ] diff --git a/apps/parse/migrations/0014_auto_20210623_1239.py b/apps/parse/migrations/0014_auto_20210623_1239.py deleted file mode 100644 index edbe90a9..00000000 --- a/apps/parse/migrations/0014_auto_20210623_1239.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-23 12:39 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0013_auto_20210623_1144'), - ] - - operations = [ - migrations.RenameField( - model_name='manga', - old_name='image_url', - new_name='thumbnail', - ), - migrations.AddField( - model_name='manga', - name='image', - field=models.URLField(default=''), - ), - ] diff --git a/apps/parse/migrations/0015_auto_20210623_1321.py b/apps/parse/migrations/0015_auto_20210623_1321.py deleted file mode 100644 index 44072761..00000000 --- a/apps/parse/migrations/0015_auto_20210623_1321.py +++ /dev/null @@ -1,34 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-23 13:21 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0014_auto_20210623_1239'), - ] - - operations = [ - migrations.RenameField( - model_name='manga', - old_name='chapters', - new_name='volumes', - ), - migrations.AlterField( - model_name='manga', - name='image', - field=models.URLField(default='', max_length=2000), - ), - migrations.AlterField( - model_name='manga', - name='thumbnail', - field=models.URLField(default='', max_length=2000), - ), - migrations.AlterField( - model_name='manga', - name='title', - field=models.TextField(default=''), - preserve_default=False, - ), - ] diff --git a/apps/parse/migrations/0016_manga_rating.py b/apps/parse/migrations/0016_manga_rating.py deleted file mode 100644 index 50eb9a9a..00000000 --- a/apps/parse/migrations/0016_manga_rating.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-24 14:31 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0015_auto_20210623_1321'), - ] - - operations = [ - migrations.AddField( - model_name='manga', - name='rating', - field=models.FloatField(default=0), - ), - ] diff --git a/apps/parse/migrations/0017_auto_20210618_1048.py b/apps/parse/migrations/0017_auto_20210618_1048.py deleted file mode 100644 index 39ff9348..00000000 --- a/apps/parse/migrations/0017_auto_20210618_1048.py +++ /dev/null @@ -1,29 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-18 10:48 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0016_manga_rating'), - ] - - operations = [ - migrations.AddField( - model_name='manga', - name='updated_chapters', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='manga', - name='updated_detail', - field=models.DateTimeField(blank=True, null=True), - ), - migrations.AddField( - model_name='manga', - name='rss_url', - field=models.URLField(blank=True, null=True, max_length=2000), - ), - - ] diff --git a/apps/parse/migrations/0018_auto_20210629_1400.py b/apps/parse/migrations/0018_auto_20210629_1400.py deleted file mode 100644 index e0666fee..00000000 --- a/apps/parse/migrations/0018_auto_20210629_1400.py +++ /dev/null @@ -1,32 +0,0 @@ -# Generated by Django 3.2.3 on 2021-06-29 14:00 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0017_auto_20210618_1048'), - ] - - operations = [ - migrations.CreateModel( - name='Chapter', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('title', models.TextField()), - ('link', models.URLField(max_length=2000)), - ('number', models.IntegerField()), - ('volume', models.IntegerField()), - ], - ), - migrations.RemoveField( - model_name='manga', - name='volumes', - ), - migrations.AddField( - model_name='manga', - name='volumes', - field=models.ManyToManyField(to='parse.Chapter'), - ), - ] diff --git a/apps/parse/migrations/0019_rename_volumes_manga_chapters.py b/apps/parse/migrations/0019_rename_volumes_manga_chapters.py deleted file mode 100644 index e88a560c..00000000 --- a/apps/parse/migrations/0019_rename_volumes_manga_chapters.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.2.3 on 2021-07-18 13:46 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0018_auto_20210629_1400'), - ] - - operations = [ - migrations.RenameField( - model_name='manga', - old_name='volumes', - new_name='chapters', - ), - ] diff --git a/apps/parse/migrations/0020_auto_20210727_2035.py b/apps/parse/migrations/0020_auto_20210727_2035.py deleted file mode 100644 index 460f7c21..00000000 --- a/apps/parse/migrations/0020_auto_20210727_2035.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 3.2.3 on 2021-07-27 17:35 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0019_rename_volumes_manga_chapters'), - ] - - operations = [ - migrations.AlterField( - model_name='manga', - name='categories', - field=models.ManyToManyField(blank=True, related_name='mangas', to='parse.Category'), - ), - migrations.AlterField( - model_name='manga', - name='chapters', - field=models.ManyToManyField(blank=True, to='parse.Chapter'), - ), - migrations.AlterField( - model_name='manga', - name='description', - field=models.TextField(blank=True, default=''), - ), - migrations.AlterField( - model_name='manga', - name='genres', - field=models.ManyToManyField(blank=True, related_name='mangas', to='parse.Genre'), - ), - migrations.AlterField( - model_name='manga', - name='image', - field=models.URLField(blank=True, default='', max_length=2000), - ), - migrations.AlterField( - model_name='manga', - name='thumbnail', - field=models.URLField(blank=True, default='', max_length=2000), - ), - ] diff --git a/apps/parse/migrations/0021_change_rating_scale.py b/apps/parse/migrations/0021_change_rating_scale.py deleted file mode 100644 index 650c374d..00000000 --- a/apps/parse/migrations/0021_change_rating_scale.py +++ /dev/null @@ -1,13 +0,0 @@ -# Generated by Django 3.2.3 on 2021-07-27 11:40 - -from django.db import migrations - -class Migration(migrations.Migration): - - dependencies = [ - ("parse", "0020_auto_20210727_2035"), - ] - - operations = [ - migrations.RunSQL("UPDATE parse_manga SET rating = rating / 2 WHERE rating > 5;"), - ] diff --git a/apps/parse/migrations/0022_auto_20210831_1152.py b/apps/parse/migrations/0022_auto_20210831_1152.py deleted file mode 100644 index 2b9763b4..00000000 --- a/apps/parse/migrations/0022_auto_20210831_1152.py +++ /dev/null @@ -1,43 +0,0 @@ -# Generated by Django 3.1 on 2021-08-31 11:52 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0021_change_rating_scale'), - ] - - operations = [ - migrations.AlterField( - model_name='category', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='chapter', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='genre', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='manga', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='person', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - migrations.AlterField( - model_name='personrelatedtomanga', - name='id', - field=models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID'), - ), - ] diff --git a/apps/parse/migrations/0023_readmanga_live_to_io.py b/apps/parse/migrations/0023_readmanga_live_to_io.py deleted file mode 100644 index 5dd6ac18..00000000 --- a/apps/parse/migrations/0023_readmanga_live_to_io.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1 on 2021-08-31 11:52 - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0022_auto_20210831_1152'), - ] - - operations = [ - migrations.RunSQL( - "UPDATE parse_manga SET " \ - "source_url = REPLACE(source_url, 'readmanga.live', 'readmanga.io'), " \ - "rss_url = REPLACE(rss_url, 'readmanga.live', 'readmanga.io')" - ), - ] diff --git a/apps/parse/migrations/0024_auto_20210930_1807.py b/apps/parse/migrations/0024_auto_20210930_1807.py deleted file mode 100644 index 5ec0b69c..00000000 --- a/apps/parse/migrations/0024_auto_20210930_1807.py +++ /dev/null @@ -1,23 +0,0 @@ -# Generated by Django 3.1 on 2021-09-30 18:07 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0023_readmanga_live_to_io'), - ] - - operations = [ - migrations.AlterField( - model_name='chapter', - name='number', - field=models.FloatField(), - ), - migrations.AlterField( - model_name='chapter', - name='volume', - field=models.FloatField(), - ), - ] diff --git a/apps/parse/migrations/0025_chapters_to_fk.py b/apps/parse/migrations/0025_chapters_to_fk.py deleted file mode 100644 index 1bc6c45e..00000000 --- a/apps/parse/migrations/0025_chapters_to_fk.py +++ /dev/null @@ -1,37 +0,0 @@ -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0024_auto_20210930_1807'), - ] - - operations = [ - migrations.RemoveField( - model_name='manga', - name='updated_chapters', - ), - migrations.AddField( - model_name='chapter', - name='manga', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='parse.manga'), - ), - # move everything from M2M to column - migrations.RunSQL(""" - UPDATE parse_chapter - SET manga_id = pmc.manga_id - FROM parse_manga_chapters AS pmc - WHERE parse_chapter.id = pmc.chapter_id; - """), - migrations.RemoveField( - model_name='manga', - name='chapters', - ), - migrations.AlterField( - model_name='chapter', - name='manga', - field=models.ForeignKey(null=False, on_delete=django.db.models.deletion.CASCADE, related_name='chapters', to='parse.manga'), - ), - ] diff --git a/apps/parse/migrations/0026_auto_20211112_1448.py b/apps/parse/migrations/0026_auto_20211112_1448.py deleted file mode 100644 index 6e6be5e4..00000000 --- a/apps/parse/migrations/0026_auto_20211112_1448.py +++ /dev/null @@ -1,19 +0,0 @@ -# Generated by Django 3.1 on 2021-11-12 14:48 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0025_chapters_to_fk'), - ] - - operations = [ - migrations.AlterField( - model_name='chapter', - name='manga', - field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='chapters', to='parse.manga'), - ), - ] diff --git a/apps/parse/migrations/0027_auto_20211226_2232.py b/apps/parse/migrations/0027_auto_20211226_2232.py deleted file mode 100644 index 0f459352..00000000 --- a/apps/parse/migrations/0027_auto_20211226_2232.py +++ /dev/null @@ -1,18 +0,0 @@ -# Generated by Django 3.1 on 2021-12-26 22:32 - -from django.db import migrations, models - - -class Migration(migrations.Migration): - - dependencies = [ - ('parse', '0026_auto_20211112_1448'), - ] - - operations = [ - migrations.AlterField( - model_name='manga', - name='rating', - field=models.DecimalField(decimal_places=2, default=0, max_digits=4), - ), - ] From d741dc65f802aae9b95ef8d84b655d61c6d181e1 Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Mon, 5 Sep 2022 16:07:53 +0300 Subject: [PATCH 02/73] Remove most of the stuff including API, preserve parsing Remove a lot of dependencies, upgrade all of the to the latest, add some new ones Switch to django-environ and dj_database_url Prepare for a switch to django-ninja Fix a bit mismatch in jazzmin color override --- .editorconfig | 2 + .envs.example/deployment.env.example | 16 - .envs.example/docker.env.example | 3 - .envs.example/local.env.example | 34 +- apps/core/abc/serializers.py | 10 - apps/core/fast/__init__.py | 4 - apps/core/fast/pagination.py | 33 - apps/core/fast/query.py | 99 -- apps/core/fast/utils.py | 9 - apps/core/utils.py | 12 - apps/login/views.py | 9 +- apps/parse/api/__init__.py | 0 apps/parse/api/serializers.py | 28 - apps/parse/api/urls.py | 12 - apps/parse/api/views.py | 104 -- apps/parse/models.py | 2 - apps/parse/utils.py | 69 - manage.py | 3 - manga_reader/settings.py | 224 +-- manga_reader/urls.py | 7 +- poetry.lock | 1870 ++++++------------------- pyproject.toml | 49 +- static/admin/css/custom_jazzmin.css | 4 + static/admin/scss/custom_jazzmin.scss | 4 + 24 files changed, 537 insertions(+), 2070 deletions(-) create mode 100644 .editorconfig delete mode 100644 .envs.example/deployment.env.example delete mode 100644 apps/core/abc/serializers.py delete mode 100644 apps/core/fast/__init__.py delete mode 100644 apps/core/fast/pagination.py delete mode 100644 apps/core/fast/query.py delete mode 100644 apps/core/fast/utils.py delete mode 100644 apps/parse/api/__init__.py delete mode 100644 apps/parse/api/serializers.py delete mode 100644 apps/parse/api/urls.py delete mode 100644 apps/parse/api/views.py delete mode 100644 apps/parse/utils.py diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..23da48e3 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,2 @@ +[*.py] +max_line_length = 100 diff --git a/.envs.example/deployment.env.example b/.envs.example/deployment.env.example deleted file mode 100644 index c4bc4cf8..00000000 --- a/.envs.example/deployment.env.example +++ /dev/null @@ -1,16 +0,0 @@ -# Used in compose from deployment repo - -# ######## -# DJANGO # -# ######## - -SECRET_KEY=SECRET_KEY -PAGE_SIZE=20 - -# ####### -# Other # -# ####### - -SENTRY_DSN=YOUR_DSN_KEY -# WEBDRIVER_PATH=/chromedriver/chromedriver -PROXY= diff --git a/.envs.example/docker.env.example b/.envs.example/docker.env.example index 22170b18..f065a566 100644 --- a/.envs.example/docker.env.example +++ b/.envs.example/docker.env.example @@ -16,7 +16,6 @@ DATABASE_PORT=5432 DATABASE_NAME=sora REDIS_URL=redis://redis:6379 - ELASTICSEARCH_HOST=elasticsearch:9200 # ######## @@ -33,6 +32,4 @@ PAGE_SIZE=20 # Other # # ####### -SENTRY_DSN=YOUR_DSN_KEY -WEBDRIVER_PATH=/chromedriver/chromedriver PROXY= diff --git a/.envs.example/local.env.example b/.envs.example/local.env.example index 0ccc5e15..e8decb6a 100644 --- a/.envs.example/local.env.example +++ b/.envs.example/local.env.example @@ -1,36 +1,22 @@ # Your local config to develop without docker -# ###### -# DATA # -# ###### +# These values are already defaults, this is just for preview +# DATABASE_URL=postgres://postgres:postgres@localhost:5432/sora +# REDIS_URL=redis://localhost:8883 +# ELASTICSEARCH_HOST=localhost:9200 -DATABASE_HOST=localhost -DATABASE_USER=postgres -DATABASE_PASSWORD=postgres - -# Port from docker-compose -DATABASE_PORT=8882 -DATABASE_NAME=sora - -# Port from docker-compose -REDIS_URL=redis://localhost:8883 - -# Port from docker-compose -ELASTICSEARCH_HOST=localhost:9200 +# Whitespace-separated list +# ALLOWED_HOSTS=* -# ######## +########## # DJANGO # -# ######## +########## DEBUG=1 SECRET_KEY=DevServer -# Whitespace-separated list -ALLOWED_HOSTS=* -PAGE_SIZE=20 -# ####### +######### # Other # -# ####### +######### -SENTRY_DSN=YOUR_DSN_KEY PROXY= diff --git a/apps/core/abc/serializers.py b/apps/core/abc/serializers.py deleted file mode 100644 index fc823083..00000000 --- a/apps/core/abc/serializers.py +++ /dev/null @@ -1,10 +0,0 @@ -from rest_framework import serializers - -from apps.core.abc.models import BaseModel - - -class NameRelatedField(serializers.StringRelatedField): - def to_representation(self, obj: BaseModel): - if not getattr(obj, "NAME_FIELD", None): - return super().to_representation(obj) - return str(getattr(obj, obj.__class__.NAME_FIELD)) diff --git a/apps/core/fast/__init__.py b/apps/core/fast/__init__.py deleted file mode 100644 index aa843e5a..00000000 --- a/apps/core/fast/__init__.py +++ /dev/null @@ -1,4 +0,0 @@ -"""Fast utilities.""" - -from .pagination import FastLimitOffsetPagination -from .query import FastQuerySet diff --git a/apps/core/fast/pagination.py b/apps/core/fast/pagination.py deleted file mode 100644 index b2c9a9f9..00000000 --- a/apps/core/fast/pagination.py +++ /dev/null @@ -1,33 +0,0 @@ -from rest_framework.pagination import LimitOffsetPagination - -from apps.core.fast.utils import get_fast_response - - -class FastLimitOffsetPagination(LimitOffsetPagination): - """Custom Pagination class to leverage FastQuerySet/orjson capabilities.""" - - def paginate_queryset(self, queryset, request, view=None, values=()): - self.limit = self.get_limit(request) - if self.limit is None: - return None - - self.count = self.get_count(queryset) - self.offset = self.get_offset(request) - - self.request = request - if self.count > self.limit and self.template is not None: - self.display_page_controls = True - - if self.count == 0 or self.offset > self.count: - return [] - return queryset[self.offset : self.offset + self.limit].parse_values(*values) - - def get_paginated_response(self, data): - return get_fast_response( - { - "count": self.count, - "next": self.get_next_link(), - "previous": self.get_previous_link(), - "results": data, - } - ) diff --git a/apps/core/fast/query.py b/apps/core/fast/query.py deleted file mode 100644 index 81044b8d..00000000 --- a/apps/core/fast/query.py +++ /dev/null @@ -1,99 +0,0 @@ -from datetime import datetime -from decimal import Decimal -from typing import Dict, Tuple, Union - -from django.contrib.postgres.aggregates import ArrayAgg -from django.db.models.expressions import Case, Value, When -from django.db.models.fields import TextField -from django.db.models.query import QuerySet -from django.db.models.query_utils import Q -from typing_extensions import Annotated - -from apps.core.abc.models import BaseModel - - -class FastQuerySet(QuerySet): - """ - QuerySet with additional map/m2m_agg/parse_values methods. - - Helps to get rid of unnecessary ORM/Serializer stuff and speed up queries - """ - - model: BaseModel - - TYPE_MAP: Annotated[dict, "Mapping to convert DB returned types into JSON-valid types"] = { - datetime: str, - # Help orjson a bit - Decimal: float, - } - - def mangle_annotation(self, field: str) -> str: - """Mangle annotation if needed name to not coflict with any of model's fields.""" - return f"_fast_{field}" - - @classmethod - def demangle_annotation(cls, field: str) -> str: - """Mangle annotation if needed name to not coflict with any of model's fields.""" - return field.split("_fast_")[-1] - - def m2m_agg(self, **kwargs: Dict[str, Tuple[str, dict]]): - """ - Annotate M2Ms with distinct ArrayAgg for a specified field. - - Accept kwargs with value of: - 1. Field string, like 'field__nested_field' - 2. A tuple of field string and a Expression filter, like ('field', Q(field='string')) - """ - annotation = {} - for field, args in kwargs.items(): - output = None - if type(args) is tuple: - output = ArrayAgg(args[0], filter=args[1], distinct=True) - else: - output = ArrayAgg( - args, - # Avoid [null] arrays when using ArrayAgg - filter=Q(**{f"{args}__isnull": False}), - distinct=True, - ) - annotation[self.mangle_annotation(field)] = output - - return self.annotate(**annotation) - - def map(self, **kwargs: Dict[str, Tuple[str, dict]]): - """ - Annotate queryset with CASE...WHEN generated to map provided field with python dict. - - Example: some_queryset.map(source=("source_url__startswith", Manga.SOURCE_MAP)) - """ - return self.annotate( - **{ - self.mangle_annotation(field): Case( - *[When(**{clause: k, "then": Value(v)}) for k, v in dictionary.items()], - output_field=TextField(), - ) - for field, (clause, dictionary) in kwargs.items() - } - ) - - def parse_values(self, *args) -> Union[dict, list]: - """ - Get queryset's .values(...) and revert mangled annotation names. - - Required if you used .map/.m2m_agg - """ - result = [] - annotations = self.query.annotations.keys() - values = map( - lambda v: self.mangle_annotation(v) if self.mangle_annotation(v) in annotations else v, - args, - ) - - for item in self.values(*values): - parsed = {} - for k, v in item.items(): - convert = self.__class__.TYPE_MAP.get(type(v)) - - parsed[self.demangle_annotation(k)] = v if not convert else convert(v) - result.append(parsed) - return result diff --git a/apps/core/fast/utils.py b/apps/core/fast/utils.py deleted file mode 100644 index 00ddc1e6..00000000 --- a/apps/core/fast/utils.py +++ /dev/null @@ -1,9 +0,0 @@ -import orjson -from django.http.response import HttpResponse - - -def get_fast_response(data: dict) -> HttpResponse: - return HttpResponse( - orjson.dumps(data), - content_type="application/json", - ) diff --git a/apps/core/utils.py b/apps/core/utils.py index d9c6dacb..6eb5ceb1 100644 --- a/apps/core/utils.py +++ b/apps/core/utils.py @@ -1,19 +1,7 @@ import re -from typing import Union import redis from django.conf import settings -from rest_framework.response import Response -from rest_framework.status import HTTP_400_BAD_REQUEST - - -def format_error_response( - error: Union[Exception, str], - status_code=HTTP_400_BAD_REQUEST, -) -> Response: - """Format error to DRF's Response""" - - return Response({"error": str(error)}, status=status_code) def init_redis_client() -> redis.Redis: diff --git a/apps/login/views.py b/apps/login/views.py index c11d1c0c..523a279f 100644 --- a/apps/login/views.py +++ b/apps/login/views.py @@ -8,6 +8,7 @@ from rest_framework_simplejwt.views import TokenViewBase from apps.login.serializers import users +import logging class SignUpView(APIView): @@ -31,15 +32,15 @@ def post(self, *args, **kwargs): class SignOutView(APIView): def get(self, request): - print("Blacklisting") + logging.info("Blacklisting") refresh = request.COOKIES.get("sora_refresh") if refresh: try: - print("Blocking token ", refresh) + logging.info("Blocking token ", refresh) token = RefreshToken(refresh) token.blacklist() except (TokenError, TokenBackendError): - print("Token already expired") + logging.info("Token already expired") else: - print("No token, nothing to blacklist") + logging.info("No token, nothing to blacklist") return HttpResponse(status=200) diff --git a/apps/parse/api/__init__.py b/apps/parse/api/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/parse/api/serializers.py b/apps/parse/api/serializers.py deleted file mode 100644 index 073a7a18..00000000 --- a/apps/parse/api/serializers.py +++ /dev/null @@ -1,28 +0,0 @@ -MANGA_FIELDS = ( - "id", - "source", - "source_url", - "title", - "alt_title", - "rating", - "thumbnail", - "image", - "description", - "authors", - "screenwriters", - "illustrators", - "translators", - "genres", - "categories", - "status", - "year", - "updated_detail", -) - -CHAPTER_FIELDS = ( - "id", - "title", - "link", - "number", - "volume", -) diff --git a/apps/parse/api/urls.py b/apps/parse/api/urls.py deleted file mode 100644 index 738b3ec6..00000000 --- a/apps/parse/api/urls.py +++ /dev/null @@ -1,12 +0,0 @@ -from django.urls import include, path -from rest_framework import routers - -from apps.parse.api.views import MangaViewSet - -router = routers.DefaultRouter() - -router.register(r"", MangaViewSet, basename="manga") - -urlpatterns = [ - path(r"", include(router.urls)), -] diff --git a/apps/parse/api/views.py b/apps/parse/api/views.py deleted file mode 100644 index 43f9afd9..00000000 --- a/apps/parse/api/views.py +++ /dev/null @@ -1,104 +0,0 @@ -from datetime import datetime - -from django.conf import settings -from django.http.response import Http404 -from rest_framework import mixins, status, viewsets -from rest_framework.decorators import action -from rest_framework.generics import get_object_or_404 -from rest_framework.response import Response - -from apps.core.fast import FastLimitOffsetPagination -from apps.core.fast.utils import get_fast_response -from apps.core.utils import format_error_response, init_redis_client -from apps.parse.api.serializers import CHAPTER_FIELDS, MANGA_FIELDS -from apps.parse.const import CHAPTER_PARSER, DETAIL_PARSER, IMAGE_PARSER -from apps.parse.documents import MangaDocument -from apps.parse.models import Chapter, Manga -from apps.parse.scrapy.utils import run_parser -from apps.parse.utils import fast_annotate_manga_query, needs_update - - -class MangaViewSet(mixins.RetrieveModelMixin, viewsets.GenericViewSet): - pagination_class = FastLimitOffsetPagination - queryset = Manga.objects.all() - redis_client = init_redis_client() - - @classmethod - def get_fast_manga(cls, pk) -> dict: - manga = fast_annotate_manga_query(Manga.objects.filter(pk=pk)) - if not manga.exists(): - raise Http404 - return manga.parse_values(*MANGA_FIELDS)[0] - - def retrieve(self, _, pk, *args, **kwargs): - manga = self.get_fast_manga(pk) - try: - criterea = manga["updated_detail"] - if not criterea or needs_update(criterea): - run_parser(DETAIL_PARSER, manga["source"], manga["source_url"]) - run_parser(CHAPTER_PARSER, manga["source"], manga["source_url"]) - now = datetime.now() - Manga.objects.filter(pk=pk).update(updated_detail=now) - manga["updated_detail"] = now - except Exception as e: - return format_error_response("Errors occurred during parsing " + str(e)) - return get_fast_response(manga) - - def list(self, request): - title: str = request.GET.get("title", None) - if not title: - return format_error_response("No title found") - - mangas = fast_annotate_manga_query( - MangaDocument.search() - .query("fuzzy", title=title)[: settings.REST_FRAMEWORK["PAGE_SIZE"]] - .to_queryset() - ) - - page = self.paginator.paginate_queryset( - mangas, - request, - values=MANGA_FIELDS, - ) - if page is not None: - return self.paginator.get_paginated_response(page) - - return Response(list(mangas.parse_values(*MANGA_FIELDS)), status=status.HTTP_200_OK) - - @action( - detail=False, - methods=("get",), - url_path="(?P[^/.]+)/chapters", - ) - def chapters_list(self, _, pk): - manga: Manga = Manga.objects.prefetch_related("chapters").get(pk=pk) - - try: - criterea = manga.updated_detail - if not criterea or needs_update(criterea.isoformat()): - run_parser(DETAIL_PARSER, manga.source, manga.source_url) - run_parser(CHAPTER_PARSER, manga.source, manga.source_url) - manga.updated_detail = datetime.now() - manga.save() - except Exception as e: - return format_error_response("Errors occurred during parsing " + str(e)) - return get_fast_response( - list(manga.chapters.order_by("-volume", "-number").values(*CHAPTER_FIELDS)) - ) - - @action( - detail=False, - methods=("get",), - url_path="(?P[^/.]+)/images", - ) - def images_list(self, request, chapter_id): - chapter: Chapter = get_object_or_404(Chapter, id=chapter_id) - parse = request.GET.get("parse", None) - images = self.redis_client.lrange(chapter.link, 0, -1) - if not images or parse is not None: - run_parser(IMAGE_PARSER, chapter.manga.source, chapter.link) - return Response( - {"message": "started parsing images, refetch later"}, - status=status.HTTP_400_BAD_REQUEST, - ) - return Response(images, status=status.HTTP_200_OK) diff --git a/apps/parse/models.py b/apps/parse/models.py index c389342e..4debca95 100644 --- a/apps/parse/models.py +++ b/apps/parse/models.py @@ -6,7 +6,6 @@ from django.db.models.query import QuerySet from apps.core.abc.models import BaseModel -from apps.core.fast import FastQuerySet from apps.core.utils import url_prefix from apps.parse.const import SOURCE_TO_CATALOGUE_MAP @@ -59,7 +58,6 @@ def __str__(self) -> str: class Manga(BaseModel): - objects = models.Manager.from_queryset(FastQuerySet)() NAME_FIELD = "title" BASE_UPDATE_FREQUENCY = timedelta(hours=1) diff --git a/apps/parse/utils.py b/apps/parse/utils.py deleted file mode 100644 index 44cd3f31..00000000 --- a/apps/parse/utils.py +++ /dev/null @@ -1,69 +0,0 @@ -import logging -from datetime import datetime - -from django.db.models import Q -from django.utils import timezone - -from apps.core.fast import FastQuerySet -from apps.parse.const import SOURCE_TO_CATALOGUE_MAP -from apps.parse.models import Manga, Person, PersonRelatedToManga - - -def fast_annotate_manga_query(query: FastQuerySet) -> FastQuerySet: - return query.map(source=("source_url__startswith", SOURCE_TO_CATALOGUE_MAP)).m2m_agg( - authors=( - "person_relations__person__name", - Q(person_relations__role="author"), - ), - screenwriters=( - "person_relations__person__name", - Q(person_relations__role="screenwriter"), - ), - illustrators=( - "person_relations__person__name", - Q(person_relations__role="illustrator"), - ), - translators=( - "person_relations__person__name", - Q(person_relations__role="translator"), - ), - genres="genres__name", - categories="categories__name", - ) - - -def needs_update(updated_detail: str): - updated_detail = datetime.fromisoformat(updated_detail) - if updated_detail: - update_deadline = updated_detail + Manga.BASE_UPDATE_FREQUENCY - if timezone.now() >= update_deadline: - return True - return False - - -def save_persons(manga, role, persons): - INSTANCE = 0 - PeopleRelated: PersonRelatedToManga = manga.people_related.through - PeopleRelated.objects.filter(role=role, manga=manga).delete() - PeopleRelated.objects.bulk_create( - [ - PeopleRelated( - person=Person.objects.get_or_create(name=person)[INSTANCE], - manga=manga, - role=role, - ) - for person in persons - ], - ignore_conflicts=True, - ) - - -def mute_logger_stdout(logger_name: str, *other_loggers): - import warnings - - logger_names = [logger_name, *other_loggers] - for name in logger_names: - warnings.filterwarnings("ignore", module=name) - logger = logging.getLogger(name) - logger.setLevel(logging.CRITICAL) - logger.propagate = False diff --git a/manage.py b/manage.py index eec977da..b03d123f 100755 --- a/manage.py +++ b/manage.py @@ -3,13 +3,10 @@ import os import sys -from dotenv import load_dotenv - def main(): """Run administrative tasks.""" os.environ.setdefault("DJANGO_SETTINGS_MODULE", "manga_reader.settings") - load_dotenv(".envs/local.env") try: from django.core.management import execute_from_command_line except ImportError as exc: diff --git a/manga_reader/settings.py b/manga_reader/settings.py index 38d7b51f..7b8b9326 100644 --- a/manga_reader/settings.py +++ b/manga_reader/settings.py @@ -5,31 +5,53 @@ from functools import partial from pathlib import Path -import scrapy.utils.log -import sentry_sdk -from colorlog import ColoredFormatter -from sentry_sdk.integrations.django import DjangoIntegration -from sentry_sdk.integrations.logging import ignore_logger +import dj_database_url +import environ + + +BASE_DIR = Path(__file__).resolve().parent.parent +env = environ.Env( + DEBUG=(bool, True), + ALLOWED_HOSTS=(lambda a: a.split(" "), ["*"]), + DJANGO_LOG_LEVEL=(str, "INFO"), + REDIS_URL=(str, "redis://localhost:6079"), + ELASTICSEARCH_HOST=(str, "localhost:92000"), + PROXY=(str, ""), +) +environ.Env.read_env(os.path.join(BASE_DIR, '.env')) ########### # Project # ########### SHELL_PLUS_PRINT_SQL_TRUNCATE = None -BASE_DIR = Path(__file__).resolve().parent.parent ROOT_URLCONF = "manga_reader.urls" WSGI_APPLICATION = "manga_reader.wsgi.application" -WEBDRIVER_PATH = os.getenv("WEBDRIVER_PATH", None) ############ # Security # ############ -SECRET_KEY = os.getenv("SECRET_KEY") -DEBUG = int(os.getenv("DEBUG", 1)) -ALLOWED_HOSTS = os.getenv("ALLOWED_HOSTS", "*").split(" ") +SECRET_KEY = env("SECRET_KEY") +DEBUG = env("DEBUG") +ALLOWED_HOSTS = env("ALLOWED_HOSTS") SECURE_PROXY_SSL_HEADER = ("HTTP_X_FORWARDED_PROTO", "https") +CORS_ALLOW_ALL_ORIGINS = True + +############ +# Scraping # +############ + +PROXY = env("PROXY") +HEADERS = { + "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0", +} +REDIS_URL = env("REDIS_URL") +ELASTICSEARCH_DSL = { + "default": {"hosts": env("ELASTICSEARCH_HOST")}, +} + ######## # Apps # ######## @@ -42,8 +64,6 @@ "django.contrib.sessions", "django.contrib.messages", "django.contrib.staticfiles", - "rest_framework", - "rest_framework_simplejwt.token_blacklist", "corsheaders", "apps.api_docs", "apps.login.apps.LoginConfig", @@ -54,10 +74,6 @@ "django_elasticsearch_dsl", ] -ELASTICSEARCH_DSL = { - "default": {"hosts": os.getenv("ELASTICSEARCH_HOST", "localhost:92000")}, -} - ######### # ADMIN # ######### @@ -124,46 +140,6 @@ "actions_sticky_top": True, } -####### -# API # -####### - -REST_FRAMEWORK = { - "DEFAULT_PERMISSION_CLASSES": (), - "DEFAULT_AUTHENTICATION_CLASSES": (), - "DEFAULT_PAGINATION_CLASS": "rest_framework.pagination.LimitOffsetPagination", - "PAGE_SIZE": int(os.getenv("PAGE_SIZE", 20)), -} - -HEADERS = { - "user-agent": "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:91.0) Gecko/20100101 Firefox/91.0", -} - -SIMPLE_JWT = { - "ACCESS_TOKEN_LIFETIME": timedelta(minutes=5), - "REFRESH_TOKEN_LIFETIME": timedelta(days=1), - "ROTATE_REFRESH_TOKENS": False, - "BLACKLIST_AFTER_ROTATION": True, - "UPDATE_LAST_LOGIN": False, - "ALGORITHM": "HS256", - "SIGNING_KEY": SECRET_KEY, - "VERIFYING_KEY": None, - "AUDIENCE": None, - "ISSUER": None, - "AUTH_HEADER_TYPES": ("Bearer",), - "AUTH_HEADER_NAME": "HTTP_AUTHORIZATION", - "USER_ID_FIELD": "id", - "USER_ID_CLAIM": "user_id", - "USER_AUTHENTICATION_RULE": "rest_framework_simplejwt.authentication." - "default_user_authentication_rule", - "AUTH_TOKEN_CLASSES": ("rest_framework_simplejwt.tokens.AccessToken",), - "TOKEN_TYPE_CLAIM": "token_type", - "JTI_CLAIM": "jti", - "SLIDING_TOKEN_REFRESH_EXP_CLAIM": "refresh_exp", - "SLIDING_TOKEN_LIFETIME": timedelta(minutes=5), - "SLIDING_TOKEN_REFRESH_LIFETIME": timedelta(days=1), -} - ############## # Middleware ############## @@ -180,25 +156,13 @@ "django.middleware.clickjacking.XFrameOptionsMiddleware", ] -######## -# CORS # -######## - -CORS_ALLOW_ALL_ORIGINS = True - ############ # Database # ############ +DEFAULT_AUTO_FIELD = "django.db.models.AutoField" DATABASES = { - "default": { - "ENGINE": "django.db.backends.postgresql_psycopg2", - "NAME": os.getenv("DATABASE_NAME"), - "USER": os.getenv("DATABASE_USER"), - "PASSWORD": os.getenv("DATABASE_PASSWORD"), - "HOST": os.getenv("DATABASE_HOST"), - "PORT": os.getenv("DATABASE_PORT"), - } + 'default': dj_database_url.config(default='postgres://postgres:postgres@localhost:5432/sora'), } ################# @@ -220,10 +184,10 @@ }, ] PASSWORD_HASHERS = [ - "django.contrib.auth.hashers.Argon2PasswordHasher", - "django.contrib.auth.hashers.PBKDF2PasswordHasher", - "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher", - "django.contrib.auth.hashers.BCryptSHA256PasswordHasher", + 'django.contrib.auth.hashers.PBKDF2PasswordHasher', + 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', + 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', + 'django.contrib.auth.hashers.ScryptPasswordHasher', ] ########### @@ -246,15 +210,14 @@ }, ] -STATIC_URL = "/static/" +STATIC_URL = "static/" STATIC_ROOT = "staticfiles" STATICFILES_DIRS = [BASE_DIR / "static"] -STATICFILES_STORAGE = "whitenoise.storage.CompressedManifestStaticFilesStorage" +STATICFILES_STORAGE = "whitenoise.storage.CompressedStaticFilesStorage" MEDIA_URL = "/media/" -MEDIA_ROOT = os.path.join(BASE_DIR, "media") +MEDIA_ROOT = BASE_DIR / "media" -REDIS_URL = os.getenv("REDIS_URL") ################ # Localization # @@ -266,106 +229,27 @@ USE_L10N = True USE_TZ = True -DEFAULT_AUTO_FIELD = "django.db.models.AutoField" - - -############# -# GlitchTip # -############# - -SENTRY_DSN = os.getenv("SENTRY_DSN", "") -sentry_sdk.init( - dsn=SENTRY_DSN, - integrations=[DjangoIntegration()], - send_default_pii=True, -) -ignore_logger("django.security.DisallowedHost") - -######## -# Silk # -######## - -if DEBUG: - INSTALLED_APPS.append("silk") - MIDDLEWARE.append("silk.middleware.SilkyMiddleware") - ########## # Logging # ########## -COLORED_FORMAT = ( - "%(log_color)s%(levelname)-8s%(reset)s" - "%(bold_white)s[%(asctime)s]%(reset)s " - "%(log_color)s%(message)s%(reset)s" -) -COLORLESS_FORMAT = "%(levelname)-8s[%(asctime)s] %(message)s" -DATEFMT = "%Y-%m-%d %H:%M:%S" - -SoraColoredLogger = partial( - ColoredFormatter, - datefmt=DATEFMT, - log_colors={ - "DEBUG": "white", - "INFO": "bold_cyan", - "WARNING": "bold_yellow", - "ERROR": "bold_red", - "CRITICAL": "red,bg_white", - }, -) - -color_formatter = SoraColoredLogger(COLORED_FORMAT) -colorless_formatter = logging.Formatter(COLORLESS_FORMAT, datefmt=DATEFMT) - LOGGING = { - "version": 1, - "disable_existing_loggers": False, - "formatters": { - "colored": { - "()": "manga_reader.settings.SoraColoredLogger", - "format": COLORED_FORMAT, - } - }, - "handlers": { - "console": { - "level": "DEBUG", - "class": "logging.StreamHandler", - "formatter": "colored", + 'version': 1, + 'disable_existing_loggers': False, + 'handlers': { + 'console': { + 'class': 'logging.StreamHandler', }, }, - "root": { - "handlers": ["console"], - "level": "WARNING", + 'root': { + 'handlers': ['console'], + 'level': 'WARNING', }, - "loggers": { - "django": { - "handlers": ["console"], - "level": os.getenv("DJANGO_LOG_LEVEL", "INFO"), - "propagate": False, - }, - "management": { - "handlers": ["console"], - "level": "INFO", - "propagate": False, + 'loggers': { + 'django': { + 'handlers': ['console'], + 'level': env('DJANGO_LOG_LEVEL'), + 'propagate': False, }, }, } - -########## -# Scrapy # -########## - -PROXY = os.getenv("PROXY") - -_get_handler = copy.copy(scrapy.utils.log._get_handler) - - -def _get_handler_custom(*args, **kwargs): - handler = _get_handler(*args, **kwargs) - formatter = color_formatter - if isinstance(handler, logging.FileHandler): - formatter = colorless_formatter - handler.setFormatter(formatter) - return handler - - -scrapy.utils.log._get_handler = _get_handler_custom diff --git a/manga_reader/urls.py b/manga_reader/urls.py index 708c9442..b091a145 100644 --- a/manga_reader/urls.py +++ b/manga_reader/urls.py @@ -5,14 +5,11 @@ apipatterns = [ path("docs/", include("apps.api_docs.urls")), - path("manga/", include("apps.parse.api.urls")), - path("auth/", include("apps.login.urls")), + # path("manga/", include("apps.parse.api.urls")), + # path("auth/", include("apps.login.urls")), ] urlpatterns = [ path("api/", include(apipatterns)), re_path(r"^(?!api)\w*?", admin.site.urls), ] - -if settings.DEBUG: - urlpatterns.append(path("silk/", include("silk.urls", namespace="silk"))) diff --git a/poetry.lock b/poetry.lock index 182ef3b7..60886ac4 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,90 +1,80 @@ [[package]] name = "amqp" -version = "5.0.9" +version = "5.1.1" description = "Low-level AMQP client for Python (fork of amqplib)." category = "main" optional = false python-versions = ">=3.6" [package.dependencies] -vine = "5.0.0" - -[[package]] -name = "appdirs" -version = "1.4.4" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" -optional = false -python-versions = "*" +vine = ">=5.0.0" [[package]] name = "appnope" -version = "0.1.2" +version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" category = "dev" optional = false python-versions = "*" [[package]] -name = "argon2-cffi" -version = "20.1.0" -description = "The secure Argon2 password hashing algorithm." +name = "asgiref" +version = "3.5.2" +description = "ASGI specs, helper code, and adapters" category = "main" optional = false -python-versions = "*" - -[package.dependencies] -cffi = ">=1.0.0" -six = "*" +python-versions = ">=3.7" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest", "sphinx", "wheel", "pre-commit"] -docs = ["sphinx"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] +tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] [[package]] -name = "asgiref" -version = "3.2.10" -description = "ASGI specs, helper code, and adapters" -category = "main" +name = "asttokens" +version = "2.0.8" +description = "Annotate AST trees with source code positions" +category = "dev" optional = false -python-versions = ">=3.5" +python-versions = "*" + +[package.dependencies] +six = "*" [package.extras] -tests = ["pytest", "pytest-asyncio"] +test = ["astroid (<=2.5.3)", "pytest"] [[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" +name = "async-timeout" +version = "4.0.2" +description = "Timeout context manager for asyncio programs" +category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [[package]] name = "attrs" -version = "21.4.0" +version = "22.1.0" description = "Classes Without Boilerplate" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.5" [package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] +dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] +tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "mypy (>=0.900,!=0.940)", "pytest-mypy-plugins", "cloudpickle"] [[package]] name = "autoflake" -version = "1.4" +version = "1.5.3" description = "Removes unused imports and unused variables" category = "main" optional = false -python-versions = "*" +python-versions = ">=3.7" [package.dependencies] pyflakes = ">=1.1.0" +toml = ">=0.10.2" [[package]] name = "automat" @@ -101,18 +91,6 @@ six = "*" [package.extras] visualize = ["graphviz (>0.5.1)", "Twisted (>=16.1.1)"] -[[package]] -name = "autopep8" -version = "1.5.7" -description = "A tool that automatically formats Python code to conform to the PEP 8 style guide" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -pycodestyle = ">=2.7.0" -toml = "*" - [[package]] name = "backcall" version = "0.2.0" @@ -121,6 +99,17 @@ category = "dev" optional = false python-versions = "*" +[[package]] +name = "backports.zoneinfo" +version = "0.2.1" +description = "Backport of the standard library zoneinfo module" +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +tzdata = ["tzdata"] + [[package]] name = "billiard" version = "3.6.4.0" @@ -131,33 +120,41 @@ python-versions = "*" [[package]] name = "black" -version = "20.8b1" +version = "22.8.0" description = "The uncompromising code formatter." category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.2" [package.dependencies] -appdirs = "*" -click = ">=7.1.2" +click = ">=8.0.0" mypy-extensions = ">=0.4.3" -pathspec = ">=0.6,<1" -regex = ">=2020.1.8" -toml = ">=0.10.1" -typed-ast = ">=1.4.0" -typing-extensions = ">=3.7.4" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_full_version < \"3.11.0a7\""} +typing-extensions = {version = ">=3.10.0.0", markers = "python_version < \"3.10\""} [package.extras] colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.3.2)", "aiohttp-cors"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + +[[package]] +name = "brotli" +version = "1.0.9" +description = "Python bindings for the Brotli compression library" +category = "main" +optional = false +python-versions = "*" [[package]] name = "celery" -version = "5.2.3" +version = "5.2.7" description = "Distributed Task Queue." category = "main" optional = false -python-versions = ">=3.7," +python-versions = ">=3.7" [package.dependencies] billiard = ">=3.6.4.0,<4.0" @@ -204,15 +201,15 @@ zstd = ["zstandard"] [[package]] name = "certifi" -version = "2021.10.8" +version = "2022.6.15" description = "Python package for providing Mozilla's CA Bundle." category = "main" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "cffi" -version = "1.15.0" +version = "1.15.1" description = "Foreign Function Interface for Python calling C code." category = "main" optional = false @@ -231,22 +228,22 @@ python-versions = ">=3.6.1" [[package]] name = "charset-normalizer" -version = "2.0.9" +version = "2.1.1" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." category = "main" optional = false -python-versions = ">=3.5.0" +python-versions = ">=3.6.0" [package.extras] unicode_backport = ["unicodedata2"] [[package]] name = "click" -version = "8.0.3" +version = "8.1.3" description = "Composable command line interface toolkit" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} @@ -274,7 +271,7 @@ python-versions = "*" click = ">=4.0" [package.extras] -dev = ["pytest (>=3.6)", "pytest-cov", "wheel", "coveralls"] +dev = ["coveralls", "wheel", "pytest-cov", "pytest (>=3.6)"] [[package]] name = "click-repl" @@ -291,26 +288,12 @@ six = "*" [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.5" description = "Cross-platform colored terminal text." category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -[[package]] -name = "colorlog" -version = "6.6.0" -description = "Add colours to the output of Python's logging module." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -development = ["black", "flake8", "mypy", "pytest", "types-colorama"] - [[package]] name = "commonmark" version = "0.9.1" @@ -330,21 +313,9 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "crochet" -version = "2.0.0" -description = "Use Twisted anywhere!" -category = "main" -optional = false -python-versions = ">=3.6.0" - -[package.dependencies] -Twisted = ">=16.0" -wrapt = "*" - [[package]] name = "cryptography" -version = "36.0.1" +version = "37.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." category = "main" optional = false @@ -359,7 +330,7 @@ docstest = ["pyenchant (>=1.6.11)", "twine (>=1.12.0)", "sphinxcontrib-spelling pep8test = ["black", "flake8", "flake8-import-order", "pep8-naming"] sdist = ["setuptools_rust (>=0.11.4)"] ssh = ["bcrypt (>=3.1.5)"] -test = ["pytest (>=6.2.0)", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] +test = ["pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-subtests", "pytest-xdist", "pretend", "iso8601", "pytz", "hypothesis (>=1.11.4,!=3.79.2)"] [[package]] name = "cssselect" @@ -369,195 +340,134 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -[[package]] -name = "dateutils" -version = "0.6.12" -description = "Various utilities for working with date and datetime objects" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -python-dateutil = "*" -pytz = "*" - [[package]] name = "decorator" -version = "5.1.0" +version = "5.1.1" description = "Decorators for Humans" category = "dev" optional = false python-versions = ">=3.5" +[[package]] +name = "deprecated" +version = "1.2.13" +description = "Python @deprecated decorator to deprecate old python classes, functions or methods." +category = "main" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" + +[package.dependencies] +wrapt = ">=1.10,<2" + +[package.extras] +dev = ["tox", "bump2version (<1)", "sphinx (<2)", "importlib-metadata (<3)", "importlib-resources (<4)", "configparser (<5)", "sphinxcontrib-websupport (<2)", "zipp (<2)", "PyTest (<5)", "PyTest-Cov (<2.6)", "pytest", "pytest-cov"] + [[package]] name = "distlib" -version = "0.3.4" +version = "0.3.6" description = "Distribution utilities" category = "dev" optional = false python-versions = "*" +[[package]] +name = "dj-database-url" +version = "1.0.0" +description = "Use Database URLs in your Django Application." +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +Django = ">3.2" + [[package]] name = "django" -version = "3.1" -description = "A high-level Python Web framework that encourages rapid development and clean, pragmatic design." +version = "4.1.1" +description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" [package.dependencies] -asgiref = ">=3.2.10,<3.3.0" -pytz = "*" +asgiref = ">=3.5.2,<4" +"backports.zoneinfo" = {version = "*", markers = "python_version < \"3.9\""} sqlparse = ">=0.2.2" +tzdata = {version = "*", markers = "sys_platform == \"win32\""} [package.extras] -argon2 = ["argon2-cffi (>=16.1.0)"] +argon2 = ["argon2-cffi (>=19.1.0)"] bcrypt = ["bcrypt"] [[package]] name = "django-cors-headers" -version = "3.10.1" +version = "3.13.0" description = "django-cors-headers is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS)." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] -Django = ">=2.2" +Django = ">=3.2" [[package]] name = "django-elasticsearch-dsl" -version = "7.2.1" -description = "" +version = "7.2.2" +description = "Wrapper around elasticsearch-dsl-py for django models" category = "main" optional = false python-versions = "*" -develop = false [package.dependencies] elasticsearch-dsl = ">=7.2.0" six = "*" -[package.source] -type = "git" -url = "https://github.com/dhvcc/django-elasticsearch-dsl.git" -reference = "53598a336915a795467233f091f3c30836f0f758" -resolved_reference = "53598a336915a795467233f091f3c30836f0f758" - [[package]] -name = "django-extensions" -version = "3.1.5" -description = "Extensions for Django" +name = "django-environ" +version = "0.9.0" +description = "A package that allows you to utilize 12factor inspired environment variables to configure your Django application." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.4,<4" -[package.dependencies] -Django = ">=2.2" +[package.extras] +testing = ["pytest (>=4.6.11)", "coverage[toml] (>=5.0a4)"] +docs = ["sphinx-notfound-page", "sphinx (>=3.5.0)", "furo (>=2021.8.17b43,<2021.9.0)"] +develop = ["sphinx-notfound-page", "sphinx (>=3.5.0)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "coverage[toml] (>=5.0a4)"] [[package]] -name = "django-filter" -version = "2.4.0" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." +name = "django-extensions" +version = "3.2.0" +description = "Extensions for Django" category = "main" optional = false -python-versions = ">=3.5" +python-versions = ">=3.6" [package.dependencies] -Django = ">=2.2" +Django = ">=3.2" [[package]] name = "django-jazzmin" -version = "2.4.5" +version = "2.5.0" description = "Drop-in theme for django admin, that utilises AdminLTE 3 & Bootstrap 4 to make yo' admin look jazzy" category = "main" optional = false -python-versions = ">=3.5" -develop = false - -[package.dependencies] -django = ">=2" - -[package.source] -type = "git" -url = "https://github.com/dhvcc/django-jazzmin.git" -reference = "488036718b0c2a9d9b928c8dca257164db64857d" -resolved_reference = "488036718b0c2a9d9b928c8dca257164db64857d" - -[[package]] -name = "django-silk" -version = "4.2.0" -description = "Silky smooth profiling for the Django Framework" -category = "main" -optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.2" [package.dependencies] -autopep8 = "*" -Django = ">=2.2" -gprof2dot = ">=2017.09.19" -Jinja2 = "*" -Pygments = "*" -python-dateutil = "*" -pytz = "*" -requests = "*" -sqlparse = "*" +django = ">=2.2" [[package]] name = "django-types" -version = "0.9.1" +version = "0.16.0" description = "Type stubs for Django" category = "dev" optional = false -python-versions = ">=3.6.2,<4.0.0" - -[[package]] -name = "django-typomatic" -version = "1.6.1" -description = "A simple solution for generating Typescript interfaces from your Django Rest Framework Serializers." -category = "dev" -optional = false -python-versions = "*" - -[package.dependencies] -django = "*" -djangorestframework = "*" - -[[package]] -name = "djangorestframework" -version = "3.13.1" -description = "Web APIs for Django, made easy." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -django = ">=2.2" -pytz = "*" - -[[package]] -name = "djangorestframework-simplejwt" -version = "4.8.0" -description = "A minimal JSON Web Token authentication plugin for Django REST Framework" -category = "main" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -django = "*" -djangorestframework = "*" -pyjwt = ">=2,<3" - -[package.extras] -dev = ["pytest-watch", "wheel", "twine", "ipython", "cryptography", "pytest-cov", "pytest-django", "pytest-xdist", "pytest", "tox", "flake8", "pep8", "isort", "Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)", "python-jose (==3.0.0)"] -doc = ["Sphinx (>=1.6.5,<2)", "sphinx-rtd-theme (>=0.1.9)"] -lint = ["flake8", "pep8", "isort"] -python-jose = ["python-jose (==3.0.0)"] -test = ["cryptography", "pytest-cov", "pytest-django", "pytest-xdist", "pytest", "tox"] +python-versions = ">=3.7,<4.0" [[package]] name = "elasticsearch" -version = "7.16.2" +version = "7.17.6" description = "Python client for Elasticsearch" category = "main" optional = false @@ -589,38 +499,38 @@ six = "*" [package.extras] develop = ["mock", "pytest (>=3.0.0)", "pytest-cov", "pytest-mock (<3.0.0)", "pytz", "coverage (<5.0.0)", "sphinx", "sphinx-rtd-theme"] +[[package]] +name = "executing" +version = "1.0.0" +description = "Get the currently executing AST node of a frame, and other information" +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "filelock" -version = "3.4.2" +version = "3.8.0" description = "A platform independent file lock." -category = "dev" +category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +testing = ["pytest-timeout (>=2.1)", "pytest-cov (>=3)", "pytest (>=7.1.2)", "coverage (>=6.4.2)", "covdefaults (>=2.2)"] +docs = ["sphinx-autodoc-typehints (>=1.19.1)", "sphinx (>=5.1.1)", "furo (>=2022.6.21)"] [[package]] name = "flake8" -version = "3.9.2" +version = "5.0.4" description = "the modular source code checker: pep8 pyflakes and co" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6.1" [package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.7.0,<2.8.0" -pyflakes = ">=2.3.0,<2.4.0" - -[[package]] -name = "gprof2dot" -version = "2021.2.21" -description = "Generate a dot graph from the output of several profilers." -category = "main" -optional = false -python-versions = "*" +mccabe = ">=0.7.0,<0.8.0" +pycodestyle = ">=2.9.0,<2.10.0" +pyflakes = ">=2.5.0,<2.6.0" [[package]] name = "gunicorn" @@ -636,34 +546,6 @@ gevent = ["gevent (>=1.4.0)"] setproctitle = ["setproctitle"] tornado = ["tornado (>=0.2)"] -[[package]] -name = "h2" -version = "3.2.0" -description = "HTTP/2 State-Machine based protocol implementation" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -hpack = ">=3.0,<4" -hyperframe = ">=5.2.0,<6" - -[[package]] -name = "hpack" -version = "3.0.0" -description = "Pure-Python HPACK header compression" -category = "main" -optional = false -python-versions = "*" - -[[package]] -name = "hyperframe" -version = "5.2.0" -description = "HTTP/2 framing layer for Python" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "hyperlink" version = "21.0.0" @@ -677,11 +559,11 @@ idna = ">=2.5" [[package]] name = "identify" -version = "2.4.1" +version = "2.5.3" description = "File identification library for Python" category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.extras] license = ["ukkonen"] @@ -696,7 +578,7 @@ python-versions = ">=3.5" [[package]] name = "importlib-metadata" -version = "4.10.0" +version = "4.12.0" description = "Read metadata from Python packages" category = "main" optional = false @@ -706,9 +588,9 @@ python-versions = ">=3.7" zipp = ">=0.5" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy", "importlib-resources (>=1.3)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] [[package]] name = "incremental" @@ -721,14 +603,6 @@ python-versions = "*" [package.extras] scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] -[[package]] -name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" -optional = false -python-versions = "*" - [[package]] name = "ipdb" version = "0.13.9" @@ -744,11 +618,11 @@ toml = {version = ">=0.10.2", markers = "python_version > \"3.6\""} [[package]] name = "ipython" -version = "7.30.1" +version = "8.4.0" description = "IPython: Productive Interactive Computing" category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" [package.dependencies] appnope = {version = "*", markers = "sys_platform == \"darwin\""} @@ -760,19 +634,22 @@ matplotlib-inline = "*" pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} pickleshare = "*" prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -traitlets = ">=4.2" +pygments = ">=2.4.0" +stack-data = "*" +traitlets = ">=5" [package.extras] -all = ["Sphinx (>=1.3)", "ipykernel", "ipyparallel", "ipywidgets", "nbconvert", "nbformat", "nose (>=0.10.1)", "notebook", "numpy (>=1.17)", "pygments", "qtconsole", "requests", "testpath"] +all = ["black", "Sphinx (>=1.3)", "ipykernel", "nbconvert", "nbformat", "ipywidgets", "notebook", "ipyparallel", "qtconsole", "pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "numpy (>=1.19)", "pandas", "trio"] +black = ["black"] doc = ["Sphinx (>=1.3)"] kernel = ["ipykernel"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] -notebook = ["notebook", "ipywidgets"] +notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["nose (>=0.10.1)", "requests", "testpath", "pygments", "nbformat", "ipykernel", "numpy (>=1.17)"] +test = ["pytest (<7.1)", "pytest-asyncio", "testpath"] +test_extra = ["pytest (<7.1)", "pytest-asyncio", "testpath", "curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "trio"] [[package]] name = "isort" @@ -790,7 +667,7 @@ plugins = ["setuptools"] [[package]] name = "itemadapter" -version = "0.4.0" +version = "0.7.0" description = "Common interface for data container classes" category = "main" optional = false @@ -798,7 +675,7 @@ python-versions = ">=3.6" [[package]] name = "itemloaders" -version = "1.0.4" +version = "1.0.6" description = "Base library for scrapy's ItemLoader" category = "main" optional = false @@ -825,31 +702,17 @@ parso = ">=0.8.0,<0.9.0" qa = ["flake8 (==3.8.3)", "mypy (==0.782)"] testing = ["Django (<3.1)", "colorama", "docopt", "pytest (<7.0.0)"] -[[package]] -name = "jinja2" -version = "3.0.3" -description = "A very fast and expressive template engine." -category = "main" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - [[package]] name = "jmespath" -version = "0.10.0" +version = "1.0.1" description = "JSON Matching Expressions" category = "main" optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.7" [[package]] name = "kombu" -version = "5.2.3" +version = "5.2.4" description = "Messaging library for Python." category = "main" optional = false @@ -877,7 +740,7 @@ zookeeper = ["kazoo (>=1.3.1)"] [[package]] name = "lxml" -version = "4.7.1" +version = "4.9.1" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." category = "main" optional = false @@ -891,11 +754,11 @@ source = ["Cython (>=0.29.7)"] [[package]] name = "markdown" -version = "3.3.6" +version = "3.4.1" description = "Python implementation of Markdown." category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [package.dependencies] importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} @@ -903,17 +766,9 @@ importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} [package.extras] testing = ["coverage", "pyyaml"] -[[package]] -name = "markupsafe" -version = "2.0.1" -description = "Safely add untrusted strings to HTML/XML markup." -category = "main" -optional = false -python-versions = ">=3.6" - [[package]] name = "matplotlib-inline" -version = "0.1.3" +version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" category = "dev" optional = false @@ -924,11 +779,11 @@ traitlets = "*" [[package]] name = "mccabe" -version = "0.6.1" +version = "0.7.0" description = "McCabe checker, plugin for flake8" category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.6" [[package]] name = "mypy-extensions" @@ -940,15 +795,15 @@ python-versions = "*" [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.7.0" description = "Node.js virtual environment builder" category = "dev" optional = false -python-versions = "*" +python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" [[package]] name = "orjson" -version = "3.6.5" +version = "3.8.0" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" category = "main" optional = false @@ -958,7 +813,7 @@ python-versions = ">=3.7" name = "packaging" version = "21.3" description = "Core utilities for Python packages" -category = "dev" +category = "main" optional = false python-versions = ">=3.6" @@ -993,11 +848,11 @@ testing = ["docopt", "pytest (<6.0.0)"] [[package]] name = "pathspec" -version = "0.9.0" +version = "0.10.1" description = "Utility library for gitignore style pattern matching of file paths." category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.7" [[package]] name = "pexpect" @@ -1020,35 +875,23 @@ python-versions = "*" [[package]] name = "platformdirs" -version = "2.4.1" +version = "2.5.2" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." category = "dev" optional = false python-versions = ">=3.7" [package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] - -[[package]] -name = "pluggy" -version = "1.0.0" -description = "plugin and hook calling mechanisms for python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] [[package]] name = "pre-commit" -version = "2.16.0" +version = "2.20.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.7" [package.dependencies] cfgv = ">=2.0.0" @@ -1058,17 +901,9 @@ pyyaml = ">=5.1" toml = "*" virtualenv = ">=20.0.8" -[[package]] -name = "priority" -version = "1.3.0" -description = "A pure-Python implementation of the HTTP/2 priority tree" -category = "main" -optional = false -python-versions = "*" - [[package]] name = "prompt-toolkit" -version = "3.0.24" +version = "3.0.31" description = "Library for building powerful interactive command lines in Python" category = "main" optional = false @@ -1079,7 +914,7 @@ wcwidth = "*" [[package]] name = "protego" -version = "0.1.16" +version = "0.2.1" description = "Pure-Python robots.txt parser with support for modern conventions" category = "main" optional = false @@ -1105,12 +940,15 @@ optional = false python-versions = "*" [[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" +name = "pure-eval" +version = "0.2.2" +description = "Safely evaluate AST nodes without side effects" category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "*" + +[package.extras] +tests = ["pytest"] [[package]] name = "pyasn1" @@ -1133,11 +971,11 @@ pyasn1 = ">=0.4.6,<0.5.0" [[package]] name = "pycodestyle" -version = "2.7.0" +version = "2.9.1" description = "Python style guide checker" -category = "main" +category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [[package]] name = "pycparser" @@ -1149,53 +987,41 @@ python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" [[package]] name = "pydispatcher" -version = "2.0.5" -description = "Multi-producer-multi-consumer signal dispatching mechanism" +version = "2.0.6" +description = "Multi-Producer Multi-Consumer Observer Pattern for Python" category = "main" optional = false python-versions = "*" [[package]] name = "pyflakes" -version = "2.3.1" +version = "2.5.0" description = "passive checker of Python programs" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +python-versions = ">=3.6" [[package]] name = "pygments" -version = "2.11.1" +version = "2.13.0" description = "Pygments is a syntax highlighting package written in Python." -category = "main" -optional = false -python-versions = ">=3.5" - -[[package]] -name = "pyjwt" -version = "2.3.0" -description = "JSON Web Token implementation in Python" -category = "main" +category = "dev" optional = false python-versions = ">=3.6" [package.extras] -crypto = ["cryptography (>=3.3.1)"] -dev = ["sphinx", "sphinx-rtd-theme", "zope.interface", "cryptography (>=3.3.1)", "pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)", "mypy", "pre-commit"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["pytest (>=6.0.0,<7.0.0)", "coverage[toml] (==5.0.4)"] +plugins = ["importlib-metadata"] [[package]] name = "pyopenssl" -version = "21.0.0" +version = "22.0.0" description = "Python wrapper module around the OpenSSL library" category = "main" optional = false -python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*" +python-versions = ">=3.6" [package.dependencies] -cryptography = ">=3.3" -six = ">=1.5.2" +cryptography = ">=35.0" [package.extras] docs = ["sphinx", "sphinx-rtd-theme"] @@ -1203,14 +1029,14 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"] [[package]] name = "pyparsing" -version = "3.0.6" -description = "Python parsing module" -category = "dev" +version = "3.0.9" +description = "pyparsing module - Classes and methods to define and execute parsing grammars" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.6.8" [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +diagrams = ["railroad-diagrams", "jinja2"] [[package]] name = "pypydispatcher" @@ -1220,27 +1046,6 @@ category = "main" optional = false python-versions = "*" -[[package]] -name = "pytest" -version = "6.2.5" -description = "pytest: simple powerful testing with Python" -category = "dev" -optional = false -python-versions = ">=3.6" - -[package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" - -[package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] - [[package]] name = "python-dateutil" version = "2.8.2" @@ -1252,17 +1057,6 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" [package.dependencies] six = ">=1.5" -[[package]] -name = "python-dotenv" -version = "0.15.0" -description = "Add .env support to your django/flask apps in development and deployments" -category = "main" -optional = false -python-versions = "*" - -[package.extras] -cli = ["click (>=5.0)"] - [[package]] name = "pytz" version = "2021.3" @@ -1289,60 +1083,70 @@ python-versions = ">=3.5" [[package]] name = "redis" -version = "3.5.3" -description = "Python client for Redis key-value store" +version = "4.3.4" +description = "Python client for Redis database and key-value store" category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = ">=3.6" -[package.extras] -hiredis = ["hiredis (>=0.1.3)"] +[package.dependencies] +async-timeout = ">=4.0.2" +deprecated = ">=1.2.3" +packaging = ">=20.4" -[[package]] -name = "regex" -version = "2021.11.10" -description = "Alternative regular expression module, to replace re." -category = "dev" -optional = false -python-versions = "*" +[package.extras] +hiredis = ["hiredis (>=1.0.0)"] +ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)"] [[package]] name = "requests" -version = "2.26.0" +version = "2.28.1" description = "Python HTTP for Humans." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*" +python-versions = ">=3.7, <4" [package.dependencies] certifi = ">=2017.4.17" -charset-normalizer = {version = ">=2.0.0,<2.1.0", markers = "python_version >= \"3\""} -idna = {version = ">=2.5,<4", markers = "python_version >= \"3\""} +charset-normalizer = ">=2,<3" +idna = ">=2.5,<4" urllib3 = ">=1.21.1,<1.27" [package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)", "win-inet-pton"] -use_chardet_on_py3 = ["chardet (>=3.0.2,<5)"] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use_chardet_on_py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "requests-file" +version = "1.5.1" +description = "File transport adapter for Requests" +category = "main" +optional = false +python-versions = "*" + +[package.dependencies] +requests = ">=1.0.0" +six = "*" [[package]] name = "rich" -version = "10.16.1" +version = "12.5.1" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" category = "dev" optional = false -python-versions = ">=3.6.2,<4.0.0" +python-versions = ">=3.6.3,<4.0.0" [package.dependencies] -colorama = ">=0.4.0,<0.5.0" commonmark = ">=0.9.0,<0.10.0" pygments = ">=2.6.0,<3.0.0" +typing-extensions = {version = ">=4.0.0,<5.0", markers = "python_version < \"3.9\""} [package.extras] jupyter = ["ipywidgets (>=7.5.1,<8.0.0)"] [[package]] name = "scrapy" -version = "2.5.1" +version = "2.6.2" description = "A high-level Web Crawling and Web Scraping framework" category = "main" optional = false @@ -1351,7 +1155,6 @@ python-versions = ">=3.6" [package.dependencies] cryptography = ">=2.0" cssselect = ">=0.9.1" -h2 = ">=3.0,<4.0" itemadapter = ">=0.1.0" itemloaders = ">=1.0.1" lxml = [ @@ -1365,39 +1168,11 @@ pyOpenSSL = ">=16.2.0" PyPyDispatcher = {version = ">=2.1.0", markers = "platform_python_implementation == \"PyPy\""} queuelib = ">=1.4.2" service-identity = ">=16.0.0" -Twisted = {version = ">=17.9.0", extras = ["http2"]} +tldextract = "*" +Twisted = ">=17.9.0" w3lib = ">=1.17.0" "zope.interface" = ">=4.1.3" -[[package]] -name = "sentry-sdk" -version = "1.5.1" -description = "Python client for Sentry (https://sentry.io)" -category = "main" -optional = false -python-versions = "*" - -[package.dependencies] -certifi = "*" -urllib3 = ">=1.10.0" - -[package.extras] -aiohttp = ["aiohttp (>=3.5)"] -beam = ["apache-beam (>=2.12)"] -bottle = ["bottle (>=0.12.13)"] -celery = ["celery (>=3)"] -chalice = ["chalice (>=1.16.0)"] -django = ["django (>=1.8)"] -falcon = ["falcon (>=1.4)"] -flask = ["flask (>=0.11)", "blinker (>=1.1)"] -httpx = ["httpx (>=0.16.0)"] -pure_eval = ["pure-eval", "executing", "asttokens"] -pyspark = ["pyspark (>=2.4.4)"] -rq = ["rq (>=0.6)"] -sanic = ["sanic (>=0.8)"] -sqlalchemy = ["sqlalchemy (>=1.2)"] -tornado = ["tornado (>=5)"] - [[package]] name = "service-identity" version = "21.1.0" @@ -1435,6 +1210,36 @@ category = "main" optional = false python-versions = ">=3.5" +[[package]] +name = "stack-data" +version = "0.5.0" +description = "Extract data from python stack frames and tracebacks for informative displays" +category = "dev" +optional = false +python-versions = "*" + +[package.dependencies] +asttokens = "*" +executing = "*" +pure-eval = "*" + +[package.extras] +tests = ["cython", "littleutils", "pygments", "typeguard", "pytest"] + +[[package]] +name = "tldextract" +version = "3.3.1" +description = "Accurately separates a URL's subdomain, domain, and public suffix, using the Public Suffix List (PSL). By default, this includes the public ICANN TLDs and their exceptions. You can optionally support the Public Suffix List's private domains as well." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +filelock = ">=3.0.8" +idna = "*" +requests = ">=2.1.0" +requests-file = ">=1.4" + [[package]] name = "toml" version = "0.10.2" @@ -1443,20 +1248,28 @@ category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[[package]] +name = "tomli" +version = "2.0.1" +description = "A lil' TOML parser" +category = "dev" +optional = false +python-versions = ">=3.7" + [[package]] name = "traitlets" -version = "5.1.1" -description = "Traitlets Python configuration system" +version = "5.3.0" +description = "" category = "dev" optional = false python-versions = ">=3.7" [package.extras] -test = ["pytest"] +test = ["pre-commit", "pytest"] [[package]] name = "twisted" -version = "21.7.0" +version = "22.4.0" description = "An asynchronous networking framework written in Python" category = "main" optional = false @@ -1466,28 +1279,27 @@ python-versions = ">=3.6.7" attrs = ">=19.2.0" Automat = ">=0.8.0" constantly = ">=15.1" -h2 = {version = ">=3.0,<4.0", optional = true, markers = "extra == \"http2\""} hyperlink = ">=17.1.1" incremental = ">=21.3.0" -priority = {version = ">=1.1.0,<2.0", optional = true, markers = "extra == \"http2\""} -twisted-iocpsupport = {version = ">=1.0.0,<1.1.0", markers = "platform_system == \"Windows\""} +twisted-iocpsupport = {version = ">=1.0.2,<2", markers = "platform_system == \"Windows\""} typing-extensions = ">=3.6.5" "zope.interface" = ">=4.4.2" [package.extras] -all_non_platform = ["cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] +all_non_platform = ["cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] conch = ["pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)"] +conch_nacl = ["pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pynacl"] contextvars = ["contextvars (>=2.4,<3)"] -dev = ["towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=3.3,<4.0)", "pyflakes (>=2.2,<3.0)", "twistedchecker (>=0.7,<1.0)", "coverage (>=6b1,<7)", "python-subunit (>=1.4,<2.0)", "pydoctor (>=21.2.2,<21.3.0)"] -dev_release = ["towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=3.3,<4.0)", "pydoctor (>=21.2.2,<21.3.0)"] -http2 = ["h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)"] -macos_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] -mypy = ["mypy (==0.910)", "mypy-zope (==0.3.2)", "types-setuptools", "towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=3.3,<4.0)", "pyflakes (>=2.2,<3.0)", "twistedchecker (>=0.7,<1.0)", "coverage (>=6b1,<7)", "cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "python-subunit (>=1.4,<2.0)", "contextvars (>=2.4,<3)", "pydoctor (>=21.2.2,<21.3.0)"] -osx_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] +dev = ["towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=4.1.2,<6)", "pyflakes (>=2.2,<3.0)", "twistedchecker (>=0.7,<1.0)", "coverage (>=6b1,<7)", "python-subunit (>=1.4,<2.0)", "pydoctor (>=21.9.0,<21.10.0)"] +dev_release = ["towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=4.1.2,<6)", "pydoctor (>=21.9.0,<21.10.0)"] +http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] +macos_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] +mypy = ["mypy (==0.930)", "mypy-zope (==0.3.4)", "types-setuptools", "types-pyopenssl", "towncrier (>=19.2,<20.0)", "sphinx-rtd-theme (>=0.5,<1.0)", "readthedocs-sphinx-ext (>=2.1,<3.0)", "sphinx (>=4.1.2,<6)", "pyflakes (>=2.2,<3.0)", "twistedchecker (>=0.7,<1.0)", "coverage (>=6b1,<7)", "cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)", "pynacl", "pywin32 (!=226)", "python-subunit (>=1.4,<2.0)", "contextvars (>=2.4,<3)", "pydoctor (>=21.9.0,<21.10.0)"] +osx_platform = ["pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] serial = ["pyserial (>=3.0)", "pywin32 (!=226)"] -test = ["cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)"] +test = ["cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)"] tls = ["pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)"] -windows_platform = ["pywin32 (!=226)", "cython-test-exception-raiser (>=1.0,<2.0)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<4.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] +windows_platform = ["pywin32 (!=226)", "cython-test-exception-raiser (>=1.0.2,<2)", "PyHamcrest (>=1.9.0)", "pyopenssl (>=16.0.0)", "service-identity (>=18.1.0)", "idna (>=2.4)", "pyasn1", "cryptography (>=2.6)", "appdirs (>=1.4.0)", "bcrypt (>=3.0.0)", "pyserial (>=3.0)", "h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)", "pywin32 (!=226)", "contextvars (>=2.4,<3)"] [[package]] name = "twisted-iocpsupport" @@ -1498,40 +1310,40 @@ optional = false python-versions = "*" [[package]] -name = "typed-ast" -version = "1.5.1" -description = "a fork of Python 2 and 3 ast modules with type comment support" -category = "dev" +name = "typing-extensions" +version = "4.3.0" +description = "Backported and Experimental Type Hints for Python 3.7+" +category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] -name = "typing-extensions" -version = "4.0.1" -description = "Backported and Experimental Type Hints for Python 3.6+" +name = "tzdata" +version = "2022.2" +description = "Provider of IANA time zone data" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=2" [[package]] name = "ujson" -version = "4.3.0" +version = "5.4.0" description = "Ultra fast JSON encoder and decoder for Python" category = "main" optional = false -python-versions = ">=3.6" +python-versions = ">=3.7" [[package]] name = "urllib3" -version = "1.26.7" +version = "1.26.12" description = "HTTP library with thread-safe connection pooling, file post, and more." category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, <4" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*, !=3.5.*, <4" [package.extras] -brotli = ["brotlipy (>=0.6.0)"] -secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] +brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] +secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "urllib3-secure-extra", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] [[package]] @@ -1544,32 +1356,28 @@ python-versions = ">=3.6" [[package]] name = "virtualenv" -version = "20.12.1" +version = "20.16.4" description = "Virtual Python Environment builder" category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.6" [package.dependencies] -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" +distlib = ">=0.3.5,<1" +filelock = ">=3.4.1,<4" +platformdirs = ">=2.4,<3" [package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=21.3)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] +docs = ["proselint (>=0.13)", "sphinx (>=5.1.1)", "sphinx-argparse (>=0.3.1)", "sphinx-rtd-theme (>=1)", "towncrier (>=21.9)"] +testing = ["coverage (>=6.2)", "coverage-enable-subprocess (>=1)", "flaky (>=3.7)", "packaging (>=21.3)", "pytest (>=7.0.1)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.2)", "pytest-mock (>=3.6.1)", "pytest-randomly (>=3.10.3)", "pytest-timeout (>=2.1)"] [[package]] name = "w3lib" -version = "1.22.0" +version = "2.0.1" description = "Library of web-related functions" category = "main" optional = false -python-versions = "*" - -[package.dependencies] -six = ">=1.4.1" +python-versions = ">=3.6" [[package]] name = "wcwidth" @@ -1594,18 +1402,21 @@ watchdog = ["watchdog"] [[package]] name = "whitenoise" -version = "5.3.0" +version = "6.2.0" description = "Radically simplified static file serving for WSGI applications" category = "main" optional = false -python-versions = ">=3.5, <4" +python-versions = ">=3.7" + +[package.dependencies] +Brotli = {version = "*", optional = true, markers = "extra == \"brotli\""} [package.extras] brotli = ["brotli"] [[package]] name = "wrapt" -version = "1.13.3" +version = "1.14.1" description = "Module for decorators, wrappers and monkey patching." category = "main" optional = false @@ -1613,15 +1424,15 @@ python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" [[package]] name = "zipp" -version = "3.7.0" +version = "3.8.1" description = "Backport of pathlib-compatible object wrapper for zip files" category = "main" optional = false python-versions = ">=3.7" [package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)", "jaraco.tidelift (>=1.4)"] +testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.3)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)"] [[package]] name = "zope.interface" @@ -1639,548 +1450,121 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "e26afa823cfedb47d4961cf115141f0ffda33f2f13846f385b89e10cc60478d8" +content-hash = "0c5b44f57b6160e0d1ff07ea26522c2b1c0c225b2272c0b7ac3cc72d1e79c7d1" [metadata.files] -amqp = [ - {file = "amqp-5.0.9-py3-none-any.whl", hash = "sha256:9cd81f7b023fc04bbb108718fbac674f06901b77bfcdce85b10e2a5d0ee91be5"}, - {file = "amqp-5.0.9.tar.gz", hash = "sha256:1e5f707424e544078ca196e72ae6a14887ce74e02bd126be54b7c03c971bef18"}, -] -appdirs = [ - {file = "appdirs-1.4.4-py2.py3-none-any.whl", hash = "sha256:a841dacd6b99318a741b166adb07e19ee71a274450e68237b4650ca1055ab128"}, - {file = "appdirs-1.4.4.tar.gz", hash = "sha256:7d5d0167b2b1ba821647616af46a749d1c653740dd0d2415100fe26e27afdf41"}, -] +amqp = [] appnope = [ - {file = "appnope-0.1.2-py2.py3-none-any.whl", hash = "sha256:93aa393e9d6c54c5cd570ccadd8edad61ea0c4b9ea7a01409020c9aa019eb442"}, - {file = "appnope-0.1.2.tar.gz", hash = "sha256:dd83cd4b5b460958838f6eb3000c660b1f9caf2a5b1de4264e941512f603258a"}, -] -argon2-cffi = [ - {file = "argon2-cffi-20.1.0.tar.gz", hash = "sha256:d8029b2d3e4b4cea770e9e5a0104dd8fa185c1724a0f01528ae4826a6d25f97d"}, - {file = "argon2_cffi-20.1.0-cp27-cp27m-macosx_10_6_intel.whl", hash = "sha256:6ea92c980586931a816d61e4faf6c192b4abce89aa767ff6581e6ddc985ed003"}, - {file = "argon2_cffi-20.1.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:05a8ac07c7026542377e38389638a8a1e9b78f1cd8439cd7493b39f08dd75fbf"}, - {file = "argon2_cffi-20.1.0-cp27-cp27m-win32.whl", hash = "sha256:0bf066bc049332489bb2d75f69216416329d9dc65deee127152caeb16e5ce7d5"}, - {file = "argon2_cffi-20.1.0-cp27-cp27m-win_amd64.whl", hash = "sha256:57358570592c46c420300ec94f2ff3b32cbccd10d38bdc12dc6979c4a8484fbc"}, - {file = "argon2_cffi-20.1.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:7d455c802727710e9dfa69b74ccaab04568386ca17b0ad36350b622cd34606fe"}, - {file = "argon2_cffi-20.1.0-cp35-abi3-manylinux1_x86_64.whl", hash = "sha256:b160416adc0f012fb1f12588a5e6954889510f82f698e23ed4f4fa57f12a0647"}, - {file = "argon2_cffi-20.1.0-cp35-cp35m-win32.whl", hash = "sha256:9bee3212ba4f560af397b6d7146848c32a800652301843df06b9e8f68f0f7361"}, - {file = "argon2_cffi-20.1.0-cp35-cp35m-win_amd64.whl", hash = "sha256:392c3c2ef91d12da510cfb6f9bae52512a4552573a9e27600bdb800e05905d2b"}, - {file = "argon2_cffi-20.1.0-cp36-cp36m-win32.whl", hash = "sha256:ba7209b608945b889457f949cc04c8e762bed4fe3fec88ae9a6b7765ae82e496"}, - {file = "argon2_cffi-20.1.0-cp36-cp36m-win_amd64.whl", hash = "sha256:da7f0445b71db6d3a72462e04f36544b0de871289b0bc8a7cc87c0f5ec7079fa"}, - {file = "argon2_cffi-20.1.0-cp37-abi3-macosx_10_6_intel.whl", hash = "sha256:cc0e028b209a5483b6846053d5fd7165f460a1f14774d79e632e75e7ae64b82b"}, - {file = "argon2_cffi-20.1.0-cp37-cp37m-win32.whl", hash = "sha256:18dee20e25e4be86680b178b35ccfc5d495ebd5792cd00781548d50880fee5c5"}, - {file = "argon2_cffi-20.1.0-cp37-cp37m-win_amd64.whl", hash = "sha256:6678bb047373f52bcff02db8afab0d2a77d83bde61cfecea7c5c62e2335cb203"}, - {file = "argon2_cffi-20.1.0-cp38-cp38-win32.whl", hash = "sha256:77e909cc756ef81d6abb60524d259d959bab384832f0c651ed7dcb6e5ccdbb78"}, - {file = "argon2_cffi-20.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:9dfd5197852530294ecb5795c97a823839258dfd5eb9420233c7cfedec2058f2"}, - {file = "argon2_cffi-20.1.0-cp39-cp39-win32.whl", hash = "sha256:e2db6e85c057c16d0bd3b4d2b04f270a7467c147381e8fd73cbbe5bc719832be"}, - {file = "argon2_cffi-20.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:8a84934bd818e14a17943de8099d41160da4a336bcc699bb4c394bbb9b94bd32"}, - {file = "argon2_cffi-20.1.0-pp36-pypy36_pp73-macosx_10_7_x86_64.whl", hash = "sha256:b94042e5dcaa5d08cf104a54bfae614be502c6f44c9c89ad1535b2ebdaacbd4c"}, - {file = "argon2_cffi-20.1.0-pp36-pypy36_pp73-win32.whl", hash = "sha256:8282b84ceb46b5b75c3a882b28856b8cd7e647ac71995e71b6705ec06fc232c3"}, - {file = "argon2_cffi-20.1.0-pp37-pypy37_pp73-macosx_10_7_x86_64.whl", hash = "sha256:3aa804c0e52f208973845e8b10c70d8957c9e5a666f702793256242e9167c4e0"}, - {file = "argon2_cffi-20.1.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:36320372133a003374ef4275fbfce78b7ab581440dfca9f9471be3dd9a522428"}, -] -asgiref = [ - {file = "asgiref-3.2.10-py3-none-any.whl", hash = "sha256:9fc6fb5d39b8af147ba40765234fa822b39818b12cc80b35ad9b0cef3a476aed"}, - {file = "asgiref-3.2.10.tar.gz", hash = "sha256:7e51911ee147dd685c3c8b805c0ad0cb58d360987b56953878f8c06d2d1c6f1a"}, -] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -autoflake = [ - {file = "autoflake-1.4.tar.gz", hash = "sha256:61a353012cff6ab94ca062823d1fb2f692c4acda51c76ff83a8d77915fba51ea"}, -] -automat = [ - {file = "Automat-20.2.0-py2.py3-none-any.whl", hash = "sha256:b6feb6455337df834f6c9962d6ccf771515b7d939bca142b29c20c2376bc6111"}, - {file = "Automat-20.2.0.tar.gz", hash = "sha256:7979803c74610e11ef0c0d68a2942b152df52da55336e0c9d58daf1831cbdf33"}, -] -autopep8 = [ - {file = "autopep8-1.5.7-py2.py3-none-any.whl", hash = "sha256:aa213493c30dcdac99537249ee65b24af0b2c29f2e83cd8b3f68760441ed0db9"}, - {file = "autopep8-1.5.7.tar.gz", hash = "sha256:276ced7e9e3cb22e5d7c14748384a5cf5d9002257c0ed50c0e075b68011bb6d0"}, -] + {file = "appnope-0.1.3-py2.py3-none-any.whl", hash = "sha256:265a455292d0bd8a72453494fa24df5a11eb18373a60c7c0430889f22548605e"}, + {file = "appnope-0.1.3.tar.gz", hash = "sha256:02bd91c4de869fbb1e1c50aafc4098827a7a54ab2f39d9dcba6c9547ed920e24"}, +] +asgiref = [] +asttokens = [] +async-timeout = [] +attrs = [] +autoflake = [] +automat = [] backcall = [ {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, ] -billiard = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, -] -black = [ - {file = "black-20.8b1.tar.gz", hash = "sha256:1c02557aa099101b9d21496f8a914e9ed2222ef70336404eeeac8edba836fbea"}, -] -celery = [ - {file = "celery-5.2.3-py3-none-any.whl", hash = "sha256:8aacd02fc23a02760686d63dde1eb0daa9f594e735e73ea8fb15c2ff15cb608c"}, - {file = "celery-5.2.3.tar.gz", hash = "sha256:e2cd41667ad97d4f6a2f4672d1c6a6ebada194c619253058b5f23704aaadaa82"}, -] -certifi = [ - {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, - {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, -] -cffi = [ - {file = "cffi-1.15.0-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:c2502a1a03b6312837279c8c1bd3ebedf6c12c4228ddbad40912d671ccc8a962"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:23cfe892bd5dd8941608f93348c0737e369e51c100d03718f108bf1add7bd6d0"}, - {file = "cffi-1.15.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:41d45de54cd277a7878919867c0f08b0cf817605e4eb94093e7516505d3c8d14"}, - {file = "cffi-1.15.0-cp27-cp27m-win32.whl", hash = "sha256:4a306fa632e8f0928956a41fa8e1d6243c71e7eb59ffbd165fc0b41e316b2474"}, - {file = "cffi-1.15.0-cp27-cp27m-win_amd64.whl", hash = "sha256:e7022a66d9b55e93e1a845d8c9eba2a1bebd4966cd8bfc25d9cd07d515b33fa6"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:14cd121ea63ecdae71efa69c15c5543a4b5fbcd0bbe2aad864baca0063cecf27"}, - {file = "cffi-1.15.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:d4d692a89c5cf08a8557fdeb329b82e7bf609aadfaed6c0d79f5a449a3c7c023"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0104fb5ae2391d46a4cb082abdd5c69ea4eab79d8d44eaaf79f1b1fd806ee4c2"}, - {file = "cffi-1.15.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:91ec59c33514b7c7559a6acda53bbfe1b283949c34fe7440bcf917f96ac0723e"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f5c7150ad32ba43a07c4479f40241756145a1f03b43480e058cfd862bf5041c7"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:00c878c90cb53ccfaae6b8bc18ad05d2036553e6d9d1d9dbcf323bbe83854ca3"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abb9a20a72ac4e0fdb50dae135ba5e77880518e742077ced47eb1499e29a443c"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a5263e363c27b653a90078143adb3d076c1a748ec9ecc78ea2fb916f9b861962"}, - {file = "cffi-1.15.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f54a64f8b0c8ff0b64d18aa76675262e1700f3995182267998c31ae974fbc382"}, - {file = "cffi-1.15.0-cp310-cp310-win32.whl", hash = "sha256:c21c9e3896c23007803a875460fb786118f0cdd4434359577ea25eb556e34c55"}, - {file = "cffi-1.15.0-cp310-cp310-win_amd64.whl", hash = "sha256:5e069f72d497312b24fcc02073d70cb989045d1c91cbd53979366077959933e0"}, - {file = "cffi-1.15.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:64d4ec9f448dfe041705426000cc13e34e6e5bb13736e9fd62e34a0b0c41566e"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2756c88cbb94231c7a147402476be2c4df2f6078099a6f4a480d239a8817ae39"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b96a311ac60a3f6be21d2572e46ce67f09abcf4d09344c49274eb9e0bf345fc"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:75e4024375654472cc27e91cbe9eaa08567f7fbdf822638be2814ce059f58032"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59888172256cac5629e60e72e86598027aca6bf01fa2465bdb676d37636573e8"}, - {file = "cffi-1.15.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:27c219baf94952ae9d50ec19651a687b826792055353d07648a5695413e0c605"}, - {file = "cffi-1.15.0-cp36-cp36m-win32.whl", hash = "sha256:4958391dbd6249d7ad855b9ca88fae690783a6be9e86df65865058ed81fc860e"}, - {file = "cffi-1.15.0-cp36-cp36m-win_amd64.whl", hash = "sha256:f6f824dc3bce0edab5f427efcfb1d63ee75b6fcb7282900ccaf925be84efb0fc"}, - {file = "cffi-1.15.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:06c48159c1abed75c2e721b1715c379fa3200c7784271b3c46df01383b593636"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:c2051981a968d7de9dd2d7b87bcb9c939c74a34626a6e2f8181455dd49ed69e4"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:fd8a250edc26254fe5b33be00402e6d287f562b6a5b2152dec302fa15bb3e997"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91d77d2a782be4274da750752bb1650a97bfd8f291022b379bb8e01c66b4e96b"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:45db3a33139e9c8f7c09234b5784a5e33d31fd6907800b316decad50af323ff2"}, - {file = "cffi-1.15.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:263cc3d821c4ab2213cbe8cd8b355a7f72a8324577dc865ef98487c1aeee2bc7"}, - {file = "cffi-1.15.0-cp37-cp37m-win32.whl", hash = "sha256:17771976e82e9f94976180f76468546834d22a7cc404b17c22df2a2c81db0c66"}, - {file = "cffi-1.15.0-cp37-cp37m-win_amd64.whl", hash = "sha256:3415c89f9204ee60cd09b235810be700e993e343a408693e80ce7f6a40108029"}, - {file = "cffi-1.15.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:4238e6dab5d6a8ba812de994bbb0a79bddbdf80994e4ce802b6f6f3142fcc880"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0808014eb713677ec1292301ea4c81ad277b6cdf2fdd90fd540af98c0b101d20"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:57e9ac9ccc3101fac9d6014fba037473e4358ef4e89f8e181f8951a2c0162024"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b6c2ea03845c9f501ed1313e78de148cd3f6cad741a75d43a29b43da27f2e1e"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:10dffb601ccfb65262a27233ac273d552ddc4d8ae1bf93b21c94b8511bffe728"}, - {file = "cffi-1.15.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:786902fb9ba7433aae840e0ed609f45c7bcd4e225ebb9c753aa39725bb3e6ad6"}, - {file = "cffi-1.15.0-cp38-cp38-win32.whl", hash = "sha256:da5db4e883f1ce37f55c667e5c0de439df76ac4cb55964655906306918e7363c"}, - {file = "cffi-1.15.0-cp38-cp38-win_amd64.whl", hash = "sha256:181dee03b1170ff1969489acf1c26533710231c58f95534e3edac87fff06c443"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:45e8636704eacc432a206ac7345a5d3d2c62d95a507ec70d62f23cd91770482a"}, - {file = "cffi-1.15.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31fb708d9d7c3f49a60f04cf5b119aeefe5644daba1cd2a0fe389b674fd1de37"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6dc2737a3674b3e344847c8686cf29e500584ccad76204efea14f451d4cc669a"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74fdfdbfdc48d3f47148976f49fab3251e550a8720bebc99bf1483f5bfb5db3e"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ffaa5c925128e29efbde7301d8ecaf35c8c60ffbcd6a1ffd3a552177c8e5e796"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f7d084648d77af029acb79a0ff49a0ad7e9d09057a9bf46596dac9514dc07df"}, - {file = "cffi-1.15.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef1f279350da2c586a69d32fc8733092fd32cc8ac95139a00377841f59a3f8d8"}, - {file = "cffi-1.15.0-cp39-cp39-win32.whl", hash = "sha256:2a23af14f408d53d5e6cd4e3d9a24ff9e05906ad574822a10563efcef137979a"}, - {file = "cffi-1.15.0-cp39-cp39-win_amd64.whl", hash = "sha256:3773c4d81e6e818df2efbc7dd77325ca0dcb688116050fb2b3011218eda36139"}, - {file = "cffi-1.15.0.tar.gz", hash = "sha256:920f0d66a896c2d99f0adbb391f990a84091179542c205fa53ce5787aff87954"}, -] +"backports.zoneinfo" = [] +billiard = [] +black = [] +brotli = [] +celery = [] +certifi = [] +cffi = [] cfgv = [ {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, ] -charset-normalizer = [ - {file = "charset-normalizer-2.0.9.tar.gz", hash = "sha256:b0b883e8e874edfdece9c28f314e3dd5badf067342e42fb162203335ae61aa2c"}, - {file = "charset_normalizer-2.0.9-py3-none-any.whl", hash = "sha256:1eecaa09422db5be9e29d7fc65664e6c33bd06f9ced7838578ba40d58bdf3721"}, -] +charset-normalizer = [] click = [ - {file = "click-8.0.3-py3-none-any.whl", hash = "sha256:353f466495adaeb40b6b5f592f9f91cb22372351c84caeb068132442a4518ef3"}, - {file = "click-8.0.3.tar.gz", hash = "sha256:410e932b050f5eed773c4cda94de75971c89cdb3155a72a0831139a79e5ecb5b"}, -] -click-didyoumean = [ - {file = "click-didyoumean-0.3.0.tar.gz", hash = "sha256:f184f0d851d96b6d29297354ed981b7dd71df7ff500d82fa6d11f0856bee8035"}, - {file = "click_didyoumean-0.3.0-py3-none-any.whl", hash = "sha256:a0713dc7a1de3f06bc0df5a9567ad19ead2d3d5689b434768a6145bff77c0667"}, -] -click-plugins = [ - {file = "click-plugins-1.1.1.tar.gz", hash = "sha256:46ab999744a9d831159c3411bb0c79346d94a444df9a3a3742e9ed63645f264b"}, - {file = "click_plugins-1.1.1-py2.py3-none-any.whl", hash = "sha256:5d262006d3222f5057fd81e1623d4443e41dcda5dc815c06b442aa3c02889fc8"}, -] -click-repl = [ - {file = "click-repl-0.2.0.tar.gz", hash = "sha256:cd12f68d745bf6151210790540b4cb064c7b13e571bc64b6957d98d120dacfd8"}, - {file = "click_repl-0.2.0-py3-none-any.whl", hash = "sha256:94b3fbbc9406a236f176e0506524b2937e4b23b6f4c0c0b2a0a83f8a64e9194b"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -colorlog = [ - {file = "colorlog-6.6.0-py2.py3-none-any.whl", hash = "sha256:351c51e866c86c3217f08e4b067a7974a678be78f07f85fc2d55b8babde6d94e"}, - {file = "colorlog-6.6.0.tar.gz", hash = "sha256:344f73204009e4c83c5b6beb00b3c45dc70fcdae3c80db919e0a4171d006fde8"}, + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, ] +click-didyoumean = [] +click-plugins = [] +click-repl = [] +colorama = [] commonmark = [ {file = "commonmark-0.9.1-py2.py3-none-any.whl", hash = "sha256:da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9"}, {file = "commonmark-0.9.1.tar.gz", hash = "sha256:452f9dc859be7f06631ddcb328b6919c67984aca654e5fefb3914d54691aed60"}, ] -constantly = [ - {file = "constantly-15.1.0-py2.py3-none-any.whl", hash = "sha256:dd2fa9d6b1a51a83f0d7dd76293d734046aa176e384bf6e33b7e44880eb37c5d"}, - {file = "constantly-15.1.0.tar.gz", hash = "sha256:586372eb92059873e29eba4f9dec8381541b4d3834660707faf8ba59146dfc35"}, -] -crochet = [ - {file = "crochet-2.0.0-py3-none-any.whl", hash = "sha256:de7306f0548581b5222c2d91f2175045e672591519896f717affb81ef66c0f5f"}, - {file = "crochet-2.0.0.tar.gz", hash = "sha256:5f7f6c0d41ec418da16080f0202faac6b30f84a6fca9d8911e9db541f8e4e521"}, -] -cryptography = [ - {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_universal2.whl", hash = "sha256:73bc2d3f2444bcfeac67dd130ff2ea598ea5f20b40e36d19821b4df8c9c5037b"}, - {file = "cryptography-36.0.1-cp36-abi3-macosx_10_10_x86_64.whl", hash = "sha256:2d87cdcb378d3cfed944dac30596da1968f88fb96d7fc34fdae30a99054b2e31"}, - {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:74d6c7e80609c0f4c2434b97b80c7f8fdfaa072ca4baab7e239a15d6d70ed73a"}, - {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:6c0c021f35b421ebf5976abf2daacc47e235f8b6082d3396a2fe3ccd537ab173"}, - {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5d59a9d55027a8b88fd9fd2826c4392bd487d74bf628bb9d39beecc62a644c12"}, - {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a817b961b46894c5ca8a66b599c745b9a3d9f822725221f0e0fe49dc043a3a3"}, - {file = "cryptography-36.0.1-cp36-abi3-manylinux_2_24_x86_64.whl", hash = "sha256:94ae132f0e40fe48f310bba63f477f14a43116f05ddb69d6fa31e93f05848ae2"}, - {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_aarch64.whl", hash = "sha256:7be0eec337359c155df191d6ae00a5e8bbb63933883f4f5dffc439dac5348c3f"}, - {file = "cryptography-36.0.1-cp36-abi3-musllinux_1_1_x86_64.whl", hash = "sha256:e0344c14c9cb89e76eb6a060e67980c9e35b3f36691e15e1b7a9e58a0a6c6dc3"}, - {file = "cryptography-36.0.1-cp36-abi3-win32.whl", hash = "sha256:4caa4b893d8fad33cf1964d3e51842cd78ba87401ab1d2e44556826df849a8ca"}, - {file = "cryptography-36.0.1-cp36-abi3-win_amd64.whl", hash = "sha256:391432971a66cfaf94b21c24ab465a4cc3e8bf4a939c1ca5c3e3a6e0abebdbcf"}, - {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:bb5829d027ff82aa872d76158919045a7c1e91fbf241aec32cb07956e9ebd3c9"}, - {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebc15b1c22e55c4d5566e3ca4db8689470a0ca2babef8e3a9ee057a8b82ce4b1"}, - {file = "cryptography-36.0.1-pp37-pypy37_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:596f3cd67e1b950bc372c33f1a28a0692080625592ea6392987dba7f09f17a94"}, - {file = "cryptography-36.0.1-pp38-pypy38_pp73-macosx_10_10_x86_64.whl", hash = "sha256:30ee1eb3ebe1644d1c3f183d115a8c04e4e603ed6ce8e394ed39eea4a98469ac"}, - {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ec63da4e7e4a5f924b90af42eddf20b698a70e58d86a72d943857c4c6045b3ee"}, - {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ca238ceb7ba0bdf6ce88c1b74a87bffcee5afbfa1e41e173b1ceb095b39add46"}, - {file = "cryptography-36.0.1-pp38-pypy38_pp73-manylinux_2_24_x86_64.whl", hash = "sha256:ca28641954f767f9822c24e927ad894d45d5a1e501767599647259cbf030b903"}, - {file = "cryptography-36.0.1-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:39bdf8e70eee6b1c7b289ec6e5d84d49a6bfa11f8b8646b5b3dfe41219153316"}, - {file = "cryptography-36.0.1.tar.gz", hash = "sha256:53e5c1dc3d7a953de055d77bef2ff607ceef7a2aac0353b5d630ab67f7423638"}, -] -cssselect = [ - {file = "cssselect-1.1.0-py2.py3-none-any.whl", hash = "sha256:f612ee47b749c877ebae5bb77035d8f4202c6ad0f0fc1271b3c18ad6c4468ecf"}, - {file = "cssselect-1.1.0.tar.gz", hash = "sha256:f95f8dedd925fd8f54edb3d2dfb44c190d9d18512377d3c1e2388d16126879bc"}, -] -dateutils = [ - {file = "dateutils-0.6.12-py2.py3-none-any.whl", hash = "sha256:f33b6ab430fa4166e7e9cb8b21ee9f6c9843c48df1a964466f52c79b2a8d53b3"}, - {file = "dateutils-0.6.12.tar.gz", hash = "sha256:03dd90bcb21541bd4eb4b013637e4f1b5f944881c46cc6e4b67a6059e370e3f1"}, -] +constantly = [] +cryptography = [] +cssselect = [] decorator = [ - {file = "decorator-5.1.0-py3-none-any.whl", hash = "sha256:7b12e7c3c6ab203a29e157335e9122cb03de9ab7264b137594103fd4a683b374"}, - {file = "decorator-5.1.0.tar.gz", hash = "sha256:e59913af105b9860aa2c8d3272d9de5a56a4e608db9a2f167a8480b323d529a7"}, -] -distlib = [ - {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, - {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, -] -django = [ - {file = "Django-3.1-py3-none-any.whl", hash = "sha256:1a63f5bb6ff4d7c42f62a519edc2adbb37f9b78068a5a862beff858b68e3dc8b"}, - {file = "Django-3.1.tar.gz", hash = "sha256:2d390268a13c655c97e0e2ede9d117007996db692c1bb93eabebd4fb7ea7012b"}, -] -django-cors-headers = [ - {file = "django-cors-headers-3.10.1.tar.gz", hash = "sha256:b5a874b492bcad99f544bb76ef679472259eb41ee5644ca62d1a94ddb26b7f6e"}, - {file = "django_cors_headers-3.10.1-py3-none-any.whl", hash = "sha256:1390b5846e9835b0911e2574409788af87cd9154246aafbdc8ec546c93698fe6"}, -] + {file = "decorator-5.1.1-py3-none-any.whl", hash = "sha256:b8c3f85900b9dc423225913c5aace94729fe1fa9763b38939a95226f02d37186"}, + {file = "decorator-5.1.1.tar.gz", hash = "sha256:637996211036b6385ef91435e4fae22989472f9d571faba8927ba8253acbc330"}, +] +deprecated = [] +distlib = [] +dj-database-url = [] +django = [] +django-cors-headers = [] django-elasticsearch-dsl = [] -django-extensions = [ - {file = "django-extensions-3.1.5.tar.gz", hash = "sha256:28e1e1bf49f0e00307ba574d645b0af3564c981a6dfc87209d48cb98f77d0b1a"}, - {file = "django_extensions-3.1.5-py3-none-any.whl", hash = "sha256:9238b9e016bb0009d621e05cf56ea8ce5cce9b32e91ad2026996a7377ca28069"}, -] -django-filter = [ - {file = "django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06"}, - {file = "django_filter-2.4.0-py3-none-any.whl", hash = "sha256:e00d32cebdb3d54273c48f4f878f898dced8d5dfaad009438fe61ebdf535ace1"}, -] -django-jazzmin = [] -django-silk = [ - {file = "django-silk-4.2.0.tar.gz", hash = "sha256:fcc2e3b2d20aab24a0b4b856d9692c532f8071b0e678cb5f4de47b802e85fe3e"}, - {file = "django_silk-4.2.0-py3-none-any.whl", hash = "sha256:5e70b5351f04e3c4ea4fe6bc16c95bfee776006422dd5e7827e6e3db23dc41ec"}, -] -django-types = [ - {file = "django-types-0.9.1.tar.gz", hash = "sha256:4341c9076d2a8fd9f8ba322f66587c9140a441d17dde6ab6f895b15662de1abf"}, - {file = "django_types-0.9.1-py3-none-any.whl", hash = "sha256:382ea3354526058753ae438495c53412d4912d0edaabf9bc0f9d6069713d4dbe"}, -] -django-typomatic = [ - {file = "django-typomatic-1.6.1.tar.gz", hash = "sha256:9329899c7f7d37027aaa291023f7aaece17d39ab48ae56aa9573a37290c1c868"}, - {file = "django_typomatic-1.6.1-py3-none-any.whl", hash = "sha256:1f42c5ed4ed1623ddf421d9162815ed83ce59ef4b950b77a7d6fff5d42912b26"}, -] -djangorestframework = [ - {file = "djangorestframework-3.13.1-py3-none-any.whl", hash = "sha256:24c4bf58ed7e85d1fe4ba250ab2da926d263cd57d64b03e8dcef0ac683f8b1aa"}, - {file = "djangorestframework-3.13.1.tar.gz", hash = "sha256:0c33407ce23acc68eca2a6e46424b008c9c02eceb8cf18581921d0092bc1f2ee"}, -] -djangorestframework-simplejwt = [ - {file = "djangorestframework_simplejwt-4.8.0-py3-none-any.whl", hash = "sha256:6f09f97cb015265e85d1d02dc6bfc299c72c231eecbe261c5bee5c6b2867f2b4"}, - {file = "djangorestframework_simplejwt-4.8.0.tar.gz", hash = "sha256:153c973c5c154baf566be431de8527c2bd62557fde7373ebcb0f02b73b28e07a"}, -] -elasticsearch = [ - {file = "elasticsearch-7.16.2-py2.py3-none-any.whl", hash = "sha256:c05aa792a52b1e6ad9d226340dc19165c4a491ac48fbd91af51ec839bf953210"}, - {file = "elasticsearch-7.16.2.tar.gz", hash = "sha256:23ac0afb4398c48990e359ac73ab6963741bd05321345299c62d9d23e209eee2"}, -] -elasticsearch-dsl = [ - {file = "elasticsearch-dsl-7.4.0.tar.gz", hash = "sha256:c4a7b93882918a413b63bed54018a1685d7410ffd8facbc860ee7fd57f214a6d"}, - {file = "elasticsearch_dsl-7.4.0-py2.py3-none-any.whl", hash = "sha256:046ea10820b94c075081b528b4526c5bc776bda4226d702f269a5f203232064b"}, -] -filelock = [ - {file = "filelock-3.4.2-py3-none-any.whl", hash = "sha256:cf0fc6a2f8d26bd900f19bf33915ca70ba4dd8c56903eeb14e1e7a2fd7590146"}, - {file = "filelock-3.4.2.tar.gz", hash = "sha256:38b4f4c989f9d06d44524df1b24bd19e167d851f19b50bf3e3559952dddc5b80"}, -] -flake8 = [ - {file = "flake8-3.9.2-py2.py3-none-any.whl", hash = "sha256:bf8fd333346d844f616e8d47905ef3a3384edae6b4e9beb0c5101e25e3110907"}, - {file = "flake8-3.9.2.tar.gz", hash = "sha256:07528381786f2a6237b061f6e96610a4167b226cb926e2aa2b6b1d78057c576b"}, -] -gprof2dot = [ - {file = "gprof2dot-2021.2.21.tar.gz", hash = "sha256:1223189383b53dcc8ecfd45787ac48c0ed7b4dbc16ee8b88695d053eea1acabf"}, -] +django-environ = [] +django-extensions = [] +django-jazzmin = [ + {file = "django-jazzmin-2.5.0.tar.gz", hash = "sha256:2ee5ea548e9d5d6cf6495025d006b063ecae84702304eb90c9c5ef37ba99078a"}, + {file = "django_jazzmin-2.5.0-py3-none-any.whl", hash = "sha256:6b9f9951eee41f60793a0d2f6f3d57213bd5605ddda7a106acb2bcdec4ef124e"}, +] +django-types = [] +elasticsearch = [] +elasticsearch-dsl = [] +executing = [] +filelock = [] +flake8 = [] gunicorn = [ {file = "gunicorn-20.1.0-py3-none-any.whl", hash = "sha256:9dcc4547dbb1cb284accfb15ab5667a0e5d1881cc443e0677b4882a4067a807e"}, {file = "gunicorn-20.1.0.tar.gz", hash = "sha256:e0a968b5ba15f8a328fdfd7ab1fcb5af4470c28aaf7e55df02a99bc13138e6e8"}, ] -h2 = [ - {file = "h2-3.2.0-py2.py3-none-any.whl", hash = "sha256:61e0f6601fa709f35cdb730863b4e5ec7ad449792add80d1410d4174ed139af5"}, - {file = "h2-3.2.0.tar.gz", hash = "sha256:875f41ebd6f2c44781259005b157faed1a5031df3ae5aa7bcb4628a6c0782f14"}, -] -hpack = [ - {file = "hpack-3.0.0-py2.py3-none-any.whl", hash = "sha256:0edd79eda27a53ba5be2dfabf3b15780928a0dff6eb0c60a3d6767720e970c89"}, - {file = "hpack-3.0.0.tar.gz", hash = "sha256:8eec9c1f4bfae3408a3f30500261f7e6a65912dc138526ea054f9ad98892e9d2"}, -] -hyperframe = [ - {file = "hyperframe-5.2.0-py2.py3-none-any.whl", hash = "sha256:5187962cb16dcc078f23cb5a4b110098d546c3f41ff2d4038a9896893bbd0b40"}, - {file = "hyperframe-5.2.0.tar.gz", hash = "sha256:a9f5c17f2cc3c719b917c4f33ed1c61bd1f8dfac4b1bd23b7c80b3400971b41f"}, -] -hyperlink = [ - {file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"}, - {file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"}, -] -identify = [ - {file = "identify-2.4.1-py2.py3-none-any.whl", hash = "sha256:0192893ff68b03d37fed553e261d4a22f94ea974093aefb33b29df2ff35fed3c"}, - {file = "identify-2.4.1.tar.gz", hash = "sha256:64d4885e539f505dd8ffb5e93c142a1db45480452b1594cacd3e91dca9a984e9"}, -] +hyperlink = [] +identify = [] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, ] -importlib-metadata = [ - {file = "importlib_metadata-4.10.0-py3-none-any.whl", hash = "sha256:b7cf7d3fef75f1e4c80a96ca660efbd51473d7e8f39b5ab9210febc7809012a4"}, - {file = "importlib_metadata-4.10.0.tar.gz", hash = "sha256:92a8b58ce734b2a4494878e0ecf7d79ccd7a128b5fc6014c401e0b61f006f0f6"}, -] -incremental = [ - {file = "incremental-21.3.0-py2.py3-none-any.whl", hash = "sha256:92014aebc6a20b78a8084cdd5645eeaa7f74b8933f70fa3ada2cfbd1e3b54321"}, - {file = "incremental-21.3.0.tar.gz", hash = "sha256:02f5de5aff48f6b9f665d99d48bfc7ec03b6e3943210de7cfc88856d755d6f57"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] +importlib-metadata = [] +incremental = [] ipdb = [ {file = "ipdb-0.13.9.tar.gz", hash = "sha256:951bd9a64731c444fd907a5ce268543020086a697f6be08f7cc2c9a752a278c5"}, ] -ipython = [ - {file = "ipython-7.30.1-py3-none-any.whl", hash = "sha256:fc60ef843e0863dd4e24ab2bb5698f071031332801ecf8d1aeb4fb622056545c"}, - {file = "ipython-7.30.1.tar.gz", hash = "sha256:cb6aef731bf708a7727ab6cde8df87f0281b1427d41e65d62d4b68934fa54e97"}, -] +ipython = [] isort = [ {file = "isort-5.10.1-py3-none-any.whl", hash = "sha256:6f62d78e2f89b4500b080fe3a81690850cd254227f27f75c3a0c491a1f351ba7"}, {file = "isort-5.10.1.tar.gz", hash = "sha256:e8443a5e7a020e9d7f97f1d7d9cd17c88bcb3bc7e218bf9cf5095fe550be2951"}, ] -itemadapter = [ - {file = "itemadapter-0.4.0-py3-none-any.whl", hash = "sha256:695809a4e2f42174f0392dd66c2ceb2b2454d3ebbf65a930e5c85910d8d88d8f"}, - {file = "itemadapter-0.4.0.tar.gz", hash = "sha256:f05df8da52619da4b8c7f155d8a15af19083c0c7ad941d8c1de799560ad994ca"}, -] -itemloaders = [ - {file = "itemloaders-1.0.4-py3-none-any.whl", hash = "sha256:4cb46a0f8915e910c770242ae3b60b1149913ed37162804f1e40e8535d6ec497"}, - {file = "itemloaders-1.0.4.tar.gz", hash = "sha256:1277cd8ca3e4c02dcdfbc1bcae9134ad89acfa6041bd15b4561c6290203a0c96"}, -] +itemadapter = [] +itemloaders = [] jedi = [ {file = "jedi-0.18.1-py2.py3-none-any.whl", hash = "sha256:637c9635fcf47945ceb91cd7f320234a7be540ded6f3e99a50cb6febdfd1ba8d"}, {file = "jedi-0.18.1.tar.gz", hash = "sha256:74137626a64a99c8eb6ae5832d99b3bdd7d29a3850fe2aa80a4126b2a7d949ab"}, ] -jinja2 = [ - {file = "Jinja2-3.0.3-py3-none-any.whl", hash = "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8"}, - {file = "Jinja2-3.0.3.tar.gz", hash = "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7"}, -] -jmespath = [ - {file = "jmespath-0.10.0-py2.py3-none-any.whl", hash = "sha256:cdf6525904cc597730141d61b36f2e4b8ecc257c420fa2f4549bac2c2d0cb72f"}, - {file = "jmespath-0.10.0.tar.gz", hash = "sha256:b85d0567b8666149a93172712e68920734333c0ce7e89b78b3e987f71e5ed4f9"}, -] -kombu = [ - {file = "kombu-5.2.3-py3-none-any.whl", hash = "sha256:eeaeb8024f3a5cfc71c9250e45cddb8493f269d74ada2f74909a93c59c4b4179"}, - {file = "kombu-5.2.3.tar.gz", hash = "sha256:81a90c1de97e08d3db37dbf163eaaf667445e1068c98bfd89f051a40e9f6dbbd"}, -] -lxml = [ - {file = "lxml-4.7.1-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:d546431636edb1d6a608b348dd58cc9841b81f4116745857b6cb9f8dadb2725f"}, - {file = "lxml-4.7.1-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6308062534323f0d3edb4e702a0e26a76ca9e0e23ff99be5d82750772df32a9e"}, - {file = "lxml-4.7.1-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:f76dbe44e31abf516114f6347a46fa4e7c2e8bceaa4b6f7ee3a0a03c8eba3c17"}, - {file = "lxml-4.7.1-cp27-cp27m-win32.whl", hash = "sha256:d5618d49de6ba63fe4510bdada62d06a8acfca0b4b5c904956c777d28382b419"}, - {file = "lxml-4.7.1-cp27-cp27m-win_amd64.whl", hash = "sha256:9393a05b126a7e187f3e38758255e0edf948a65b22c377414002d488221fdaa2"}, - {file = "lxml-4.7.1-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:50d3dba341f1e583265c1a808e897b4159208d814ab07530202b6036a4d86da5"}, - {file = "lxml-4.7.1-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:44f552e0da3c8ee3c28e2eb82b0b784200631687fc6a71277ea8ab0828780e7d"}, - {file = "lxml-4.7.1-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:e662c6266e3a275bdcb6bb049edc7cd77d0b0f7e119a53101d367c841afc66dc"}, - {file = "lxml-4.7.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:4c093c571bc3da9ebcd484e001ba18b8452903cd428c0bc926d9b0141bcb710e"}, - {file = "lxml-4.7.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3e26ad9bc48d610bf6cc76c506b9e5ad9360ed7a945d9be3b5b2c8535a0145e3"}, - {file = "lxml-4.7.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a5f623aeaa24f71fce3177d7fee875371345eb9102b355b882243e33e04b7175"}, - {file = "lxml-4.7.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7b5e2acefd33c259c4a2e157119c4373c8773cf6793e225006a1649672ab47a6"}, - {file = "lxml-4.7.1-cp310-cp310-win32.whl", hash = "sha256:67fa5f028e8a01e1d7944a9fb616d1d0510d5d38b0c41708310bd1bc45ae89f6"}, - {file = "lxml-4.7.1-cp310-cp310-win_amd64.whl", hash = "sha256:b1d381f58fcc3e63fcc0ea4f0a38335163883267f77e4c6e22d7a30877218a0e"}, - {file = "lxml-4.7.1-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:38d9759733aa04fb1697d717bfabbedb21398046bd07734be7cccc3d19ea8675"}, - {file = "lxml-4.7.1-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:dfd0d464f3d86a1460683cd742306d1138b4e99b79094f4e07e1ca85ee267fe7"}, - {file = "lxml-4.7.1-cp35-cp35m-win32.whl", hash = "sha256:534e946bce61fd162af02bad7bfd2daec1521b71d27238869c23a672146c34a5"}, - {file = "lxml-4.7.1-cp35-cp35m-win_amd64.whl", hash = "sha256:6ec829058785d028f467be70cd195cd0aaf1a763e4d09822584ede8c9eaa4b03"}, - {file = "lxml-4.7.1-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:ade74f5e3a0fd17df5782896ddca7ddb998845a5f7cd4b0be771e1ffc3b9aa5b"}, - {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:41358bfd24425c1673f184d7c26c6ae91943fe51dfecc3603b5e08187b4bcc55"}, - {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6e56521538f19c4a6690f439fefed551f0b296bd785adc67c1777c348beb943d"}, - {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5b0f782f0e03555c55e37d93d7a57454efe7495dab33ba0ccd2dbe25fc50f05d"}, - {file = "lxml-4.7.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:490712b91c65988012e866c411a40cc65b595929ececf75eeb4c79fcc3bc80a6"}, - {file = "lxml-4.7.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:34c22eb8c819d59cec4444d9eebe2e38b95d3dcdafe08965853f8799fd71161d"}, - {file = "lxml-4.7.1-cp36-cp36m-win32.whl", hash = "sha256:2a906c3890da6a63224d551c2967413b8790a6357a80bf6b257c9a7978c2c42d"}, - {file = "lxml-4.7.1-cp36-cp36m-win_amd64.whl", hash = "sha256:36b16fecb10246e599f178dd74f313cbdc9f41c56e77d52100d1361eed24f51a"}, - {file = "lxml-4.7.1-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:a5edc58d631170de90e50adc2cc0248083541affef82f8cd93bea458e4d96db8"}, - {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:87c1b0496e8c87ec9db5383e30042357b4839b46c2d556abd49ec770ce2ad868"}, - {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:0a5f0e4747f31cff87d1eb32a6000bde1e603107f632ef4666be0dc065889c7a"}, - {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bf6005708fc2e2c89a083f258b97709559a95f9a7a03e59f805dd23c93bc3986"}, - {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc15874816b9320581133ddc2096b644582ab870cf6a6ed63684433e7af4b0d3"}, - {file = "lxml-4.7.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:0b5e96e25e70917b28a5391c2ed3ffc6156513d3db0e1476c5253fcd50f7a944"}, - {file = "lxml-4.7.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:ec9027d0beb785a35aa9951d14e06d48cfbf876d8ff67519403a2522b181943b"}, - {file = "lxml-4.7.1-cp37-cp37m-win32.whl", hash = "sha256:9fbc0dee7ff5f15c4428775e6fa3ed20003140560ffa22b88326669d53b3c0f4"}, - {file = "lxml-4.7.1-cp37-cp37m-win_amd64.whl", hash = "sha256:1104a8d47967a414a436007c52f533e933e5d52574cab407b1e49a4e9b5ddbd1"}, - {file = "lxml-4.7.1-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:fc9fb11b65e7bc49f7f75aaba1b700f7181d95d4e151cf2f24d51bfd14410b77"}, - {file = "lxml-4.7.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:317bd63870b4d875af3c1be1b19202de34c32623609ec803b81c99193a788c1e"}, - {file = "lxml-4.7.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:610807cea990fd545b1559466971649e69302c8a9472cefe1d6d48a1dee97440"}, - {file = "lxml-4.7.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:09b738360af8cb2da275998a8bf79517a71225b0de41ab47339c2beebfff025f"}, - {file = "lxml-4.7.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6a2ab9d089324d77bb81745b01f4aeffe4094306d939e92ba5e71e9a6b99b71e"}, - {file = "lxml-4.7.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:eed394099a7792834f0cb4a8f615319152b9d801444c1c9e1b1a2c36d2239f9e"}, - {file = "lxml-4.7.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:735e3b4ce9c0616e85f302f109bdc6e425ba1670a73f962c9f6b98a6d51b77c9"}, - {file = "lxml-4.7.1-cp38-cp38-win32.whl", hash = "sha256:772057fba283c095db8c8ecde4634717a35c47061d24f889468dc67190327bcd"}, - {file = "lxml-4.7.1-cp38-cp38-win_amd64.whl", hash = "sha256:13dbb5c7e8f3b6a2cf6e10b0948cacb2f4c9eb05029fe31c60592d08ac63180d"}, - {file = "lxml-4.7.1-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:718d7208b9c2d86aaf0294d9381a6acb0158b5ff0f3515902751404e318e02c9"}, - {file = "lxml-4.7.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:5bee1b0cbfdb87686a7fb0e46f1d8bd34d52d6932c0723a86de1cc532b1aa489"}, - {file = "lxml-4.7.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:e410cf3a2272d0a85526d700782a2fa92c1e304fdcc519ba74ac80b8297adf36"}, - {file = "lxml-4.7.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:585ea241ee4961dc18a95e2f5581dbc26285fcf330e007459688096f76be8c42"}, - {file = "lxml-4.7.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a555e06566c6dc167fbcd0ad507ff05fd9328502aefc963cb0a0547cfe7f00db"}, - {file = "lxml-4.7.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:adaab25be351fff0d8a691c4f09153647804d09a87a4e4ea2c3f9fe9e8651851"}, - {file = "lxml-4.7.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:82d16a64236970cb93c8d63ad18c5b9f138a704331e4b916b2737ddfad14e0c4"}, - {file = "lxml-4.7.1-cp39-cp39-win32.whl", hash = "sha256:59e7da839a1238807226f7143c68a479dee09244d1b3cf8c134f2fce777d12d0"}, - {file = "lxml-4.7.1-cp39-cp39-win_amd64.whl", hash = "sha256:a1bbc4efa99ed1310b5009ce7f3a1784698082ed2c1ef3895332f5df9b3b92c2"}, - {file = "lxml-4.7.1-pp37-pypy37_pp73-macosx_10_14_x86_64.whl", hash = "sha256:0607ff0988ad7e173e5ddf7bf55ee65534bd18a5461183c33e8e41a59e89edf4"}, - {file = "lxml-4.7.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:6c198bfc169419c09b85ab10cb0f572744e686f40d1e7f4ed09061284fc1303f"}, - {file = "lxml-4.7.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a58d78653ae422df6837dd4ca0036610b8cb4962b5cfdbd337b7b24de9e5f98a"}, - {file = "lxml-4.7.1-pp38-pypy38_pp73-macosx_10_14_x86_64.whl", hash = "sha256:e18281a7d80d76b66a9f9e68a98cf7e1d153182772400d9a9ce855264d7d0ce7"}, - {file = "lxml-4.7.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:8e54945dd2eeb50925500957c7c579df3cd07c29db7810b83cf30495d79af267"}, - {file = "lxml-4.7.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:447d5009d6b5447b2f237395d0018901dcc673f7d9f82ba26c1b9f9c3b444b60"}, - {file = "lxml-4.7.1.tar.gz", hash = "sha256:a1613838aa6b89af4ba10a0f3a972836128801ed008078f8c1244e65958f1b24"}, -] -markdown = [ - {file = "Markdown-3.3.6-py3-none-any.whl", hash = "sha256:9923332318f843411e9932237530df53162e29dc7a4e2b91e35764583c46c9a3"}, - {file = "Markdown-3.3.6.tar.gz", hash = "sha256:76df8ae32294ec39dcf89340382882dfa12975f87f45c3ed1ecdb1e8cefc7006"}, -] -markupsafe = [ - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d8446c54dc28c01e5a2dbac5a25f071f6653e6e40f3a8818e8b45d790fe6ef53"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:36bc903cbb393720fad60fc28c10de6acf10dc6cc883f3e24ee4012371399a38"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d7d807855b419fc2ed3e631034685db6079889a1f01d5d9dac950f764da3dad"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:add36cb2dbb8b736611303cd3bfcee00afd96471b09cda130da3581cbdc56a6d"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:168cd0a3642de83558a5153c8bd34f175a9a6e7f6dc6384b9655d2697312a646"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:4dc8f9fb58f7364b63fd9f85013b780ef83c11857ae79f2feda41e270468dd9b"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:20dca64a3ef2d6e4d5d615a3fd418ad3bde77a47ec8a23d984a12b5b4c74491a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:cdfba22ea2f0029c9261a4bd07e830a8da012291fbe44dc794e488b6c9bb353a"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win32.whl", hash = "sha256:99df47edb6bda1249d3e80fdabb1dab8c08ef3975f69aed437cb69d0a5de1e28"}, - {file = "MarkupSafe-2.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:e0f138900af21926a02425cf736db95be9f4af72ba1bb21453432a07f6082134"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f9081981fe268bd86831e5c75f7de206ef275defcb82bc70740ae6dc507aee51"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:0955295dd5eec6cb6cc2fe1698f4c6d84af2e92de33fbcac4111913cd100a6ff"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:0446679737af14f45767963a1a9ef7620189912317d095f2d9ffa183a4d25d2b"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:f826e31d18b516f653fe296d967d700fddad5901ae07c622bb3705955e1faa94"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:fa130dd50c57d53368c9d59395cb5526eda596d3ffe36666cd81a44d56e48872"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:905fec760bd2fa1388bb5b489ee8ee5f7291d692638ea5f67982d968366bef9f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf5d821ffabf0ef3533c39c518f3357b171a1651c1ff6827325e4489b0e46c3c"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0d4b31cc67ab36e3392bbf3862cfbadac3db12bdd8b02a2731f509ed5b829724"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:baa1a4e8f868845af802979fcdbf0bb11f94f1cb7ced4c4b8a351bb60d108145"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:deb993cacb280823246a026e3b2d81c493c53de6acfd5e6bfe31ab3402bb37dd"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:63f3268ba69ace99cab4e3e3b5840b03340efed0948ab8f78d2fd87ee5442a4f"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:8d206346619592c6200148b01a2142798c989edcb9c896f9ac9722a99d4e77e6"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win32.whl", hash = "sha256:6c4ca60fa24e85fe25b912b01e62cb969d69a23a5d5867682dd3e80b5b02581d"}, - {file = "MarkupSafe-2.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:b2f4bf27480f5e5e8ce285a8c8fd176c0b03e93dcc6646477d4630e83440c6a9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:0717a7390a68be14b8c793ba258e075c6f4ca819f15edfc2a3a027c823718567"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:6557b31b5e2c9ddf0de32a691f2312a32f77cd7681d8af66c2692efdbef84c18"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:49e3ceeabbfb9d66c3aef5af3a60cc43b85c33df25ce03d0031a608b0a8b2e3f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:d7f9850398e85aba693bb640262d3611788b1f29a79f0c93c565694658f4071f"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:6a7fae0dd14cf60ad5ff42baa2e95727c3d81ded453457771d02b7d2b3f9c0c2"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:b7f2d075102dc8c794cbde1947378051c4e5180d52d276987b8d28a3bd58c17d"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e9936f0b261d4df76ad22f8fee3ae83b60d7c3e871292cd42f40b81b70afae85"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:2a7d351cbd8cfeb19ca00de495e224dea7e7d919659c2841bbb7f420ad03e2d6"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:60bf42e36abfaf9aff1f50f52644b336d4f0a3fd6d8a60ca0d054ac9f713a864"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d6c7ebd4e944c85e2c3421e612a7057a2f48d478d79e61800d81468a8d842207"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f0567c4dc99f264f49fe27da5f735f414c4e7e7dd850cfd8e69f0862d7c74ea9"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:89c687013cb1cd489a0f0ac24febe8c7a666e6e221b783e53ac50ebf68e45d86"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win32.whl", hash = "sha256:a30e67a65b53ea0a5e62fe23682cfe22712e01f453b95233b25502f7c61cb415"}, - {file = "MarkupSafe-2.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:611d1ad9a4288cf3e3c16014564df047fe08410e628f89805e475368bd304914"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5bb28c636d87e840583ee3adeb78172efc47c8b26127267f54a9c0ec251d41a9"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:be98f628055368795d818ebf93da628541e10b75b41c559fdf36d104c5787066"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:1d609f577dc6e1aa17d746f8bd3c31aa4d258f4070d61b2aa5c4166c1539de35"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:7d91275b0245b1da4d4cfa07e0faedd5b0812efc15b702576d103293e252af1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:01a9b8ea66f1658938f65b93a85ebe8bc016e6769611be228d797c9d998dd298"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:47ab1e7b91c098ab893b828deafa1203de86d0bc6ab587b160f78fe6c4011f75"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:97383d78eb34da7e1fa37dd273c20ad4320929af65d156e35a5e2d89566d9dfb"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fcf051089389abe060c9cd7caa212c707e58153afa2c649f00346ce6d260f1b"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:5855f8438a7d1d458206a2466bf82b0f104a3724bf96a1c781ab731e4201731a"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3dd007d54ee88b46be476e293f48c85048603f5f516008bee124ddd891398ed6"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:aca6377c0cb8a8253e493c6b451565ac77e98c2951c45f913e0b52facdcff83f"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:04635854b943835a6ea959e948d19dcd311762c5c0c6e1f0e16ee57022669194"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:6300b8454aa6930a24b9618fbb54b5a68135092bc666f7b06901f897fa5c2fee"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win32.whl", hash = "sha256:023cb26ec21ece8dc3907c0e8320058b2e0cb3c55cf9564da612bc325bed5e64"}, - {file = "MarkupSafe-2.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:984d76483eb32f1bcb536dc27e4ad56bba4baa70be32fa87152832cdd9db0833"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:2ef54abee730b502252bcdf31b10dacb0a416229b72c18b19e24a4509f273d26"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3c112550557578c26af18a1ccc9e090bfe03832ae994343cfdacd287db6a6ae7"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:53edb4da6925ad13c07b6d26c2a852bd81e364f95301c66e930ab2aef5b5ddd8"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:f5653a225f31e113b152e56f154ccbe59eeb1c7487b39b9d9f9cdb58e6c79dc5"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:4efca8f86c54b22348a5467704e3fec767b2db12fc39c6d963168ab1d3fc9135"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:ab3ef638ace319fa26553db0624c4699e31a28bb2a835c5faca8f8acf6a5a902"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:f8ba0e8349a38d3001fae7eadded3f6606f0da5d748ee53cc1dab1d6527b9509"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c47adbc92fc1bb2b3274c4b3a43ae0e4573d9fbff4f54cd484555edbf030baf1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:37205cac2a79194e3750b0af2a5720d95f786a55ce7df90c3af697bfa100eaac"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:1f2ade76b9903f39aa442b4aadd2177decb66525062db244b35d71d0ee8599b6"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:4296f2b1ce8c86a6aea78613c34bb1a672ea0e3de9c6ba08a960efe0b0a09047"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f02365d4e99430a12647f09b6cc8bab61a6564363f313126f775eb4f6ef798e"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5b6d930f030f8ed98e3e6c98ffa0652bdb82601e7a016ec2ab5d7ff23baa78d1"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win32.whl", hash = "sha256:10f82115e21dc0dfec9ab5c0223652f7197feb168c940f3ef61563fc2d6beb74"}, - {file = "MarkupSafe-2.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:693ce3f9e70a6cf7d2fb9e6c9d8b204b6b39897a2c4a1aa65728d5ac97dcc1d8"}, - {file = "MarkupSafe-2.0.1.tar.gz", hash = "sha256:594c67807fb16238b30c44bdf74f36c02cdf22d1c8cda91ef8a0ed8dabf5620a"}, -] -matplotlib-inline = [ - {file = "matplotlib-inline-0.1.3.tar.gz", hash = "sha256:a04bfba22e0d1395479f866853ec1ee28eea1485c1d69a6faf00dc3e24ff34ee"}, - {file = "matplotlib_inline-0.1.3-py3-none-any.whl", hash = "sha256:aed605ba3b72462d64d475a21a9296f400a19c4f74a31b59103d2a99ffd5aa5c"}, -] -mccabe = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] +jmespath = [] +kombu = [] +lxml = [] +markdown = [] +matplotlib-inline = [] +mccabe = [] mypy-extensions = [ {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, ] -nodeenv = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] -orjson = [ - {file = "orjson-3.6.5-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:6c444edc073eb69cf85b28851a7a957807a41ce9bb3a9c14eefa8b33030cf050"}, - {file = "orjson-3.6.5-cp310-cp310-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:432c6da3d8d4630739f5303dcc45e8029d357b7ff8e70b7239be7bd047df6b19"}, - {file = "orjson-3.6.5-cp310-cp310-manylinux_2_24_aarch64.whl", hash = "sha256:0fa32319072fadf0732d2c1746152f868a1b0f83c8cce2cad4996f5f3ca4e979"}, - {file = "orjson-3.6.5-cp310-cp310-manylinux_2_24_x86_64.whl", hash = "sha256:0d65cc67f2e358712e33bc53810022ef5181c2378a7603249cd0898aa6cd28d4"}, - {file = "orjson-3.6.5-cp310-none-win_amd64.whl", hash = "sha256:fa8e3d0f0466b7d771a8f067bd8961bc17ca6ea4c89a91cd34d6648e6b1d1e47"}, - {file = "orjson-3.6.5-cp37-cp37m-macosx_10_7_x86_64.whl", hash = "sha256:470596fbe300a7350fd7bbcf94d2647156401ab6465decb672a00e201af1813a"}, - {file = "orjson-3.6.5-cp37-cp37m-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d2680d9edc98171b0c59e52c1ed964619be5cb9661289c0dd2e667773fa87f15"}, - {file = "orjson-3.6.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:001962a334e1ab2162d2f695f2770d2383c7ffd2805cec6dbb63ea2ad96bf0ad"}, - {file = "orjson-3.6.5-cp37-cp37m-manylinux_2_24_aarch64.whl", hash = "sha256:522c088679c69e0dd2c72f43cd26a9e73df4ccf9ed725ac73c151bbe816fe51a"}, - {file = "orjson-3.6.5-cp37-cp37m-manylinux_2_24_x86_64.whl", hash = "sha256:d2b871a745a64f72631b633271577c99da628a9b63e10bd5c9c20706e19fe282"}, - {file = "orjson-3.6.5-cp37-none-win_amd64.whl", hash = "sha256:51ab01fed3b3e21561f21386a2f86a0415338541938883b6ca095001a3014a3e"}, - {file = "orjson-3.6.5-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:fc7e62edbc7ece95779a034d9e206d7ba9e2b638cc548fd3a82dc5225f656625"}, - {file = "orjson-3.6.5-cp38-cp38-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:0720d60db3fa25956011a573274a269eb37de98070f3bc186582af1222a2d084"}, - {file = "orjson-3.6.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e169a8876aed7a5bff413c53257ef1fa1d9b68c855eb05d658c4e73ed8dff508"}, - {file = "orjson-3.6.5-cp38-cp38-manylinux_2_24_aarch64.whl", hash = "sha256:331f9a3bdba30a6913ad1d149df08e4837581e3ce92bf614277d84efccaf796f"}, - {file = "orjson-3.6.5-cp38-cp38-manylinux_2_24_x86_64.whl", hash = "sha256:ece5dfe346b91b442590a41af7afe61df0af369195fed13a1b29b96b1ba82905"}, - {file = "orjson-3.6.5-cp38-none-win_amd64.whl", hash = "sha256:6a5e9eb031b44b7a429c705ca48820371d25b9467c9323b6ae7a712daf15fbef"}, - {file = "orjson-3.6.5-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:206237fa5e45164a678b12acc02aac7c5b50272f7f31116e1e08f8bcaf654f93"}, - {file = "orjson-3.6.5-cp39-cp39-macosx_10_9_x86_64.macosx_11_0_arm64.macosx_10_9_universal2.whl", hash = "sha256:d5aceeb226b060d11ccb5a84a4cfd760f8024289e3810ec446ef2993a85dbaca"}, - {file = "orjson-3.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:80dba3dbc0563c49719e8cc7d1568a5cf738accfcd1aa6ca5e8222b57436e75e"}, - {file = "orjson-3.6.5-cp39-cp39-manylinux_2_24_aarch64.whl", hash = "sha256:443f39bc5e7966880142430ce091e502aea068b38cb9db5f1ffdcfee682bc2d4"}, - {file = "orjson-3.6.5-cp39-cp39-manylinux_2_24_x86_64.whl", hash = "sha256:a06f2dd88323a480ac1b14d5829fb6cdd9b0d72d505fabbfbd394da2e2e07f6f"}, - {file = "orjson-3.6.5-cp39-none-win_amd64.whl", hash = "sha256:82cb42dbd45a3856dbad0a22b54deb5e90b2567cdc2b8ea6708e0c4fe2e12be3"}, - {file = "orjson-3.6.5.tar.gz", hash = "sha256:eb3a7d92d783c89df26951ef3e5aca9d96c9c6f2284c752aa3382c736f950597"}, -] +nodeenv = [] +orjson = [] packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] -parsel = [ - {file = "parsel-1.6.0-py2.py3-none-any.whl", hash = "sha256:9e1fa8db1c0b4a878bf34b35c043d89c9d1cbebc23b4d34dbc3c0ec33f2e087d"}, - {file = "parsel-1.6.0.tar.gz", hash = "sha256:70efef0b651a996cceebc69e55a85eb2233be0890959203ba7c3a03c72725c79"}, -] +parsel = [] parso = [ {file = "parso-0.8.3-py2.py3-none-any.whl", hash = "sha256:c001d4636cd3aecdaf33cbb40aebb59b094be2a74c556778ef5576c175e19e75"}, {file = "parso-0.8.3.tar.gz", hash = "sha256:8c07be290bb59f03588915921e29e8a50002acaf2cdc5fa0e0114f91709fafa0"}, ] -pathspec = [ - {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, - {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, -] +pathspec = [] pexpect = [ {file = "pexpect-4.8.0-py2.py3-none-any.whl", hash = "sha256:0b48a55dcb3c05f3329815901ea4fc1537514d6ba867a152b581d69ae3710937"}, {file = "pexpect-4.8.0.tar.gz", hash = "sha256:fc65a43959d153d0114afe13997d439c22823a27cefceb5ff35c2178c6784c0c"}, @@ -2190,28 +1574,12 @@ pickleshare = [ {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, ] platformdirs = [ - {file = "platformdirs-2.4.1-py3-none-any.whl", hash = "sha256:1d7385c7db91728b83efd0ca99a5afb296cab9d0ed8313a45ed8ba17967ecfca"}, - {file = "platformdirs-2.4.1.tar.gz", hash = "sha256:440633ddfebcc36264232365d7840a970e75e1018d15b4327d11f91909045fda"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -pre-commit = [ - {file = "pre_commit-2.16.0-py2.py3-none-any.whl", hash = "sha256:758d1dc9b62c2ed8881585c254976d66eae0889919ab9b859064fc2fe3c7743e"}, - {file = "pre_commit-2.16.0.tar.gz", hash = "sha256:fe9897cac830aa7164dbd02a4e7b90cae49630451ce88464bca73db486ba9f65"}, -] -priority = [ - {file = "priority-1.3.0-py2.py3-none-any.whl", hash = "sha256:be4fcb94b5e37cdeb40af5533afe6dd603bd665fe9c8b3052610fc1001d5d1eb"}, - {file = "priority-1.3.0.tar.gz", hash = "sha256:6bc1961a6d7fcacbfc337769f1a382c8e746566aaa365e78047abe9f66b2ffbe"}, -] -prompt-toolkit = [ - {file = "prompt_toolkit-3.0.24-py3-none-any.whl", hash = "sha256:e56f2ff799bacecd3e88165b1e2f5ebf9bcd59e80e06d395fa0cc4b8bd7bb506"}, - {file = "prompt_toolkit-3.0.24.tar.gz", hash = "sha256:1bb05628c7d87b645974a1bad3f17612be0c29fa39af9f7688030163f680bad6"}, -] -protego = [ - {file = "Protego-0.1.16.tar.gz", hash = "sha256:a682771bc7b51b2ff41466460896c1a5a653f9a1e71639ef365a72e66d8734b4"}, + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, ] +pre-commit = [] +prompt-toolkit = [] +protego = [] psycopg2 = [ {file = "psycopg2-2.9.3-cp310-cp310-win32.whl", hash = "sha256:083707a696e5e1c330af2508d8fab36f9700b26621ccbcb538abe22e15485362"}, {file = "psycopg2-2.9.3-cp310-cp310-win_amd64.whl", hash = "sha256:d3ca6421b942f60c008f81a3541e8faf6865a28d5a9b48544b0ee4f40cac7fca"}, @@ -2229,87 +1597,27 @@ ptyprocess = [ {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, ] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pyasn1 = [ - {file = "pyasn1-0.4.8-py2.4.egg", hash = "sha256:fec3e9d8e36808a28efb59b489e4528c10ad0f480e57dcc32b4de5c9d8c9fdf3"}, - {file = "pyasn1-0.4.8-py2.5.egg", hash = "sha256:0458773cfe65b153891ac249bcf1b5f8f320b7c2ce462151f8fa74de8934becf"}, - {file = "pyasn1-0.4.8-py2.6.egg", hash = "sha256:5c9414dcfede6e441f7e8f81b43b34e834731003427e5b09e4e00e3172a10f00"}, - {file = "pyasn1-0.4.8-py2.7.egg", hash = "sha256:6e7545f1a61025a4e58bb336952c5061697da694db1cae97b116e9c46abcf7c8"}, - {file = "pyasn1-0.4.8-py2.py3-none-any.whl", hash = "sha256:39c7e2ec30515947ff4e87fb6f456dfc6e84857d34be479c9d4a4ba4bf46aa5d"}, - {file = "pyasn1-0.4.8-py3.1.egg", hash = "sha256:78fa6da68ed2727915c4767bb386ab32cdba863caa7dbe473eaae45f9959da86"}, - {file = "pyasn1-0.4.8-py3.2.egg", hash = "sha256:08c3c53b75eaa48d71cf8c710312316392ed40899cb34710d092e96745a358b7"}, - {file = "pyasn1-0.4.8-py3.3.egg", hash = "sha256:03840c999ba71680a131cfaee6fab142e1ed9bbd9c693e285cc6aca0d555e576"}, - {file = "pyasn1-0.4.8-py3.4.egg", hash = "sha256:7ab8a544af125fb704feadb008c99a88805126fb525280b2270bb25cc1d78a12"}, - {file = "pyasn1-0.4.8-py3.5.egg", hash = "sha256:e89bf84b5437b532b0803ba5c9a5e054d21fec423a89952a74f87fa2c9b7bce2"}, - {file = "pyasn1-0.4.8-py3.6.egg", hash = "sha256:014c0e9976956a08139dc0712ae195324a75e142284d5f87f1a87ee1b068a359"}, - {file = "pyasn1-0.4.8-py3.7.egg", hash = "sha256:99fcc3c8d804d1bc6d9a099921e39d827026409a58f2a720dcdb89374ea0c776"}, - {file = "pyasn1-0.4.8.tar.gz", hash = "sha256:aef77c9fb94a3ac588e87841208bdec464471d9871bd5050a287cc9a475cd0ba"}, -] -pyasn1-modules = [ - {file = "pyasn1-modules-0.2.8.tar.gz", hash = "sha256:905f84c712230b2c592c19470d3ca8d552de726050d1d1716282a1f6146be65e"}, - {file = "pyasn1_modules-0.2.8-py2.4.egg", hash = "sha256:0fe1b68d1e486a1ed5473f1302bd991c1611d319bba158e98b106ff86e1d7199"}, - {file = "pyasn1_modules-0.2.8-py2.5.egg", hash = "sha256:fe0644d9ab041506b62782e92b06b8c68cca799e1a9636ec398675459e031405"}, - {file = "pyasn1_modules-0.2.8-py2.6.egg", hash = "sha256:a99324196732f53093a84c4369c996713eb8c89d360a496b599fb1a9c47fc3eb"}, - {file = "pyasn1_modules-0.2.8-py2.7.egg", hash = "sha256:0845a5582f6a02bb3e1bde9ecfc4bfcae6ec3210dd270522fee602365430c3f8"}, - {file = "pyasn1_modules-0.2.8-py2.py3-none-any.whl", hash = "sha256:a50b808ffeb97cb3601dd25981f6b016cbb3d31fbf57a8b8a87428e6158d0c74"}, - {file = "pyasn1_modules-0.2.8-py3.1.egg", hash = "sha256:f39edd8c4ecaa4556e989147ebf219227e2cd2e8a43c7e7fcb1f1c18c5fd6a3d"}, - {file = "pyasn1_modules-0.2.8-py3.2.egg", hash = "sha256:b80486a6c77252ea3a3e9b1e360bc9cf28eaac41263d173c032581ad2f20fe45"}, - {file = "pyasn1_modules-0.2.8-py3.3.egg", hash = "sha256:65cebbaffc913f4fe9e4808735c95ea22d7a7775646ab690518c056784bc21b4"}, - {file = "pyasn1_modules-0.2.8-py3.4.egg", hash = "sha256:15b7c67fabc7fc240d87fb9aabf999cf82311a6d6fb2c70d00d3d0604878c811"}, - {file = "pyasn1_modules-0.2.8-py3.5.egg", hash = "sha256:426edb7a5e8879f1ec54a1864f16b882c2837bfd06eee62f2c982315ee2473ed"}, - {file = "pyasn1_modules-0.2.8-py3.6.egg", hash = "sha256:cbac4bc38d117f2a49aeedec4407d23e8866ea4ac27ff2cf7fb3e5b570df19e0"}, - {file = "pyasn1_modules-0.2.8-py3.7.egg", hash = "sha256:c29a5e5cc7a3f05926aff34e097e84f8589cd790ce0ed41b67aed6857b26aafd"}, -] -pycodestyle = [ - {file = "pycodestyle-2.7.0-py2.py3-none-any.whl", hash = "sha256:514f76d918fcc0b55c6680472f0a37970994e07bbb80725808c17089be302068"}, - {file = "pycodestyle-2.7.0.tar.gz", hash = "sha256:c389c1d06bf7904078ca03399a4816f974a1d590090fecea0c63ec26ebaf1cef"}, -] +pure-eval = [] +pyasn1 = [] +pyasn1-modules = [] +pycodestyle = [] pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] -pydispatcher = [ - {file = "PyDispatcher-2.0.5.tar.gz", hash = "sha256:5570069e1b1769af1fe481de6dd1d3a388492acddd2cdad7a3bde145615d5caf"}, - {file = "PyDispatcher-2.0.5.zip", hash = "sha256:5be4a8be12805ef7d712dd9a93284fb8bc53f309867e573f653a72e5fd10e433"}, -] -pyflakes = [ - {file = "pyflakes-2.3.1-py2.py3-none-any.whl", hash = "sha256:7893783d01b8a89811dd72d7dfd4d84ff098e5eed95cfa8905b22bbffe52efc3"}, - {file = "pyflakes-2.3.1.tar.gz", hash = "sha256:f5bc8ecabc05bb9d291eb5203d6810b49040f6ff446a756326104746cc00c1db"}, -] -pygments = [ - {file = "Pygments-2.11.1-py3-none-any.whl", hash = "sha256:9135c1af61eec0f650cd1ea1ed8ce298e54d56bcd8cc2ef46edd7702c171337c"}, - {file = "Pygments-2.11.1.tar.gz", hash = "sha256:59b895e326f0fb0d733fd28c6839bd18ad0687ba20efc26d4277fd1d30b971f4"}, -] -pyjwt = [ - {file = "PyJWT-2.3.0-py3-none-any.whl", hash = "sha256:e0c4bb8d9f0af0c7f5b1ec4c5036309617d03d56932877f2f7a0beeb5318322f"}, - {file = "PyJWT-2.3.0.tar.gz", hash = "sha256:b888b4d56f06f6dcd777210c334e69c737be74755d3e5e9ee3fe67dc18a0ee41"}, -] -pyopenssl = [ - {file = "pyOpenSSL-21.0.0-py2.py3-none-any.whl", hash = "sha256:8935bd4920ab9abfebb07c41a4f58296407ed77f04bd1a92914044b848ba1ed6"}, - {file = "pyOpenSSL-21.0.0.tar.gz", hash = "sha256:5e2d8c5e46d0d865ae933bef5230090bdaf5506281e9eec60fa250ee80600cb3"}, -] +pydispatcher = [] +pyflakes = [] +pygments = [] +pyopenssl = [] pyparsing = [ - {file = "pyparsing-3.0.6-py3-none-any.whl", hash = "sha256:04ff808a5b90911829c55c4e26f75fa5ca8a2f5f36aa3a51f68e27033341d3e4"}, - {file = "pyparsing-3.0.6.tar.gz", hash = "sha256:d9bdec0013ef1eb5a84ab39a3b3868911598afa494f5faa038647101504e2b81"}, -] -pypydispatcher = [ - {file = "PyPyDispatcher-2.1.2.tar.gz", hash = "sha256:b6bec5dfcff9d2535bca2b23c80eae367b1ac250a645106948d315fcfa9130f2"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, + {file = "pyparsing-3.0.9-py3-none-any.whl", hash = "sha256:5026bae9a10eeaefb61dab2f09052b9f4307d44aee4eda64b309723d8d206bbc"}, + {file = "pyparsing-3.0.9.tar.gz", hash = "sha256:2b020ecf7d21b687f219b71ecad3631f644a47f01403fa1d1036b0c6416d70fb"}, ] +pypydispatcher = [] python-dateutil = [ {file = "python-dateutil-2.8.2.tar.gz", hash = "sha256:0123cacc1627ae19ddf3c27a5de5bd67ee4586fbdd6440d9748f8abb483d3e86"}, {file = "python_dateutil-2.8.2-py2.py3-none-any.whl", hash = "sha256:961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9"}, ] -python-dotenv = [ - {file = "python-dotenv-0.15.0.tar.gz", hash = "sha256:587825ed60b1711daea4832cf37524dfd404325b7db5e25ebe88c495c9f807a0"}, - {file = "python_dotenv-0.15.0-py2.py3-none-any.whl", hash = "sha256:0c8d1b80d1a1e91717ea7d526178e3882732420b03f08afea0406db6402e220e"}, -] pytz = [ {file = "pytz-2021.3-py2.py3-none-any.whl", hash = "sha256:3672058bc3453457b622aab7a1c3bfd5ab0bdae451512f6cf25f64ed37f5b87c"}, {file = "pytz-2021.3.tar.gz", hash = "sha256:acad2d8b20a1af07d4e4c9d2e9285c5ed9104354062f275f3fcd88dcef4f1326"}, @@ -2349,110 +1657,13 @@ pyyaml = [ {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, ] -queuelib = [ - {file = "queuelib-1.6.2-py2.py3-none-any.whl", hash = "sha256:4b96d48f650a814c6fb2fd11b968f9c46178b683aad96d68f930fe13a8574d19"}, - {file = "queuelib-1.6.2.tar.gz", hash = "sha256:4b207267f2642a8699a1f806045c56eb7ad1a85a10c0e249884580d139c2fcd2"}, -] -redis = [ - {file = "redis-3.5.3-py2.py3-none-any.whl", hash = "sha256:432b788c4530cfe16d8d943a09d40ca6c16149727e4afe8c2c9d5580c59d9f24"}, - {file = "redis-3.5.3.tar.gz", hash = "sha256:0e7e0cfca8660dea8b7d5cd8c4f6c5e29e11f31158c0b0ae91a397f00e5a05a2"}, -] -regex = [ - {file = "regex-2021.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9345b6f7ee578bad8e475129ed40123d265464c4cfead6c261fd60fc9de00bcf"}, - {file = "regex-2021.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:416c5f1a188c91e3eb41e9c8787288e707f7d2ebe66e0a6563af280d9b68478f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0538c43565ee6e703d3a7c3bdfe4037a5209250e8502c98f20fea6f5fdf2965"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ee1227cf08b6716c85504aebc49ac827eb88fcc6e51564f010f11a406c0a667"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6650f16365f1924d6014d2ea770bde8555b4a39dc9576abb95e3cd1ff0263b36"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:30ab804ea73972049b7a2a5c62d97687d69b5a60a67adca07eb73a0ddbc9e29f"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:68a067c11463de2a37157930d8b153005085e42bcb7ad9ca562d77ba7d1404e0"}, - {file = "regex-2021.11.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:162abfd74e88001d20cb73ceaffbfe601469923e875caf9118333b1a4aaafdc4"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:b9ed0b1e5e0759d6b7f8e2f143894b2a7f3edd313f38cf44e1e15d360e11749b"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:473e67837f786404570eae33c3b64a4b9635ae9f00145250851a1292f484c063"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2fee3ed82a011184807d2127f1733b4f6b2ff6ec7151d83ef3477f3b96a13d03"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:d5fd67df77bab0d3f4ea1d7afca9ef15c2ee35dfb348c7b57ffb9782a6e4db6e"}, - {file = "regex-2021.11.10-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5d408a642a5484b9b4d11dea15a489ea0928c7e410c7525cd892f4d04f2f617b"}, - {file = "regex-2021.11.10-cp310-cp310-win32.whl", hash = "sha256:98ba568e8ae26beb726aeea2273053c717641933836568c2a0278a84987b2a1a"}, - {file = "regex-2021.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:780b48456a0f0ba4d390e8b5f7c661fdd218934388cde1a974010a965e200e12"}, - {file = "regex-2021.11.10-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:dba70f30fd81f8ce6d32ddeef37d91c8948e5d5a4c63242d16a2b2df8143aafc"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e1f54b9b4b6c53369f40028d2dd07a8c374583417ee6ec0ea304e710a20f80a0"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fbb9dc00e39f3e6c0ef48edee202f9520dafb233e8b51b06b8428cfcb92abd30"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:666abff54e474d28ff42756d94544cdfd42e2ee97065857413b72e8a2d6a6345"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5537f71b6d646f7f5f340562ec4c77b6e1c915f8baae822ea0b7e46c1f09b733"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ed2e07c6a26ed4bea91b897ee2b0835c21716d9a469a96c3e878dc5f8c55bb23"}, - {file = "regex-2021.11.10-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ca5f18a75e1256ce07494e245cdb146f5a9267d3c702ebf9b65c7f8bd843431e"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:74cbeac0451f27d4f50e6e8a8f3a52ca074b5e2da9f7b505c4201a57a8ed6286"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:3598893bde43091ee5ca0a6ad20f08a0435e93a69255eeb5f81b85e81e329264"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_ppc64le.whl", hash = "sha256:50a7ddf3d131dc5633dccdb51417e2d1910d25cbcf842115a3a5893509140a3a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_s390x.whl", hash = "sha256:61600a7ca4bcf78a96a68a27c2ae9389763b5b94b63943d5158f2a377e09d29a"}, - {file = "regex-2021.11.10-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:563d5f9354e15e048465061509403f68424fef37d5add3064038c2511c8f5e00"}, - {file = "regex-2021.11.10-cp36-cp36m-win32.whl", hash = "sha256:93a5051fcf5fad72de73b96f07d30bc29665697fb8ecdfbc474f3452c78adcf4"}, - {file = "regex-2021.11.10-cp36-cp36m-win_amd64.whl", hash = "sha256:b483c9d00a565633c87abd0aaf27eb5016de23fed952e054ecc19ce32f6a9e7e"}, - {file = "regex-2021.11.10-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:fff55f3ce50a3ff63ec8e2a8d3dd924f1941b250b0aac3d3d42b687eeff07a8e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e32d2a2b02ccbef10145df9135751abea1f9f076e67a4e261b05f24b94219e36"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:53db2c6be8a2710b359bfd3d3aa17ba38f8aa72a82309a12ae99d3c0c3dcd74d"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2207ae4f64ad3af399e2d30dde66f0b36ae5c3129b52885f1bffc2f05ec505c8"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d5ca078bb666c4a9d1287a379fe617a6dccd18c3e8a7e6c7e1eb8974330c626a"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dd33eb9bdcfbabab3459c9ee651d94c842bc8a05fabc95edf4ee0c15a072495e"}, - {file = "regex-2021.11.10-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:05b7d6d7e64efe309972adab77fc2af8907bb93217ec60aa9fe12a0dad35874f"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:42b50fa6666b0d50c30a990527127334d6b96dd969011e843e726a64011485da"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:6e1d2cc79e8dae442b3fa4a26c5794428b98f81389af90623ffcc650ce9f6732"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:0416f7399e918c4b0e074a0f66e5191077ee2ca32a0f99d4c187a62beb47aa05"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:ce298e3d0c65bd03fa65ffcc6db0e2b578e8f626d468db64fdf8457731052942"}, - {file = "regex-2021.11.10-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:dc07f021ee80510f3cd3af2cad5b6a3b3a10b057521d9e6aaeb621730d320c5a"}, - {file = "regex-2021.11.10-cp37-cp37m-win32.whl", hash = "sha256:e71255ba42567d34a13c03968736c5d39bb4a97ce98188fafb27ce981115beec"}, - {file = "regex-2021.11.10-cp37-cp37m-win_amd64.whl", hash = "sha256:07856afef5ffcc052e7eccf3213317fbb94e4a5cd8177a2caa69c980657b3cb4"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ba05430e819e58544e840a68b03b28b6d328aff2e41579037e8bab7653b37d83"}, - {file = "regex-2021.11.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:7f301b11b9d214f83ddaf689181051e7f48905568b0c7017c04c06dfd065e244"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aaa4e0705ef2b73dd8e36eeb4c868f80f8393f5f4d855e94025ce7ad8525f50"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:788aef3549f1924d5c38263104dae7395bf020a42776d5ec5ea2b0d3d85d6646"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f8af619e3be812a2059b212064ea7a640aff0568d972cd1b9e920837469eb3cb"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85bfa6a5413be0ee6c5c4a663668a2cad2cbecdee367630d097d7823041bdeec"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f23222527b307970e383433daec128d769ff778d9b29343fb3496472dc20dabe"}, - {file = "regex-2021.11.10-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:da1a90c1ddb7531b1d5ff1e171b4ee61f6345119be7351104b67ff413843fe94"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:f5be7805e53dafe94d295399cfbe5227f39995a997f4fd8539bf3cbdc8f47ca8"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a955b747d620a50408b7fdf948e04359d6e762ff8a85f5775d907ceced715129"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:139a23d1f5d30db2cc6c7fd9c6d6497872a672db22c4ae1910be22d4f4b2068a"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:ca49e1ab99593438b204e00f3970e7a5f70d045267051dfa6b5f4304fcfa1dbf"}, - {file = "regex-2021.11.10-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:96fc32c16ea6d60d3ca7f63397bff5c75c5a562f7db6dec7d412f7c4d2e78ec0"}, - {file = "regex-2021.11.10-cp38-cp38-win32.whl", hash = "sha256:0617383e2fe465732af4509e61648b77cbe3aee68b6ac8c0b6fe934db90be5cc"}, - {file = "regex-2021.11.10-cp38-cp38-win_amd64.whl", hash = "sha256:a3feefd5e95871872673b08636f96b61ebef62971eab044f5124fb4dea39919d"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f7f325be2804246a75a4f45c72d4ce80d2443ab815063cdf70ee8fb2ca59ee1b"}, - {file = "regex-2021.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:537ca6a3586931b16a85ac38c08cc48f10fc870a5b25e51794c74df843e9966d"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eef2afb0fd1747f33f1ee3e209bce1ed582d1896b240ccc5e2697e3275f037c7"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:432bd15d40ed835a51617521d60d0125867f7b88acf653e4ed994a1f8e4995dc"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b43c2b8a330a490daaef5a47ab114935002b13b3f9dc5da56d5322ff218eeadb"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:962b9a917dd7ceacbe5cd424556914cb0d636001e393b43dc886ba31d2a1e449"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fa8c626d6441e2d04b6ee703ef2d1e17608ad44c7cb75258c09dd42bacdfc64b"}, - {file = "regex-2021.11.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:3c5fb32cc6077abad3bbf0323067636d93307c9fa93e072771cf9a64d1c0f3ef"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:cd410a1cbb2d297c67d8521759ab2ee3f1d66206d2e4328502a487589a2cb21b"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:e6096b0688e6e14af6a1b10eaad86b4ff17935c49aa774eac7c95a57a4e8c296"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:529801a0d58809b60b3531ee804d3e3be4b412c94b5d267daa3de7fadef00f49"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:0f594b96fe2e0821d026365f72ac7b4f0b487487fb3d4aaf10dd9d97d88a9737"}, - {file = "regex-2021.11.10-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2409b5c9cef7054dde93a9803156b411b677affc84fca69e908b1cb2c540025d"}, - {file = "regex-2021.11.10-cp39-cp39-win32.whl", hash = "sha256:3b5df18db1fccd66de15aa59c41e4f853b5df7550723d26aa6cb7f40e5d9da5a"}, - {file = "regex-2021.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:83ee89483672b11f8952b158640d0c0ff02dc43d9cb1b70c1564b49abe92ce29"}, - {file = "regex-2021.11.10.tar.gz", hash = "sha256:f341ee2df0999bfdf7a95e448075effe0db212a59387de1a70690e4acb03d4c6"}, -] -requests = [ - {file = "requests-2.26.0-py2.py3-none-any.whl", hash = "sha256:6c1246513ecd5ecd4528a0906f910e8f0f9c6b8ec72030dc9fd154dc1a6efd24"}, - {file = "requests-2.26.0.tar.gz", hash = "sha256:b8aa58f8cf793ffd8782d3d8cb19e66ef36f7aba4353eec859e74678b01b07a7"}, -] -rich = [ - {file = "rich-10.16.1-py3-none-any.whl", hash = "sha256:bbe04dd6ac09e4b00d22cb1051aa127beaf6e16c3d8687b026e96d3fca6aad52"}, - {file = "rich-10.16.1.tar.gz", hash = "sha256:4949e73de321784ef6664ebbc854ac82b20ff60b2865097b93f3b9b41e30da27"}, -] -scrapy = [ - {file = "Scrapy-2.5.1-py2.py3-none-any.whl", hash = "sha256:1a9a36970004950ee3c519a14c4db945f9d9a63fecb3d593dddcda477331dde9"}, - {file = "Scrapy-2.5.1.tar.gz", hash = "sha256:13af6032476ab4256158220e530411290b3b934dd602bb6dacacbf6d16141f49"}, -] -sentry-sdk = [ - {file = "sentry-sdk-1.5.1.tar.gz", hash = "sha256:2a1757d6611e4bec7d672c2b7ef45afef79fed201d064f53994753303944f5a8"}, - {file = "sentry_sdk-1.5.1-py2.py3-none-any.whl", hash = "sha256:e4cb107e305b2c1b919414775fa73a9997f996447417d22b98e7610ded1e9eb5"}, -] -service-identity = [ - {file = "service-identity-21.1.0.tar.gz", hash = "sha256:6e6c6086ca271dc11b033d17c3a8bea9f24ebff920c587da090afc9519419d34"}, - {file = "service_identity-21.1.0-py2.py3-none-any.whl", hash = "sha256:f0b0caac3d40627c3c04d7a51b6e06721857a0e10a8775f2d1d7e72901b3a7db"}, -] +queuelib = [] +redis = [] +requests = [] +requests-file = [] +rich = [] +scrapy = [] +service-identity = [] six = [ {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, @@ -2461,119 +1672,26 @@ sqlparse = [ {file = "sqlparse-0.4.2-py3-none-any.whl", hash = "sha256:48719e356bb8b42991bdbb1e8b83223757b93789c00910a616a071910ca4a64d"}, {file = "sqlparse-0.4.2.tar.gz", hash = "sha256:0c00730c74263a94e5a9919ade150dfc3b19c574389985446148402998287dae"}, ] +stack-data = [] +tldextract = [] toml = [ {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, ] -traitlets = [ - {file = "traitlets-5.1.1-py3-none-any.whl", hash = "sha256:2d313cc50a42cd6c277e7d7dc8d4d7fedd06a2c215f78766ae7b1a66277e0033"}, - {file = "traitlets-5.1.1.tar.gz", hash = "sha256:059f456c5a7c1c82b98c2e8c799f39c9b8128f6d0d46941ee118daace9eb70c7"}, -] -twisted = [ - {file = "Twisted-21.7.0-py3-none-any.whl", hash = "sha256:13c1d1d2421ae556d91e81e66cf0d4f4e4e1e4a36a0486933bee4305c6a4fb9b"}, - {file = "Twisted-21.7.0.tar.gz", hash = "sha256:2cd652542463277378b0d349f47c62f20d9306e57d1247baabd6d1d38a109006"}, -] -twisted-iocpsupport = [ - {file = "twisted-iocpsupport-1.0.2.tar.gz", hash = "sha256:72068b206ee809c9c596b57b5287259ea41ddb4774d86725b19f35bf56aa32a9"}, - {file = "twisted_iocpsupport-1.0.2-cp310-cp310-win32.whl", hash = "sha256:985c06a33f5c0dae92c71a036d1ea63872ee86a21dd9b01e1f287486f15524b4"}, - {file = "twisted_iocpsupport-1.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:81b3abe3527b367da0220482820cb12a16c661672b7bcfcde328902890d63323"}, - {file = "twisted_iocpsupport-1.0.2-cp36-cp36m-win32.whl", hash = "sha256:9dbb8823b49f06d4de52721b47de4d3b3026064ef4788ce62b1a21c57c3fff6f"}, - {file = "twisted_iocpsupport-1.0.2-cp36-cp36m-win_amd64.whl", hash = "sha256:b9fed67cf0f951573f06d560ac2f10f2a4bbdc6697770113a2fc396ea2cb2565"}, - {file = "twisted_iocpsupport-1.0.2-cp37-cp37m-win32.whl", hash = "sha256:b76b4eed9b27fd63ddb0877efdd2d15835fdcb6baa745cb85b66e5d016ac2878"}, - {file = "twisted_iocpsupport-1.0.2-cp37-cp37m-win_amd64.whl", hash = "sha256:851b3735ca7e8102e661872390e3bce88f8901bece95c25a0c8bb9ecb8a23d32"}, - {file = "twisted_iocpsupport-1.0.2-cp38-cp38-win32.whl", hash = "sha256:bf4133139d77fc706d8f572e6b7d82871d82ec7ef25d685c2351bdacfb701415"}, - {file = "twisted_iocpsupport-1.0.2-cp38-cp38-win_amd64.whl", hash = "sha256:306becd6e22ab6e8e4f36b6bdafd9c92e867c98a5ce517b27fdd27760ee7ae41"}, - {file = "twisted_iocpsupport-1.0.2-cp39-cp39-win32.whl", hash = "sha256:3c61742cb0bc6c1ac117a7e5f422c129832f0c295af49e01d8a6066df8cfc04d"}, - {file = "twisted_iocpsupport-1.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:b435857b9efcbfc12f8c326ef0383f26416272260455bbca2cd8d8eca470c546"}, - {file = "twisted_iocpsupport-1.0.2-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:7d972cfa8439bdcb35a7be78b7ef86d73b34b808c74be56dfa785c8a93b851bf"}, -] -typed-ast = [ - {file = "typed_ast-1.5.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d8314c92414ce7481eee7ad42b353943679cf6f30237b5ecbf7d835519e1212"}, - {file = "typed_ast-1.5.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b53ae5de5500529c76225d18eeb060efbcec90ad5e030713fe8dab0fb4531631"}, - {file = "typed_ast-1.5.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:24058827d8f5d633f97223f5148a7d22628099a3d2efe06654ce872f46f07cdb"}, - {file = "typed_ast-1.5.1-cp310-cp310-win_amd64.whl", hash = "sha256:a6d495c1ef572519a7bac9534dbf6d94c40e5b6a608ef41136133377bba4aa08"}, - {file = "typed_ast-1.5.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:de4ecae89c7d8b56169473e08f6bfd2df7f95015591f43126e4ea7865928677e"}, - {file = "typed_ast-1.5.1-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:256115a5bc7ea9e665c6314ed6671ee2c08ca380f9d5f130bd4d2c1f5848d695"}, - {file = "typed_ast-1.5.1-cp36-cp36m-win_amd64.whl", hash = "sha256:7c42707ab981b6cf4b73490c16e9d17fcd5227039720ca14abe415d39a173a30"}, - {file = "typed_ast-1.5.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:71dcda943a471d826ea930dd449ac7e76db7be778fcd722deb63642bab32ea3f"}, - {file = "typed_ast-1.5.1-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:4f30a2bcd8e68adbb791ce1567fdb897357506f7ea6716f6bbdd3053ac4d9471"}, - {file = "typed_ast-1.5.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ca9e8300d8ba0b66d140820cf463438c8e7b4cdc6fd710c059bfcfb1531d03fb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9caaf2b440efb39ecbc45e2fabde809cbe56272719131a6318fd9bf08b58e2cb"}, - {file = "typed_ast-1.5.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c9bcad65d66d594bffab8575f39420fe0ee96f66e23c4d927ebb4e24354ec1af"}, - {file = "typed_ast-1.5.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:591bc04e507595887160ed7aa8d6785867fb86c5793911be79ccede61ae96f4d"}, - {file = "typed_ast-1.5.1-cp38-cp38-win_amd64.whl", hash = "sha256:a80d84f535642420dd17e16ae25bb46c7f4c16ee231105e7f3eb43976a89670a"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:38cf5c642fa808300bae1281460d4f9b7617cf864d4e383054a5ef336e344d32"}, - {file = "typed_ast-1.5.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5b6ab14c56bc9c7e3c30228a0a0b54b915b1579613f6e463ba6f4eb1382e7fd4"}, - {file = "typed_ast-1.5.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:a2b8d7007f6280e36fa42652df47087ac7b0a7d7f09f9468f07792ba646aac2d"}, - {file = "typed_ast-1.5.1-cp39-cp39-win_amd64.whl", hash = "sha256:b6d17f37f6edd879141e64a5db17b67488cfeffeedad8c5cec0392305e9bc775"}, - {file = "typed_ast-1.5.1.tar.gz", hash = "sha256:484137cab8ecf47e137260daa20bafbba5f4e3ec7fda1c1e69ab299b75fa81c5"}, -] -typing-extensions = [ - {file = "typing_extensions-4.0.1-py3-none-any.whl", hash = "sha256:7f001e5ac290a0c0401508864c7ec868be4e701886d5b573a9528ed3973d9d3b"}, - {file = "typing_extensions-4.0.1.tar.gz", hash = "sha256:4ca091dea149f945ec56afb48dae714f21e8692ef22a395223bcd328961b6a0e"}, -] -ujson = [ - {file = "ujson-4.3.0-cp310-cp310-macosx_10_14_x86_64.whl", hash = "sha256:3609e0514f6f721c6c9818b9374ec91b994e59fb193af2f924ca3f2f32009f1c"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de42986e2602b6a0baca452ff50e9cbe66faf256761295d5d07ae3f6757b487d"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:843fd8b3246b2b20bbae48b2334d26507c9531b2b014533adfc6132e3ec8e60c"}, - {file = "ujson-4.3.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5d1083a0dcb39b43cfcd948f09e480c23eb4af66d7d08f6b36951f4c629c3bd1"}, - {file = "ujson-4.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:01d12df8eb25afb939a003284b5b5adca9788c1176c445641e5980fa892562ac"}, - {file = "ujson-4.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b0b9cde57eebaac26de040f8ebf0541e06fe9bcf7e42872dc036d2ced7d99ccf"}, - {file = "ujson-4.3.0-cp310-cp310-win32.whl", hash = "sha256:3d8eaab72ad8129c12ed90ebf310230bd014b6bbf99145ebf2bc890238e0254f"}, - {file = "ujson-4.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:85f28c38952b8a94183ab15ec6c6e89c117d00ceeae5d754ef1a33e01e28b845"}, - {file = "ujson-4.3.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:8a0d9dde58937976cd06cd776411b77b0e5d38db0a3c1be28ee8bb428ff5a42b"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9f4a34386785a33600ac7442fec34c3d8b2d7e5309cfc94bc7c9ba93f12640c2"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8e2a52fbeee55db306b9306892f5cde7e78c56069c1212abf176d1886fff60a"}, - {file = "ujson-4.3.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c5330692122b999997911252466a7d17e4e428d7d9a8db0b99ba81b8b9c010c"}, - {file = "ujson-4.3.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:9baa160ba1d3f712a356e77718251c9d9eee43ed548debdcc9d75b06a75b3e82"}, - {file = "ujson-4.3.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:a6c32356145d95a0403b5895d60c36798a48af13b8863e43ad7457a0361afad0"}, - {file = "ujson-4.3.0-cp36-cp36m-win32.whl", hash = "sha256:b72fadeea5727204674c9f77166da7feaafdf70f1ed50bb15bf321f7c39c7194"}, - {file = "ujson-4.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:1601354caaab0697a9b24815a31611ad013d29cf957d545fc1cd59835b82e3c1"}, - {file = "ujson-4.3.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:b80a35bad8fad1772f992bae8086b0cde788cd3b37f35d0d4506c93e6edad645"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a318df321d7adc3de876b29640cca8de1ad4d4e4fe7c4a76d64d9d6f1676304"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9a508efb829bf0542be9b2578d8da08f0ab1fa712e086ebb777d6ec9e6d8d2"}, - {file = "ujson-4.3.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43d2403451d7bd27b6a600f89d4bd2cf6e1b3494254509d8b5ef3c8e94ae4d8e"}, - {file = "ujson-4.3.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:fd0901db652a58f46550074596227dbddb7a02d2de744d3cd2358101f78037bb"}, - {file = "ujson-4.3.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:00fd67952b1a8a46cf5b0a51b3838187332d13d2e8d178423c5a5405c21d9e7c"}, - {file = "ujson-4.3.0-cp37-cp37m-win32.whl", hash = "sha256:b0e9510e867c72a87db2d16377c2bef912f29afd8381d1fdae332b9b7f697efa"}, - {file = "ujson-4.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:294e907f134fb5d83e0a4439cf4040d74da77157938b4db5730cd174621dcf8b"}, - {file = "ujson-4.3.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:087cd977f4f63f885a49607244e7e157801a22aadcc075a262d3c3633138573c"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f35dcf6d2a67e913a7135809006bd000d55ad5b5834b5dbe5b82dcf8db1ac05"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f158fdb08e022f2f16f0fba317a80558b0cebc7e2c84ae783e5f75616d5c90d5"}, - {file = "ujson-4.3.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a06006dad34c8cfaa734bd6458452e46702b368da53b56e7732351082aa0420"}, - {file = "ujson-4.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6df94e675b05ecf4e7a57883a73b916ffcb5872d7b1298ac5cef8ac1cbce73c6"}, - {file = "ujson-4.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:47af81df5d575e36d4be9396db94f35c8f62de3077a405f9af94f9756255cef5"}, - {file = "ujson-4.3.0-cp38-cp38-win32.whl", hash = "sha256:e46c1462761db518fae51ab0d89a6256aeac148a795f7244d9084c459b477af5"}, - {file = "ujson-4.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:bf199015910fcfa19b6e12881abeb462498791b2ab0111ff8b17095d0477e9d4"}, - {file = "ujson-4.3.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:32ee97ec37af31b35ca4395732d883bf74fb70309d38485f7fb9a5cc3332c53e"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1f211c7c0c9377cbf4650aa990118d0c2cce3c5fad476c39ecd35b6714ba4463"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c81159d3f1bcb5729ba019e63e78ee6c91b556e1ac0e67c7579768720fd3c4e"}, - {file = "ujson-4.3.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b850029d64008e970cae04ada69aa33e1cd412106a1efde221269c1cda1b40cc"}, - {file = "ujson-4.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:327ec982bb89abe779fe463e1013c47aae6ed53b76600af7cb1e8b8cb0ee9f85"}, - {file = "ujson-4.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:103cbabe4e6fd70c957219519e37d65be612d7c74d91ef19022a2c8f8c5e4e82"}, - {file = "ujson-4.3.0-cp39-cp39-win32.whl", hash = "sha256:7b0a63865ec2978ebafb0906bf982eb52bea26fc98e2ae5e59b9d204afe2d762"}, - {file = "ujson-4.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:18040475d997d93a6851d8bee474fba2ec94869e8f826dddd66cdae4aa3fdb92"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df481d4e13ca34d870d1fdf387742867edff3f78a1eea1bbcd72ea2fa68d9a6e"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7e73ec5ba1b42c2027773f69b70eff28df132907aa98b28166c39d3ea45e85b"}, - {file = "ujson-4.3.0-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b270088e472f1d65a0a0aab3190010b9ac1a5b2969d39bf2b53c0fbf339bc87a"}, - {file = "ujson-4.3.0.tar.gz", hash = "sha256:baee56eca35cb5fbe02c28bd9c0936be41a96fa5c0812d9d4b7edeb5c3d568a0"}, -] -urllib3 = [ - {file = "urllib3-1.26.7-py2.py3-none-any.whl", hash = "sha256:c4fdf4019605b6e5423637e01bc9fe4daef873709a7973e195ceba0a62bbc844"}, - {file = "urllib3-1.26.7.tar.gz", hash = "sha256:4987c65554f7a2dbf30c18fd48778ef124af6fab771a377103da0585e2336ece"}, -] -vine = [ - {file = "vine-5.0.0-py2.py3-none-any.whl", hash = "sha256:4c9dceab6f76ed92105027c49c823800dd33cacce13bdedc5b914e3514b7fb30"}, - {file = "vine-5.0.0.tar.gz", hash = "sha256:7d3b1624a953da82ef63462013bbd271d3eb75751489f9807598e8f340bd637e"}, -] -virtualenv = [ - {file = "virtualenv-20.12.1-py2.py3-none-any.whl", hash = "sha256:a5bb9afc076462ea736b0c060829ed6aef707413d0e5946294cc26e3c821436a"}, - {file = "virtualenv-20.12.1.tar.gz", hash = "sha256:d51ae01ef49e7de4d2b9d85b4926ac5aabc3f3879a4b4e4c4a8027fa2f0e4f6a"}, -] -w3lib = [ - {file = "w3lib-1.22.0-py2.py3-none-any.whl", hash = "sha256:0161d55537063e00d95a241663ede3395c4c6d7b777972ba2fd58bbab2001e53"}, - {file = "w3lib-1.22.0.tar.gz", hash = "sha256:0ad6d0203157d61149fd45aaed2e24f53902989c32fc1dccc2e2bfba371560df"}, -] +tomli = [ + {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, + {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, +] +traitlets = [] +twisted = [] +twisted-iocpsupport = [] +typing-extensions = [] +tzdata = [] +ujson = [] +urllib3 = [] +vine = [] +virtualenv = [] +w3lib = [] wcwidth = [ {file = "wcwidth-0.2.5-py2.py3-none-any.whl", hash = "sha256:beb4802a9cebb9144e99086eff703a642a13d6a0052920003a230f3294bbe784"}, {file = "wcwidth-0.2.5.tar.gz", hash = "sha256:c4d647b99872929fdb7bdcaa4fbe7f01413ed3d98077df798530e5b04f116c83"}, @@ -2582,117 +1700,7 @@ werkzeug = [ {file = "Werkzeug-0.16.0-py2.py3-none-any.whl", hash = "sha256:e5f4a1f98b52b18a93da705a7458e55afb26f32bff83ff5d19189f92462d65c4"}, {file = "Werkzeug-0.16.0.tar.gz", hash = "sha256:7280924747b5733b246fe23972186c6b348f9ae29724135a6dfc1e53cea433e7"}, ] -whitenoise = [ - {file = "whitenoise-5.3.0-py2.py3-none-any.whl", hash = "sha256:d963ef25639d1417e8a247be36e6aedd8c7c6f0a08adcb5a89146980a96b577c"}, - {file = "whitenoise-5.3.0.tar.gz", hash = "sha256:d234b871b52271ae7ed6d9da47ffe857c76568f11dd30e28e18c5869dbd11e12"}, -] -wrapt = [ - {file = "wrapt-1.13.3-cp27-cp27m-macosx_10_9_x86_64.whl", hash = "sha256:e05e60ff3b2b0342153be4d1b597bbcfd8330890056b9619f4ad6b8d5c96a81a"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:85148f4225287b6a0665eef08a178c15097366d46b210574a658c1ff5b377489"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:2dded5496e8f1592ec27079b28b6ad2a1ef0b9296d270f77b8e4a3a796cf6909"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:e94b7d9deaa4cc7bac9198a58a7240aaf87fe56c6277ee25fa5b3aa1edebd229"}, - {file = "wrapt-1.13.3-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:498e6217523111d07cd67e87a791f5e9ee769f9241fcf8a379696e25806965af"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:ec7e20258ecc5174029a0f391e1b948bf2906cd64c198a9b8b281b811cbc04de"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:87883690cae293541e08ba2da22cacaae0a092e0ed56bbba8d018cc486fbafbb"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:f99c0489258086308aad4ae57da9e8ecf9e1f3f30fa35d5e170b4d4896554d80"}, - {file = "wrapt-1.13.3-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:6a03d9917aee887690aa3f1747ce634e610f6db6f6b332b35c2dd89412912bca"}, - {file = "wrapt-1.13.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:936503cb0a6ed28dbfa87e8fcd0a56458822144e9d11a49ccee6d9a8adb2ac44"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f9c51d9af9abb899bd34ace878fbec8bf357b3194a10c4e8e0a25512826ef056"}, - {file = "wrapt-1.13.3-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:220a869982ea9023e163ba915077816ca439489de6d2c09089b219f4e11b6785"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0877fe981fd76b183711d767500e6b3111378ed2043c145e21816ee589d91096"}, - {file = "wrapt-1.13.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:43e69ffe47e3609a6aec0fe723001c60c65305784d964f5007d5b4fb1bc6bf33"}, - {file = "wrapt-1.13.3-cp310-cp310-win32.whl", hash = "sha256:78dea98c81915bbf510eb6a3c9c24915e4660302937b9ae05a0947164248020f"}, - {file = "wrapt-1.13.3-cp310-cp310-win_amd64.whl", hash = "sha256:ea3e746e29d4000cd98d572f3ee2a6050a4f784bb536f4ac1f035987fc1ed83e"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:8c73c1a2ec7c98d7eaded149f6d225a692caa1bd7b2401a14125446e9e90410d"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:086218a72ec7d986a3eddb7707c8c4526d677c7b35e355875a0fe2918b059179"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:e92d0d4fa68ea0c02d39f1e2f9cb5bc4b4a71e8c442207433d8db47ee79d7aa3"}, - {file = "wrapt-1.13.3-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:d4a5f6146cfa5c7ba0134249665acd322a70d1ea61732723c7d3e8cc0fa80755"}, - {file = "wrapt-1.13.3-cp35-cp35m-win32.whl", hash = "sha256:8aab36778fa9bba1a8f06a4919556f9f8c7b33102bd71b3ab307bb3fecb21851"}, - {file = "wrapt-1.13.3-cp35-cp35m-win_amd64.whl", hash = "sha256:944b180f61f5e36c0634d3202ba8509b986b5fbaf57db3e94df11abee244ba13"}, - {file = "wrapt-1.13.3-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:2ebdde19cd3c8cdf8df3fc165bc7827334bc4e353465048b36f7deeae8ee0918"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:610f5f83dd1e0ad40254c306f4764fcdc846641f120c3cf424ff57a19d5f7ade"}, - {file = "wrapt-1.13.3-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:5601f44a0f38fed36cc07db004f0eedeaadbdcec90e4e90509480e7e6060a5bc"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:e6906d6f48437dfd80464f7d7af1740eadc572b9f7a4301e7dd3d65db285cacf"}, - {file = "wrapt-1.13.3-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:766b32c762e07e26f50d8a3468e3b4228b3736c805018e4b0ec8cc01ecd88125"}, - {file = "wrapt-1.13.3-cp36-cp36m-win32.whl", hash = "sha256:5f223101f21cfd41deec8ce3889dc59f88a59b409db028c469c9b20cfeefbe36"}, - {file = "wrapt-1.13.3-cp36-cp36m-win_amd64.whl", hash = "sha256:f122ccd12fdc69628786d0c947bdd9cb2733be8f800d88b5a37c57f1f1d73c10"}, - {file = "wrapt-1.13.3-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:46f7f3af321a573fc0c3586612db4decb7eb37172af1bc6173d81f5b66c2e068"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:778fd096ee96890c10ce96187c76b3e99b2da44e08c9e24d5652f356873f6709"}, - {file = "wrapt-1.13.3-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:0cb23d36ed03bf46b894cfec777eec754146d68429c30431c99ef28482b5c1df"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:96b81ae75591a795d8c90edc0bfaab44d3d41ffc1aae4d994c5aa21d9b8e19a2"}, - {file = "wrapt-1.13.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:7dd215e4e8514004c8d810a73e342c536547038fb130205ec4bba9f5de35d45b"}, - {file = "wrapt-1.13.3-cp37-cp37m-win32.whl", hash = "sha256:47f0a183743e7f71f29e4e21574ad3fa95676136f45b91afcf83f6a050914829"}, - {file = "wrapt-1.13.3-cp37-cp37m-win_amd64.whl", hash = "sha256:fd76c47f20984b43d93de9a82011bb6e5f8325df6c9ed4d8310029a55fa361ea"}, - {file = "wrapt-1.13.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b73d4b78807bd299b38e4598b8e7bd34ed55d480160d2e7fdaabd9931afa65f9"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ec9465dd69d5657b5d2fa6133b3e1e989ae27d29471a672416fd729b429eb554"}, - {file = "wrapt-1.13.3-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:dd91006848eb55af2159375134d724032a2d1d13bcc6f81cd8d3ed9f2b8e846c"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:ae9de71eb60940e58207f8e71fe113c639da42adb02fb2bcbcaccc1ccecd092b"}, - {file = "wrapt-1.13.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:51799ca950cfee9396a87f4a1240622ac38973b6df5ef7a41e7f0b98797099ce"}, - {file = "wrapt-1.13.3-cp38-cp38-win32.whl", hash = "sha256:4b9c458732450ec42578b5642ac53e312092acf8c0bfce140ada5ca1ac556f79"}, - {file = "wrapt-1.13.3-cp38-cp38-win_amd64.whl", hash = "sha256:7dde79d007cd6dfa65afe404766057c2409316135cb892be4b1c768e3f3a11cb"}, - {file = "wrapt-1.13.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:981da26722bebb9247a0601e2922cedf8bb7a600e89c852d063313102de6f2cb"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:705e2af1f7be4707e49ced9153f8d72131090e52be9278b5dbb1498c749a1e32"}, - {file = "wrapt-1.13.3-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:25b1b1d5df495d82be1c9d2fad408f7ce5ca8a38085e2da41bb63c914baadff7"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:77416e6b17926d953b5c666a3cb718d5945df63ecf922af0ee576206d7033b5e"}, - {file = "wrapt-1.13.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:865c0b50003616f05858b22174c40ffc27a38e67359fa1495605f96125f76640"}, - {file = "wrapt-1.13.3-cp39-cp39-win32.whl", hash = "sha256:0a017a667d1f7411816e4bf214646d0ad5b1da2c1ea13dec6c162736ff25a374"}, - {file = "wrapt-1.13.3-cp39-cp39-win_amd64.whl", hash = "sha256:81bd7c90d28a4b2e1df135bfbd7c23aee3050078ca6441bead44c42483f9ebfb"}, - {file = "wrapt-1.13.3.tar.gz", hash = "sha256:1fea9cd438686e6682271d36f3481a9f3636195578bab9ca3382e2f5f01fc185"}, -] -zipp = [ - {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, - {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, -] -"zope.interface" = [ - {file = "zope.interface-5.4.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:7df1e1c05304f26faa49fa752a8c690126cf98b40b91d54e6e9cc3b7d6ffe8b7"}, - {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_i686.whl", hash = "sha256:2c98384b254b37ce50eddd55db8d381a5c53b4c10ee66e1e7fe749824f894021"}, - {file = "zope.interface-5.4.0-cp27-cp27m-manylinux1_x86_64.whl", hash = "sha256:08f9636e99a9d5410181ba0729e0408d3d8748026ea938f3b970a0249daa8192"}, - {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_i686.whl", hash = "sha256:0ea1d73b7c9dcbc5080bb8aaffb776f1c68e807767069b9ccdd06f27a161914a"}, - {file = "zope.interface-5.4.0-cp27-cp27m-manylinux2010_x86_64.whl", hash = "sha256:273f158fabc5ea33cbc936da0ab3d4ba80ede5351babc4f577d768e057651531"}, - {file = "zope.interface-5.4.0-cp27-cp27m-win32.whl", hash = "sha256:a1e6e96217a0f72e2b8629e271e1b280c6fa3fe6e59fa8f6701bec14e3354325"}, - {file = "zope.interface-5.4.0-cp27-cp27m-win_amd64.whl", hash = "sha256:877473e675fdcc113c138813a5dd440da0769a2d81f4d86614e5d62b69497155"}, - {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_i686.whl", hash = "sha256:f7ee479e96f7ee350db1cf24afa5685a5899e2b34992fb99e1f7c1b0b758d263"}, - {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux1_x86_64.whl", hash = "sha256:b0297b1e05fd128d26cc2460c810d42e205d16d76799526dfa8c8ccd50e74959"}, - {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_i686.whl", hash = "sha256:af310ec8335016b5e52cae60cda4a4f2a60a788cbb949a4fbea13d441aa5a09e"}, - {file = "zope.interface-5.4.0-cp27-cp27mu-manylinux2010_x86_64.whl", hash = "sha256:9a9845c4c6bb56e508651f005c4aeb0404e518c6f000d5a1123ab077ab769f5c"}, - {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_i686.whl", hash = "sha256:0b465ae0962d49c68aa9733ba92a001b2a0933c317780435f00be7ecb959c702"}, - {file = "zope.interface-5.4.0-cp35-cp35m-manylinux1_x86_64.whl", hash = "sha256:5dd9ca406499444f4c8299f803d4a14edf7890ecc595c8b1c7115c2342cadc5f"}, - {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_i686.whl", hash = "sha256:469e2407e0fe9880ac690a3666f03eb4c3c444411a5a5fddfdabc5d184a79f05"}, - {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2010_x86_64.whl", hash = "sha256:52de7fc6c21b419078008f697fd4103dbc763288b1406b4562554bd47514c004"}, - {file = "zope.interface-5.4.0-cp35-cp35m-manylinux2014_aarch64.whl", hash = "sha256:3dd4952748521205697bc2802e4afac5ed4b02909bb799ba1fe239f77fd4e117"}, - {file = "zope.interface-5.4.0-cp35-cp35m-win32.whl", hash = "sha256:dd93ea5c0c7f3e25335ab7d22a507b1dc43976e1345508f845efc573d3d779d8"}, - {file = "zope.interface-5.4.0-cp35-cp35m-win_amd64.whl", hash = "sha256:3748fac0d0f6a304e674955ab1365d515993b3a0a865e16a11ec9d86fb307f63"}, - {file = "zope.interface-5.4.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:66c0061c91b3b9cf542131148ef7ecbecb2690d48d1612ec386de9d36766058f"}, - {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:d0c1bc2fa9a7285719e5678584f6b92572a5b639d0e471bb8d4b650a1a910920"}, - {file = "zope.interface-5.4.0-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2876246527c91e101184f63ccd1d716ec9c46519cc5f3d5375a3351c46467c46"}, - {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:334701327f37c47fa628fc8b8d28c7d7730ce7daaf4bda1efb741679c2b087fc"}, - {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:71aace0c42d53abe6fc7f726c5d3b60d90f3c5c055a447950ad6ea9cec2e37d9"}, - {file = "zope.interface-5.4.0-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:5bb3489b4558e49ad2c5118137cfeaf59434f9737fa9c5deefc72d22c23822e2"}, - {file = "zope.interface-5.4.0-cp36-cp36m-win32.whl", hash = "sha256:1c0e316c9add0db48a5b703833881351444398b04111188069a26a61cfb4df78"}, - {file = "zope.interface-5.4.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f0c02cbb9691b7c91d5009108f975f8ffeab5dff8f26d62e21c493060eff2a1"}, - {file = "zope.interface-5.4.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:7d97a4306898b05404a0dcdc32d9709b7d8832c0c542b861d9a826301719794e"}, - {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:867a5ad16892bf20e6c4ea2aab1971f45645ff3102ad29bd84c86027fa99997b"}, - {file = "zope.interface-5.4.0-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:5f931a1c21dfa7a9c573ec1f50a31135ccce84e32507c54e1ea404894c5eb96f"}, - {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:194d0bcb1374ac3e1e023961610dc8f2c78a0f5f634d0c737691e215569e640d"}, - {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:8270252effc60b9642b423189a2fe90eb6b59e87cbee54549db3f5562ff8d1b8"}, - {file = "zope.interface-5.4.0-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:15e7d1f7a6ee16572e21e3576d2012b2778cbacf75eb4b7400be37455f5ca8bf"}, - {file = "zope.interface-5.4.0-cp37-cp37m-win32.whl", hash = "sha256:8892f89999ffd992208754851e5a052f6b5db70a1e3f7d54b17c5211e37a98c7"}, - {file = "zope.interface-5.4.0-cp37-cp37m-win_amd64.whl", hash = "sha256:2e5a26f16503be6c826abca904e45f1a44ff275fdb7e9d1b75c10671c26f8b94"}, - {file = "zope.interface-5.4.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:0f91b5b948686659a8e28b728ff5e74b1be6bf40cb04704453617e5f1e945ef3"}, - {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_i686.whl", hash = "sha256:4de4bc9b6d35c5af65b454d3e9bc98c50eb3960d5a3762c9438df57427134b8e"}, - {file = "zope.interface-5.4.0-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:bf68f4b2b6683e52bec69273562df15af352e5ed25d1b6641e7efddc5951d1a7"}, - {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:63b82bb63de7c821428d513607e84c6d97d58afd1fe2eb645030bdc185440120"}, - {file = "zope.interface-5.4.0-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:db1fa631737dab9fa0b37f3979d8d2631e348c3b4e8325d6873c2541d0ae5a48"}, - {file = "zope.interface-5.4.0-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:f44e517131a98f7a76696a7b21b164bcb85291cee106a23beccce454e1f433a4"}, - {file = "zope.interface-5.4.0-cp38-cp38-win32.whl", hash = "sha256:a9506a7e80bcf6eacfff7f804c0ad5350c8c95b9010e4356a4b36f5322f09abb"}, - {file = "zope.interface-5.4.0-cp38-cp38-win_amd64.whl", hash = "sha256:3c02411a3b62668200910090a0dff17c0b25aaa36145082a5a6adf08fa281e54"}, - {file = "zope.interface-5.4.0-cp39-cp39-macosx_10_14_x86_64.whl", hash = "sha256:0cee5187b60ed26d56eb2960136288ce91bcf61e2a9405660d271d1f122a69a4"}, - {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_i686.whl", hash = "sha256:a8156e6a7f5e2a0ff0c5b21d6bcb45145efece1909efcbbbf48c56f8da68221d"}, - {file = "zope.interface-5.4.0-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:205e40ccde0f37496904572035deea747390a8b7dc65146d30b96e2dd1359a83"}, - {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:3f24df7124c323fceb53ff6168da70dbfbae1442b4f3da439cd441681f54fe25"}, - {file = "zope.interface-5.4.0-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:5208ebd5152e040640518a77827bdfcc73773a15a33d6644015b763b9c9febc1"}, - {file = "zope.interface-5.4.0-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:17776ecd3a1fdd2b2cd5373e5ef8b307162f581c693575ec62e7c5399d80794c"}, - {file = "zope.interface-5.4.0-cp39-cp39-win32.whl", hash = "sha256:d4d9d6c1a455d4babd320203b918ccc7fcbefe308615c521062bc2ba1aa4d26e"}, - {file = "zope.interface-5.4.0-cp39-cp39-win_amd64.whl", hash = "sha256:0cba8477e300d64a11a9789ed40ee8932b59f9ee05f85276dbb4b59acee5dd09"}, - {file = "zope.interface-5.4.0.tar.gz", hash = "sha256:5dba5f530fec3f0988d83b78cc591b58c0b6eb8431a85edd1569a0539a8a5a0e"}, -] +whitenoise = [] +wrapt = [] +zipp = [] +"zope.interface" = [] diff --git a/pyproject.toml b/pyproject.toml index 1a1d47ec..295d2dff 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -2,55 +2,40 @@ name = "backend" version = "0.1.0" description = "Backend for Sora Reader" -authors = [ - "dhvcc <1337kwiz@gmail.com>", - "ScriptHound ", - "NikDark ", -] +authors = ["dhvcc <1337kwiz@gmail.com>"] license = "GPLv3" [tool.poetry.dependencies] python = "^3.8" -Django = "3.1" +Django = "^4.1.1" psycopg2 = "^2.8.6" -djangorestframework = "^3.12.2" Markdown = "^3.3.3" -django-filter = "^2.4.0" -python-dotenv = "^0.15.0" -djangorestframework-simplejwt = "^4.6.0" Scrapy = "^2.4.1" -argon2-cffi = "^20.1.0" -django-extensions = "^3.1.1" -whitenoise = "^5.2.0" -django-jazzmin = { git = "https://github.com/dhvcc/django-jazzmin.git", rev = "488036718b0c2a9d9b928c8dca257164db64857d" } +django-extensions = "^3.2.0" +django-jazzmin = "^2.5.0" requests = "^2.25.1" -pytz = "^2021.1" -dateutils = "^0.6.12" -django-cors-headers = "^3.7.0" -redis = "^3.5.3" +django-cors-headers = "^3.13.0" +redis = "^4.3.4" autoflake = "^1.4" -sentry-sdk = "^1.3.0" gunicorn = "^20.1.0" Werkzeug = "0.16.0" -django-silk = "^4.1.0" orjson = "^3.6.4" -ujson = "^4.2.0" -django-elasticsearch-dsl = { git = "https://github.com/dhvcc/django-elasticsearch-dsl.git", rev = "53598a336915a795467233f091f3c30836f0f758" } -colorlog = "^6.5.0" +ujson = "^5.4.0" +django-elasticsearch-dsl = "^7.2.2" celery = "^5.2.0" -crochet = "^2.0.0" +django-environ = "^0.9.0" +dj-database-url = "^1.0.0" +whitenoise = {extras = ["brotli"], version = "^6.2.0"} [tool.poetry.dev-dependencies] -flake8 = "^3.8.4" -black = "^20.8b1" +flake8 = "^5.0.4" +black = "^22.8.0" isort = "^5.7.0" -pytest = "^6.2.2" -ipython = "^7.21.0" +ipython = "^8.4.0" pre-commit = "^2.11.1" -rich = "^10.1.0" -django-typomatic = "^1.5.0" +rich = "^12.5.1" ipdb = "^0.13.9" -django-types = "^0.9.0" +django-types = "^0.16.0" [build-system] requires = ["poetry-core>=1.0.0"] @@ -58,7 +43,7 @@ build-backend = "poetry.core.masonry.api" [tool.black] line-length = 100 -target-version = ['py37', 'py38'] +target-version = ['py38', 'py39', 'py310'] force-exclude = ''' ( \.eggs diff --git a/static/admin/css/custom_jazzmin.css b/static/admin/css/custom_jazzmin.css index f535cb12..b7dd2a42 100644 --- a/static/admin/css/custom_jazzmin.css +++ b/static/admin/css/custom_jazzmin.css @@ -48,4 +48,8 @@ a:hover { color: #4db6ac !important; } +.selector-chosen h2 { + background-color: #4db6ac !important; +} + /*# sourceMappingURL=custom_jazzmin.css.map */ diff --git a/static/admin/scss/custom_jazzmin.scss b/static/admin/scss/custom_jazzmin.scss index 43ec71da..7f02c372 100644 --- a/static/admin/scss/custom_jazzmin.scss +++ b/static/admin/scss/custom_jazzmin.scss @@ -65,3 +65,7 @@ a { color: $teal-main !important; } } + +.selector-chosen h2 { + background-color: $teal-main !important; +} From 450e7b976907fbf9af7d2515e45c5266a19b03b8 Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Tue, 6 Sep 2022 20:28:53 +0300 Subject: [PATCH 03/73] Update .idea --- .gitignore | 29 ++++++++++++++-- .idea/.gitignore | 8 +++++ .idea/backend.iml | 34 +++++++++++++++++++ .../inspectionProfiles/profiles_settings.xml | 6 ++++ .idea/misc.xml | 4 +++ .idea/modules.xml | 8 +++++ .idea/scopes/Project_and_venv.xml | 3 ++ .idea/vcs.xml | 6 ++++ .idea/watcherTasks.xml | 25 ++++++++++++++ apps/parse/api/api.py | 8 +++++ apps/parse/utils.py | 0 manga_reader/api.py | 0 12 files changed, 128 insertions(+), 3 deletions(-) create mode 100644 .idea/.gitignore create mode 100644 .idea/backend.iml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/misc.xml create mode 100644 .idea/modules.xml create mode 100644 .idea/scopes/Project_and_venv.xml create mode 100644 .idea/vcs.xml create mode 100644 .idea/watcherTasks.xml create mode 100644 apps/parse/api/api.py create mode 100644 apps/parse/utils.py create mode 100644 manga_reader/api.py diff --git a/.gitignore b/.gitignore index c38de282..1ee0777d 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,28 @@ -.idea -.vscode +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# File-based project format +*.iws + ### Python template # Byte-compiled / optimized / DLL files __pycache__/ @@ -144,7 +167,6 @@ dmypy.json # Cython debug symbols cython_debug/ -.idea/ .envs/ # sitemaps @@ -157,3 +179,4 @@ redis-data redis.conf .vim nohup.out +.vscode diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 00000000..13566b81 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,8 @@ +# Default ignored files +/shelf/ +/workspace.xml +# Editor-based HTTP Client requests +/httpRequests/ +# Datasource local storage ignored files +/dataSources/ +/dataSources.local.xml diff --git a/.idea/backend.iml b/.idea/backend.iml new file mode 100644 index 00000000..f0f0fd43 --- /dev/null +++ b/.idea/backend.iml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 00000000..105ce2da --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 00000000..e8112868 --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/.idea/modules.xml b/.idea/modules.xml new file mode 100644 index 00000000..e066844e --- /dev/null +++ b/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/scopes/Project_and_venv.xml b/.idea/scopes/Project_and_venv.xml new file mode 100644 index 00000000..40b0daa4 --- /dev/null +++ b/.idea/scopes/Project_and_venv.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 00000000..94a25f7f --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/watcherTasks.xml b/.idea/watcherTasks.xml new file mode 100644 index 00000000..7874ce77 --- /dev/null +++ b/.idea/watcherTasks.xml @@ -0,0 +1,25 @@ + + + + + + + + \ No newline at end of file diff --git a/apps/parse/api/api.py b/apps/parse/api/api.py new file mode 100644 index 00000000..bb63781b --- /dev/null +++ b/apps/parse/api/api.py @@ -0,0 +1,8 @@ +from ninja import NinjaAPI + +api = NinjaAPI() + + +@api.get("hello/") +def hello(request): + return "Hello world" diff --git a/apps/parse/utils.py b/apps/parse/utils.py new file mode 100644 index 00000000..e69de29b diff --git a/manga_reader/api.py b/manga_reader/api.py new file mode 100644 index 00000000..e69de29b From 1848353af9ee40185d78a5ae3d59cc5601af3c05 Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Tue, 6 Sep 2022 20:31:43 +0300 Subject: [PATCH 04/73] Update docker conf Add health checks and limits, fix docker-entrypoint.sh --- .envs.example/docker.env.example | 21 +++++---------------- docker-compose.yml | 19 ++++++++++++++++++- docker-entrypoint.sh | 2 +- 3 files changed, 24 insertions(+), 18 deletions(-) diff --git a/.envs.example/docker.env.example b/.envs.example/docker.env.example index f065a566..d16435f0 100644 --- a/.envs.example/docker.env.example +++ b/.envs.example/docker.env.example @@ -1,6 +1,6 @@ # Used in docker compose -# ###### +######## # DATA # ######## @@ -8,28 +8,17 @@ POSTGRES_USER=postgres POSTGRES_PASSWORD=postgres POSTGRES_DB=sora -DATABASE_HOST=db -DATABASE_USER=postgres -DATABASE_PASSWORD=postgres - -DATABASE_PORT=5432 -DATABASE_NAME=sora - -REDIS_URL=redis://redis:6379 -ELASTICSEARCH_HOST=elasticsearch:9200 - -# ######## +########## # DJANGO # -# ######## +########## DEBUG=1 SECRET_KEY=DevServer # Whitespace-separated list ALLOWED_HOSTS=* -PAGE_SIZE=20 -# ####### +######### # Other # -# ####### +######### PROXY= diff --git a/docker-compose.yml b/docker-compose.yml index c406c13b..cae86d6b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,9 @@ services: - 8000 environment: - PORT=8000 + - REDIS_URL=redis://redis:6379 + - ELASTICSEARCH_HOST=elasticsearch:9200 + - DATABASE_URL=postgres://$POSTGRES_USER:POSTGRES_PASSWORD@db:5432/sora ports: - "8888:8000" volumes: @@ -31,6 +34,11 @@ services: - sora_postgres:/var/lib/postgresql/data env_file: - .envs/docker.env + healthcheck: + # Wait for postgres to actually start before consider service 'healthy' + test: [ "CMD-SHELL", "pg_isready -U postgres" ] + interval: 5s + timeout: 5s redis: image: redis @@ -45,6 +53,10 @@ services: - sora_redis:/usr/local/etc/redis/redis.conf environment: - REDIS_REPLICATION_MODE=master + healthcheck: + test: [ "CMD", "redis-cli", "--raw", "incr", "ping" ] + interval: 1m + timeout: 5s elasticsearch: image: elasticsearch:7.14.2 @@ -54,7 +66,12 @@ services: volumes: - esdata1:/usr/share/elasticsearch/data ports: - - 9200:9200 + - "9200:9200" + deploy: + resources: + limits: + cpus: 0.50 + memory: 2048M volumes: esdata1: diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 9e154a47..f6dd4955 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -1,6 +1,6 @@ #!/bin/bash -until pg_isready -h "$DATABASE_HOST" -p "$DATABASE_PORT" -U "$DATABASE_USER"; do +until pg_isready "$DATBASE_URL"; do echo >&2 "Postgres is unavailable - sleeping" sleep 1 done From b3bbc0494902e029fbcbb0ab52e7a51b7f614b6c Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Tue, 6 Sep 2022 20:32:04 +0300 Subject: [PATCH 05/73] Add basic ninja API for manga --- apps/login/views.py | 3 +- apps/parse/api/api.py | 36 +++++++++++++++++--- apps/parse/api/schemas.py | 28 ++++++++++++++++ apps/parse/migrations/0001_initial.py | 3 +- apps/parse/models.py | 6 ++-- apps/parse/utils.py | 41 +++++++++++++++++++++++ manga_reader/api.py | 7 ++++ manga_reader/settings.py | 47 ++++++++++++--------------- manga_reader/urls.py | 12 ++++--- poetry.lock | 39 ++++++++++++++++++---- pyproject.toml | 2 +- 11 files changed, 174 insertions(+), 50 deletions(-) create mode 100644 apps/parse/api/schemas.py diff --git a/apps/login/views.py b/apps/login/views.py index 523a279f..c207bcbe 100644 --- a/apps/login/views.py +++ b/apps/login/views.py @@ -1,3 +1,5 @@ +import logging + from django.http import HttpResponse from rest_framework import status from rest_framework.decorators import action @@ -8,7 +10,6 @@ from rest_framework_simplejwt.views import TokenViewBase from apps.login.serializers import users -import logging class SignUpView(APIView): diff --git a/apps/parse/api/api.py b/apps/parse/api/api.py index bb63781b..7667f40d 100644 --- a/apps/parse/api/api.py +++ b/apps/parse/api/api.py @@ -1,8 +1,34 @@ -from ninja import NinjaAPI +from functools import reduce -api = NinjaAPI() +from elasticsearch_dsl import Q +from ninja import Router +from typing import List +from django.shortcuts import get_object_or_404 +from apps.parse.documents import MangaDocument +from apps.parse.models import Manga +from apps.parse.api.schemas import MangaOut -@api.get("hello/") -def hello(request): - return "Hello world" +router = Router(tags=["Manga"]) + + +@router.get("/search", response=List[MangaOut]) +def search_manga(request, title: str): + title = title.split(" ") + + def fuzzy_query(title_part: str): + return Q("fuzzy", title=title_part) + + if len(title) > 1: + query = reduce(lambda a, b: fuzzy_query(a) | fuzzy_query(b), title) + else: + query = fuzzy_query(title[0]) + + qs = MangaDocument.search().query(query).to_queryset() + return qs + + +@router.get("/{manga_id}", response=MangaOut) +def get_manga(request, manga_id: int): + manga = get_object_or_404(Manga, id=manga_id) + return manga diff --git a/apps/parse/api/schemas.py b/apps/parse/api/schemas.py new file mode 100644 index 00000000..ae33cd7b --- /dev/null +++ b/apps/parse/api/schemas.py @@ -0,0 +1,28 @@ +from ninja import ModelSchema + +from apps.parse.models import Manga + + +class MangaOut(ModelSchema): + class Config: + model = Manga + model_fields = ( + "id", + # "source", + "source_url", + "title", + "alt_title", + "rating", + "thumbnail", + "image", + "description", + # "authors", + # "screenwriters", + # "illustrators", + # "translators", + # "genres", + # "categories", + "status", + "year", + "modified", + ) diff --git a/apps/parse/migrations/0001_initial.py b/apps/parse/migrations/0001_initial.py index 62331670..6a7a771f 100644 --- a/apps/parse/migrations/0001_initial.py +++ b/apps/parse/migrations/0001_initial.py @@ -1,4 +1,4 @@ -# Generated by Django 4.1.1 on 2022-09-05 12:50 +# Generated by Django 4.1.1 on 2022-09-05 13:15 from django.db import migrations, models import django.db.models.deletion @@ -53,7 +53,6 @@ class Migration(migrations.Migration): ('year', models.TextField(blank=True, null=True)), ('source_url', models.URLField(max_length=2000, unique=True)), ('rss_url', models.URLField(blank=True, max_length=2000, null=True)), - ('updated_detail', models.DateTimeField(blank=True, null=True)), ('categories', models.ManyToManyField(blank=True, related_name='mangas', to='parse.category')), ('genres', models.ManyToManyField(blank=True, related_name='mangas', to='parse.genre')), ], diff --git a/apps/parse/models.py b/apps/parse/models.py index 4debca95..04fa3351 100644 --- a/apps/parse/models.py +++ b/apps/parse/models.py @@ -1,9 +1,10 @@ from datetime import timedelta from django.db import models -from django.db.models.fields import DateTimeField, DecimalField, FloatField, TextField, URLField +from django.db.models.fields import DecimalField, FloatField, TextField, URLField from django.db.models.fields.related import ForeignKey, ManyToManyField from django.db.models.query import QuerySet +from django_extensions.db.models import TimeStampedModel from apps.core.abc.models import BaseModel from apps.core.utils import url_prefix @@ -57,7 +58,7 @@ def __str__(self) -> str: return self.title -class Manga(BaseModel): +class Manga(BaseModel, TimeStampedModel): NAME_FIELD = "title" BASE_UPDATE_FREQUENCY = timedelta(hours=1) @@ -77,7 +78,6 @@ class Manga(BaseModel): rss_url = URLField(max_length=2000, null=True, blank=True) genres = ManyToManyField("Genre", related_name="mangas", blank=True) categories = ManyToManyField("Category", related_name="mangas", blank=True) - updated_detail = DateTimeField(blank=True, null=True) people_related = ManyToManyField( "Person", through="PersonRelatedToManga", related_name="mangas" ) diff --git a/apps/parse/utils.py b/apps/parse/utils.py index e69de29b..6dc49392 100644 --- a/apps/parse/utils.py +++ b/apps/parse/utils.py @@ -0,0 +1,41 @@ +from datetime import datetime +import logging +from django.utils import timezone + +from apps.parse.models import Manga, Person, PersonRelatedToManga + + +def needs_update(updated_detail: str): + updated_detail = datetime.fromisoformat(updated_detail) + if updated_detail: + update_deadline = updated_detail + Manga.BASE_UPDATE_FREQUENCY + if timezone.now() >= update_deadline: + return True + return False + + +def save_persons(manga, role, persons): + instance = 0 + people_related: PersonRelatedToManga = manga.people_related.through + people_related.objects.filter(role=role, manga=manga).delete() + people_related.objects.bulk_create( + [ + people_related( + person=Person.objects.get_or_create(name=person)[instance], + manga=manga, + role=role, + ) + for person in persons + ], + ignore_conflicts=True, + ) + +def mute_logger_stdout(logger_name: str, *other_loggers): + import warnings + + logger_names = [logger_name, *other_loggers] + for name in logger_names: + warnings.filterwarnings("ignore", module=name) + logger = logging.getLogger(name) + logger.setLevel(logging.CRITICAL) + logger.propagate = False \ No newline at end of file diff --git a/manga_reader/api.py b/manga_reader/api.py index e69de29b..92acee8c 100644 --- a/manga_reader/api.py +++ b/manga_reader/api.py @@ -0,0 +1,7 @@ +from ninja import NinjaAPI + +from apps.parse.api.api import router + +api = NinjaAPI(title="Sora API", docs_url="/docs/") + +api.add_router('/manga/', router) diff --git a/manga_reader/settings.py b/manga_reader/settings.py index 7b8b9326..c17c8a74 100644 --- a/manga_reader/settings.py +++ b/manga_reader/settings.py @@ -1,24 +1,19 @@ -import copy -import logging import os -from datetime import timedelta -from functools import partial from pathlib import Path import dj_database_url import environ - BASE_DIR = Path(__file__).resolve().parent.parent env = environ.Env( DEBUG=(bool, True), ALLOWED_HOSTS=(lambda a: a.split(" "), ["*"]), DJANGO_LOG_LEVEL=(str, "INFO"), - REDIS_URL=(str, "redis://localhost:6079"), - ELASTICSEARCH_HOST=(str, "localhost:92000"), + REDIS_URL=(str, "redis://localhost:8883"), + ELASTICSEARCH_HOST=(str, "localhost:9200"), PROXY=(str, ""), ) -environ.Env.read_env(os.path.join(BASE_DIR, '.env')) +environ.Env.read_env(os.path.join(BASE_DIR, ".env")) ########### # Project # @@ -162,7 +157,7 @@ DEFAULT_AUTO_FIELD = "django.db.models.AutoField" DATABASES = { - 'default': dj_database_url.config(default='postgres://postgres:postgres@localhost:5432/sora'), + "default": dj_database_url.config(default="postgres://postgres:postgres@localhost:8882/sora"), } ################# @@ -184,10 +179,10 @@ }, ] PASSWORD_HASHERS = [ - 'django.contrib.auth.hashers.PBKDF2PasswordHasher', - 'django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher', - 'django.contrib.auth.hashers.BCryptSHA256PasswordHasher', - 'django.contrib.auth.hashers.ScryptPasswordHasher', + "django.contrib.auth.hashers.PBKDF2PasswordHasher", + "django.contrib.auth.hashers.PBKDF2SHA1PasswordHasher", + "django.contrib.auth.hashers.BCryptSHA256PasswordHasher", + "django.contrib.auth.hashers.ScryptPasswordHasher", ] ########### @@ -234,22 +229,22 @@ ########## LOGGING = { - 'version': 1, - 'disable_existing_loggers': False, - 'handlers': { - 'console': { - 'class': 'logging.StreamHandler', + "version": 1, + "disable_existing_loggers": False, + "handlers": { + "console": { + "class": "logging.StreamHandler", }, }, - 'root': { - 'handlers': ['console'], - 'level': 'WARNING', + "root": { + "handlers": ["console"], + "level": "WARNING", }, - 'loggers': { - 'django': { - 'handlers': ['console'], - 'level': env('DJANGO_LOG_LEVEL'), - 'propagate': False, + "loggers": { + "django": { + "handlers": ["console"], + "level": env("DJANGO_LOG_LEVEL"), + "propagate": False, }, }, } diff --git a/manga_reader/urls.py b/manga_reader/urls.py index b091a145..df58c809 100644 --- a/manga_reader/urls.py +++ b/manga_reader/urls.py @@ -1,15 +1,17 @@ -from django.conf import settings from django.conf.urls import include from django.contrib import admin from django.urls import path, re_path -apipatterns = [ - path("docs/", include("apps.api_docs.urls")), - # path("manga/", include("apps.parse.api.urls")), +from manga_reader.api import api + +api_patterns = [ + # path("docs/", include("apps.api_docs.urls")), + # path("manga/", api.urls), # path("auth/", include("apps.login.urls")), ] urlpatterns = [ - path("api/", include(apipatterns)), + path("api/", api.urls), + # path("api/", include(api_patterns)), re_path(r"^(?!api)\w*?", admin.site.urls), ] diff --git a/poetry.lock b/poetry.lock index 60886ac4..4ba0fc50 100644 --- a/poetry.lock +++ b/poetry.lock @@ -458,12 +458,21 @@ python-versions = ">=3.6.2" django = ">=2.2" [[package]] -name = "django-types" -version = "0.16.0" -description = "Type stubs for Django" -category = "dev" +name = "django-ninja" +version = "0.19.1" +description = "Django Ninja - Fast Django REST framework" +category = "main" optional = false -python-versions = ">=3.7,<4.0" +python-versions = ">=3.6" + +[package.dependencies] +Django = ">=2.2" +pydantic = ">=1.6,<2.0.0" + +[package.extras] +dev = ["pre-commit"] +doc = ["mkdocs", "mkdocs-material", "markdown-include", "mkdocstrings"] +test = ["pytest", "pytest-cov", "pytest-django", "pytest-asyncio", "psycopg2-binary", "black", "isort", "flake8", "mypy (==0.931)", "django-stubs"] [[package]] name = "elasticsearch" @@ -985,6 +994,21 @@ category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" +[[package]] +name = "pydantic" +version = "1.10.1" +description = "Data validation and settings management using python type hints" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +typing-extensions = ">=4.1.0" + +[package.extras] +dotenv = ["python-dotenv (>=0.10.4)"] +email = ["email-validator (>=1.0.3)"] + [[package]] name = "pydispatcher" version = "2.0.6" @@ -1450,7 +1474,7 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "1.1" python-versions = "^3.8" -content-hash = "0c5b44f57b6160e0d1ff07ea26522c2b1c0c225b2272c0b7ac3cc72d1e79c7d1" +content-hash = "df8ff1d6bdf9de47c9f1f346eaff05a863d921f8f5d906448ffee7e1e632124a" [metadata.files] amqp = [] @@ -1511,7 +1535,7 @@ django-jazzmin = [ {file = "django-jazzmin-2.5.0.tar.gz", hash = "sha256:2ee5ea548e9d5d6cf6495025d006b063ecae84702304eb90c9c5ef37ba99078a"}, {file = "django_jazzmin-2.5.0-py3-none-any.whl", hash = "sha256:6b9f9951eee41f60793a0d2f6f3d57213bd5605ddda7a106acb2bcdec4ef124e"}, ] -django-types = [] +django-ninja = [] elasticsearch = [] elasticsearch-dsl = [] executing = [] @@ -1605,6 +1629,7 @@ pycparser = [ {file = "pycparser-2.21-py2.py3-none-any.whl", hash = "sha256:8ee45429555515e1f6b185e78100aea234072576aa43ab53aefcae078162fca9"}, {file = "pycparser-2.21.tar.gz", hash = "sha256:e644fdec12f7872f86c58ff790da456218b10f863970249516d60a5eaca77206"}, ] +pydantic = [] pydispatcher = [] pyflakes = [] pygments = [] diff --git a/pyproject.toml b/pyproject.toml index 295d2dff..2de7e2bc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,6 +26,7 @@ celery = "^5.2.0" django-environ = "^0.9.0" dj-database-url = "^1.0.0" whitenoise = {extras = ["brotli"], version = "^6.2.0"} +django-ninja = "^0.19.1" [tool.poetry.dev-dependencies] flake8 = "^5.0.4" @@ -35,7 +36,6 @@ ipython = "^8.4.0" pre-commit = "^2.11.1" rich = "^12.5.1" ipdb = "^0.13.9" -django-types = "^0.16.0" [build-system] requires = ["poetry-core>=1.0.0"] From 80f45022e7644d95e9c300d9bd0554ba507500f0 Mon Sep 17 00:00:00 2001 From: dhvcc <1337kwiz@gmail.com> Date: Tue, 13 Sep 2022 13:41:14 +0300 Subject: [PATCH 06/73] Add async search, add jmeter tests --- .gitignore | 1 + .idea/git_toolbox_prj.xml | 15 ++++ .idea/runConfigurations/uvicorn.xml | 24 ++++++ Makefile | 5 ++ apps/core/utils.py | 22 +++++- apps/parse/api/api.py | 31 +++++++- tests/Manga.jmx | 116 ++++++++++++++++++++++++++++ 7 files changed, 210 insertions(+), 4 deletions(-) create mode 100644 .idea/git_toolbox_prj.xml create mode 100644 .idea/runConfigurations/uvicorn.xml create mode 100644 tests/Manga.jmx diff --git a/.gitignore b/.gitignore index 1ee0777d..a3f31da8 100644 --- a/.gitignore +++ b/.gitignore @@ -180,3 +180,4 @@ redis.conf .vim nohup.out .vscode +tests/.jmeter* \ No newline at end of file diff --git a/.idea/git_toolbox_prj.xml b/.idea/git_toolbox_prj.xml new file mode 100644 index 00000000..02b915b8 --- /dev/null +++ b/.idea/git_toolbox_prj.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/uvicorn.xml b/.idea/runConfigurations/uvicorn.xml new file mode 100644 index 00000000..f657f4e6 --- /dev/null +++ b/.idea/runConfigurations/uvicorn.xml @@ -0,0 +1,24 @@ + + + + + \ No newline at end of file diff --git a/Makefile b/Makefile index f9c60651..804da105 100644 --- a/Makefile +++ b/Makefile @@ -86,6 +86,11 @@ clear: ## down containers and clear volumes # Code checks # ############### +jmeter: ## Run jmeter tests + cd tests + rm -rf .jmeter_report .jmeter_results + jmeter -n -t Manga.jmx -l .jmeter_results -e -o .jmeter_results && firefox .jmeter_report/index.html + check: check-venv ## Run linters @$(print) "flake8" @$(print) "======" diff --git a/apps/core/utils.py b/apps/core/utils.py index 6eb5ceb1..16399970 100644 --- a/apps/core/utils.py +++ b/apps/core/utils.py @@ -1,7 +1,11 @@ import re +from typing import Type import redis +from asgiref.sync import sync_to_async from django.conf import settings +from django.db.models import Model, Case, When, IntegerField +from django.shortcuts import _get_queryset # noqa def init_redis_client() -> redis.Redis: @@ -9,4 +13,20 @@ def init_redis_client() -> redis.Redis: def url_prefix(url: str) -> str: - return re.match(r"(^http[s]?://(.*))/.*$", url).group(1) + return re.match(r"(^https?://(.*))/.*$", url).group(1) + + +@sync_to_async +def async_es_search_to_queryset(search: dict, keep_order=True, *, model: Type[Model]): + results = search['hits']['hits'] + pks = [res['_id'] for res in results] + qs = model.objects.filter(pk__in=pks) + + if keep_order: + preserved_order = Case( + *[When(pk=pk, then=pos) for pos, pk in enumerate(pks)], + output_field=IntegerField() + ) + qs = qs.order_by(preserved_order) + + return list(qs) diff --git a/apps/parse/api/api.py b/apps/parse/api/api.py index 7667f40d..25ba3dd5 100644 --- a/apps/parse/api/api.py +++ b/apps/parse/api/api.py @@ -1,17 +1,42 @@ from functools import reduce +from typing import List +from django.conf import settings +from django.shortcuts import get_object_or_404 +from elasticsearch import AsyncElasticsearch from elasticsearch_dsl import Q from ninja import Router -from typing import List -from django.shortcuts import get_object_or_404 +from apps.core.utils import async_es_search_to_queryset +from apps.parse.api.schemas import MangaOut from apps.parse.documents import MangaDocument from apps.parse.models import Manga -from apps.parse.api.schemas import MangaOut router = Router(tags=["Manga"]) +@router.get("/search/async", response=List[MangaOut]) +async def search_manga(request, title: str): + client = AsyncElasticsearch(settings.ELASTICSEARCH_DSL['default']['hosts']) + + title = title.split(" ") + + fuzzy = [ + {"fuzzy": {"title": word}} + for word in title + ] + body = {"query": {"bool": {"should": fuzzy}}} + + search = await client.search( + index=MangaDocument.Index.name, + body=body, + ) + + qs = await async_es_search_to_queryset(search, model=Manga) + + return qs + + @router.get("/search", response=List[MangaOut]) def search_manga(request, title: str): title = title.split(" ") diff --git a/tests/Manga.jmx b/tests/Manga.jmx new file mode 100644 index 00000000..a3856458 --- /dev/null +++ b/tests/Manga.jmx @@ -0,0 +1,116 @@ + + + + + + false + true + false + + + + HOST + localhost + = + + + PORT + 8000 + = + + + + + + + + continue + + false + 1 + + 20 + 10 + false + + + true + + + + + + + ${HOST} + ${PORT} + + + /api/manga/555 + GET + true + false + true + false + + + + + + + + + + true + Поднятие одиночку + = + true + title + + + + ${HOST} + ${PORT} + + + /api/manga/search + GET + true + false + true + false + + + + + + + + + + true + Поднятие одиночку + = + true + title + + + + ${HOST} + ${PORT} + + + /api/manga/search/async + GET + true + false + true + false + + + + + + + + + From 5be2185bfd516078f089cb4b7b59013bad9b7fce Mon Sep 17 00:00:00 2001 From: dhvcc Date: Thu, 15 Sep 2022 02:22:44 +0300 Subject: [PATCH 07/73] Update a bunch of devops stuff Fix make shell and update shell-sql Move docker dotenv into compose Freshen up dockerfile and compose Add new idea configs and data sources --- .../local.env.example => .env.example | 0 .envs.example/docker.env.example | 24 -------- .gitignore | 6 +- .idea/redisSettings.xml | 23 +++++++ .idea/runConfigurations/dev_docker.xml | 24 ++++++++ .../{uvicorn.xml => local.xml} | 4 +- .idea/runConfigurations/parse_chapters.xml | 24 ++++++++ .idea/runConfigurations/parse_detail.xml | 24 ++++++++ .idea/runConfigurations/parse_images.xml | 24 ++++++++ .idea/runConfigurations/parse_list.xml | 24 ++++++++ .ipython/profile_default/ipython_config.py | 0 .ipython/profile_default/startup/10-config.py | 7 +++ Dockerfile | 38 ------------ Dockerfile.dev | 24 +++++--- Makefile | 58 ++++-------------- docker-compose.yml | 51 +++++++++++----- docker-entrypoint.sh | 60 +++++++++++-------- 17 files changed, 257 insertions(+), 158 deletions(-) rename .envs.example/local.env.example => .env.example (100%) delete mode 100644 .envs.example/docker.env.example create mode 100644 .idea/redisSettings.xml create mode 100644 .idea/runConfigurations/dev_docker.xml rename .idea/runConfigurations/{uvicorn.xml => local.xml} (88%) create mode 100644 .idea/runConfigurations/parse_chapters.xml create mode 100644 .idea/runConfigurations/parse_detail.xml create mode 100644 .idea/runConfigurations/parse_images.xml create mode 100644 .idea/runConfigurations/parse_list.xml create mode 100644 .ipython/profile_default/ipython_config.py create mode 100644 .ipython/profile_default/startup/10-config.py delete mode 100644 Dockerfile diff --git a/.envs.example/local.env.example b/.env.example similarity index 100% rename from .envs.example/local.env.example rename to .env.example diff --git a/.envs.example/docker.env.example b/.envs.example/docker.env.example deleted file mode 100644 index d16435f0..00000000 --- a/.envs.example/docker.env.example +++ /dev/null @@ -1,24 +0,0 @@ -# Used in docker compose - -######## -# DATA # -######## - -POSTGRES_USER=postgres -POSTGRES_PASSWORD=postgres -POSTGRES_DB=sora - -########## -# DJANGO # -########## - -DEBUG=1 -SECRET_KEY=DevServer -# Whitespace-separated list -ALLOWED_HOSTS=* - -######### -# Other # -######### - -PROXY= diff --git a/.gitignore b/.gitignore index a3f31da8..ac16b6de 100644 --- a/.gitignore +++ b/.gitignore @@ -87,6 +87,8 @@ cover/ # Django stuff: *.log local_settings.py +*.sqlite3 +*.sqlite db.sqlite3 db.sqlite3-journal @@ -107,10 +109,6 @@ target/ # Jupyter Notebook .ipynb_checkpoints -# IPython -profile_default/ -ipython_config.py - # pyenv # For a library or package, you might want to ignore these files since the code is # intended to run in multiple environments; otherwise, check them in: diff --git a/.idea/redisSettings.xml b/.idea/redisSettings.xml new file mode 100644 index 00000000..74d6854e --- /dev/null +++ b/.idea/redisSettings.xml @@ -0,0 +1,23 @@ + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/dev_docker.xml b/.idea/runConfigurations/dev_docker.xml new file mode 100644 index 00000000..8504d96c --- /dev/null +++ b/.idea/runConfigurations/dev_docker.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations/uvicorn.xml b/.idea/runConfigurations/local.xml similarity index 88% rename from .idea/runConfigurations/uvicorn.xml rename to .idea/runConfigurations/local.xml index f657f4e6..d1087f3d 100644 --- a/.idea/runConfigurations/uvicorn.xml +++ b/.idea/runConfigurations/local.xml @@ -1,5 +1,5 @@ - +