diff --git a/akarpov/about/api/__init__.py b/akarpov/about/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/akarpov/about/api/serializers.py b/akarpov/about/api/serializers.py new file mode 100644 index 0000000..f315a66 --- /dev/null +++ b/akarpov/about/api/serializers.py @@ -0,0 +1,5 @@ +from rest_framework import serializers + + +class StatusSerializer(serializers.Serializer): + status = serializers.CharField(default="pong") diff --git a/akarpov/about/api/urls.py b/akarpov/about/api/urls.py new file mode 100644 index 0000000..fdd2532 --- /dev/null +++ b/akarpov/about/api/urls.py @@ -0,0 +1,7 @@ +from django.urls import path + +from akarpov.about.api.views import PingAPIView + +app_name = "about" + +urlpatterns = [path("ping", PingAPIView.as_view(), name="ping")] diff --git a/akarpov/about/api/views.py b/akarpov/about/api/views.py new file mode 100644 index 0000000..64bba54 --- /dev/null +++ b/akarpov/about/api/views.py @@ -0,0 +1,11 @@ +from rest_framework import generics, permissions, response + +from akarpov.about.api.serializers import StatusSerializer + + +class PingAPIView(generics.GenericAPIView): + serializer_class = StatusSerializer + permission_classes = [permissions.AllowAny] + + def get(self, request): + return response.Response(data={"status": "pong"}) diff --git a/akarpov/files/migrations/0029_remove_file_embeddings_remove_file_lang_and_more.py b/akarpov/files/migrations/0029_remove_file_embeddings_remove_file_lang_and_more.py new file mode 100644 index 0000000..94ed78c --- /dev/null +++ b/akarpov/files/migrations/0029_remove_file_embeddings_remove_file_lang_and_more.py @@ -0,0 +1,25 @@ +# Generated by Django 4.2.6 on 2023-11-06 21:23 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("files", "0028_file_content_file_lang"), + ] + + operations = [ + migrations.RemoveField( + model_name="file", + name="embeddings", + ), + migrations.RemoveField( + model_name="file", + name="lang", + ), + migrations.AlterField( + model_name="file", + name="content", + field=models.TextField(), + ), + ] diff --git a/akarpov/files/migrations/0030_auto_20231107_0023.py b/akarpov/files/migrations/0030_auto_20231107_0023.py new file mode 100644 index 0000000..a0af91c --- /dev/null +++ b/akarpov/files/migrations/0030_auto_20231107_0023.py @@ -0,0 +1,19 @@ +# Generated by Django 4.2.6 on 2023-11-06 21:23 + +from django.db import migrations + + +class Migration(migrations.Migration): + dependencies = [ + ("files", "0029_remove_file_embeddings_remove_file_lang_and_more"), + ] + operations = [ + migrations.RunSQL( + sql="CREATE EXTENSION IF NOT EXISTS unaccent;", + reverse_sql="DROP EXTENSION unaccent;", + ), + migrations.RunSQL( + sql="CREATE EXTENSION IF NOT EXISTS pg_trgm;", + reverse_sql="DROP EXTENSION pg_trgm;", + ), + ] diff --git a/akarpov/files/models.py b/akarpov/files/models.py index 15081b5..4db8d42 100644 --- a/akarpov/files/models.py +++ b/akarpov/files/models.py @@ -17,7 +17,6 @@ from django.urls import reverse from model_utils.fields import AutoCreatedField, AutoLastModifiedField from model_utils.models import TimeStampedModel -from pgvector.django import VectorField from polymorphic.models import PolymorphicModel from akarpov.files.services.files import trash_file_upload, user_unique_file_upload @@ -70,9 +69,8 @@ class File(BaseFileItem, TimeStampedModel, ShortLinkModel, UserHistoryModel): preview = FileField(blank=True, upload_to="file/previews/") file_obj = FileField(blank=False, upload_to=user_unique_file_upload) - embeddings = VectorField(dimensions=768, null=True) - content = TextField(max_length=10000) - lang = CharField(max_length=2, choices=[("ru", "ru"), ("en", "en")]) + content = TextField() + # lang = CharField(max_length=2, choices=[("ru", "ru"), ("en", "en")]) # meta name = CharField(max_length=255, null=True, blank=True) diff --git a/akarpov/files/search_indexes.py b/akarpov/files/search_indexes.py new file mode 100644 index 0000000..c898061 --- /dev/null +++ b/akarpov/files/search_indexes.py @@ -0,0 +1,17 @@ +from haystack import indexes + +from .models import File + + +class FileIndex(indexes.SearchIndex, indexes.Indexable): + text = indexes.CharField(document=True, use_template=True) + name = indexes.CharField(model_attr="name", default="") + description = indexes.CharField(model_attr="description", default="") + content = indexes.CharField(model_attr="content", default="") + + def get_model(self): + return File + + def index_queryset(self, using=None): + # Return the default queryset to be used for indexing. + return self.get_model().objects.all() diff --git a/akarpov/files/services/search.py b/akarpov/files/services/search.py new file mode 100644 index 0000000..13a08fb --- /dev/null +++ b/akarpov/files/services/search.py @@ -0,0 +1,101 @@ +import os +import re +from typing import BinaryIO + +from django.conf import settings +from django.contrib.postgres.lookups import Unaccent +from django.contrib.postgres.search import TrigramSimilarity +from django.db.models import Q, QuerySet +from haystack.query import SearchQuerySet + +from akarpov.files.models import File + + +class BaseSearch: + def __init__(self, queryset: QuerySet | None = None): + self.queryset: QuerySet | None = queryset + + def search(self, query: str) -> QuerySet | SearchQuerySet | list[File]: + raise NotImplementedError("Subclasses must implement this method") + + +class NeuroSearch(BaseSearch): + def search(self, query: str) -> SearchQuerySet: + # Search across multiple fields + sqs: SearchQuerySet = SearchQuerySet().filter(content=query) + sqs = sqs.filter_or(name=query) + sqs = sqs.filter_or(description=query) + return sqs + + +class CaseSensitiveSearch(BaseSearch): + def search(self, query: str) -> QuerySet[File]: + if self.queryset is None: + raise ValueError("Queryset cannot be None for text search") + + # Escape any regex special characters in the query string + query_escaped = re.escape(query) + + # Use a case-sensitive regex to filter + return self.queryset.filter( + Q(name__regex=query_escaped) + | Q(description__regex=query_escaped) + | Q(content__regex=query_escaped) + ) + + +class ByteSearch(BaseSearch): + def search(self, hex_query: str) -> list[File]: + # Convert the hex query to bytes + try: + byte_query: bytes = bytes.fromhex(hex_query) + except ValueError: + # If hex_query is not a valid hex, return an empty list + return [] + + matching_files: list[File] = [] + if self.queryset is not None: + for file_item in self.queryset: + file_path: str = file_item.file.path + full_path: str = os.path.join(settings.MEDIA_ROOT, file_path) + if os.path.exists(full_path): + with open(full_path, "rb") as file: + if self._byte_search_in_file(file, byte_query): + matching_files.append(file_item) + return matching_files + + @staticmethod + def _byte_search_in_file(file: BinaryIO, byte_sequence: bytes) -> bool: + # Read the file in chunks to avoid loading large files into memory + chunk_size: int = 4096 # or another size depending on the expected file sizes + while True: + chunk: bytes = file.read(chunk_size) + if byte_sequence in chunk: + return True + if not chunk: # End of file reached + return False + + +class SimilaritySearch(BaseSearch): + def __init__(self, queryset: QuerySet[File] | None = None): + super().__init__(queryset) + + def search(self, query: str) -> QuerySet[File]: + if self.queryset is None: + raise ValueError("Queryset cannot be None for similarity search") + + # Perform a similarity search using trigram comparison + return ( + self.queryset.annotate( + name_unaccent=Unaccent("name"), + description_unaccent=Unaccent("description"), + content_unaccent=Unaccent("content"), + ) + .annotate( + similarity=TrigramSimilarity("name_unaccent", query) + + TrigramSimilarity("description_unaccent", query) + + TrigramSimilarity("content_unaccent", query) + ) + .filter(similarity__gt=0.1) + .order_by("-similarity") + ) diff --git a/akarpov/files/services/text.py b/akarpov/files/services/text.py index ca65517..69ecb19 100644 --- a/akarpov/files/services/text.py +++ b/akarpov/files/services/text.py @@ -1,7 +1,18 @@ +import chardet import textract +from textract.exceptions import ExtensionNotSupported def extract_file_text(file: str) -> str: - text = textract.process(file) + try: + text = textract.process(file) + except ExtensionNotSupported: + try: + rawdata = open(file, "rb").read() + enc = chardet.detect(rawdata) + with open(file, encoding=enc["encoding"]) as file: + text = file.read() + except Exception: + return "" return text diff --git a/akarpov/files/tasks.py b/akarpov/files/tasks.py index 097757c..3fd77f7 100644 --- a/akarpov/files/tasks.py +++ b/akarpov/files/tasks.py @@ -1,11 +1,15 @@ import os +import time import structlog from celery import shared_task from django.core.files import File +from haystack.management.commands import rebuild_index, update_index +from haystack.query import SearchQuerySet from akarpov.files.models import File as FileModel from akarpov.files.services.preview import create_preview, get_file_mimetype +from akarpov.files.services.text import extract_file_text logger = structlog.get_logger(__name__) @@ -28,7 +32,32 @@ def process_file(pk: int): except Exception as e: logger.error(e) file.file_type = get_file_mimetype(file.file.path) - file.save(update_fields=["preview", "name", "file_type"]) + file.content = extract_file_text(file.file.path) + file.save(update_fields=["preview", "name", "file_type", "content"]) if pth and os.path.isfile(pth): os.remove(pth) return pk + + +@shared_task +def task_rebuild_index(): + start_time = time.time() + rebuild_index.Command().handle(interactive=False) + end_time = time.time() + duration = end_time - start_time + + indexed_count = SearchQuerySet().all().count() + + logger.info( + "index_rebuild_finished", duration=duration, indexed_count=indexed_count + ) + + +@shared_task +def update_index_task(): + start_time = time.time() + + update_index.Command().handle(interactive=False) + end_time = time.time() + duration = end_time - start_time + logger.info("update_index_completed", duration=duration) diff --git a/akarpov/files/views.py b/akarpov/files/views.py index d4a6a76..092a21a 100644 --- a/akarpov/files/views.py +++ b/akarpov/files/views.py @@ -33,13 +33,43 @@ from akarpov.files.previews import extensions, meta, meta_extensions, previews from akarpov.files.services.folders import delete_folder from akarpov.files.services.preview import get_base_meta +from akarpov.files.services.search import ( + ByteSearch, + CaseSensitiveSearch, + NeuroSearch, + SimilaritySearch, +) from akarpov.files.tables import FileTable from akarpov.notifications.services import send_notification logger = structlog.get_logger(__name__) +search_classes = { + "neuro": NeuroSearch, + "case_sensitive": CaseSensitiveSearch, + "byte_search": ByteSearch, + "similarity": SimilaritySearch, +} -class TopFolderView(LoginRequiredMixin, ListView): + +class FileFilterView(View): + def filter(self, queryset): + if "query" in self.request.GET and "search_type" in self.request.GET: + query = self.request.GET["query"] + search_type = self.request.GET["search_type"] + if not query or not self.request.user.is_authenticated: + return queryset + + if search_type in search_classes: + search_instance = search_classes[search_type]( + queryset=File.objects.filter(user=self.request.user) + ) + queryset = search_instance.search(query) + print(queryset, query) + return queryset + + +class TopFolderView(LoginRequiredMixin, ListView, FileFilterView): template_name = "files/list.html" paginate_by = 18 model = BaseFileItem @@ -55,10 +85,18 @@ def get_context_data(self, **kwargs): return context def get_queryset(self): - return BaseFileItem.objects.filter(user=self.request.user, parent__isnull=True) + if ( + "query" in self.request.GET + and "search_type" in self.request.GET + and self.request.GET["query"] + ): + return self.filter(BaseFileItem.objects.none()) + return self.filter( + BaseFileItem.objects.filter(user=self.request.user, parent__isnull=True) + ) -class FileFolderView(ListView): +class FileFolderView(ListView, FileFilterView): template_name = "files/folder.html" model = BaseFileItem paginate_by = 38 @@ -94,6 +132,13 @@ def get_object(self, *args): def get_queryset(self): folder = self.get_object() + + if ( + "query" in self.request.GET + and "search_type" in self.request.GET + and self.request.GET["query"] + ): + return self.filter(BaseFileItem.objects.none()) return BaseFileItem.objects.filter(parent=folder) diff --git a/akarpov/templates/files/list.html b/akarpov/templates/files/list.html index ffc4dc4..34d5e35 100644 --- a/akarpov/templates/files/list.html +++ b/akarpov/templates/files/list.html @@ -15,6 +15,7 @@ {% endblock %} {% block css %} + +{% endblock %} + +{% block content %} +
+{% endblock %} diff --git a/akarpov/templates/search/indexes/files/file_text.txt b/akarpov/templates/search/indexes/files/file_text.txt new file mode 100644 index 0000000..4f2dcee --- /dev/null +++ b/akarpov/templates/search/indexes/files/file_text.txt @@ -0,0 +1,3 @@ +{{ object.name }} +{{ object.description }} +{{ object.content }} diff --git a/compose/local/django/celery/worker/start b/compose/local/django/celery/worker/start index 1f51415..bd21e9f 100644 --- a/compose/local/django/celery/worker/start +++ b/compose/local/django/celery/worker/start @@ -3,5 +3,6 @@ set -o errexit set -o nounset +/install_preview_dependencies celery -A config.celery_app worker --loglevel=info -c 5 diff --git a/config/settings/base.py b/config/settings/base.py index 1b88de9..a80cccd 100644 --- a/config/settings/base.py +++ b/config/settings/base.py @@ -5,6 +5,7 @@ import environ import structlog +from celery.schedules import crontab from sentry_sdk.integrations.celery import CeleryIntegration ROOT_DIR = Path(__file__).resolve(strict=True).parent.parent.parent @@ -128,6 +129,7 @@ "django_filters", "django_tables2", "location_field", + "haystack", ] HEALTH_CHECKS = [ @@ -398,6 +400,7 @@ structlog.processors.UnicodeDecoder(), structlog.stdlib.ProcessorFormatter.wrap_for_formatter, ], + context_class=dict, logger_factory=structlog.stdlib.LoggerFactory(), cache_logger_on_first_use=True, ) @@ -425,6 +428,17 @@ CELERY_TASK_SOFT_TIME_LIMIT = 10 * 60 # https://docs.celeryq.dev/en/stable/userguide/configuration.html#beat-scheduler CELERY_BEAT_SCHEDULER = "django_celery_beat.schedulers:DatabaseScheduler" +CELERY_BEAT_SCHEDULE = { + "update-index-every-hour": { + "task": "akarpov.files.tasks.task_rebuild_index", + "schedule": crontab(minute="0"), + }, + "rebuild-index-every-day": { + "task": "akarpov.files.tasks.task_rebuild_index", + "schedule": crontab(hour="2", minute="0", day_of_week="*"), + }, +} + # django-allauth # ------------------------------------------------------------------------------ @@ -591,3 +605,16 @@ CeleryIntegration(monitor_beat_tasks=True, propagate_traces=True), ], ) + + +# HAYSTACK +# ------------------------------------------------------------------------------ +HAYSTACK_CONNECTIONS = { + "default": { + "ENGINE": "haystack.backends.elasticsearch7_backend.Elasticsearch7SearchEngine", + "URL": "http://127.0.0.1:9200/", # Assuming Elasticsearch is running on localhost + "INDEX_NAME": "haystack", + "TIMEOUT": 60 * 5, + "BATCH_SIZE": 100, + }, +} diff --git a/local.yml b/local.yml index 605b39d..f7eac2c 100644 --- a/local.yml +++ b/local.yml @@ -3,6 +3,7 @@ version: '3' volumes: akarpov_local_postgres_data: {} akarpov_local_postgres_data_backups: {} + akarpov_local_elasticsearch_data: {} services: django: &django @@ -16,6 +17,7 @@ services: - postgres - redis - mailhog + - elasticsearch volumes: - .:/app:z env_file: @@ -96,3 +98,15 @@ services: ports: - "5555:5555" command: /start-flower + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:7.9.3 # Use the desired version + container_name: akarpov_local_elasticsearch + environment: + - discovery.type=single-node # This avoids bootstrap checks, suitable for development. + - ES_JAVA_OPTS=-Xms512m -Xmx512m # Set the JVM heap size + volumes: + - akarpov_local_elasticsearch_data:/usr/share/elasticsearch/data + ports: + - "9200:9200" + - "9300:9300" diff --git a/poetry.lock b/poetry.lock index 3a40038..0a1bf5f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry 1.4.2 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.6.1 and should not be changed by hand. [[package]] name = "aiofiles" version = "23.2.1" description = "File support for asyncio." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -16,7 +15,6 @@ files = [ name = "aiohttp" version = "3.8.6" description = "Async http client/server framework (asyncio)" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -125,7 +123,6 @@ speedups = ["Brotli", "aiodns", "cchardet"] name = "aiosignal" version = "1.3.1" description = "aiosignal: a list of registered asynchronous callbacks" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -140,7 +137,6 @@ frozenlist = ">=1.1.0" name = "alabaster" version = "0.7.13" description = "A configurable sidebar-enabled Sphinx theme" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -152,7 +148,6 @@ files = [ name = "amqp" version = "5.1.1" description = "Low-level AMQP client for Python (fork of amqplib)." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -167,7 +162,6 @@ vine = ">=5.0.0" name = "amzqr" version = "0.0.1" description = "Generater for amazing QR Codes. Including Common, Artistic and Animated QR Codes." -category = "main" optional = false python-versions = ">=3" files = [ @@ -184,7 +178,6 @@ Pillow = ">=3.3.1" name = "anyio" version = "3.7.1" description = "High level compatibility layer for multiple asynchronous event loop implementations" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -205,7 +198,6 @@ trio = ["trio (<0.22)"] name = "appdirs" version = "1.4.4" description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = "*" files = [ @@ -217,7 +209,6 @@ files = [ name = "appnope" version = "0.1.3" description = "Disable App Nap on macOS >= 10.9" -category = "main" optional = false python-versions = "*" files = [ @@ -229,7 +220,6 @@ files = [ name = "argcomplete" version = "1.10.3" description = "Bash tab completion for argparse" -category = "main" optional = false python-versions = "*" files = [ @@ -244,7 +234,6 @@ test = ["coverage", "flake8", "pexpect", "wheel"] name = "argon2-cffi" version = "21.3.0" description = "The secure Argon2 password hashing algorithm." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -264,7 +253,6 @@ tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pytest"] name = "argon2-cffi-bindings" version = "21.2.0" description = "Low-level CFFI bindings for Argon2" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -302,7 +290,6 @@ tests = ["pytest"] name = "asgiref" version = "3.7.2" description = "ASGI specs, helper code, and adapters" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -317,7 +304,6 @@ tests = ["mypy (>=0.800)", "pytest", "pytest-asyncio"] name = "astroid" version = "2.15.8" description = "An abstract syntax tree for Python with inference support." -category = "main" optional = false python-versions = ">=3.7.2" files = [ @@ -333,7 +319,6 @@ wrapt = {version = ">=1.14,<2", markers = "python_version >= \"3.11\""} name = "asttokens" version = "2.4.0" description = "Annotate AST trees with source code positions" -category = "main" optional = false python-versions = "*" files = [ @@ -351,7 +336,6 @@ test = ["astroid", "pytest"] name = "async-timeout" version = "4.0.3" description = "Timeout context manager for asyncio programs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -363,7 +347,6 @@ files = [ name = "attrs" version = "23.1.0" description = "Classes Without Boilerplate" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -382,7 +365,6 @@ tests-no-zope = ["cloudpickle", "hypothesis", "mypy (>=1.1.1)", "pympler", "pyte name = "autobahn" version = "23.6.2" description = "WebSocket client & server library, WAMP real-time framework" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -411,7 +393,6 @@ xbr = ["base58 (>=2.1.0)", "bitarray (>=2.7.5)", "cbor2 (>=5.2.0)", "click (>=8. name = "automat" version = "22.10.0" description = "Self-service finite-state machines for the programmer on the go." -category = "main" optional = false python-versions = "*" files = [ @@ -430,7 +411,6 @@ visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] name = "babel" version = "2.13.0" description = "Internationalization utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -445,7 +425,6 @@ dev = ["freezegun (>=1.0,<2.0)", "pytest (>=6.0)", "pytest-cov"] name = "backcall" version = "0.2.0" description = "Specifications for callback functions passed in to an API" -category = "main" optional = false python-versions = "*" files = [ @@ -457,7 +436,6 @@ files = [ name = "beautifulsoup4" version = "4.8.2" description = "Screen-scraping library" -category = "main" optional = false python-versions = "*" files = [ @@ -477,7 +455,6 @@ lxml = ["lxml"] name = "billiard" version = "4.1.0" description = "Python multiprocessing fork with improvements and bugfixes" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -489,7 +466,6 @@ files = [ name = "black" version = "23.9.1" description = "The uncompromising code formatter." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -534,7 +510,6 @@ uvloop = ["uvloop (>=0.15.2)"] name = "blis" version = "0.7.11" description = "The Blis BLAS-like linear algebra library, as a self-contained C-extension." -category = "main" optional = false python-versions = "*" files = [ @@ -581,7 +556,6 @@ numpy = {version = ">=1.19.0", markers = "python_version >= \"3.9\""} name = "brotli" version = "1.1.0" description = "Python bindings for the Brotli compression library" -category = "main" optional = false python-versions = "*" files = [ @@ -674,7 +648,6 @@ files = [ name = "brotlicffi" version = "1.1.0.0" description = "Python CFFI bindings to the Brotli library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -714,7 +687,6 @@ cffi = ">=1.0.0" name = "cairocffi" version = "1.6.1" description = "cffi-based cairo bindings for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -734,7 +706,6 @@ xcb = ["xcffib (>=1.4.0)"] name = "cairosvg" version = "2.7.1" description = "A Simple SVG Converter based on Cairo" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -757,7 +728,6 @@ test = ["flake8", "isort", "pytest"] name = "catalogue" version = "2.0.10" description = "Super lightweight function registries for your library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -769,7 +739,6 @@ files = [ name = "celery" version = "5.3.4" description = "Distributed Task Queue." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -826,7 +795,6 @@ zstd = ["zstandard (==0.21.0)"] name = "certifi" version = "2023.7.22" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -838,7 +806,6 @@ files = [ name = "cffi" version = "1.16.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -903,7 +870,6 @@ pycparser = "*" name = "cfgv" version = "3.4.0" description = "Validate configuration and produce human readable error messages." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -915,7 +881,6 @@ files = [ name = "channels" version = "4.0.0" description = "Brings async, event-driven capabilities to Django 3.2 and up." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -936,7 +901,6 @@ tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", " name = "channels-redis" version = "4.1.0" description = "Redis-backed ASGI channel layer implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -958,7 +922,6 @@ tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio", name = "chardet" version = "3.0.4" description = "Universal encoding detector for Python 2 and 3" -category = "main" optional = false python-versions = "*" files = [ @@ -970,7 +933,6 @@ files = [ name = "charset-normalizer" version = "3.3.0" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -1070,7 +1032,6 @@ files = [ name = "click" version = "8.1.7" description = "Composable command line interface toolkit" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1085,7 +1046,6 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} name = "click-didyoumean" version = "0.3.0" description = "Enables git-like *did-you-mean* feature in click" -category = "main" optional = false python-versions = ">=3.6.2,<4.0.0" files = [ @@ -1100,7 +1060,6 @@ click = ">=7" name = "click-plugins" version = "1.1.1" description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -category = "main" optional = false python-versions = "*" files = [ @@ -1118,7 +1077,6 @@ dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] name = "click-repl" version = "0.3.0" description = "REPL plugin for Click" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1137,7 +1095,6 @@ testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] name = "cloudpathlib" version = "0.15.1" description = "pathlib-style classes for cloud storage services." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1155,7 +1112,6 @@ s3 = ["boto3"] name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -1167,7 +1123,6 @@ files = [ name = "compressed-rtf" version = "1.0.6" description = "Compressed Rich Text Format (RTF) compression and decompression package" -category = "main" optional = false python-versions = "*" files = [ @@ -1178,7 +1133,6 @@ files = [ name = "confection" version = "0.1.3" description = "The sweetest config system for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1194,7 +1148,6 @@ srsly = ">=2.4.0,<3.0.0" name = "constantly" version = "15.1.0" description = "Symbolic constants in Python" -category = "main" optional = false python-versions = "*" files = [ @@ -1206,7 +1159,6 @@ files = [ name = "contourpy" version = "1.1.0" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1265,7 +1217,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "contourpy" version = "1.1.1" description = "Python library for calculating contours of 2D quadrilateral grids" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1337,7 +1288,6 @@ test-no-images = ["pytest", "pytest-cov", "wurlitzer"] name = "coverage" version = "7.3.2" description = "Code coverage measurement for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1402,7 +1352,6 @@ toml = ["tomli"] name = "crispy-bootstrap5" version = "0.7" description = "Bootstrap5 template pack for django-crispy-forms" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1421,7 +1370,6 @@ test = ["pytest", "pytest-django"] name = "cron-descriptor" version = "1.4.0" description = "A Python library that converts cron expressions into human readable strings." -category = "main" optional = false python-versions = "*" files = [ @@ -1435,7 +1383,6 @@ dev = ["polib"] name = "cryptography" version = "41.0.4" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1481,7 +1428,6 @@ test-randomorder = ["pytest-randomly"] name = "cssselect2" version = "0.7.0" description = "CSS selectors for Python ElementTree" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1501,7 +1447,6 @@ test = ["flake8", "isort", "pytest"] name = "cycler" version = "0.12.1" description = "Composable style cycles" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1517,7 +1462,6 @@ tests = ["pytest", "pytest-cov", "pytest-xdist"] name = "cymem" version = "2.0.8" description = "Manage calls to calloc/free through Cython" -category = "main" optional = false python-versions = "*" files = [ @@ -1560,7 +1504,6 @@ files = [ name = "daphne" version = "4.0.0" description = "Django ASGI (HTTP/WebSocket) server" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1580,7 +1523,6 @@ tests = ["django", "hypothesis", "pytest", "pytest-asyncio"] name = "decorator" version = "5.1.1" description = "Decorators for Humans" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -1592,7 +1534,6 @@ files = [ name = "defusedxml" version = "0.7.1" description = "XML bomb protection for Python stdlib modules" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -1604,7 +1545,6 @@ files = [ name = "dill" version = "0.3.7" description = "serialize all of Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1619,7 +1559,6 @@ graph = ["objgraph (>=1.7.2)"] name = "distlib" version = "0.3.7" description = "Distribution utilities" -category = "main" optional = false python-versions = "*" files = [ @@ -1631,7 +1570,6 @@ files = [ name = "django" version = "4.2.6" description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1652,7 +1590,6 @@ bcrypt = ["bcrypt"] name = "django-active-link" version = "0.1.8" description = "The best way to highlight active links in your Django app." -category = "main" optional = false python-versions = "*" files = [ @@ -1664,7 +1601,6 @@ files = [ name = "django-allauth" version = "0.54.0" description = "Integrated set of Django applications addressing authentication, registration, account management as well as 3rd party (social) account authentication." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1682,7 +1618,6 @@ requests-oauthlib = ">=0.3.0" name = "django-anymail" version = "10.1" description = "Django email backends and webhooks for Amazon SES, Brevo (Sendinblue), MailerSend, Mailgun, Mailjet, Mandrill, Postal, Postmark, SendGrid, and SparkPost" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1703,7 +1638,6 @@ postal = ["cryptography"] name = "django-cacheops" version = "7.0.1" description = "A slick ORM cache with automatic granular event-driven invalidation for Django." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1719,7 +1653,6 @@ redis = ">=3.0.0" name = "django-celery-beat" version = "2.5.0" description = "Database-backed Periodic Tasks." -category = "main" optional = false python-versions = "*" files = [ @@ -1739,7 +1672,6 @@ tzdata = "*" name = "django-ckeditor" version = "6.7.0" description = "Django admin CKEditor integration." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1755,7 +1687,6 @@ django-js-asset = ">=2.0" name = "django-classy-tags" version = "4.1.0" description = "Class based template tags for Django" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1770,7 +1701,6 @@ django = ">=3.2" name = "django-colorfield" version = "0.8.0" description = "simple color field for your models with a nice color-picker in the admin-interface." -category = "main" optional = false python-versions = "*" files = [ @@ -1785,7 +1715,6 @@ Pillow = ">=9.0.0" name = "django-cors-headers" version = "4.3.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.8" files = [ @@ -1800,7 +1729,6 @@ Django = ">=3.2" name = "django-coverage-plugin" version = "3.1.0" description = "Django template coverage.py plugin" -category = "main" optional = false python-versions = "*" files = [ @@ -1815,7 +1743,6 @@ coverage = "*" name = "django-crispy-forms" version = "1.14.0" description = "Best way to have Django DRY forms" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1827,7 +1754,6 @@ files = [ name = "django-debug-toolbar" version = "4.2.0" description = "A configurable set of panels that display various debug information about the current request/response." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1843,7 +1769,6 @@ sqlparse = ">=0.2" 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.4,<4" files = [ @@ -1852,15 +1777,14 @@ files = [ ] [package.extras] -develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] -docs = ["furo (>=2021.8.17b43,<2021.9.0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +develop = ["coverage[toml] (>=5.0a4)", "furo (>=2021.8.17b43,<2021.9.dev0)", "pytest (>=4.6.11)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] +docs = ["furo (>=2021.8.17b43,<2021.9.dev0)", "sphinx (>=3.5.0)", "sphinx-notfound-page"] testing = ["coverage[toml] (>=5.0a4)", "pytest (>=4.6.11)"] [[package]] name = "django-extensions" version = "3.2.3" description = "Extensions for Django" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -1875,7 +1799,6 @@ Django = ">=3.2" name = "django-extra-settings" version = "0.9.1" description = "config and manage typed extra settings using just the django admin." -category = "main" optional = false python-versions = "*" files = [ @@ -1890,7 +1813,6 @@ jsonfield = ">=3.0.0" name = "django-filter" version = "23.3" description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1901,11 +1823,27 @@ files = [ [package.dependencies] Django = ">=3.2" +[[package]] +name = "django-haystack" +version = "3.2.1" +description = "Pluggable search for Django." +optional = false +python-versions = "*" +files = [ + {file = "django-haystack-3.2.1.tar.gz", hash = "sha256:97e3197aefc225fe405b6f17600a2534bf827cb4d6743130c20bc1a06f7293a4"}, +] + +[package.dependencies] +Django = ">=2.2" +elasticsearch = {version = ">=5,<8", optional = true, markers = "extra == \"elasticsearch\""} + +[package.extras] +elasticsearch = ["elasticsearch (>=5,<8)"] + [[package]] name = "django-health-check" version = "3.17.0" description = "Run checks on services like databases, queue servers, celery processes, etc." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1924,7 +1862,6 @@ test = ["celery", "pytest", "pytest-cov", "pytest-django", "redis"] name = "django-ipware" version = "5.0.1" description = "A Django application to retrieve user's IP address" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1936,7 +1873,6 @@ files = [ name = "django-jazzmin" version = "2.6.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.6.2" files = [ @@ -1951,7 +1887,6 @@ django = ">=2.2" name = "django-js-asset" version = "2.1.0" description = "script tag with additional attributes for django.forms.Media" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -1969,7 +1904,6 @@ tests = ["coverage"] name = "django-location-field" version = "2.7.2" description = "Location field for Django" -category = "main" optional = false python-versions = "*" files = [ @@ -1980,7 +1914,6 @@ files = [ name = "django-model-utils" version = "4.3.1" description = "Django model mixins and utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -1995,7 +1928,6 @@ Django = ">=3.2" name = "django-polymorphic" version = "3.1.0" description = "Seamless polymorphic inheritance for Django models" -category = "main" optional = false python-versions = "*" files = [ @@ -2010,7 +1942,6 @@ Django = ">=2.1" name = "django-redis" version = "5.4.0" description = "Full featured redis cache backend for Django." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2029,7 +1960,6 @@ hiredis = ["redis[hiredis] (>=3,!=4.0.0,!=4.0.1)"] name = "django-rest-auth" version = "0.9.5" description = "Create a set of REST API endpoints for Authentication and Registration" -category = "main" optional = false python-versions = "*" files = [ @@ -2048,7 +1978,6 @@ with-social = ["django-allauth (>=0.25.0)"] name = "django-robots" version = "5.0" description = "Robots exclusion application for Django, complementing Sitemaps." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2059,7 +1988,6 @@ files = [ name = "django-sekizai" version = "4.1.0" description = "Django Sekizai" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2075,7 +2003,6 @@ django-classy-tags = ">=3.0" name = "django-structlog" version = "5.3.0" description = "Structured Logging for Django" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2096,7 +2023,6 @@ celery = ["celery (>=5.1)"] name = "django-stubs" version = "1.14.0" description = "Mypy stubs for Django" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2108,7 +2034,7 @@ files = [ django = "*" django-stubs-ext = ">=0.7.0" mypy = [ - {version = ">=0.980"}, + {version = ">=0.980", optional = true, markers = "extra != \"compatible-mypy\""}, {version = ">=0.991,<1.0", optional = true, markers = "extra == \"compatible-mypy\""}, ] tomli = "*" @@ -2123,7 +2049,6 @@ compatible-mypy = ["mypy (>=0.991,<1.0)"] name = "django-stubs-ext" version = "4.2.2" description = "Monkey-patching and extensions for django-stubs" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2139,7 +2064,6 @@ typing-extensions = "*" name = "django-tables2" version = "2.6.0" description = "Table/data-grid framework for Django" -category = "main" optional = false python-versions = "*" files = [ @@ -2157,7 +2081,6 @@ tablib = ["tablib"] name = "django-timezone-field" version = "6.0.1" description = "A Django app providing DB, form, and REST framework fields for zoneinfo and pytz timezone objects." -category = "main" optional = false python-versions = ">=3.8,<4.0" files = [ @@ -2172,7 +2095,6 @@ Django = ">=3.2,<5.0" name = "django-upload-validator" version = "1.1.6" description = "A simple Django file type validator using python-magic" -category = "main" optional = false python-versions = "*" files = [ @@ -2187,7 +2109,6 @@ python-magic = "*" name = "djangorestframework" version = "3.14.0" description = "Web APIs for Django, made easy." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2203,7 +2124,6 @@ pytz = "*" name = "djangorestframework-stubs" version = "1.8.0" description = "PEP-484 stubs for django-rest-framework" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2214,7 +2134,7 @@ files = [ [package.dependencies] django-stubs = ">=1.13.0" mypy = [ - {version = ">=0.980"}, + {version = ">=0.980", optional = true, markers = "extra != \"compatible-mypy\""}, {version = ">=0.991,<0.1000", optional = true, markers = "extra == \"compatible-mypy\""}, ] requests = ">=2.0.0" @@ -2231,7 +2151,6 @@ markdown = ["types-Markdown (>=0.1.5)"] name = "docutils" version = "0.20.1" description = "Docutils -- Python Documentation Utilities" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2243,7 +2162,6 @@ files = [ name = "docx2txt" version = "0.8" description = "A pure python-based utility to extract text and images from docx files." -category = "main" optional = false python-versions = "*" files = [ @@ -2254,7 +2172,6 @@ files = [ name = "drf-spectacular" version = "0.26.5" description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -2278,18 +2195,37 @@ sidecar = ["drf-spectacular-sidecar"] name = "ebcdic" version = "1.1.1" description = "Additional EBCDIC codecs" -category = "main" optional = false python-versions = "*" files = [ {file = "ebcdic-1.1.1-py2.py3-none-any.whl", hash = "sha256:33b4cb729bc2d0bf46cc1847b0e5946897cb8d3f53520c5b9aa5fa98d7e735f1"}, ] +[[package]] +name = "elasticsearch" +version = "7.9.1" +description = "Python client for Elasticsearch" +optional = false +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, <4" +files = [ + {file = "elasticsearch-7.9.1-py2.py3-none-any.whl", hash = "sha256:8c7e2374f53ee1b891ff2804116e0c7fb517585d6d5788ba668686bbc9d82e2d"}, + {file = "elasticsearch-7.9.1.tar.gz", hash = "sha256:5e08776fbb30c6e92408c7fa8c37d939210d291475ae2f364f0497975918b6fe"}, +] + +[package.dependencies] +certifi = "*" +urllib3 = ">=1.21.1" + +[package.extras] +async = ["aiohttp (>=3,<4)", "yarl"] +develop = ["black", "coverage", "jinja2", "mock", "pytest", "pytest-cov", "pyyaml", "requests (>=2.0.0,<3.0.0)", "sphinx (<1.7)", "sphinx-rtd-theme"] +docs = ["sphinx (<1.7)", "sphinx-rtd-theme"] +requests = ["requests (>=2.4.0,<3.0.0)"] + [[package]] name = "execnet" version = "2.0.2" description = "execnet: rapid multi-Python deployment" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2304,7 +2240,6 @@ testing = ["hatch", "pre-commit", "pytest", "tox"] name = "executing" version = "2.0.0" description = "Get the currently executing AST node of a frame, and other information" -category = "main" optional = false python-versions = "*" files = [ @@ -2319,7 +2254,6 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth name = "extract-msg" version = "0.28.7" description = "Extracts emails and attachments saved in Microsoft Outlook's .msg files" -category = "main" optional = false python-versions = "*" files = [ @@ -2338,7 +2272,6 @@ tzlocal = ">=2.1" name = "factory-boy" version = "3.3.0" description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2357,7 +2290,6 @@ doc = ["Sphinx", "sphinx-rtd-theme", "sphinxcontrib-spelling"] name = "faker" version = "19.10.0" description = "Faker is a Python package that generates fake data for you." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2372,7 +2304,6 @@ python-dateutil = ">=2.4" name = "fastapi" version = "0.86.0" description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2394,7 +2325,6 @@ test = ["anyio[trio] (>=3.2.1,<4.0.0)", "black (==22.8.0)", "coverage[toml] (>=6 name = "ffmpeg-python" version = "0.2.0" description = "Python bindings for FFmpeg - with complex filtering support" -category = "main" optional = false python-versions = "*" files = [ @@ -2412,7 +2342,6 @@ dev = ["Sphinx (==2.1.0)", "future (==0.17.1)", "numpy (==1.16.4)", "pytest (==4 name = "filelock" version = "3.12.4" description = "A platform independent file lock." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2429,7 +2358,6 @@ typing = ["typing-extensions (>=4.7.1)"] name = "flake8" version = "6.1.0" description = "the modular source code checker: pep8 pyflakes and co" -category = "main" optional = false python-versions = ">=3.8.1" files = [ @@ -2446,7 +2374,6 @@ pyflakes = ">=3.1.0,<3.2.0" name = "flake8-isort" version = "6.1.0" description = "flake8 plugin that integrates isort ." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2464,7 +2391,6 @@ test = ["pytest"] name = "flower" version = "2.0.1" description = "Celery Flower" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2483,7 +2409,6 @@ tornado = ">=5.0.0,<7.0.0" name = "fonttools" version = "4.43.1" description = "Tools to manipulate font files" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2549,7 +2474,6 @@ woff = ["brotli (>=1.0.1)", "brotlicffi (>=0.8.0)", "zopfli (>=0.1.4)"] name = "frozenlist" version = "1.4.0" description = "A list-like structure which implements collections.abc.MutableSequence" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2620,7 +2544,6 @@ files = [ name = "fsspec" version = "2023.9.2" description = "File-system specification" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2656,7 +2579,6 @@ tqdm = ["tqdm"] name = "funcy" version = "1.18" description = "A fancy and practical functional tools" -category = "main" optional = false python-versions = "*" files = [ @@ -2668,7 +2590,6 @@ files = [ name = "future" version = "0.18.3" description = "Clean single-source support for Python 3 and 2" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" files = [ @@ -2679,7 +2600,6 @@ files = [ name = "greenlet" version = "3.0.0" description = "Lightweight in-process concurrent programming" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2755,7 +2675,6 @@ test = ["objgraph", "psutil"] name = "gunicorn" version = "21.2.0" description = "WSGI HTTP Server for UNIX" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2776,7 +2695,6 @@ tornado = ["tornado (>=0.2)"] name = "hiredis" version = "2.2.3" description = "Python wrapper for hiredis" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -2875,7 +2793,6 @@ files = [ name = "huggingface-hub" version = "0.17.3" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -2909,7 +2826,6 @@ typing = ["pydantic (<2.0)", "types-PyYAML", "types-requests", "types-simplejson name = "humanize" version = "4.8.0" description = "Python humanize utilities" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2924,7 +2840,6 @@ tests = ["freezegun", "pytest", "pytest-cov"] name = "hyperlink" version = "21.0.0" description = "A featureful, immutable, and correct URL for Python." -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -2939,7 +2854,6 @@ idna = ">=2.5" name = "identify" version = "2.5.30" description = "File identification library for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2954,7 +2868,6 @@ license = ["ukkonen"] name = "idna" version = "3.4" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -2966,7 +2879,6 @@ files = [ name = "imageio" version = "2.31.5" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -2998,7 +2910,6 @@ tifffile = ["tifffile"] name = "imagesize" version = "1.4.1" description = "Getting image size from png/jpeg/jpeg2000/gif file" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3010,7 +2921,6 @@ files = [ name = "imapclient" version = "2.1.0" description = "Easy-to-use, Pythonic and complete IMAP client library" -category = "main" optional = false python-versions = "*" files = [ @@ -3029,7 +2939,6 @@ test = ["mock (>=1.3.0)"] name = "incremental" version = "22.10.0" description = "\"A small library that versions your Python projects.\"" -category = "main" optional = false python-versions = "*" files = [ @@ -3045,7 +2954,6 @@ scripts = ["click (>=6.0)", "twisted (>=16.4.0)"] name = "inflection" version = "0.5.1" description = "A port of Ruby on Rails inflector to Python" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3057,7 +2965,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3069,7 +2976,6 @@ files = [ name = "ipdb" version = "0.13.13" description = "IPython-enabled pdb" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -3085,7 +2991,6 @@ ipython = {version = ">=7.31.1", markers = "python_version >= \"3.11\""} name = "ipython" version = "8.16.1" description = "IPython: Productive Interactive Computing" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -3124,7 +3029,6 @@ test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.21)", "pa name = "isort" version = "5.12.0" description = "A Python utility / library to sort Python imports." -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -3142,7 +3046,6 @@ requirements-deprecated-finder = ["pip-api", "pipreqs"] name = "jedi" version = "0.19.1" description = "An autocompletion tool for Python that can be used for text editors." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3162,7 +3065,6 @@ testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] name = "jinja2" version = "3.1.2" description = "A very fast and expressive template engine." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3180,7 +3082,6 @@ i18n = ["Babel (>=2.7)"] name = "jsonfield" version = "3.1.0" description = "A reusable Django field that allows you to store validated JSON in your model." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3195,7 +3096,6 @@ Django = ">=2.2" name = "jsonschema" version = "4.19.1" description = "An implementation of JSON Schema validation for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3217,7 +3117,6 @@ format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339- name = "jsonschema-specifications" version = "2023.7.1" description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3232,7 +3131,6 @@ referencing = ">=0.28.0" name = "kiwisolver" version = "1.4.5" description = "A fast implementation of the Cassowary constraint solver" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3346,7 +3244,6 @@ files = [ name = "kombu" version = "5.3.2" description = "Messaging library for Python." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3379,7 +3276,6 @@ zookeeper = ["kazoo (>=2.8.0)"] name = "langcodes" version = "3.3.0" description = "Tools for labeling human languages with IETF language tags" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3394,7 +3290,6 @@ data = ["language-data (>=1.1,<2.0)"] name = "lazy-object-proxy" version = "1.9.0" description = "A fast and thorough lazy object proxy." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3440,7 +3335,6 @@ files = [ name = "livereload" version = "2.6.3" description = "Python LiveReload is an awesome tool for web developers" -category = "main" optional = false python-versions = "*" files = [ @@ -3456,7 +3350,6 @@ tornado = {version = "*", markers = "python_version > \"2.7\""} name = "lxml" version = "4.9.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ @@ -3564,7 +3457,6 @@ source = ["Cython (>=0.29.35)"] name = "mako" version = "1.2.4" description = "A super-fast templating language that borrows the best ideas from the existing templating languages." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3584,7 +3476,6 @@ testing = ["pytest"] name = "markdown" version = "3.5" description = "Python implementation of John Gruber's Markdown." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3600,7 +3491,6 @@ testing = ["coverage", "pyyaml"] name = "markupsafe" version = "2.1.3" description = "Safely add untrusted strings to HTML/XML markup." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3660,7 +3550,6 @@ files = [ name = "matplotlib" version = "3.8.0" description = "Python plotting package" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -3710,7 +3599,6 @@ setuptools_scm = ">=7" name = "matplotlib-inline" version = "0.1.6" description = "Inline Matplotlib backend for Jupyter" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -3725,7 +3613,6 @@ traitlets = "*" name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3737,7 +3624,6 @@ files = [ name = "mpmath" version = "1.3.0" description = "Python library for arbitrary-precision floating-point arithmetic" -category = "main" optional = false python-versions = "*" files = [ @@ -3755,7 +3641,6 @@ tests = ["pytest (>=4.6)"] name = "msgpack" version = "1.0.7" description = "MessagePack serializer" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -3821,7 +3706,6 @@ files = [ name = "multidict" version = "6.0.4" description = "multidict implementation" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3905,7 +3789,6 @@ files = [ name = "murmurhash" version = "1.0.10" description = "Cython bindings for MurmurHash" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -3948,7 +3831,6 @@ files = [ name = "mutagen" version = "1.47.0" description = "read and write audio tags for many formats" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -3960,7 +3842,6 @@ files = [ name = "mypy" version = "0.991" description = "Optional static typing for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4010,7 +3891,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -4022,7 +3902,6 @@ files = [ name = "networkx" version = "3.1" description = "Python package for creating and manipulating graphs and networks" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4041,7 +3920,6 @@ test = ["codecov (>=2.1)", "pytest (>=7.2)", "pytest-cov (>=4.0)"] name = "nodeenv" version = "1.8.0" description = "Node.js virtual environment builder" -category = "main" optional = false python-versions = ">=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*" files = [ @@ -4056,7 +3934,6 @@ setuptools = "*" name = "numpy" version = "1.25.2" description = "Fundamental package for array computing in Python" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -4091,7 +3968,6 @@ files = [ name = "oauthlib" version = "3.2.2" description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4108,7 +3984,6 @@ signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] name = "olefile" version = "0.46" description = "Python package to parse, read and write Microsoft OLE2 files (Structured Storage or Compound Document, Microsoft Office)" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -4119,7 +3994,6 @@ files = [ name = "packaging" version = "23.2" description = "Core utilities for Python packages" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4131,7 +4005,6 @@ files = [ name = "parso" version = "0.8.3" description = "A Python Parser" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4147,7 +4020,6 @@ testing = ["docopt", "pytest (<6.0.0)"] name = "pathspec" version = "0.11.2" description = "Utility library for gitignore style pattern matching of file paths." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4159,7 +4031,6 @@ files = [ name = "pathy" version = "0.10.2" description = "pathlib.Path subclasses for local and cloud bucket storage" -category = "main" optional = false python-versions = ">= 3.6" files = [ @@ -4182,7 +4053,6 @@ test = ["mock", "pytest", "pytest-coverage", "typer-cli"] name = "pdfminer-six" version = "20191110" description = "PDF parser and analyzer" -category = "main" optional = false python-versions = "*" files = [ @@ -4204,7 +4074,6 @@ docs = ["sphinx", "sphinx-argparse"] name = "pexpect" version = "4.8.0" description = "Pexpect allows easy control of interactive console applications." -category = "main" optional = false python-versions = "*" files = [ @@ -4219,7 +4088,6 @@ ptyprocess = ">=0.5" name = "pgvector" version = "0.2.3" description = "pgvector support for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4233,7 +4101,6 @@ numpy = "*" name = "pickleshare" version = "0.7.5" description = "Tiny 'shelve'-like database with concurrency support" -category = "main" optional = false python-versions = "*" files = [ @@ -4245,7 +4112,6 @@ files = [ name = "pillow" version = "10.0.1" description = "Python Imaging Library (Fork)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4313,7 +4179,6 @@ tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "pa name = "platformdirs" version = "3.11.0" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4329,7 +4194,6 @@ test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4)", "pytest-co name = "pluggy" version = "1.3.0" description = "plugin and hook calling mechanisms for python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4345,7 +4209,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pre-commit" version = "3.4.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4364,7 +4227,6 @@ virtualenv = ">=20.10.0" name = "preshed" version = "3.0.9" description = "Cython hash table that trusts the keys are pre-hashed" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4411,7 +4273,6 @@ murmurhash = ">=0.28.0,<1.1.0" name = "preview-generator" version = "0.29" description = "A library for generating preview (thumbnails, text or json overview) for file-based content" -category = "main" optional = false python-versions = ">= 3.7" files = [ @@ -4439,7 +4300,6 @@ video = ["ffmpeg-python"] name = "prometheus-client" version = "0.17.1" description = "Python client for the Prometheus monitoring system." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4454,7 +4314,6 @@ twisted = ["twisted"] name = "prompt-toolkit" version = "3.0.39" description = "Library for building powerful interactive command lines in Python" -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -4469,7 +4328,6 @@ wcwidth = "*" name = "psutil" version = "5.9.5" description = "Cross-platform lib for process and system monitoring in Python." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -4496,7 +4354,6 @@ test = ["enum34", "ipaddress", "mock", "pywin32", "wmi"] name = "psycopg2-binary" version = "2.9.9" description = "psycopg2 - Python-PostgreSQL Database Adapter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4526,6 +4383,7 @@ files = [ {file = "psycopg2_binary-2.9.9-cp311-cp311-win32.whl", hash = "sha256:dc4926288b2a3e9fd7b50dc6a1909a13bbdadfc67d93f3374d984e56f885579d"}, {file = "psycopg2_binary-2.9.9-cp311-cp311-win_amd64.whl", hash = "sha256:b76bedd166805480ab069612119ea636f5ab8f8771e640ae103e05a4aae3e417"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:8532fd6e6e2dc57bcb3bc90b079c60de896d2128c5d9d6f24a63875a95a088cf"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b0605eaed3eb239e87df0d5e3c6489daae3f7388d455d0c0b4df899519c6a38d"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f8544b092a29a6ddd72f3556a9fcf249ec412e10ad28be6a0c0d948924f2212"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2d423c8d8a3c82d08fe8af900ad5b613ce3632a1249fd6a223941d0735fce493"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e5afae772c00980525f6d6ecf7cbca55676296b580c0e6abb407f15f3706996"}, @@ -4534,6 +4392,8 @@ files = [ {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:cb16c65dcb648d0a43a2521f2f0a2300f40639f6f8c1ecbc662141e4e3e1ee07"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:911dda9c487075abd54e644ccdf5e5c16773470a6a5d3826fda76699410066fb"}, {file = "psycopg2_binary-2.9.9-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:57fede879f08d23c85140a360c6a77709113efd1c993923c59fde17aa27599fe"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win32.whl", hash = "sha256:64cf30263844fa208851ebb13b0732ce674d8ec6a0c86a4e160495d299ba3c93"}, + {file = "psycopg2_binary-2.9.9-cp312-cp312-win_amd64.whl", hash = "sha256:81ff62668af011f9a48787564ab7eded4e9fb17a4a6a74af5ffa6a457400d2ab"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:2293b001e319ab0d869d660a704942c9e2cce19745262a8aba2115ef41a0a42a"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:03ef7df18daf2c4c07e2695e8cfd5ee7f748a1d54d802330985a78d2a5a6dca9"}, {file = "psycopg2_binary-2.9.9-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a602ea5aff39bb9fac6308e9c9d82b9a35c2bf288e184a816002c9fae930b77"}, @@ -4575,7 +4435,6 @@ files = [ name = "ptyprocess" version = "0.7.0" description = "Run a subprocess in a pseudo terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -4587,7 +4446,6 @@ files = [ name = "pure-eval" version = "0.2.2" description = "Safely evaluate AST nodes without side effects" -category = "main" optional = false python-versions = "*" files = [ @@ -4602,7 +4460,6 @@ tests = ["pytest"] name = "pyasn1" version = "0.5.0" description = "Pure-Python implementation of ASN.1 types and DER/BER/CER codecs (X.208)" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -4614,7 +4471,6 @@ files = [ name = "pyasn1-modules" version = "0.3.0" description = "A collection of ASN.1-based protocols modules" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" files = [ @@ -4629,7 +4485,6 @@ pyasn1 = ">=0.4.6,<0.6.0" name = "pycld2" version = "0.41" description = "Python bindings around Google Chromium's embedded compact language detection library (CLD2)" -category = "main" optional = false python-versions = "*" files = [ @@ -4640,7 +4495,6 @@ files = [ name = "pycodestyle" version = "2.11.0" description = "Python style guide checker" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4652,7 +4506,6 @@ files = [ name = "pycparser" version = "2.21" description = "C parser in Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -4664,7 +4517,6 @@ files = [ name = "pycryptodome" version = "3.19.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -4706,7 +4558,6 @@ files = [ name = "pycryptodomex" version = "3.19.0" description = "Cryptographic library for Python" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -4748,7 +4599,6 @@ files = [ name = "pydantic" version = "1.10.13" description = "Data validation and settings management using python type hints" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4801,7 +4651,6 @@ email = ["email-validator (>=1.0.3)"] name = "pydotplus" version = "2.0.2" description = "Python interface to Graphviz's Dot language" -category = "main" optional = false python-versions = "*" files = [ @@ -4815,7 +4664,6 @@ pyparsing = ">=2.0.1" name = "pydub" version = "0.25.1" description = "Manipulate audio with an simple and easy high level interface" -category = "main" optional = false python-versions = "*" files = [ @@ -4827,7 +4675,6 @@ files = [ name = "pyexifinfo" version = "0.4.0" description = "Simple Metadata extraction using Exiftool" -category = "main" optional = false python-versions = "*" files = [ @@ -4838,7 +4685,6 @@ files = [ name = "pyflakes" version = "3.1.0" description = "passive checker of Python programs" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -4850,7 +4696,6 @@ files = [ name = "pygments" version = "2.16.1" description = "Pygments is a syntax highlighting package written in Python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4865,7 +4710,6 @@ plugins = ["importlib-metadata"] name = "pyjwt" version = "2.8.0" description = "JSON Web Token implementation in Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -4886,7 +4730,6 @@ tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] name = "pylint" version = "2.17.7" description = "python code static checker" -category = "main" optional = false python-versions = ">=3.7.2" files = [ @@ -4911,7 +4754,6 @@ testutils = ["gitpython (>3)"] name = "pylint-celery" version = "0.3" description = "pylint-celery is a Pylint plugin to aid Pylint in recognising and understandingerrors caused when using the Celery library" -category = "main" optional = false python-versions = "*" files = [ @@ -4927,7 +4769,6 @@ pylint-plugin-utils = ">=0.2.1" name = "pylint-django" version = "2.5.3" description = "A Pylint plugin to help Pylint understand the Django web framework" -category = "main" optional = false python-versions = "*" files = [ @@ -4947,7 +4788,6 @@ with-django = ["Django"] name = "pylint-plugin-utils" version = "0.8.2" description = "Utilities and helpers for writing Pylint plugins" -category = "main" optional = false python-versions = ">=3.7,<4.0" files = [ @@ -4962,7 +4802,6 @@ pylint = ">=1.7" name = "pyopenssl" version = "23.2.0" description = "Python wrapper module around the OpenSSL library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -4981,7 +4820,6 @@ test = ["flaky", "pretend", "pytest (>=3.0.1)"] name = "pyparsing" version = "3.1.1" description = "pyparsing module - Classes and methods to define and execute parsing grammars" -category = "main" optional = false python-versions = ">=3.6.8" files = [ @@ -4996,7 +4834,6 @@ diagrams = ["jinja2", "railroad-diagrams"] name = "pysocks" version = "1.7.1" description = "A Python SOCKS client module. See https://github.com/Anorov/PySocks for more information." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -5009,7 +4846,6 @@ files = [ name = "pytest" version = "7.4.2" description = "pytest: simple powerful testing with Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5030,7 +4866,6 @@ testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "no name = "pytest-asyncio" version = "0.21.1" description = "Pytest support for asyncio" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5049,7 +4884,6 @@ testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy name = "pytest-django" version = "4.5.2" description = "A Django plugin for pytest." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -5068,7 +4902,6 @@ testing = ["Django", "django-configurations (>=2.0)"] name = "pytest-factoryboy" version = "2.3.1" description = "Factory Boy support for pytest." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5088,7 +4921,6 @@ typing-extensions = "*" name = "pytest-lambda" version = "2.2.0" description = "Define pytest fixtures with lambda functions." -category = "main" optional = false python-versions = ">=3.7.0,<4.0.0" files = [ @@ -5104,7 +4936,6 @@ wrapt = ">=1.11.0,<2.0.0" name = "pytest-mock" version = "3.11.1" description = "Thin-wrapper around the mock package for easier use with pytest" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5122,7 +4953,6 @@ dev = ["pre-commit", "pytest-asyncio", "tox"] name = "pytest-sugar" version = "0.9.7" description = "pytest-sugar is a plugin for pytest that changes the default look and feel of pytest (e.g. progressbar, show tests that fail instantly)." -category = "main" optional = false python-versions = "*" files = [ @@ -5142,7 +4972,6 @@ dev = ["black", "flake8", "pre-commit"] name = "pytest-xdist" version = "3.3.1" description = "pytest xdist plugin for distributed testing, most importantly across multiple CPUs" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5163,7 +4992,6 @@ testing = ["filelock"] name = "python-crontab" version = "3.0.0" description = "Python Crontab API" -category = "main" optional = false python-versions = "*" files = [ @@ -5182,7 +5010,6 @@ cron-schedule = ["croniter"] name = "python-dateutil" version = "2.8.2" description = "Extensions to the standard Python datetime module" -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ @@ -5197,7 +5024,6 @@ six = ">=1.5" name = "python-magic" version = "0.4.27" description = "File type identification using libmagic" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" files = [ @@ -5209,7 +5035,6 @@ files = [ name = "python-mpd2" version = "3.1.0" description = "A Python MPD client library" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5224,7 +5049,6 @@ twisted = ["Twisted"] name = "python-pptx" version = "0.6.21" description = "Generate and manipulate Open XML PowerPoint (.pptx) files" -category = "main" optional = false python-versions = "*" files = [ @@ -5240,7 +5064,6 @@ XlsxWriter = ">=0.5.7" name = "python-slugify" version = "7.0.0" description = "A Python slugify application that also handles Unicode" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5258,7 +5081,6 @@ unidecode = ["Unidecode (>=1.1.1)"] name = "python3-openid" version = "3.2.0" description = "OpenID support for modern servers and consumers." -category = "main" optional = false python-versions = "*" files = [ @@ -5277,7 +5099,6 @@ postgresql = ["psycopg2"] name = "pytube" version = "15.0.0" description = "Python 3 library for downloading YouTube Videos." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5289,7 +5110,6 @@ files = [ name = "pytz" version = "2023.3.post1" description = "World timezone definitions, modern and historical" -category = "main" optional = false python-versions = "*" files = [ @@ -5301,7 +5121,6 @@ files = [ name = "pyyaml" version = "6.0.1" description = "YAML parser and emitter for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -5351,7 +5170,6 @@ files = [ name = "rawpy" version = "0.18.1" description = "RAW image processing for Python, a wrapper for libraw" -category = "main" optional = false python-versions = "*" files = [ @@ -5384,7 +5202,6 @@ numpy = "*" name = "redis" version = "4.6.0" description = "Python client for Redis database and key-value store" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5403,7 +5220,6 @@ ocsp = ["cryptography (>=36.0.1)", "pyopenssl (==20.0.1)", "requests (>=2.26.0)" name = "referencing" version = "0.30.2" description = "JSON Referencing + Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5419,7 +5235,6 @@ rpds-py = ">=0.7.0" name = "regex" version = "2023.10.3" description = "Alternative regular expression module, to replace re." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5517,7 +5332,6 @@ files = [ name = "requests" version = "2.31.0" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5540,7 +5354,6 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "requests-oauthlib" version = "1.3.1" description = "OAuthlib authentication support for Requests." -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -5559,7 +5372,6 @@ rsa = ["oauthlib[signedtoken] (>=3.0.0)"] name = "rpds-py" version = "0.10.6" description = "Python bindings to Rust's persistent data structures (rpds)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5668,7 +5480,6 @@ files = [ name = "safetensors" version = "0.4.0" description = "" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5788,7 +5599,6 @@ torch = ["safetensors[numpy]", "torch (>=1.10)"] name = "sentry-sdk" version = "1.32.0" description = "Python client for Sentry (https://sentry.io)" -category = "main" optional = false python-versions = "*" files = [ @@ -5834,7 +5644,6 @@ tornado = ["tornado (>=5)"] name = "service-identity" version = "23.1.0" description = "Service identity verification for pyOpenSSL & cryptography." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5859,7 +5668,6 @@ tests = ["coverage[toml] (>=5.0.2)", "pytest"] name = "setuptools" version = "68.2.2" description = "Easily download, build, install, upgrade, and uninstall Python packages" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5876,7 +5684,6 @@ testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jar name = "setuptools-scm" version = "8.0.4" description = "the blessed package to manage your versions by scm tags" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5898,7 +5705,6 @@ test = ["build", "pytest", "rich", "wheel"] name = "six" version = "1.12.0" description = "Python 2 and 3 compatibility utilities" -category = "main" optional = false python-versions = ">=2.6, !=3.0.*, !=3.1.*" files = [ @@ -5910,7 +5716,6 @@ files = [ name = "smart-open" version = "6.4.0" description = "Utils for streaming large files (S3, HDFS, GCS, Azure Blob Storage, gzip, bz2...)" -category = "main" optional = false python-versions = ">=3.6,<4.0" files = [ @@ -5932,7 +5737,6 @@ webhdfs = ["requests"] name = "sniffio" version = "1.3.0" description = "Sniff out which async library your code is running under" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -5944,7 +5748,6 @@ files = [ name = "snowballstemmer" version = "2.2.0" description = "This package provides 29 stemmers for 28 languages generated from Snowball algorithms." -category = "main" optional = false python-versions = "*" files = [ @@ -5956,7 +5759,6 @@ files = [ name = "sortedcontainers" version = "2.4.0" description = "Sorted Containers -- Sorted List, Sorted Dict, Sorted Set" -category = "main" optional = false python-versions = "*" files = [ @@ -5968,7 +5770,6 @@ files = [ name = "soupsieve" version = "2.5" description = "A modern CSS selector implementation for Beautiful Soup." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -5980,7 +5781,6 @@ files = [ name = "spacy" version = "3.7.1" description = "Industrial-strength Natural Language Processing (NLP) in Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6071,7 +5871,6 @@ transformers = ["spacy-transformers (>=1.1.2,<1.4.0)"] name = "spacy-alignments" version = "0.9.1" description = "A spaCy package for the Rust tokenizations library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6111,7 +5910,6 @@ files = [ name = "spacy-legacy" version = "3.0.12" description = "Legacy registered functions for spaCy backwards compatibility" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6123,7 +5921,6 @@ files = [ name = "spacy-loggers" version = "1.0.5" description = "Logging utilities for SpaCy" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6135,7 +5932,6 @@ files = [ name = "spacy-lookups-data" version = "1.0.5" description = "Additional lookup tables and data resources for spaCy" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6150,7 +5946,6 @@ setuptools = "*" name = "spacy-transformers" version = "1.3.2" description = "spaCy pipelines for pre-trained BERT and other transformers" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6158,24 +5953,30 @@ files = [ {file = "spacy_transformers-1.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:befb4674e822c9fccc4d39271c9b98aec27fb7861181013dbac2198e14a0c70a"}, {file = "spacy_transformers-1.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:bac8090036c89b5a9621110b7a7302d059c2c34fb39b09c6589f51c14efc83c5"}, {file = "spacy_transformers-1.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f492873819613b5039226b8ea7faa7a89179098b4857a145841912bd0ac2e9b"}, + {file = "spacy_transformers-1.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2ed8b8c2a4ea940ac8c36be2d77cf114801898b890ad51d938fd96c2a14e08e"}, {file = "spacy_transformers-1.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:1f9a11f4b98313598f7348ffcbbdc854e8f3653057785d31de30db82341896fe"}, {file = "spacy_transformers-1.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:d04d346aff7443b718278d11ec565f63a131283dbebd3b187aa6b0e703f3cce3"}, {file = "spacy_transformers-1.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e214a2322b14c7123aeb0c7112e1fd6ba151180734e6f379bd528d5b134989e7"}, {file = "spacy_transformers-1.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:688647a5150075d0777622b18a1876518328fe427cc96df9083737fa3e1ad9da"}, + {file = "spacy_transformers-1.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ee05eb8b84e83ff2e949c291dddaf3e337523c094f5f80ef5d29a3849a1a1d3"}, {file = "spacy_transformers-1.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:fe91f7ebe1624896d205be8d5679d1d1177a73c5476ee47d3430e53b0836164c"}, {file = "spacy_transformers-1.3.2-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:b07021f63ec293e487b4260a4d259a6b9592275bab5f324c9b3dd5cb082d098e"}, {file = "spacy_transformers-1.3.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f0bf961e4f18bf4a14750cb98ac7624495b9d0156e74ade5918be16f5af90bc0"}, + {file = "spacy_transformers-1.3.2-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8f96c5f517e89b2c2cc8540aec4db2d7a987f9442d74c2f8569a6fc534dae01"}, {file = "spacy_transformers-1.3.2-cp36-cp36m-win_amd64.whl", hash = "sha256:90cc57ec37abd94b5a7e4238316a36eb41f3e97fc5a8c01fda4bad27b2b88f40"}, {file = "spacy_transformers-1.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:639e2fc2bd6b2b5385ef0515ade9621087cfeaf43935e7991b27a1d485b6df25"}, {file = "spacy_transformers-1.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7093aab214b1b76781e4ffc00f22bfa094e06285bdbdfa24bdab09096968e060"}, + {file = "spacy_transformers-1.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ebe0a70e4014e445877f31c69e3a04ced57b70931cb9740479a87a4c4bbea1c4"}, {file = "spacy_transformers-1.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:4cb1f8e68f223e94b32c62b1f05b9445fa4ccb74798b347f5e8afbf05ab50099"}, {file = "spacy_transformers-1.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:91f5609d002858defe846050715da0e3d684e5f64ff0e3c3ea06fab08c9e7b2c"}, {file = "spacy_transformers-1.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6d5b4e26a990d18b010cf1d5a168c91aff04e4f36275ded9d2ecb4dc5c912be5"}, {file = "spacy_transformers-1.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:572c82a991f2f50befb7d9cb62634f162858fb0723d532bc00bd6bad0d506686"}, + {file = "spacy_transformers-1.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7f6982d150a4713b9b4afc271ed6facae469f4011dbdb2c9f80a8f3c0ceb7e8"}, {file = "spacy_transformers-1.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:5701c11206f6ac5591beaa28fa5251081ba5991f60d13ead1c30784b04f36d98"}, {file = "spacy_transformers-1.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:43b401abecf561be4054246cbbe171a13ea078f252a9d29fea73bf1e49fc51cd"}, {file = "spacy_transformers-1.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:35dc8c36753f9ff0e27f8ecb43fee71804b636e455a48e8deb8adc6ef6d17f52"}, {file = "spacy_transformers-1.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9306c01bc30747dcf986e8b86e36b965ac4694fe79245b55d82568df68098a82"}, + {file = "spacy_transformers-1.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ad21e92060b53680bb1a518c0ed5cf5f90b38f8975a7fa500a1064a2dcb87d93"}, {file = "spacy_transformers-1.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:5beea005a540fc730c4c2da4b1523d517ee129c3de5f97a4f0752a3a3adbcf36"}, ] @@ -6204,7 +6005,6 @@ cuda92 = ["cupy-cuda92 (>=5.0.0b4)"] name = "speechrecognition" version = "3.8.1" description = "Library for performing speech recognition, with support for several engines and APIs, online and offline." -category = "main" optional = false python-versions = "*" files = [ @@ -6215,7 +6015,6 @@ files = [ name = "sphinx" version = "7.2.6" description = "Python documentation generator" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6250,7 +6049,6 @@ test = ["cython (>=3.0)", "filelock", "html5lib", "pytest (>=4.6)", "setuptools name = "sphinx-autobuild" version = "2021.3.14" description = "Rebuild Sphinx documentation on changes, with live-reload in the browser." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6270,7 +6068,6 @@ test = ["pytest", "pytest-cov"] name = "sphinxcontrib-applehelp" version = "1.0.7" description = "sphinxcontrib-applehelp is a Sphinx extension which outputs Apple help books" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6289,7 +6086,6 @@ test = ["pytest"] name = "sphinxcontrib-devhelp" version = "1.0.5" description = "sphinxcontrib-devhelp is a sphinx extension which outputs Devhelp documents" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6308,7 +6104,6 @@ test = ["pytest"] name = "sphinxcontrib-htmlhelp" version = "2.0.4" description = "sphinxcontrib-htmlhelp is a sphinx extension which renders HTML help files" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6327,7 +6122,6 @@ test = ["html5lib", "pytest"] name = "sphinxcontrib-jsmath" version = "1.0.1" description = "A sphinx extension which renders display math in HTML via JavaScript" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -6342,7 +6136,6 @@ test = ["flake8", "mypy", "pytest"] name = "sphinxcontrib-qthelp" version = "1.0.6" description = "sphinxcontrib-qthelp is a sphinx extension which outputs QtHelp documents" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6361,7 +6154,6 @@ test = ["pytest"] name = "sphinxcontrib-serializinghtml" version = "1.1.9" description = "sphinxcontrib-serializinghtml is a sphinx extension which outputs \"serialized\" HTML files (json and pickle)" -category = "main" optional = false python-versions = ">=3.9" files = [ @@ -6380,7 +6172,6 @@ test = ["pytest"] name = "spotipy" version = "2.16.1" description = "A light weight Python library for the Spotify Web API" -category = "main" optional = false python-versions = "*" files = [ @@ -6401,7 +6192,6 @@ test = ["mock (==2.0.0)"] name = "sqlalchemy" version = "2.0.21" description = "Database Abstraction Library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6421,14 +6211,6 @@ files = [ {file = "SQLAlchemy-2.0.21-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:b69f1f754d92eb1cc6b50938359dead36b96a1dcf11a8670bff65fd9b21a4b09"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-win32.whl", hash = "sha256:af520a730d523eab77d754f5cf44cc7dd7ad2d54907adeb3233177eeb22f271b"}, {file = "SQLAlchemy-2.0.21-cp311-cp311-win_amd64.whl", hash = "sha256:141675dae56522126986fa4ca713739d00ed3a6f08f3c2eb92c39c6dfec463ce"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:56628ca27aa17b5890391ded4e385bf0480209726f198799b7e980c6bd473bd7"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:db726be58837fe5ac39859e0fa40baafe54c6d54c02aba1d47d25536170b690f"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e7421c1bfdbb7214313919472307be650bd45c4dc2fcb317d64d078993de045b"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:632784f7a6f12cfa0e84bf2a5003b07660addccf5563c132cd23b7cc1d7371a9"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f6f7276cf26145a888f2182a98f204541b519d9ea358a65d82095d9c9e22f917"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2a1f7ffac934bc0ea717fa1596f938483fb8c402233f9b26679b4f7b38d6ab6e"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-win32.whl", hash = "sha256:bfece2f7cec502ec5f759bbc09ce711445372deeac3628f6fa1c16b7fb45b682"}, - {file = "SQLAlchemy-2.0.21-cp312-cp312-win_amd64.whl", hash = "sha256:526b869a0f4f000d8d8ee3409d0becca30ae73f494cbb48801da0129601f72c6"}, {file = "SQLAlchemy-2.0.21-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:7614f1eab4336df7dd6bee05bc974f2b02c38d3d0c78060c5faa4cd1ca2af3b8"}, {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d59cb9e20d79686aa473e0302e4a82882d7118744d30bb1dfb62d3c47141b3ec"}, {file = "SQLAlchemy-2.0.21-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a95aa0672e3065d43c8aa80080cdd5cc40fe92dc873749e6c1cf23914c4b83af"}, @@ -6488,7 +6270,6 @@ sqlcipher = ["sqlcipher3-binary"] name = "sqlparse" version = "0.4.4" description = "A non-validating SQL parser." -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -6505,7 +6286,6 @@ test = ["pytest", "pytest-cov"] name = "srsly" version = "2.4.8" description = "Modern high-performance serialization utilities for Python" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6552,7 +6332,6 @@ catalogue = ">=2.0.3,<2.1.0" name = "stack-data" version = "0.6.3" description = "Extract data from python stack frames and tracebacks for informative displays" -category = "main" optional = false python-versions = "*" files = [ @@ -6572,7 +6351,6 @@ tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] name = "starlette" version = "0.20.4" description = "The little ASGI library that shines." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6590,7 +6368,6 @@ full = ["itsdangerous", "jinja2", "python-multipart", "pyyaml", "requests"] name = "structlog" version = "23.2.0" description = "Structured Logging for Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -6608,7 +6385,6 @@ typing = ["mypy (>=1.4)", "rich", "twisted"] name = "sympy" version = "1.12" description = "Computer algebra system (CAS) in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -6623,7 +6399,6 @@ mpmath = ">=0.19" name = "tablib" version = "3.5.0" description = "Format agnostic tabular data library (XLS, JSON, YAML, CSV, etc.)" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -6645,7 +6420,6 @@ yaml = ["pyyaml"] name = "termcolor" version = "2.3.0" description = "ANSI color formatting for output in terminal" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6660,7 +6434,6 @@ tests = ["pytest", "pytest-cov"] name = "text-unidecode" version = "1.3" description = "The most basic Text::Unidecode port" -category = "main" optional = false python-versions = "*" files = [ @@ -6672,7 +6445,6 @@ files = [ name = "textract" version = "1.6.5" description = "extract text from any document. no muss. no fuss." -category = "main" optional = false python-versions = "*" files = [ @@ -6683,7 +6455,7 @@ files = [ [package.dependencies] argcomplete = ">=1.10.0,<1.11.0" beautifulsoup4 = ">=4.8.0,<4.9.0" -chardet = ">=3.0.0,<4.0.0" +chardet = "==3.*" docx2txt = ">=0.8,<1.0" extract-msg = "<=0.29" "pdfminer.six" = "20191110" @@ -6699,7 +6471,6 @@ pocketsphinx = ["pocketsphinx (==0.1.15)"] name = "thinc" version = "8.2.1" description = "A refreshing functional take on deep learning, compatible with your favorite libraries" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -6781,7 +6552,6 @@ torch = ["torch (>=1.6.0)"] name = "tinycss2" version = "1.2.1" description = "A tiny CSS parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6800,7 +6570,6 @@ test = ["flake8", "isort", "pytest"] name = "tokenizers" version = "0.13.3" description = "Fast and Customizable Tokenizers" -category = "main" optional = false python-versions = "*" files = [ @@ -6855,7 +6624,6 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests"] name = "tomli" version = "2.0.1" description = "A lil' TOML parser" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6867,7 +6635,6 @@ files = [ name = "tomlkit" version = "0.12.1" description = "Style preserving TOML library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6879,7 +6646,6 @@ files = [ name = "torch" version = "2.1.0" description = "Tensors and Dynamic neural networks in Python with strong GPU acceleration" -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -6920,7 +6686,6 @@ opt-einsum = ["opt-einsum (>=3.3)"] name = "tornado" version = "6.3.3" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." -category = "main" optional = false python-versions = ">= 3.8" files = [ @@ -6941,7 +6706,6 @@ files = [ name = "tqdm" version = "4.66.1" description = "Fast, Extensible Progress Meter" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -6962,7 +6726,6 @@ telegram = ["requests"] name = "traitlets" version = "5.11.2" description = "Traitlets Python configuration system" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -6978,7 +6741,6 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.5.1)", "pre-commit", "pytest (>=7.0, name = "transformers" version = "4.32.1" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" -category = "main" optional = false python-versions = ">=3.8.0" files = [ @@ -7048,7 +6810,6 @@ vision = ["Pillow (<10.0.0)"] name = "twisted" version = "23.8.0" description = "An asynchronous networking framework written in Python" -category = "main" optional = false python-versions = ">=3.7.1" files = [ @@ -7089,7 +6850,6 @@ windows-platform = ["pywin32 (!=226)", "pywin32 (!=226)", "twisted[all-non-platf name = "twisted-iocpsupport" version = "1.0.4" description = "An extension for use in the twisted I/O Completion Ports reactor." -category = "main" optional = false python-versions = "*" files = [ @@ -7118,7 +6878,6 @@ files = [ name = "txaio" version = "23.1.1" description = "Compatibility API between asyncio/Twisted/Trollius" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7135,7 +6894,6 @@ twisted = ["twisted (>=20.3.0)", "zope.interface (>=5.2.0)"] name = "typer" version = "0.9.0" description = "Typer, build great CLIs. Easy to code. Based on Python type hints." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7157,7 +6915,6 @@ test = ["black (>=22.3.0,<23.0.0)", "coverage (>=6.2,<7.0)", "isort (>=5.0.6,<6. name = "types-pytz" version = "2023.3.1.1" description = "Typing stubs for pytz" -category = "main" optional = false python-versions = "*" files = [ @@ -7169,7 +6926,6 @@ files = [ name = "types-pyyaml" version = "6.0.12.12" description = "Typing stubs for PyYAML" -category = "main" optional = false python-versions = "*" files = [ @@ -7181,7 +6937,6 @@ files = [ name = "types-requests" version = "2.31.0.8" description = "Typing stubs for requests" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7196,7 +6951,6 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.8.0" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7208,7 +6962,6 @@ files = [ name = "tzdata" version = "2023.3" description = "Provider of IANA time zone data" -category = "main" optional = false python-versions = ">=2" files = [ @@ -7220,7 +6973,6 @@ files = [ name = "tzlocal" version = "5.1" description = "tzinfo object for the local timezone" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7238,7 +6990,6 @@ devenv = ["black", "check-manifest", "flake8", "pyroma", "pytest (>=4.3)", "pyte name = "uritemplate" version = "4.1.1" description = "Implementation of RFC 6570 URI Templates" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7250,7 +7001,6 @@ files = [ name = "urllib3" version = "2.0.6" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7268,7 +7018,6 @@ zstd = ["zstandard (>=0.18.0)"] name = "uuid" version = "1.30" description = "UUID object and generation functions (Python 2.3 or higher)" -category = "main" optional = false python-versions = "*" files = [ @@ -7279,7 +7028,6 @@ files = [ name = "uuid6" version = "2023.5.2" description = "New time-based UUID formats which are suited for use as a database key" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7291,7 +7039,6 @@ files = [ name = "vine" version = "5.0.0" description = "Promises, promises, promises." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7303,7 +7050,6 @@ files = [ name = "virtualenv" version = "20.24.5" description = "Virtual Python Environment builder" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7324,7 +7070,6 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess name = "vtk" version = "9.2.6" description = "VTK is an open-source toolkit for 3D computer graphics, image processing, and visualization" -category = "main" optional = false python-versions = "*" files = [ @@ -7362,7 +7107,6 @@ web = ["wslink (>=1.0.4)"] name = "wand" version = "0.6.11" description = "Ctypes-based simple MagickWand API binding for Python" -category = "main" optional = false python-versions = "*" files = [ @@ -7378,7 +7122,6 @@ test = ["pytest (>=7.2.0)"] name = "wasabi" version = "1.1.2" description = "A lightweight console printing and formatting toolkit" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7393,7 +7136,6 @@ colorama = {version = ">=0.4.6", markers = "sys_platform == \"win32\" and python name = "watchdog" version = "3.0.0" description = "Filesystem events monitoring" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7433,7 +7175,6 @@ watchmedo = ["PyYAML (>=3.10)"] name = "watchfiles" version = "0.18.1" description = "Simple, modern and high performance file watching and code reload in python." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7464,7 +7205,6 @@ anyio = ">=3.0.0" name = "wcwidth" version = "0.2.8" description = "Measures the displayed width of unicode strings in a terminal" -category = "main" optional = false python-versions = "*" files = [ @@ -7476,7 +7216,6 @@ files = [ name = "weasel" version = "0.3.2" description = "Weasel: A small and easy workflow system" -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7499,7 +7238,6 @@ wasabi = ">=0.9.1,<1.2.0" name = "webencodings" version = "0.5.1" description = "Character encoding aliases for legacy web content" -category = "main" optional = false python-versions = "*" files = [ @@ -7511,7 +7249,6 @@ files = [ name = "websockets" version = "11.0.3" description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7591,7 +7328,6 @@ files = [ name = "werkzeug" version = "2.3.7" description = "The comprehensive WSGI web application library." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7610,7 +7346,6 @@ watchdog = ["watchdog (>=2.3)"] name = "whitenoise" version = "6.6.0" description = "Radically simplified static file serving for WSGI applications" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -7625,7 +7360,6 @@ brotli = ["Brotli"] name = "wrapt" version = "1.15.0" description = "Module for decorators, wrappers and monkey patching." -category = "main" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" files = [ @@ -7710,7 +7444,6 @@ files = [ name = "xlrd" version = "1.2.0" description = "Library for developers to extract data from Microsoft Excel (tm) spreadsheet files" -category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" files = [ @@ -7722,7 +7455,6 @@ files = [ name = "xlsxwriter" version = "3.1.7" description = "A Python module for creating Excel XLSX files." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -7734,7 +7466,6 @@ files = [ name = "xvfbwrapper" version = "0.2.9" description = "run headless display inside X virtual framebuffer (Xvfb)" -category = "main" optional = false python-versions = "*" files = [ @@ -7745,7 +7476,6 @@ files = [ name = "yandex-music" version = "2.1.1" description = "Неофициальная Python библиотека для работы с API сервиса Яндекс.Музыка." -category = "main" optional = false python-versions = "~=3.7" files = [ @@ -7761,7 +7491,6 @@ requests = {version = "*", extras = ["socks"]} name = "yarl" version = "1.9.2" description = "Yet another URL library" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7849,7 +7578,6 @@ multidict = ">=4.0" name = "yt-dlp" version = "2023.10.7" description = "A youtube-dl fork with additional features and patches" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7869,7 +7597,6 @@ websockets = "*" name = "zope-interface" version = "6.1" description = "Interfaces for Python" -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -7922,4 +7649,4 @@ testing = ["coverage (>=5.0.3)", "zope.event", "zope.testing"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "d020349806bcbfaa0caf782352bedbd3b9a0e9cfb59eb39163fb5b5d955fd97e" +content-hash = "62102df836bd0fbbd66affe6a19ab0e0df91dff566ae61fa58afec93aba02af6" diff --git a/pyproject.toml b/pyproject.toml index 8ea7212..0de28c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -108,6 +108,7 @@ pycld2 = "^0.41" textract = "^1.6.5" uuid6 = "^2023.5.2" fastapi = "0.86.0" +django-haystack = {extras = ["elasticsearch"], version = "^3.2.1"} [build-system]