From 739e5a22de523d4da3934d9be159dae774c017b1 Mon Sep 17 00:00:00 2001 From: didayolo Date: Tue, 10 Feb 2026 15:14:55 +0100 Subject: [PATCH 01/19] Add parenthesis to _MigrationPrivateStorage --- src/apps/datasets/migrations/0001_initial.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/datasets/migrations/0001_initial.py b/src/apps/datasets/migrations/0001_initial.py index 4615cc923..5249ec363 100644 --- a/src/apps/datasets/migrations/0001_initial.py +++ b/src/apps/datasets/migrations/0001_initial.py @@ -33,7 +33,7 @@ class Migration(migrations.Migration): ('name', models.CharField(blank=True, max_length=255, null=True)), ('type', models.CharField(choices=[('ingestion_program', 'Ingestion Program'), ('input_data', 'Input Data'), ('public_data', 'Public Data'), ('reference_data', 'Reference Data'), ('scoring_program', 'Scoring Program'), ('starting_kit', 'Starting Kit'), ('competition_bundle', 'Competition Bundle'), ('submission', 'Submission'), ('solution', 'Solution')], max_length=64)), ('description', models.TextField(blank=True, null=True)), - ('data_file', models.FileField(blank=True, null=True, storage=_MigrationPrivateStorage, upload_to=utils.data.PathWrapper('dataset'))), + ('data_file', models.FileField(blank=True, null=True, storage=_MigrationPrivateStorage(), upload_to=utils.data.PathWrapper('dataset'))), ('key', models.UUIDField(blank=True, default=uuid.uuid4, unique=True)), ('is_public', models.BooleanField(default=False)), ('upload_completed_successfully', models.BooleanField(default=False)), From c74cf1f6214769e8397590ee3327d93240472926 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Tue, 10 Feb 2026 15:42:45 +0100 Subject: [PATCH 02/19] version bump --- version.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/version.json b/version.json index fc5f77584..7f8c990a0 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { - "tag_name": "v1.23", - "release_name": "v1.23", - "html_url": "https://github.com/codalab/codabench/releases/tag/v1.23" + "tag_name": "v1.24", + "release_name": "v1.24", + "html_url": "https://github.com/codalab/codabench/releases/tag/v1.24" } From 4e26c42c50a91ab6c958372306ae974591ba3b7f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20Rudkiewicz?= Date: Wed, 11 Feb 2026 15:39:20 +0100 Subject: [PATCH 03/19] fix(`documentation/docs/Organizers/Benchmark_Creation/Competition-Bundle-Structure.md`): `metdata.yaml` -> `metadata.yaml` --- .../Benchmark_Creation/Competition-Bundle-Structure.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/documentation/docs/Organizers/Benchmark_Creation/Competition-Bundle-Structure.md b/documentation/docs/Organizers/Benchmark_Creation/Competition-Bundle-Structure.md index 8270594f5..c0e92663d 100644 --- a/documentation/docs/Organizers/Benchmark_Creation/Competition-Bundle-Structure.md +++ b/documentation/docs/Organizers/Benchmark_Creation/Competition-Bundle-Structure.md @@ -117,7 +117,7 @@ The ingestion program is a file that gets ran to generate the predictions from t The ingestion program is also paired with a `metadata.yaml` that specifies how to run it. It should have a key `command` that is the command used to run your ingestion program. The same special directories should be available to your ingestion program. -Example: Here's what an ingestion `metdata.yaml` might look like this: +Example: Here's what an ingestion `metadata.yaml` might look like this: ```yaml title="metadata.yaml" command: python3 /app/program/ingestion.py /app/input_data/ /app/output/ /app/program /app/ingested_program ``` From f91042637de2ee037fe365e0ac5e775723fd0b4b Mon Sep 17 00:00:00 2001 From: didayolo Date: Sat, 11 Oct 2025 15:28:27 +0200 Subject: [PATCH 04/19] Update compute worker to FAILED when needed --- compute_worker/compute_worker.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index a592604f0..311add58b 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -1129,12 +1129,16 @@ def start(self): self._run_program_directory(ingestion_program_dir, kind="ingestion"), self.watch_detailed_results(), loop=loop, + return_exceptions=True, ) + task_results = [] # will store results/exceptions from gather signal.signal(signal.SIGALRM, alarm_handler) signal.alarm(self.execution_time_limit) try: loop.run_until_complete(gathered_tasks) + # keep what gather returned so we can detect async errors later + task_results = list(gathered_tasks.result() or []) except ExecutionTimeLimitExceeded: error_message = f"Execution Time Limit exceeded. Limit was {self.execution_time_limit} seconds" logger.error(error_message) @@ -1211,6 +1215,18 @@ def start(self): logger.info("Program finished") signal.alarm(0) + # Failure "gate" BEFORE changing status + # An async task error? + had_async_exc = any(isinstance(r, BaseException) for r in task_results) + # Non-zero exit from either container counts as failure for this phase + program_rc = getattr(self, "program_exit_code", None) + ingestion_rc = getattr(self, "ingestion_program_exit_code", None) + failed_rc = any(rc not in (0, None) for rc in (program_rc, ingestion_rc)) + if had_async_exc or failed_rc: + self._update_status(STATUS_FAILED, extra_information=f"program_rc={program_rc}, ingestion_rc={ingestion_rc}") + # Raise so upstream marks failed immediately + raise SubmissionException("Child task failed or non-zero return code") + if self.is_scoring: self._update_status(STATUS_FINISHED) else: From 1ffe72caec220fef8f367f9b73573d02b93dd542 Mon Sep 17 00:00:00 2001 From: didayolo Date: Fri, 6 Feb 2026 11:54:41 +0100 Subject: [PATCH 05/19] Catch only real errors, improve formatting of Exception --- compute_worker/compute_worker.py | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index 311add58b..ae708d12c 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -449,7 +449,7 @@ async def send_detailed_results(self, file_path): ) ) except Exception as e: - logger.error("This error might result in a Execution Time Exceeded error" + e) + logger.error(f"This error might result in a Execution Time Exceeded error: {e}") if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) @@ -668,8 +668,7 @@ async def _run_container_engine_cmd(self, container, kind): ) except Exception as e: logger.error( - "There was an error trying to connect to the websocket on the codabench instance" - + e + f"There was an error trying to connect to the websocket on the codabench instance: {e}" ) if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) @@ -718,8 +717,7 @@ async def _run_container_engine_cmd(self, container, kind): logger.error(e) except Exception as e: logger.error( - "There was an error while starting the container and getting the logs" - + e + f"There was an error while starting the container and getting the logs: {e}" ) if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) @@ -1136,9 +1134,9 @@ def start(self): signal.signal(signal.SIGALRM, alarm_handler) signal.alarm(self.execution_time_limit) try: - loop.run_until_complete(gathered_tasks) + # run tasks # keep what gather returned so we can detect async errors later - task_results = list(gathered_tasks.result() or []) + task_results = loop.run_until_complete(gathered_tasks) or [] except ExecutionTimeLimitExceeded: error_message = f"Execution Time Limit exceeded. Limit was {self.execution_time_limit} seconds" logger.error(error_message) @@ -1163,7 +1161,7 @@ def start(self): logger.error(e) except Exception as e: logger.error( - "There was a problem killing " + str(containers_to_kill) + e + f"There was a problem killing {containers_to_kill}: {e}" ) if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) @@ -1193,7 +1191,7 @@ def start(self): logger.error(e) except Exception as e: logger.error( - "There was a problem killing " + str(containers_to_kill) + e + f"There was a problem killing {containers_to_kill}: {e}" ) if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) @@ -1216,14 +1214,18 @@ def start(self): signal.alarm(0) # Failure "gate" BEFORE changing status - # An async task error? - had_async_exc = any(isinstance(r, BaseException) for r in task_results) - # Non-zero exit from either container counts as failure for this phase + def is_real_async_failure(r): + # gather returns either normal values or exception instances when return_exceptions=True + return isinstance(r, BaseException) and not isinstance(r, asyncio.CancelledError) + had_async_exc = any(is_real_async_failure(r) for r in task_results) program_rc = getattr(self, "program_exit_code", None) ingestion_rc = getattr(self, "ingestion_program_exit_code", None) failed_rc = any(rc not in (0, None) for rc in (program_rc, ingestion_rc)) if had_async_exc or failed_rc: - self._update_status(STATUS_FAILED, extra_information=f"program_rc={program_rc}, ingestion_rc={ingestion_rc}") + self._update_status( + STATUS_FAILED, + extra_information=f"program_rc={program_rc}, ingestion_rc={ingestion_rc}, async={task_results}", + ) # Raise so upstream marks failed immediately raise SubmissionException("Child task failed or non-zero return code") From 63fa6fe062891213420ae6fbf4069d98c61f0913 Mon Sep 17 00:00:00 2001 From: didayolo Date: Fri, 6 Feb 2026 12:26:27 +0100 Subject: [PATCH 06/19] Make status code integers, add logs --- compute_worker/compute_worker.py | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index ae708d12c..28eaa0f8d 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -746,7 +746,7 @@ async def _run_container_engine_cmd(self, container, kind): Exception, ) as e: logger.error(e) - return_Code = {"StatusCode": e} + return_Code = {"StatusCode": 1} self.logs[kind] = { "returncode": return_Code["StatusCode"], @@ -1177,7 +1177,12 @@ def start(self): elapsed_time = logs["end"] - logs["start"] else: elapsed_time = self.execution_time_limit - return_code = logs["returncode"] + # Normalize the return_code + return_code = ( + logs["returncode"] + if logs["returncode"] is None or isinstance(logs["returncode"], int) + else 1 + ) if return_code is None: logger.warning("No return code from Process. Killing it") if kind == "ingestion": @@ -1229,6 +1234,10 @@ def is_real_async_failure(r): # Raise so upstream marks failed immediately raise SubmissionException("Child task failed or non-zero return code") + logger.info( + "PROGRAM STATUS: is_scoring=%s program_rc=%r ingestion_rc=%r task_results=%r", + self.is_scoring, program_rc, ingestion_rc, task_results + ) if self.is_scoring: self._update_status(STATUS_FINISHED) else: From 6e19ba271760238e9271d14f8be2ae9c9966fe7c Mon Sep 17 00:00:00 2001 From: didayolo Date: Fri, 6 Feb 2026 13:41:55 +0100 Subject: [PATCH 07/19] For scoring program only --- compute_worker/compute_worker.py | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index 28eaa0f8d..14a1b3c59 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -1218,27 +1218,17 @@ def start(self): logger.info("Program finished") signal.alarm(0) - # Failure "gate" BEFORE changing status - def is_real_async_failure(r): - # gather returns either normal values or exception instances when return_exceptions=True - return isinstance(r, BaseException) and not isinstance(r, asyncio.CancelledError) - had_async_exc = any(is_real_async_failure(r) for r in task_results) - program_rc = getattr(self, "program_exit_code", None) - ingestion_rc = getattr(self, "ingestion_program_exit_code", None) - failed_rc = any(rc not in (0, None) for rc in (program_rc, ingestion_rc)) - if had_async_exc or failed_rc: - self._update_status( - STATUS_FAILED, - extra_information=f"program_rc={program_rc}, ingestion_rc={ingestion_rc}, async={task_results}", - ) - # Raise so upstream marks failed immediately - raise SubmissionException("Child task failed or non-zero return code") - - logger.info( - "PROGRAM STATUS: is_scoring=%s program_rc=%r ingestion_rc=%r task_results=%r", - self.is_scoring, program_rc, ingestion_rc, task_results - ) if self.is_scoring: + # Check if scoring program failed + program_results, _, _ = task_results + # Gather returns either normal values or exception instances when return_exceptions=True + had_async_exc = isinstance(program_results, BaseException) and not isinstance(program_results, asyncio.CancelledError) + program_rc = getattr(self, "program_exit_code", None) + failed_rc = program_rc not in (0, None) + if had_async_exc or failed_rc: + self._update_status(STATUS_FAILED, extra_information=f"program_rc={program_rc}, async={task_results}") + # Raise so upstream marks failed immediately + raise SubmissionException("Child task failed or non-zero return code") self._update_status(STATUS_FINISHED) else: self._update_status(STATUS_SCORING) From fdb5a6b7f79354a5d779f1f9c9f9086a6f7174aa Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 16 Feb 2026 13:54:05 +0100 Subject: [PATCH 08/19] rebased branch; added some more try...except and error handling; moved scoring and ingestion update to prepare() from start() --- compute_worker/compute_worker.py | 34 ++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 15 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index 14a1b3c59..cb9bcfdce 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -452,6 +452,7 @@ async def send_detailed_results(self, file_path): logger.error(f"This error might result in a Execution Time Exceeded error: {e}") if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) + raise SubmissionException("Could not connect to instance to update detailed result") def _get_stdout_stderr_file_names(self, run_args): # run_args should be the run_args argument passed to __init__ from the run_wrapper. @@ -628,10 +629,10 @@ def _get_bundle(self, url, destination, cache=True): except BadZipFile: retries += 1 if retries >= max_retries: - raise # Re-raise the last caught BadZipFile exception + raise SubmissionException("Bad or empty zip file") else: - logger.warning("Failed. Retrying in 60 seconds...") - time.sleep(60) # Wait 60 seconds before retrying + logger.warning("Failed. Retrying in 20 seconds...") + time.sleep(20) # Wait 20 seconds before retrying # Return the zip file path for other uses, e.g. for creating a MD5 hash to identify it return bundle_file @@ -1064,6 +1065,15 @@ def _prep_cache_dir(self, max_size=MAX_CACHE_DIR_SIZE_GB): logger.info("Cache directory does not need to be pruned!") def prepare(self): + hostname = utils.nodenames.gethostname() + if self.is_scoring: + self._update_status( + STATUS_RUNNING, extra_information=f"scoring_hostname-{hostname}" + ) + else: + self._update_status( + STATUS_RUNNING, extra_information=f"ingestion_hostname-{hostname}" + ) if not self.is_scoring: # Only during prediction step do we want to announce "preparing" self._update_status(STATUS_PREPARING) @@ -1108,15 +1118,6 @@ def prepare(self): self._get_container_image(self.container_image) def start(self): - hostname = utils.nodenames.gethostname() - if self.is_scoring: - self._update_status( - STATUS_RUNNING, extra_information=f"scoring_hostname-{hostname}" - ) - else: - self._update_status( - STATUS_RUNNING, extra_information=f"ingestion_hostname-{hostname}" - ) program_dir = os.path.join(self.root_dir, "program") ingestion_program_dir = os.path.join(self.root_dir, "ingestion_program") @@ -1290,9 +1291,12 @@ def push_output(self): "Error, the output directory already contains a metadata file. This file is used " "to store exitCode and other data, do not write to this file manually." ) - - with open(metadata_path, "w") as f: - f.write(yaml.dump(prog_status, default_flow_style=False)) + try: + with open(metadata_path, "w") as f: + f.write(yaml.dump(prog_status, default_flow_style=False)) + except Exception as e: + logger.error(e) + raise SubmissionException("Metadata file not found") if not self.is_scoring: self._put_dir(self.prediction_result, self.output_dir) From 5919fcc42f3fdc02a0018bb3dbb30f93e82413ce Mon Sep 17 00:00:00 2001 From: didayolo Date: Thu, 5 Feb 2026 12:23:42 +0100 Subject: [PATCH 09/19] Make detailed results public when competition is public --- src/apps/api/views/submissions.py | 64 +++++++++++++++++-------------- src/apps/competitions/views.py | 2 +- 2 files changed, 37 insertions(+), 29 deletions(-) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index 79fde3d94..3f79e4c84 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -482,37 +482,45 @@ def get_details(self, request, pk): @action(detail=True, methods=('GET',)) def get_detail_result(self, request, pk): - submission = Submission.objects.get(pk=pk) + submission = get_object_or_404(Submission, pk=pk) + competition = submission.phase.competition + # Helper to avoid repeating serialization/Response code + def _allowed(): + data = SubmissionFilesSerializer(submission, context=self.get_serializer_context()).data + return Response(data.get("detailed_result"), status=status.HTTP_200_OK) # Check if competition show visualization is true - if submission.phase.competition.enable_detailed_results: - # get submission's competition approved participants - approved_participants = submission.phase.competition.participants.filter(status=CompetitionParticipant.APPROVED) - participant_usernames = [participant.user.username for participant in approved_participants] - - # check if in this competition - # user is collaborator - # or - # user is approved participant - # or - # user is creator - # or - # user is super user - if request.user in submission.phase.competition.collaborators.all() or\ - request.user.username in participant_usernames or\ - request.user == submission.phase.competition.created_by or\ - request.user.is_superuser: - - data = SubmissionFilesSerializer(submission, context=self.get_serializer_context()).data - return Response(data["detailed_result"], status=status.HTTP_200_OK) - + if competition.enable_detailed_results: + if competition.published: + # Detailed results are publicly available + return _allowed() else: - return Response({ - "error_msg": "You do not have permission to see the detailed result. Participate in this competition to view result."}, - status=status.HTTP_403_FORBIDDEN - ) + # Competition is private + user = request.user + if not user.is_authenticated: + return Response( + {"error_msg": "You do not have permission to see the detailed result. Participate in this competition to view result."}, + status=status.HTTP_403_FORBIDDEN, + ) + # Give access if user is collaborator, approved participant, + # competition creator or super user + is_collaborator = competition.collaborators.filter(pk=user.pk).exists() + is_creator = (user == competition.created_by) + is_superuser = user.is_superuser + is_approved_participant = CompetitionParticipant.objects.filter( + competition=competition, + user=user, + status=CompetitionParticipant.APPROVED, + ).exists() + if is_collaborator or is_approved_participant or is_creator or is_superuser: + # Allow access + return _allowed() + return Response( + {"error_msg": "You do not have permission to see the detailed result."}, + status=status.HTTP_403_FORBIDDEN, + ) else: - return Response({ - "error_msg": "Detailed results are disable for this competition!"}, + return Response( + {"error_msg": "Detailed results are disabled for this competition!"}, status=status.HTTP_404_NOT_FOUND ) diff --git a/src/apps/competitions/views.py b/src/apps/competitions/views.py index 6d2aa3c3e..33d4b7a78 100644 --- a/src/apps/competitions/views.py +++ b/src/apps/competitions/views.py @@ -102,5 +102,5 @@ def get_context_data(self, **kwargs): return context -class CompetitionDetailedResults(LoginRequiredMixin, TemplateView): +class CompetitionDetailedResults(TemplateView): template_name = 'competitions/detailed_results.html' From 8d7e0419afc53ee16b7107bfd0e0f412ef5e1086 Mon Sep 17 00:00:00 2001 From: didayolo Date: Thu, 5 Feb 2026 12:28:44 +0100 Subject: [PATCH 10/19] Flake8 fix --- src/apps/api/views/submissions.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/apps/api/views/submissions.py b/src/apps/api/views/submissions.py index 3f79e4c84..7c7ddb538 100644 --- a/src/apps/api/views/submissions.py +++ b/src/apps/api/views/submissions.py @@ -484,10 +484,12 @@ def get_details(self, request, pk): def get_detail_result(self, request, pk): submission = get_object_or_404(Submission, pk=pk) competition = submission.phase.competition + # Helper to avoid repeating serialization/Response code def _allowed(): data = SubmissionFilesSerializer(submission, context=self.get_serializer_context()).data return Response(data.get("detailed_result"), status=status.HTTP_200_OK) + # Check if competition show visualization is true if competition.enable_detailed_results: if competition.published: From 1ac0db7894d62ec13902559b0033e477307ad017 Mon Sep 17 00:00:00 2001 From: didayolo Date: Thu, 5 Feb 2026 12:48:14 +0100 Subject: [PATCH 11/19] Update tests --- src/apps/api/tests/test_submissions.py | 55 +++++++++++++++++++++++--- 1 file changed, 50 insertions(+), 5 deletions(-) diff --git a/src/apps/api/tests/test_submissions.py b/src/apps/api/tests/test_submissions.py index f498b1608..895fa142e 100644 --- a/src/apps/api/tests/test_submissions.py +++ b/src/apps/api/tests/test_submissions.py @@ -243,10 +243,16 @@ def test_no_one_can_see_detailed_result_when_visualization_is_false(self): resp = self.client.get(url) assert resp.status_code == 404 - def test_who_can_see_detailed_result_when_visualization_is_true(self): + def test_who_can_see_detailed_result_when_visualization_is_true_and_competition_is_private(self): self.comp.enable_detailed_results = True + self.comp.published = False self.comp.save() - url = reverse('submission-get-detail-result', args=(self.existing_submission.pk,)) + + url = reverse("submission-get-detail-result", args=(self.existing_submission.pk,)) + + # Anonymous user cannot see submission detail result + resp = self.client.get(url) + assert resp.status_code == 403 # Competition creator can see detail result self.client.force_login(self.creator) @@ -263,17 +269,17 @@ def test_who_can_see_detailed_result_when_visualization_is_true(self): resp = self.client.get(url) assert resp.status_code == 200 - # approved user can see submission detail result + # Approved user can see submission detail result self.client.force_login(self.participant) resp = self.client.get(url) assert resp.status_code == 200 - # pending user cannot see submission detail result + # Pending user cannot see submission detail result self.client.force_login(self.pending_participant) resp = self.client.get(url) assert resp.status_code == 403 - # denied user cannot see submission detail result + # Denied user cannot see submission detail result self.client.force_login(self.denied_participant) resp = self.client.get(url) assert resp.status_code == 403 @@ -283,6 +289,45 @@ def test_who_can_see_detailed_result_when_visualization_is_true(self): resp = self.client.get(url) assert resp.status_code == 403 + def test_who_can_see_detailed_result_when_visualization_is_true_and_competition_is_public(self): + self.comp.enable_detailed_results = True + self.comp.published = True + self.comp.save() + + url = reverse("submission-get-detail-result", args=(self.existing_submission.pk,)) + + # Detailed results are publicly available + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.creator) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.collaborator) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.superuser) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.participant) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.pending_participant) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.denied_participant) + resp = self.client.get(url) + assert resp.status_code == 200 + + self.client.force_login(self.other_user) + resp = self.client.get(url) + assert resp.status_code == 200 + class SubmissionUpdateTest(APITestCase): def setUp(self): From b39844075d3da42e840affa6594543e50d58afe4 Mon Sep 17 00:00:00 2001 From: Obada Haddad Date: Mon, 16 Feb 2026 17:05:46 +0100 Subject: [PATCH 12/19] changed uuid naming scheme for ingestion and scoring containers to user pk + submission ID; changed temporary file naming scheme to include user pk and submission ID as prefix --- compute_worker/compute_worker.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index cb9bcfdce..d8615a564 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -323,10 +323,13 @@ class Run: """ def __init__(self, run_args): + self.runRelatedName = ( + f"uPK-{run_args['user_pk']}_sID-{run_args['id']}" + ) # Directories for the run self.watch = True self.completed_program_counter = 0 - self.root_dir = tempfile.mkdtemp(dir=BASE_DIR) + self.root_dir = tempfile.mkdtemp(prefix=f'{self.runRelatedName}__', dir=BASE_DIR) self.bundle_dir = os.path.join(self.root_dir, "bundles") self.input_dir = os.path.join(self.root_dir, "input") self.output_dir = os.path.join(self.root_dir, "output") @@ -349,8 +352,8 @@ def __init__(self, run_args): self.stdout, self.stderr, self.ingestion_stdout, self.ingestion_stderr = ( self._get_stdout_stderr_file_names(run_args) ) - self.ingestion_container_name = uuid.uuid4() - self.program_container_name = uuid.uuid4() + self.ingestion_container_name = f"ingestion_{self.runRelatedName}" + self.program_container_name = f"scoring_{self.runRelatedName}" self.program_data = run_args.get("program_data") self.ingestion_program_data = run_args.get("ingestion_program") self.input_data = run_args.get("input_data") @@ -449,10 +452,14 @@ async def send_detailed_results(self, file_path): ) ) except Exception as e: - logger.error(f"This error might result in a Execution Time Exceeded error: {e}") + logger.error( + f"This error might result in a Execution Time Exceeded error: {e}" + ) if os.environ.get("LOG_LEVEL", "info").lower() == "debug": logger.exception(e) - raise SubmissionException("Could not connect to instance to update detailed result") + raise SubmissionException( + "Could not connect to instance to update detailed result" + ) def _get_stdout_stderr_file_names(self, run_args): # run_args should be the run_args argument passed to __init__ from the run_wrapper. @@ -1223,11 +1230,16 @@ def start(self): # Check if scoring program failed program_results, _, _ = task_results # Gather returns either normal values or exception instances when return_exceptions=True - had_async_exc = isinstance(program_results, BaseException) and not isinstance(program_results, asyncio.CancelledError) + had_async_exc = isinstance( + program_results, BaseException + ) and not isinstance(program_results, asyncio.CancelledError) program_rc = getattr(self, "program_exit_code", None) failed_rc = program_rc not in (0, None) if had_async_exc or failed_rc: - self._update_status(STATUS_FAILED, extra_information=f"program_rc={program_rc}, async={task_results}") + self._update_status( + STATUS_FAILED, + extra_information=f"program_rc={program_rc}, async={task_results}", + ) # Raise so upstream marks failed immediately raise SubmissionException("Child task failed or non-zero return code") self._update_status(STATUS_FINISHED) From be6745e5f6796cfe59bc1d823a9b62b7ba6079ea Mon Sep 17 00:00:00 2001 From: Duc Cuong Pham Date: Thu, 12 Feb 2026 16:53:06 +0700 Subject: [PATCH 13/19] Add restart policy to compute_worker configuration Sometimes compute_worker crashes. Add automatic restart to handle failures. --- docker-compose.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose.yml b/docker-compose.yml index 490eea55b..87fbba855 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -226,6 +226,7 @@ services: - ${HOST_DIRECTORY:-/tmp/codabench}:/codabench # Actual connection back to docker parent to run things - /var/run/docker.sock:/var/run/docker.sock + restart: unless-stopped env_file: .env environment: - BROKER_URL=pyamqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@${RABBITMQ_HOST}:${RABBITMQ_PORT}// From ac4ebe8f7a01c276dc4b40cbcb03c95c7838d069 Mon Sep 17 00:00:00 2001 From: didayolo Date: Wed, 4 Feb 2026 14:37:08 +0100 Subject: [PATCH 14/19] Option to rewrite endpoint URL to debug local instance --- .env_sample | 2 ++ compute_worker/compute_worker.py | 24 ++++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/.env_sample b/.env_sample index 027616fa8..e64434449 100644 --- a/.env_sample +++ b/.env_sample @@ -67,6 +67,8 @@ AWS_STORAGE_PRIVATE_BUCKET_NAME=private # NOTE! port 9000 here should match $MINIO_PORT AWS_S3_ENDPOINT_URL=http://minio:9000/ AWS_QUERYSTRING_AUTH=False +# Optional URL rewriting in compute worker, format: FROM | TO +#WORKER_BUNDLE_URL_REWRITE=http://localhost:9000|http://minio:9000 # ----------------------------------------------------------------------------- diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index cb9bcfdce..e58667f2c 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -208,6 +208,28 @@ class ExecutionTimeLimitExceeded(Exception): pass +# ----------------------------------------------- +# Local setups where public S3 URLs are not directly reachable from workers +# ----------------------------------------------- +def rewrite_bundle_url_if_needed(url): + """ + Optionally rewrite presigned bundle URLs for worker networking. + + Controlled by env: WORKER_BUNDLE_URL_REWRITE=FROM|TO + + Example: http://localhost:9000|http://minio:9000 + """ + rule = os.getenv("WORKER_BUNDLE_URL_REWRITE", "").strip() + if not rule or "|" not in rule: + return url + src, dst = rule.split("|", 1) + if url.startswith(src): + new_url = dst + url[len(src):] + logger.info(f"Rewriting bundle URL for worker: {url} -> {new_url}") + return new_url + return url + + # ----------------------------------------------------------------------------- # The main compute worker entrypoint, this is how a job is ran at the highest # level. @@ -616,6 +638,7 @@ def _get_bundle(self, url, destination, cache=True): if download_needed: try: # Download the bundle + url = rewrite_bundle_url_if_needed(url) urlretrieve(url, bundle_file) except HTTPError: raise SubmissionException( @@ -1023,6 +1046,7 @@ def _put_dir(self, url, directory): def _put_file(self, url, file=None, raw_data=None, content_type="application/zip"): """Send the file in the storage.""" + url = rewrite_bundle_url_if_needed(url) if file and raw_data: raise Exception("Cannot put both a file and raw_data") From aec5d295bdcbbe032c6efe150fdec71f41a790fb Mon Sep 17 00:00:00 2001 From: didayolo Date: Wed, 4 Feb 2026 14:54:55 +0100 Subject: [PATCH 15/19] Update the setup documentation --- .../Developers_and_Administrators/Codabench-Installation.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/docs/Developers_and_Administrators/Codabench-Installation.md b/documentation/docs/Developers_and_Administrators/Codabench-Installation.md index c0a23f418..0efc39068 100644 --- a/documentation/docs/Developers_and_Administrators/Codabench-Installation.md +++ b/documentation/docs/Developers_and_Administrators/Codabench-Installation.md @@ -41,7 +41,9 @@ by ```ini AWS_S3_ENDPOINT_URL=http://docker.for.mac.localhost:9000/ +WORKER_BUNDLE_URL_REWRITE=http://docker.for.mac.localhost:9000|http://minio:9000 ``` + !!! note "If needed, some troubleshooting of this step is provided at [the end of this page](#troubleshooting-storage-endpoint-url) or [in this page](How-to-deploy-Codabench-on-your-server.md#frequently-asked-questions-faqs)" ## Start the service From 9ab95e82c8e1defe25c48431c1e98d00804bdec2 Mon Sep 17 00:00:00 2001 From: didayolo Date: Tue, 17 Feb 2026 15:18:07 +0100 Subject: [PATCH 16/19] Rename variable following snake_case convention --- compute_worker/compute_worker.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/compute_worker/compute_worker.py b/compute_worker/compute_worker.py index d8615a564..cae76f7c1 100644 --- a/compute_worker/compute_worker.py +++ b/compute_worker/compute_worker.py @@ -323,13 +323,13 @@ class Run: """ def __init__(self, run_args): - self.runRelatedName = ( + self.run_related_name = ( f"uPK-{run_args['user_pk']}_sID-{run_args['id']}" ) # Directories for the run self.watch = True self.completed_program_counter = 0 - self.root_dir = tempfile.mkdtemp(prefix=f'{self.runRelatedName}__', dir=BASE_DIR) + self.root_dir = tempfile.mkdtemp(prefix=f'{self.run_related_name}__', dir=BASE_DIR) self.bundle_dir = os.path.join(self.root_dir, "bundles") self.input_dir = os.path.join(self.root_dir, "input") self.output_dir = os.path.join(self.root_dir, "output") @@ -352,8 +352,8 @@ def __init__(self, run_args): self.stdout, self.stderr, self.ingestion_stdout, self.ingestion_stderr = ( self._get_stdout_stderr_file_names(run_args) ) - self.ingestion_container_name = f"ingestion_{self.runRelatedName}" - self.program_container_name = f"scoring_{self.runRelatedName}" + self.ingestion_container_name = f"ingestion_{self.run_related_name}" + self.program_container_name = f"scoring_{self.run_related_name}" self.program_data = run_args.get("program_data") self.ingestion_program_data = run_args.get("ingestion_program") self.input_data = run_args.get("input_data") From e6108a99f98612fe901490c784362bb04f064023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrien=20Pav=C3=A3o?= Date: Tue, 17 Feb 2026 15:41:07 +0100 Subject: [PATCH 17/19] Newsletter 2025 (#2171) * Newsletter 2025 * Fix spacing * Update newsletter 2025 * Formatting * Add break * update newsletter 2025 * Update competitions list in newsletter * Proof reading --------- Co-authored-by: Anne-Catherine L. --- .../Newsletters_Archive/CodaLab-in-2024.md | 6 +- .../Newsletters_Archive/CodaLab-in-2025.md | 242 ++++++++++++++++++ ...c0-b492-cf427eba7eff_17528513107025487.jpg | Bin ...69-b157-6a5561e6798d_17528513106457524.jpg | Bin .../_attachments/break_2025.png | Bin 0 -> 70340 bytes .../_attachments/header_2025.png | Bin 0 -> 74670 bytes 6 files changed, 245 insertions(+), 3 deletions(-) create mode 100644 documentation/docs/Newsletters_Archive/CodaLab-in-2025.md rename documentation/docs/{ => Newsletters_Archive}/_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg (100%) rename documentation/docs/{ => Newsletters_Archive}/_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg (100%) create mode 100644 documentation/docs/Newsletters_Archive/_attachments/break_2025.png create mode 100644 documentation/docs/Newsletters_Archive/_attachments/header_2025.png diff --git a/documentation/docs/Newsletters_Archive/CodaLab-in-2024.md b/documentation/docs/Newsletters_Archive/CodaLab-in-2024.md index f99b8788a..0d613bf23 100644 --- a/documentation/docs/Newsletters_Archive/CodaLab-in-2024.md +++ b/documentation/docs/Newsletters_Archive/CodaLab-in-2024.md @@ -1,9 +1,9 @@ -## CodaLab in 2024 +## CodaLab in 2024 ### A Year of Breakthroughs and New Horizons with Codabench Welcome to the first edition of CodaLab’s newsletter! This year has been full of novelty, success, and scientific progress. The platform is breaking records of participation and number of organized competitions, and [Codabench](https://codabench.org/), the new version of [CodaLab](https://codalab.lisn.fr/), had a very promising launch. Let’s dive into more details. -![image_2025_01_30T15_23_35_261Z](../_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg) +![image_2025_01_30T15_23_35_261Z](_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg) ## Unprecedented engagement @@ -13,7 +13,7 @@ In October, Codabench has registered its **10,000th user**! From about 100 daily Contributors community is very active with **143 pull requests** this year. Since the platform is still relatively new, the primary focus has been on bug fixes, security and performance enhancements, and administrative features, accounting for approximately two-thirds of the pull requests. Nevertheless, we are keen on improving the experience for both participants and organizers. We have set a versioning and a release-notes follow-up to give more visibility to the platform evolution and maturity. -![pie-chart](../_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg) +![pie-chart](_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg) ## Introducing Codabench diff --git a/documentation/docs/Newsletters_Archive/CodaLab-in-2025.md b/documentation/docs/Newsletters_Archive/CodaLab-in-2025.md new file mode 100644 index 000000000..d92c2ef7a --- /dev/null +++ b/documentation/docs/Newsletters_Archive/CodaLab-in-2025.md @@ -0,0 +1,242 @@ +# CodaLab and Codabench newsletter + +## What happened in 2025? + +2025 was a year of transition and consolidation for our community. After 13 +years of service, [CodaLab Competitions](https://codalab.lisn.fr/) was +officially phased out, closing an important chapter in the history of open +scientific challenges. At the same time, [Codabench](https://codabench.org/) +matured into the central platform for benchmarking, concentrating both usage and +development efforts. + +Beyond the symbolic handover, the year was marked by strong community +engagement, growing activity on Codabench, and steady progress on the software +itself. This newsletter offers a snapshot of that journey: key numbers, standout +competitions, and the latest advances shaping the platform. + +![image_header](_attachments/header_2025.png) + +# Bye bye, CodaLab! + +After 13 years and millions of submissions made, +[CodaLab Competitions](https://codalab.lisn.fr/) and its main servers were +finally phased out at end of 2025, passing the torch to +[Codabench](https://codabench.org/). + +Today, Codabench is where the community's energy and development efforts are +fully focused. As a modernized evolution of the CodaLab platform, it preserves +familiar workflows while introducing improved performance, live logs, greater +transparency, data-centric benchmarks, and more. + +If you haven't made the transition yet as an organizer, good news: CodaLab +bundles are fully compatible with Codabench, making the move straightforward. +The process is documented step by step here: +[How to transition from CodaLab to Codabench](https://docs.codabench.org/latest/Organizers/Benchmark_Creation/How-to-transition-from-CodaLab-to-Codabench/) + +# Some statistics + +Codabench continued to grow strongly throughout the year, reaching **519 public +competitions** created and welcoming **31,608 new users**! Daily activity also +increased steadily, from around 500 submissions per day in January to **over +1,000 daily submissions by December**, reflecting sustained community +engagement. + +CodaLab, while entering its sunset phase, still saw **100 public competitions** +created and **14,854 new users** over the year. Submission activity peaked in +March (around 850 submissions per day), before gradually declining to fewer than +200 daily submissions in December, as usage progressively shifted towards +Codabench. + +# Spotlight on competitions + +2025 featured many notable competitions across scientific and industrial fields. +From NeurIPS and ICML to challenges in health and medical research, +environmental science, industrial applications, language processing, and +education, the diversity of topics continued to grow. + +#### NeurIPS and ICML + +- [EEG Foundation Challenge](https://www.codabench.org/competitions/9975/), + aiming to advance the field of electroencephalogram (EEG) decoding by + addressing two critical challenges, (1) models that can transfer knowledge from any cognitive + EEG tasks to active task and (2) creating representations that generalize across different subjects. + It was the most popular competition this year, + featuring **1220 participants**, was the NeurIPS 2025 competition. +- [NeurIPS 2025 Weak Lensing Uncertainty Challenge](https://www.codabench.org/competitions/8934/), +exploring uncertainty-aware and out-of-distribution detection AI techniques for +Weak Gravitational Lensing Cosmology. +- [NeurIPS 2025: Fairness in AI Face Detection Challenge](https://www.codabench.org/competitions/7166/), + where the goal is to advance the development of fair and robust AI-generated + face detection systems by addressing the critical challenge of fairness + generalization under real-world deployment conditions. +- [ICML 2025 AI for Math Workshop & Challenge 1 - APE-Bench I](https://www.codabench.org/competitions/8357/), + designed to evaluate systems that can automate proof engineering in + large-scale formal mathematics libraries. + +#### Health and medical research + +- [MAMA-MIA Challenge](https://www.codabench.org/competitions/7425/), studying +breast cancer through magnetic resonance imaging (MRI) data, that turned into a +long-term benchmark. +[Universal UltraSound Image Challenge: Multi-Organ Classification and Segmentation](https://www.codabench.org/competitions/9106/), + aiming at evaluating algorithms for multi-organ classification and + segmentation using diverse, real-world ultrasound data collected across + multiple centers and devices. --> +- [NSF HDR Scientific Modeling out of distribution: Neural Forecasting](https://www.codabench.org/competitions/9806/), + in which algorithms forecast the activations of a cluster of neurons given + previous signals from the same cluster. +- [The Algonauts Project 2025 Challenge](https://www.codabench.org/competitions/4313/), +aiming at providing a platform where biological and artificial intelligence +scientists can cooperate and compete in developing cutting-edge encoding models +of neural responses to multimodal naturalistic movies that well generalize +outside of their training distribution. + + +#### Environmental research + +- [MIT ARCLab Prize for Space AI Innovation 2025](https://www.codabench.org/competitions/5547/), + where the objective is to develop cutting-edge AI algorithms for nowcasting + and forecasting space weather-driven changes in atmospheric density across low + earth orbit using historical space weather observations. +- TreeAI4Species Competition: + [Semantic Segmentation](https://www.codabench.org/competitions/9168/) and + [Object detection](https://www.codabench.org/competitions/8485/), studying + algorithms for identifying tree species from high-resolution aerial imagery. +- [Water Scarcity](https://www.codabench.org/competitions/4335/), leveraging + data science to address water scarcity issues through simulations. + +#### Industrial applications + +- [ICPR 2026 Competition on Low-Resolution License Plate Recognition](https://www.codabench.org/competitions/12259/), + a computer vision challenge on low resolution images which gathered more than + 500 participants. +- [AssetOpsBench](https://www.codabench.org/competitions/10206/), in which + participants propose agents that solve realistic industrial tasks across the + full pipeline: "Sensing → Reasoning → Actuation". +- [Universal Behavioral Modeling Data Challenge](https://www.codabench.org/competitions/7230/), +designed to promote a unified approach to behavior modeling and data analytics. +- [WWW 2025: SMARTMEM Memory Failure Prediction Competition](https://www.codabench.org/competitions/3586/), + where the task is to predict memory failures for data centers. + + +#### Natural Language Processing + +SemEval (Semantic Evaluation) is an international series of shared tasks in +natural language processing that provides standardized benchmarks to evaluate +and compare systems on semantic understanding challenges. More than 12 tasks +(with sub-tracks) were organized on Codabench in 2025, accounting for more than +20,000 submissions. + +- SemEval competitions suite: Task [1](https://www.codabench.org/competitions/9719/), [2](https://www.codabench.org/competitions/9963/), [3](https://www.codabench.org/competitions/10918/), + [4](https://www.codabench.org/competitions/10273/), [5](https://www.codabench.org/competitions/10877/), [6](https://www.codabench.org/competitions/10879/), + [7](https://www.codabench.org/competitions/3737/), [8](https://www.codabench.org/competitions/3360/), [9](https://www.codabench.org/competitions/10522/), + [10](https://www.codabench.org/competitions/10749/), [11](https://www.codabench.org/competitions/3863/), [12](https://www.codabench.org/competitions/12446/) + + + +Other notable NLP benchmarks: + +- [Behind the Secrets of Large Language Models](https://www.codabench.org/competitions/11605/) +- [VLSP2025 DRiLL shared task](https://www.codabench.org/competitions/9722/) + +#### Education + +- [IndoML 2025 Datathon Tack-1: Mistake Identification](https://www.codabench.org/competitions/7189/), + a task focusing on mistake identification for education application. +- [Compétition Algorithmique Avancée CS 3A INFO -- TSP-rd](https://www.codabench.org/competitions/9896/), +a competition used as a training for students in computer science, receiving +more than 3000 submissions. + +- [Tokam2D - Structure detection in fusion plasma simulations - datacamp 2025](https://www.codabench.org/competitions/11224/), + physics based data science training at Université Paris-Saclay. + +A huge thank you to everyone in the community for these **outstanding scientific contributions** +across a wide variety of fields. You can discover **many more challenges in the [public competition listing](https://www.codabench.org/competitions/public/?page=1)**. + +![image_break](_attachments/break_2025.png) + +# Novelty in the software + +Our contributors community was very active, with **139 pull requests merged** +this year. Many new features, bug fixes, and back-end changes were made. We +present some of them below. + +#### New features for participants and organizers + +- Public datasets listing: https://www.codabench.org/datasets/public/?page=1 +- [Croissant](https://docs.mlcommons.org/croissant/) standard compatibility +- New documentation website: https://docs.codabench.org +- Users can delete their submissions and manage their individual storage +- Leaderboards are now public for everyone without login required + +#### Back-end changes for developpers and hosters + +- Using Playwright instead of Selenium for automatic tests +- Logs are now colored and easier to read +- Django and other packages version upgrades + +#### What's to come + +The trend is to make the project more easy to deploy for independant hosters. + +- Unified and lighter compute worker image, making it more stable +- Make compute worker its own repository, which means it can be more easily used + for other projects if needed +- Django Admin upgrades to make it easier to manage the website as a site admin + +# Community + +Reminder on our communication tools: + +- Join our [google forum](https://groups.google.com/g/codalab-competitions) to + communicate your competitions and events +- Contact us for any question: info@codabench.org +- Write an issue on [github](https://github.com/codalab/codabench) about + interesting suggestions + +Please cite this paper when working with Codabench: + +``` +@article{codabench, + title = {Codabench: Flexible, easy-to-use, and reproducible meta-benchmark platform}, + author = {Zhen Xu and Sergio Escalera and Adrien Pavão and Magali Richard and + Wei-Wei Tu and Quanming Yao and Huan Zhao and Isabelle Guyon}, + journal = {Patterns}, + volume = {3}, + number = {7}, + pages = {100543}, + year = {2022}, + issn = {2666-3899}, + doi = {https://doi.org/10.1016/j.patter.2022.100543}, + url = {https://www.sciencedirect.com/science/article/pii/S2666389922001465} +} +``` + +# Closing words + +Thank you for reading the our newsletter. We're not done yet! More projects, +more challenges, and more science ahead. Our open platform is becoming a +powerful actor for building reliable and innovative AI benchmarks. See you on +Codabench. + +![partners](_attachments/96bbc3a0-cb9b-479a-85c8-ba795c59d6f4_1753436671847627.jpg) diff --git a/documentation/docs/_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg b/documentation/docs/Newsletters_Archive/_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg similarity index 100% rename from documentation/docs/_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg rename to documentation/docs/Newsletters_Archive/_attachments/2b41574f-9597-47c0-b492-cf427eba7eff_17528513107025487.jpg diff --git a/documentation/docs/_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg b/documentation/docs/Newsletters_Archive/_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg similarity index 100% rename from documentation/docs/_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg rename to documentation/docs/Newsletters_Archive/_attachments/991c18dc-3baa-4d69-b157-6a5561e6798d_17528513106457524.jpg diff --git a/documentation/docs/Newsletters_Archive/_attachments/break_2025.png b/documentation/docs/Newsletters_Archive/_attachments/break_2025.png new file mode 100644 index 0000000000000000000000000000000000000000..116d7c9ce8b5f68efebadc9fdd02a16368d28077 GIT binary patch literal 70340 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%0Aod{T$#NJ>#sL4siy}mPGTM_lB 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 aW7DQL7Kh*VC|MD=uA-!&n5SUu_kRF<19B4p literal 0 HcmV?d00001 From 1d2ab540d5752847f94f210737e1785e727f0d66 Mon Sep 17 00:00:00 2001 From: Obada Haddad-Soussac <11889208+ObadaS@users.noreply.github.com> Date: Tue, 17 Feb 2026 19:03:36 +0100 Subject: [PATCH 18/19] Merge pull request #2191 from codalab/userAdmin_djangoInterface User Admin upgrades (easier user creation + password change) --- src/apps/profiles/admin.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/apps/profiles/admin.py b/src/apps/profiles/admin.py index 1e598308d..a3ad7bfe8 100644 --- a/src/apps/profiles/admin.py +++ b/src/apps/profiles/admin.py @@ -4,6 +4,7 @@ import json import csv from django.http import HttpResponse +from django.contrib.auth.admin import UserAdmin # General class used to make custom filter @@ -67,7 +68,7 @@ def export_as_json(modeladmin, request, queryset): return HttpResponse(json.dumps(email_list), content_type="application/json") -class UserExpansion(admin.ModelAdmin): +class UserExpansion(UserAdmin): # The following two lines are needed for Django-su: change_form_template = "admin/auth/user/change_form.html" change_list_template = "admin/auth/user/change_list.html" From c28b6787b80e4cf9b25285823bebe5bacb1daaaf Mon Sep 17 00:00:00 2001 From: Obada Haddad-Soussac <11889208+ObadaS@users.noreply.github.com> Date: Wed, 18 Feb 2026 13:51:35 +0100 Subject: [PATCH 19/19] Dockerfiles changes and uv introduction (#2139) * move Dockerfiles to packaging/container; use different base image to reduce overall size; switch to using uv instead of poetry * fix workflow paths and name * workflow fixes * move some dependencies to dev group * rebase and update pyproject to use groups * add new required dependency that was in python:3.10 image but not in current almalinux image * add new file to ignore in .gitignore * remove useless line * update postgres to latest; add postgres configuration file; update documentation * tentative fix for postgres on circle-ci * Revert "update postgres to latest; add postgres configuration file; update documentation" This reverts commit 2353deda6bd18443a8cc3b3651287efaaf2a35d7. * Revert "tentative fix for postgres on circle-ci" This reverts commit 294a8e4903a11d0f092ec7b20a2394e66ae2dec9. * named local worker in docker-compose for server_status * rename Dockerfile to Containerfile in documentation * Inter-platform robustness, remove platform from Containerfile * Revert change on docker-compose.yml * Improve Apple chips installation instructions --------- Co-authored-by: Obada Haddad Co-authored-by: didayolo --- .circleci/config.yml | 5 +- .github/workflows/build_cw_image-branch.yml | 4 +- .github/workflows/build_cw_image-dev.yml | 4 +- .github/workflows/build_cw_image-prod.yml | 6 +- .gitignore | 1 + Dockerfile | 21 - Dockerfile.builder | 10 - Dockerfile.compute_worker | 34 - Dockerfile.flower | 31 - compute_worker/poetry.lock | 772 ---- compute_worker/pyproject.toml | 39 +- compute_worker/uv.lock | 439 +++ docker-compose.yml | 24 +- .../Codabench-Installation.md | 21 +- ...idation-and-deployment-of-pull-requests.md | 2 +- packaging/container/Containerfile | 20 + packaging/container/Containerfile.builder | 7 + .../container/Containerfile.compute_worker | 23 + .../container/Containerfile.rabbitmq | 0 poetry.lock | 3419 ----------------- pyproject.toml | 149 +- uv.lock | 1967 ++++++++++ 22 files changed, 2590 insertions(+), 4408 deletions(-) delete mode 100644 Dockerfile delete mode 100644 Dockerfile.builder delete mode 100644 Dockerfile.compute_worker delete mode 100644 Dockerfile.flower delete mode 100644 compute_worker/poetry.lock create mode 100644 compute_worker/uv.lock create mode 100644 packaging/container/Containerfile create mode 100644 packaging/container/Containerfile.builder create mode 100644 packaging/container/Containerfile.compute_worker rename Dockerfile.rabbitmq => packaging/container/Containerfile.rabbitmq (100%) delete mode 100644 poetry.lock create mode 100644 uv.lock diff --git a/.circleci/config.yml b/.circleci/config.yml index c57318548..2397fe083 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -53,9 +53,6 @@ jobs: name: "Docker: Build containers and collect static files" command: | docker compose up -d - docker compose exec django python manage.py collectstatic --noinput - docker compose exec django python manage.py migrate - docker compose exec django python ./manage.py createsuperuser --no-input - run: name: "Get compute worker, site worker and django logs" @@ -77,6 +74,8 @@ jobs: - run: name: "Tests: Run end-to-end (E2E) tests" command: | + docker compose exec django python ./manage.py createsuperuser --no-input + docker compose exec django python ./manage.py collectstatic --no-input cd tests && CI=True $HOME/.local/bin/uv run pytest test_auth.py test_account_creation.py test_competition.py test_submission.py no_output_timeout: 30m diff --git a/.github/workflows/build_cw_image-branch.yml b/.github/workflows/build_cw_image-branch.yml index 54f4b618c..59e72c237 100644 --- a/.github/workflows/build_cw_image-branch.yml +++ b/.github/workflows/build_cw_image-branch.yml @@ -7,7 +7,7 @@ on: - '!develop' - '!master' paths: - - Dockerfile.compute_worker + - packaging/container/Containerfile.compute_worker - compute_worker/** jobs: build_push_image: @@ -17,7 +17,7 @@ jobs: - name: Check out repository code uses: actions/checkout@v5 - name: Build Image - run: docker build -t codalab/codabench-compute-worker:${{ github.ref_name }} -f Dockerfile.compute_worker . + run: docker build -t codalab/codabench-compute-worker:${{ github.ref_name }} -f packaging/container/Containerfile.compute_worker . - name: Login to Docker Hub uses: docker/login-action@v3 with: diff --git a/.github/workflows/build_cw_image-dev.yml b/.github/workflows/build_cw_image-dev.yml index 1809822b7..d9ea42688 100644 --- a/.github/workflows/build_cw_image-dev.yml +++ b/.github/workflows/build_cw_image-dev.yml @@ -4,7 +4,7 @@ on: branches: - develop paths: - - Dockerfile.compute_worker + - packaging/container/Containerfile.compute_worker - compute_worker/** jobs: build: @@ -14,7 +14,7 @@ jobs: - name: Check out repository code uses: actions/checkout@v5 - name: Build Image - run: docker build -t codalab/codabench-compute-worker:test -f Dockerfile.compute_worker . + run: docker build -t codalab/codabench-compute-worker:test -f packaging/container/Containerfile.compute_worker . - name: Login to Docker Hub uses: docker/login-action@v3 with: diff --git a/.github/workflows/build_cw_image-prod.yml b/.github/workflows/build_cw_image-prod.yml index 219656322..075febb0b 100644 --- a/.github/workflows/build_cw_image-prod.yml +++ b/.github/workflows/build_cw_image-prod.yml @@ -1,10 +1,10 @@ -name: build_CW_docker_image_branch +name: build_CW_docker_image_master on: push: tags: - '*' paths: - - Dockerfile.compute_worker + - packaging/container/Containerfile.compute_worker - compute_worker/** jobs: build: @@ -14,7 +14,7 @@ jobs: - name: Check out repository code uses: actions/checkout@v5 - name: Build Image - run: docker build -t codalab/codabench-compute-worker:${{ github.ref_name }} -f Dockerfile.compute_worker . + run: docker build -t codalab/codabench-compute-worker:${{ github.ref_name }} -f packaging/container/Containerfile.compute_worker . - name: Login to Docker Hub uses: docker/login-action@v3 with: diff --git a/.gitignore b/.gitignore index c7b8707c9..23ba617d2 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,7 @@ src/static/generated/* db.sqlite3 celerybeat-schedule +celerybeat-schedule.db package-lock.json artifacts/ diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 34d080c18..000000000 --- a/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -FROM python:3.10.0 - -RUN apt-get update && apt-get install -y gcc build-essential && rm -rf /var/lib/apt/lists/* - -ENV PYTHONUNBUFFERED=1 - -RUN curl -sSL https://install.python-poetry.org | python3 - --version 1.8.3 -# Poetry location so future commands (below) work - -ENV PATH=$PATH:/root/.local/bin -# Want poetry to use system python of docker container -RUN poetry config virtualenvs.create false -RUN poetry config virtualenvs.in-project false - -COPY pyproject.toml poetry.lock ./ - -# Install dependencies -RUN poetry install - - -WORKDIR /app diff --git a/Dockerfile.builder b/Dockerfile.builder deleted file mode 100644 index 7fc88e919..000000000 --- a/Dockerfile.builder +++ /dev/null @@ -1,10 +0,0 @@ -FROM node:10 - -# Setup volume -VOLUME /app -WORKDIR /app - -# Install packages -ADD package.json . - -CMD npm install && export PATH=./node_modules/.bin:$PATH && npm-watch diff --git a/Dockerfile.compute_worker b/Dockerfile.compute_worker deleted file mode 100644 index e6badfab8..000000000 --- a/Dockerfile.compute_worker +++ /dev/null @@ -1,34 +0,0 @@ -FROM --platform=linux/amd64 fedora:43 - -# This makes output not buffer and return immediately, nice for seeing results in stdout -ENV PYTHONUNBUFFERED=1 - -# Install Python -RUN dnf -y update && \ - dnf install -y python3.9 && \ - dnf clean all && \ - rm -rf /var/cache /var/log/dnf* /var/log/yum.* - - -RUN curl -sSL https://install.python-poetry.org | python3.9 - --version 1.8.3 -# Poetry location so future commands (below) work -ENV PATH=$PATH:/root/.local/bin -# Want poetry to use system python of docker container -RUN poetry config virtualenvs.create false -RUN poetry config virtualenvs.in-project false - - -COPY ./compute_worker/pyproject.toml ./ -COPY ./compute_worker/poetry.lock ./ -# To use python3.9 instead of system python - -RUN poetry config virtualenvs.prefer-active-python true && poetry install - -ADD compute_worker . -COPY ./src/settings/logs_loguru.py /usr/bin - -# Uninstall Poetry since we don't need it anymore and it can introduce CVEs -RUN curl -sSL https://install.python-poetry.org | python3.9 - --uninstall - -ENTRYPOINT ["/bin/bash", "-c"] -CMD ["celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@$HOSTNAME --concurrency=1"] diff --git a/Dockerfile.flower b/Dockerfile.flower deleted file mode 100644 index 30d482a8e..000000000 --- a/Dockerfile.flower +++ /dev/null @@ -1,31 +0,0 @@ -FROM python:3.9 - -# PYTHONUNBUFFERED: Force stdin, stdout and stderr to be totally unbuffered. (equivalent to `python -u`) -# PYTHONHASHSEED: Enable hash randomization (equivalent to `python -R`) -# PYTHONDONTWRITEBYTECODE: Do not write byte files to disk, since we maintain it as readonly. (equivalent to `python -B`) -ENV PYTHONUNBUFFERED=1 PYTHONHASHSEED=random PYTHONDONTWRITEBYTECODE=1 - -# Get latest root certificates -RUN apt-get update && apt-get install -y ca-certificates && update-ca-certificates - -# # Install the required packages -RUN curl -sSL https://install.python-poetry.org | python3 - --version 1.8.3 -# Poetry location so future commands (below) work -ENV PATH $PATH:/root/.local/bin -# Want poetry to use system python of docker container -RUN poetry config virtualenvs.create false -RUN poetry config virtualenvs.in-project false - -RUN poetry init --no-interaction - -RUN poetry add redis=3.0.1 -RUN poetry add flower=0.9.3 -RUN poetry add celery="<5.0.0" - -# Default port -EXPOSE 5555 - -# Run as a non-root user by default, run as user with least privileges. -USER nobody - -ENTRYPOINT ["flower"] diff --git a/compute_worker/poetry.lock b/compute_worker/poetry.lock deleted file mode 100644 index 298f984e0..000000000 --- a/compute_worker/poetry.lock +++ /dev/null @@ -1,772 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "0.4.0" -description = "File support for asyncio." -optional = false -python-versions = "*" -files = [ - {file = "aiofiles-0.4.0-py3-none-any.whl", hash = "sha256:1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d"}, - {file = "aiofiles-0.4.0.tar.gz", hash = "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee"}, -] - -[[package]] -name = "amqp" -version = "5.3.1" -description = "Low-level AMQP client for Python (fork of amqplib)." -optional = false -python-versions = ">=3.6" -files = [ - {file = "amqp-5.3.1-py3-none-any.whl", hash = "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2"}, - {file = "amqp-5.3.1.tar.gz", hash = "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432"}, -] - -[package.dependencies] -vine = ">=5.0.0,<6.0.0" - -[[package]] -name = "argh" -version = "0.26.2" -description = "An unobtrusive argparse wrapper with natural syntax" -optional = false -python-versions = "*" -files = [ - {file = "argh-0.26.2-py2.py3-none-any.whl", hash = "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3"}, - {file = "argh-0.26.2.tar.gz", hash = "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65"}, -] - -[[package]] -name = "billiard" -version = "3.6.4.0" -description = "Python multiprocessing fork with improvements and bugfixes" -optional = false -python-versions = "*" -files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, -] - -[[package]] -name = "celery" -version = "5.2.2" -description = "Distributed Task Queue." -optional = false -python-versions = ">=3.7," -files = [ - {file = "celery-5.2.2-py3-none-any.whl", hash = "sha256:5a68a351076cfac4f678fa5ffd898105c28825a2224902da006970005196d061"}, - {file = "celery-5.2.2.tar.gz", hash = "sha256:2844eb040e915398623a43253a8e1016723442ece6b0751a3c416d8a2b34216f"}, -] - -[package.dependencies] -billiard = ">=3.6.4.0,<4.0" -click = ">=8.0,<9.0" -click-didyoumean = ">=0.0.3" -click-plugins = ">=1.1.1" -click-repl = ">=0.2.0" -kombu = ">=5.2.2,<6.0" -pytz = ">0.dev.0" -setuptools = "*" -vine = ">=5.0.0,<6.0" - -[package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-storage-blob (==12.9.0)"] -brotli = ["brotli (>=1.0.0)", "brotlipy (>=0.7.0)"] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul2"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] -couchbase = ["couchbase (>=3.0.0)"] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.32.0)"] -gevent = ["gevent (>=1.5.0)"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -memcache = ["pylibmc"] -mongodb = ["pymongo[srv] (>=3.3.0,<3.12.1)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -pytest = ["pytest-celery"] -redis = ["redis (>=3.4.1,<4.0.0)"] -s3 = ["boto3 (>=1.9.125)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["kombu[sqs]"] -tblib = ["tblib (>=1.3.0)", "tblib (>=1.5.0)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] - -[[package]] -name = "certifi" -version = "2025.11.12" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -files = [ - {file = "certifi-2025.11.12-py3-none-any.whl", hash = "sha256:97de8790030bbd5c2d96b7ec782fc2f7820ef8dba6db909ccf95449f2d062d4b"}, - {file = "certifi-2025.11.12.tar.gz", hash = "sha256:d8ab5478f2ecd78af242878415affce761ca6bc54a22a27e026d7c25357c3316"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.4.4" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -files = [ - {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, - {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, - {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, -] - -[[package]] -name = "click" -version = "8.1.8" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2"}, - {file = "click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "click-didyoumean" -version = "0.3.1" -description = "Enables git-like *did-you-mean* feature in click" -optional = false -python-versions = ">=3.6.2" -files = [ - {file = "click_didyoumean-0.3.1-py3-none-any.whl", hash = "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c"}, - {file = "click_didyoumean-0.3.1.tar.gz", hash = "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463"}, -] - -[package.dependencies] -click = ">=7" - -[[package]] -name = "click-plugins" -version = "1.1.1.2" -description = "An extension module for click to enable registering CLI commands via setuptools entry-points." -optional = false -python-versions = "*" -files = [ - {file = "click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6"}, - {file = "click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261"}, -] - -[package.dependencies] -click = ">=4.0" - -[package.extras] -dev = ["coveralls", "pytest (>=3.6)", "pytest-cov", "wheel"] - -[[package]] -name = "click-repl" -version = "0.3.0" -description = "REPL plugin for Click" -optional = false -python-versions = ">=3.6" -files = [ - {file = "click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9"}, - {file = "click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812"}, -] - -[package.dependencies] -click = ">=7.0" -prompt-toolkit = ">=3.0.36" - -[package.extras] -testing = ["pytest (>=7.2.1)", "pytest-cov (>=4.0.0)", "tox (>=4.4.3)"] - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "docker" -version = "7.1.0" -description = "A Python library for the Docker Engine API." -optional = false -python-versions = ">=3.8" -files = [ - {file = "docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0"}, - {file = "docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c"}, -] - -[package.dependencies] -pywin32 = {version = ">=304", markers = "sys_platform == \"win32\""} -requests = ">=2.26.0" -urllib3 = ">=1.26.0" - -[package.extras] -dev = ["coverage (==7.2.7)", "pytest (==7.4.2)", "pytest-cov (==4.1.0)", "pytest-timeout (==2.1.0)", "ruff (==0.1.8)"] -docs = ["myst-parser (==0.18.0)", "sphinx (==5.1.1)"] -ssh = ["paramiko (>=2.4.3)"] -websockets = ["websocket-client (>=1.3.0)"] - -[[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "kombu" -version = "5.6.1" -description = "Messaging library for Python." -optional = false -python-versions = ">=3.9" -files = [ - {file = "kombu-5.6.1-py3-none-any.whl", hash = "sha256:b69e3f5527ec32fc5196028a36376501682973e9620d6175d1c3d4eaf7e95409"}, - {file = "kombu-5.6.1.tar.gz", hash = "sha256:90f1febb57ad4f53ca327a87598191b2520e0c793c75ea3b88d98e3b111282e4"}, -] - -[package.dependencies] -amqp = ">=5.1.1,<6.0.0" -packaging = "*" -tzdata = {version = ">=2025.2", markers = "python_version >= \"3.9\""} -vine = "5.1.0" - -[package.extras] -azureservicebus = ["azure-servicebus (>=7.10.0)"] -azurestoragequeues = ["azure-identity (>=1.12.0)", "azure-storage-queue (>=12.6.0)"] -confluentkafka = ["confluent-kafka (>=2.2.0)"] -consul = ["python-consul2 (==0.1.5)"] -gcpubsub = ["google-cloud-monitoring (>=2.16.0)", "google-cloud-pubsub (>=2.18.4)", "grpcio (==1.75.1)", "protobuf (==6.32.1)"] -librabbitmq = ["librabbitmq (>=2.0.0)"] -mongodb = ["pymongo (==4.15.3)"] -msgpack = ["msgpack (==1.1.2)"] -pyro = ["pyro4 (==4.82)"] -qpid = ["qpid-python (==1.36.0-1)", "qpid-tools (==1.36.0-1)"] -redis = ["redis (>=4.5.2,!=4.5.5,!=5.0.2,<6.5)"] -slmq = ["softlayer_messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy (>=1.4.48,<2.1)"] -sqs = ["boto3 (>=1.26.143)", "pycurl (>=7.43.0.5)", "urllib3 (>=1.26.16)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=2.8.0)"] - -[[package]] -name = "loguru" -version = "0.7.3" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = "<4.0,>=3.5" -files = [ - {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, - {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==8.1.3)", "build (==1.2.2)", "colorama (==0.4.5)", "colorama (==0.4.6)", "exceptiongroup (==1.1.3)", "freezegun (==1.1.0)", "freezegun (==1.5.0)", "mypy (==v0.910)", "mypy (==v0.971)", "mypy (==v1.13.0)", "mypy (==v1.4.1)", "myst-parser (==4.0.0)", "pre-commit (==4.0.1)", "pytest (==6.1.2)", "pytest (==8.3.2)", "pytest-cov (==2.12.1)", "pytest-cov (==5.0.0)", "pytest-cov (==6.0.0)", "pytest-mypy-plugins (==1.9.3)", "pytest-mypy-plugins (==3.1.0)", "sphinx-rtd-theme (==3.0.2)", "tox (==3.27.1)", "tox (==4.23.2)", "twine (==6.0.1)"] - -[[package]] -name = "markdown-it-py" -version = "3.0.0" -description = "Python port of markdown-it. Markdown parsing, done right!" -optional = false -python-versions = ">=3.8" -files = [ - {file = "markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb"}, - {file = "markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1"}, -] - -[package.dependencies] -mdurl = ">=0.1,<1.0" - -[package.extras] -benchmarking = ["psutil", "pytest", "pytest-benchmark"] -code-style = ["pre-commit (>=3.0,<4.0)"] -compare = ["commonmark (>=0.9,<1.0)", "markdown (>=3.4,<4.0)", "mistletoe (>=1.0,<2.0)", "mistune (>=2.0,<3.0)", "panflute (>=2.3,<3.0)"] -linkify = ["linkify-it-py (>=1,<3)"] -plugins = ["mdit-py-plugins"] -profiling = ["gprof2dot"] -rtd = ["jupyter_sphinx", "mdit-py-plugins", "myst-parser", "pyyaml", "sphinx", "sphinx-copybutton", "sphinx-design", "sphinx_book_theme"] -testing = ["coverage", "pytest", "pytest-cov", "pytest-regressions"] - -[[package]] -name = "mdurl" -version = "0.1.2" -description = "Markdown URL utilities" -optional = false -python-versions = ">=3.7" -files = [ - {file = "mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8"}, - {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, -] - -[[package]] -name = "packaging" -version = "25.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, -] - -[[package]] -name = "prompt-toolkit" -version = "3.0.52" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, - {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "pygments" -version = "2.19.2" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b"}, - {file = "pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887"}, -] - -[package.extras] -windows-terminal = ["colorama (>=0.4.6)"] - -[[package]] -name = "pytz" -version = "2025.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - -[[package]] -name = "pywin32" -version = "311" -description = "Python for Window Extensions" -optional = false -python-versions = "*" -files = [ - {file = "pywin32-311-cp310-cp310-win32.whl", hash = "sha256:d03ff496d2a0cd4a5893504789d4a15399133fe82517455e78bad62efbb7f0a3"}, - {file = "pywin32-311-cp310-cp310-win_amd64.whl", hash = "sha256:797c2772017851984b97180b0bebe4b620bb86328e8a884bb626156295a63b3b"}, - {file = "pywin32-311-cp310-cp310-win_arm64.whl", hash = "sha256:0502d1facf1fed4839a9a51ccbcc63d952cf318f78ffc00a7e78528ac27d7a2b"}, - {file = "pywin32-311-cp311-cp311-win32.whl", hash = "sha256:184eb5e436dea364dcd3d2316d577d625c0351bf237c4e9a5fabbcfa5a58b151"}, - {file = "pywin32-311-cp311-cp311-win_amd64.whl", hash = "sha256:3ce80b34b22b17ccbd937a6e78e7225d80c52f5ab9940fe0506a1a16f3dab503"}, - {file = "pywin32-311-cp311-cp311-win_arm64.whl", hash = "sha256:a733f1388e1a842abb67ffa8e7aad0e70ac519e09b0f6a784e65a136ec7cefd2"}, - {file = "pywin32-311-cp312-cp312-win32.whl", hash = "sha256:750ec6e621af2b948540032557b10a2d43b0cee2ae9758c54154d711cc852d31"}, - {file = "pywin32-311-cp312-cp312-win_amd64.whl", hash = "sha256:b8c095edad5c211ff31c05223658e71bf7116daa0ecf3ad85f3201ea3190d067"}, - {file = "pywin32-311-cp312-cp312-win_arm64.whl", hash = "sha256:e286f46a9a39c4a18b319c28f59b61de793654af2f395c102b4f819e584b5852"}, - {file = "pywin32-311-cp313-cp313-win32.whl", hash = "sha256:f95ba5a847cba10dd8c4d8fefa9f2a6cf283b8b88ed6178fa8a6c1ab16054d0d"}, - {file = "pywin32-311-cp313-cp313-win_amd64.whl", hash = "sha256:718a38f7e5b058e76aee1c56ddd06908116d35147e133427e59a3983f703a20d"}, - {file = "pywin32-311-cp313-cp313-win_arm64.whl", hash = "sha256:7b4075d959648406202d92a2310cb990fea19b535c7f4a78d3f5e10b926eeb8a"}, - {file = "pywin32-311-cp314-cp314-win32.whl", hash = "sha256:b7a2c10b93f8986666d0c803ee19b5990885872a7de910fc460f9b0c2fbf92ee"}, - {file = "pywin32-311-cp314-cp314-win_amd64.whl", hash = "sha256:3aca44c046bd2ed8c90de9cb8427f581c479e594e99b5c0bb19b29c10fd6cb87"}, - {file = "pywin32-311-cp314-cp314-win_arm64.whl", hash = "sha256:a508e2d9025764a8270f93111a970e1d0fbfc33f4153b388bb649b7eec4f9b42"}, - {file = "pywin32-311-cp38-cp38-win32.whl", hash = "sha256:6c6f2969607b5023b0d9ce2541f8d2cbb01c4f46bc87456017cf63b73f1e2d8c"}, - {file = "pywin32-311-cp38-cp38-win_amd64.whl", hash = "sha256:c8015b09fb9a5e188f83b7b04de91ddca4658cee2ae6f3bc483f0b21a77ef6cd"}, - {file = "pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b"}, - {file = "pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91"}, - {file = "pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d"}, -] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:326c013efe8048858a6d312ddd31d56e468118ad4cdeda36c719bf5bb6192290"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e7d73685e87afe9f3b36c799222440d6cf362062f78be1013661b00c5c6f678b"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:855fb52b0dc35af121542a76b9a84f8d1cd886ea97c84703eaa6d88e37a2ad28"}, - {file = "PyYAML-6.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:40df9b996c2b73138957fe23a16a4f0ba614f4c0efce1e9406a184b6d07fa3a9"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a08c6f0fe150303c1c6b71ebcd7213c2858041a7e01975da3a99aed1e7a378ef"}, - {file = "PyYAML-6.0.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6c22bec3fbe2524cde73d7ada88f6566758a8f7227bfbf93a408a9d86bcc12a0"}, - {file = "PyYAML-6.0.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:8d4e9c88387b0f5c7d5f281e55304de64cf7f9c0021a3525bd3b1c542da3b0e4"}, - {file = "PyYAML-6.0.1-cp312-cp312-win32.whl", hash = "sha256:d483d2cdf104e7c9fa60c544d92981f12ad66a457afae824d146093b8c294c54"}, - {file = "PyYAML-6.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0d3304d8c0adc42be59c5f8a4d9e3d7379e6955ad754aa9d6ab7a398b59dd1df"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:49a183be227561de579b4a36efbb21b3eab9651dd81b1858589f796549873dd6"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "requests" -version = "2.32.5" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.9" -files = [ - {file = "requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6"}, - {file = "requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset_normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "rich" -version = "14.2.0" -description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "rich-14.2.0-py3-none-any.whl", hash = "sha256:76bc51fe2e57d2b1be1f96c524b890b816e334ab4c1e45888799bfaab0021edd"}, - {file = "rich-14.2.0.tar.gz", hash = "sha256:73ff50c7c0c1c77c8243079283f4edb376f0f6442433aecb8ce7e6d0b92d1fe4"}, -] - -[package.dependencies] -markdown-it-py = ">=2.2.0" -pygments = ">=2.13.0,<3.0.0" - -[package.extras] -jupyter = ["ipywidgets (>=7.5.1,<9)"] - -[[package]] -name = "setuptools" -version = "80.9.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.9" -files = [ - {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, - {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.8.0)"] -core = ["importlib_metadata (>=6)", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.14.*)", "pytest-mypy"] - -[[package]] -name = "tzdata" -version = "2025.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -files = [ - {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, - {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, -] - -[[package]] -name = "urllib3" -version = "2.6.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.9" -files = [ - {file = "urllib3-2.6.1-py3-none-any.whl", hash = "sha256:e67d06fe947c36a7ca39f4994b08d73922d40e6cca949907be05efa6fd75110b"}, - {file = "urllib3-2.6.1.tar.gz", hash = "sha256:5379eb6e1aba4088bae84f8242960017ec8d8e3decf30480b3a1abdaa9671a3f"}, -] - -[package.extras] -brotli = ["brotli (>=1.2.0)", "brotlicffi (>=1.2.0.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["backports-zstd (>=1.0.0)"] - -[[package]] -name = "vine" -version = "5.1.0" -description = "Python promises." -optional = false -python-versions = ">=3.6" -files = [ - {file = "vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc"}, - {file = "vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0"}, -] - -[[package]] -name = "watchdog" -version = "2.1.1" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.6" -files = [ - {file = "watchdog-2.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f3edbe1e15e229d2ba8ff5156908adba80d1ba21a9282d9f72247403280fc799"}, - {file = "watchdog-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c1325b47463fce231d88eb74f330ab0cb4a1bab5defe12c0c80a3a4f197345b4"}, - {file = "watchdog-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b391bac7edbdf96fb82a381d04829bbc0d1bb259c206b2b283ef8989340240f"}, - {file = "watchdog-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22c13c19599b0dec7192f8f7d26404d5223cb36c9a450e96430483e685dccd7e"}, - {file = "watchdog-2.1.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:604ca364a79c27a694ab10947cd41de81bf229cff507a3156bf2c56c064971a1"}, - {file = "watchdog-2.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dca75d12712997c713f76e6d68ff41580598c7df94cedf83f1089342e7709081"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:aa59afc87a892ed92d7d88d09f4b736f1336fc35540b403da7ee00c3be74bd07"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:a1b3f76e2a0713b406348dd5b9df2aa02bdd741a6ddf54f4c6410b395e077502"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_i686.whl", hash = "sha256:9f1b124fe2d4a1f37b7068f6289c2b1eba44859eb790bf6bd709adff224a5469"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:a9005f968220b715101d5fcdde5f5deda54f0d1873f618724f547797171f5e97"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:027c532e2fd3367d55fe235510fc304381a6cc88d0dcd619403e57ffbd83c1d2"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:4d83c89ba24bd67b7a7d5752a4ef953ec40db69d4d30582bd1f27d3ecb6b61b0"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:67c645b1e500cc74d550e9aad4829309c5084dc55e8dc4e1c25d5da23e5be239"}, - {file = "watchdog-2.1.1-py3-none-win32.whl", hash = "sha256:12645d41d7307601b318c48861e776ce7a9fdcad9f74961013ec39037050582c"}, - {file = "watchdog-2.1.1-py3-none-win_amd64.whl", hash = "sha256:16078cd241a95124acd4d8d3efba2140faec9300674b12413cc08be11b825d56"}, - {file = "watchdog-2.1.1-py3-none-win_ia64.whl", hash = "sha256:20d4cabfa2ad7239995d81a0163bc0264a3e104a64f33c6f0a21ad75a0d915d9"}, - {file = "watchdog-2.1.1.tar.gz", hash = "sha256:2894440b4ea95a6ef4c5d152deedbe270cae46092682710b7028a04d6a6980f6"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] - -[[package]] -name = "wcwidth" -version = "0.2.14" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = ">=3.6" -files = [ - {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, - {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, -] - -[[package]] -name = "websockets" -version = "9.1" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.6.1" -files = [ - {file = "websockets-9.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d144b350045c53c8ff09aa1cfa955012dd32f00c7e0862c199edcabb1a8b32da"}, - {file = "websockets-9.1-cp36-cp36m-manylinux1_i686.whl", hash = "sha256:b4ad84b156cf50529b8ac5cc1638c2cf8680490e3fccb6121316c8c02620a2e4"}, - {file = "websockets-9.1-cp36-cp36m-manylinux1_x86_64.whl", hash = "sha256:2cf04601633a4ec176b9cc3d3e73789c037641001dbfaf7c411f89cd3e04fcaf"}, - {file = "websockets-9.1-cp36-cp36m-manylinux2010_i686.whl", hash = "sha256:5c8f0d82ea2468282e08b0cf5307f3ad022290ed50c45d5cb7767957ca782880"}, - {file = "websockets-9.1-cp36-cp36m-manylinux2010_x86_64.whl", hash = "sha256:caa68c95bc1776d3521f81eeb4d5b9438be92514ec2a79fececda814099c8314"}, - {file = "websockets-9.1-cp36-cp36m-manylinux2014_aarch64.whl", hash = "sha256:d2c2d9b24d3c65b5a02cac12cbb4e4194e590314519ed49db2f67ef561c3cf58"}, - {file = "websockets-9.1-cp36-cp36m-win32.whl", hash = "sha256:f31722f1c033c198aa4a39a01905951c00bd1c74f922e8afc1b1c62adbcdd56a"}, - {file = "websockets-9.1-cp36-cp36m-win_amd64.whl", hash = "sha256:3ddff38894c7857c476feb3538dd847514379d6dc844961dc99f04b0384b1b1b"}, - {file = "websockets-9.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:51d04df04ed9d08077d10ccbe21e6805791b78eac49d16d30a1f1fe2e44ba0af"}, - {file = "websockets-9.1-cp37-cp37m-manylinux1_i686.whl", hash = "sha256:f68c352a68e5fdf1e97288d5cec9296664c590c25932a8476224124aaf90dbcd"}, - {file = "websockets-9.1-cp37-cp37m-manylinux1_x86_64.whl", hash = "sha256:b43b13e5622c5a53ab12f3272e6f42f1ce37cd5b6684b2676cb365403295cd40"}, - {file = "websockets-9.1-cp37-cp37m-manylinux2010_i686.whl", hash = "sha256:9147868bb0cc01e6846606cd65cbf9c58598f187b96d14dd1ca17338b08793bb"}, - {file = "websockets-9.1-cp37-cp37m-manylinux2010_x86_64.whl", hash = "sha256:836d14eb53b500fd92bd5db2fc5894f7c72b634f9c2a28f546f75967503d8e25"}, - {file = "websockets-9.1-cp37-cp37m-manylinux2014_aarch64.whl", hash = "sha256:48c222feb3ced18f3dc61168ca18952a22fb88e5eb8902d2bf1b50faefdc34a2"}, - {file = "websockets-9.1-cp37-cp37m-win32.whl", hash = "sha256:900589e19200be76dd7cbaa95e9771605b5ce3f62512d039fb3bc5da9014912a"}, - {file = "websockets-9.1-cp37-cp37m-win_amd64.whl", hash = "sha256:ab5ee15d3462198c794c49ccd31773d8a2b8c17d622aa184f669d2b98c2f0857"}, - {file = "websockets-9.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:85e701a6c316b7067f1e8675c638036a796fe5116783a4c932e7eb8e305a3ffe"}, - {file = "websockets-9.1-cp38-cp38-manylinux1_i686.whl", hash = "sha256:b2e71c4670ebe1067fa8632f0d081e47254ee2d3d409de54168b43b0ba9147e0"}, - {file = "websockets-9.1-cp38-cp38-manylinux1_x86_64.whl", hash = "sha256:230a3506df6b5f446fed2398e58dcaafdff12d67fe1397dff196411a9e820d02"}, - {file = "websockets-9.1-cp38-cp38-manylinux2010_i686.whl", hash = "sha256:7df3596838b2a0c07c6f6d67752c53859a54993d4f062689fdf547cb56d0f84f"}, - {file = "websockets-9.1-cp38-cp38-manylinux2010_x86_64.whl", hash = "sha256:826ccf85d4514609219725ba4a7abd569228c2c9f1968e8be05be366f68291ec"}, - {file = "websockets-9.1-cp38-cp38-manylinux2014_aarch64.whl", hash = "sha256:0dd4eb8e0bbf365d6f652711ce21b8fd2b596f873d32aabb0fbb53ec604418cc"}, - {file = "websockets-9.1-cp38-cp38-win32.whl", hash = "sha256:1d0971cc7251aeff955aa742ec541ee8aaea4bb2ebf0245748fbec62f744a37e"}, - {file = "websockets-9.1-cp38-cp38-win_amd64.whl", hash = "sha256:7189e51955f9268b2bdd6cc537e0faa06f8fffda7fb386e5922c6391de51b077"}, - {file = "websockets-9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2"}, - {file = "websockets-9.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d"}, - {file = "websockets-9.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d"}, - {file = "websockets-9.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c"}, - {file = "websockets-9.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135"}, - {file = "websockets-9.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd"}, - {file = "websockets-9.1-cp39-cp39-win32.whl", hash = "sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20"}, - {file = "websockets-9.1-cp39-cp39-win_amd64.whl", hash = "sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0"}, - {file = "websockets-9.1.tar.gz", hash = "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3"}, -] - -[[package]] -name = "win32-setctime" -version = "1.2.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -files = [ - {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, - {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, -] - -[package.extras] -dev = ["black (>=19.3b0)", "pytest (>=4.6.2)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "08adab6dc295c626a9e3d347c85be1b009e824856cc103127f7d9345b2148e0a" diff --git a/compute_worker/pyproject.toml b/compute_worker/pyproject.toml index 1119093f5..fbc8a534a 100644 --- a/compute_worker/pyproject.toml +++ b/compute_worker/pyproject.toml @@ -1,22 +1,21 @@ -[tool.poetry] +[project] +authors = [ + {name = "codalab"}, +] +requires-python = "==3.9.20" +dependencies = [ + "celery==5.2.2", + "requests>=2.32.4,<3", + "watchdog==2.1.1", + "argh==0.26.2", + "websockets==9.1", + "aiofiles==0.4.0", + "pyyaml==6.0.1", + "loguru>=0.7.3,<0.8", + "docker>=7.1.0,<8", + "rich>=14.2.0,<15", +] + name = "compute-worker" version = "0.1.0" -description = "" -authors = ["codalab"] - -[tool.poetry.dependencies] -python = "^3.9" -celery = "5.2.2" -requests = "^2.32.4" -watchdog = "2.1.1" -argh = "0.26.2" -websockets = "9.1" -aiofiles = "0.4.0" -pyyaml = "6.0.1" -loguru = "^0.7.3" -docker = "^7.1.0" -rich = "^14.2.0" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" +description = "" \ No newline at end of file diff --git a/compute_worker/uv.lock b/compute_worker/uv.lock new file mode 100644 index 000000000..f05387699 --- /dev/null +++ b/compute_worker/uv.lock @@ -0,0 +1,439 @@ +version = 1 +revision = 3 +requires-python = "==3.9.20" + +[[package]] +name = "aiofiles" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/c2/e3cb60c1b7d9478203d4514e2d33ea424ad9bb98e45b21d6225db93f25c9/aiofiles-0.4.0.tar.gz", hash = "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee", size = 9270, upload-time = "2018-08-11T17:24:08.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f2/a67a23bc0bb61d88f82aa7fb84a2fb5f278becfbdc038c5cbb36c31feaf1/aiofiles-0.4.0-py3-none-any.whl", hash = "sha256:1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d", size = 9191, upload-time = "2018-08-11T17:24:07.206Z" }, +] + +[[package]] +name = "amqp" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "vine" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/79/fc/ec94a357dfc6683d8c86f8b4cfa5416a4c36b28052ec8260c77aca96a443/amqp-5.3.1.tar.gz", hash = "sha256:cddc00c725449522023bad949f70fff7b48f0b1ade74d170a6f10ab044739432", size = 129013, upload-time = "2024-11-12T19:55:44.051Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/26/99/fc813cd978842c26c82534010ea849eee9ab3a13ea2b74e95cb9c99e747b/amqp-5.3.1-py3-none-any.whl", hash = "sha256:43b3319e1b4e7d1251833a93d672b4af1e40f3d632d479b98661a95f117880a2", size = 50944, upload-time = "2024-11-12T19:55:41.782Z" }, +] + +[[package]] +name = "argh" +version = "0.26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/75/1183b5d1663a66aebb2c184e0398724b624cecd4f4b679cb6e25de97ed15/argh-0.26.2.tar.gz", hash = "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65", size = 32913, upload-time = "2016-05-11T20:55:36.296Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/1c/e667a7126f0b84aaa1c56844337bf0ac12445d1beb9c8a6199a7314944bf/argh-0.26.2-py2.py3-none-any.whl", hash = "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", size = 30872, upload-time = "2016-05-11T20:55:26.893Z" }, +] + +[[package]] +name = "billiard" +version = "3.6.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/91/40de1901da8ec9eeb7c6a22143ba5d55d8aaa790761ca31342cedcd5c793/billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547", size = 155303, upload-time = "2021-04-01T09:23:50.092Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/89/0c43de91d4e52eaa7bd748771d417f6ac9e51e66b2f61928c2151bf65878/billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b", size = 89472, upload-time = "2021-04-01T09:23:42.019Z" }, +] + +[[package]] +name = "celery" +version = "5.2.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "billiard" }, + { name = "click" }, + { name = "click-didyoumean" }, + { name = "click-plugins" }, + { name = "click-repl" }, + { name = "kombu" }, + { name = "pytz" }, + { name = "setuptools" }, + { name = "vine" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bf/00/ac6f7afbf93f0199c70d6ee4e17082c67a4a27d6ebc57c39f0df04426c15/celery-5.2.2.tar.gz", hash = "sha256:2844eb040e915398623a43253a8e1016723442ece6b0751a3c416d8a2b34216f", size = 1470157, upload-time = "2021-12-26T14:31:59.584Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/a9/57e261eb3d95c74faf6a0ab7b21b4a875bfe3f71d60b1788ddafdef71f37/celery-5.2.2-py3-none-any.whl", hash = "sha256:5a68a351076cfac4f678fa5ffd898105c28825a2224902da006970005196d061", size = 405080, upload-time = "2021-12-26T14:31:56.465Z" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/7c/0c4760bccf082737ca7ab84a4c2034fcc06b1f21cf3032ea98bd6feb1725/charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9", size = 209609, upload-time = "2025-10-14T04:42:10.922Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a4/69719daef2f3d7f1819de60c9a6be981b8eeead7542d5ec4440f3c80e111/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d", size = 149029, upload-time = "2025-10-14T04:42:12.38Z" }, + { url = "https://files.pythonhosted.org/packages/e6/21/8d4e1d6c1e6070d3672908b8e4533a71b5b53e71d16828cc24d0efec564c/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608", size = 144580, upload-time = "2025-10-14T04:42:13.549Z" }, + { url = "https://files.pythonhosted.org/packages/a7/0a/a616d001b3f25647a9068e0b9199f697ce507ec898cacb06a0d5a1617c99/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc", size = 162340, upload-time = "2025-10-14T04:42:14.892Z" }, + { url = "https://files.pythonhosted.org/packages/85/93/060b52deb249a5450460e0585c88a904a83aec474ab8e7aba787f45e79f2/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e", size = 159619, upload-time = "2025-10-14T04:42:16.676Z" }, + { url = "https://files.pythonhosted.org/packages/dd/21/0274deb1cc0632cd587a9a0ec6b4674d9108e461cb4cd40d457adaeb0564/charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1", size = 153980, upload-time = "2025-10-14T04:42:17.917Z" }, + { url = "https://files.pythonhosted.org/packages/28/2b/e3d7d982858dccc11b31906976323d790dded2017a0572f093ff982d692f/charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3", size = 152174, upload-time = "2025-10-14T04:42:19.018Z" }, + { url = "https://files.pythonhosted.org/packages/6e/ff/4a269f8e35f1e58b2df52c131a1fa019acb7ef3f8697b7d464b07e9b492d/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6", size = 151666, upload-time = "2025-10-14T04:42:20.171Z" }, + { url = "https://files.pythonhosted.org/packages/da/c9/ec39870f0b330d58486001dd8e532c6b9a905f5765f58a6f8204926b4a93/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88", size = 145550, upload-time = "2025-10-14T04:42:21.324Z" }, + { url = "https://files.pythonhosted.org/packages/75/8f/d186ab99e40e0ed9f82f033d6e49001701c81244d01905dd4a6924191a30/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1", size = 163721, upload-time = "2025-10-14T04:42:22.46Z" }, + { url = "https://files.pythonhosted.org/packages/96/b1/6047663b9744df26a7e479ac1e77af7134b1fcf9026243bb48ee2d18810f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf", size = 152127, upload-time = "2025-10-14T04:42:23.712Z" }, + { url = "https://files.pythonhosted.org/packages/59/78/e5a6eac9179f24f704d1be67d08704c3c6ab9f00963963524be27c18ed87/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318", size = 161175, upload-time = "2025-10-14T04:42:24.87Z" }, + { url = "https://files.pythonhosted.org/packages/e5/43/0e626e42d54dd2f8dd6fc5e1c5ff00f05fbca17cb699bedead2cae69c62f/charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c", size = 155375, upload-time = "2025-10-14T04:42:27.246Z" }, + { url = "https://files.pythonhosted.org/packages/e9/91/d9615bf2e06f35e4997616ff31248c3657ed649c5ab9d35ea12fce54e380/charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505", size = 99692, upload-time = "2025-10-14T04:42:28.425Z" }, + { url = "https://files.pythonhosted.org/packages/d1/a9/6c040053909d9d1ef4fcab45fddec083aedc9052c10078339b47c8573ea8/charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966", size = 107192, upload-time = "2025-10-14T04:42:29.482Z" }, + { url = "https://files.pythonhosted.org/packages/f0/c6/4fa536b2c0cd3edfb7ccf8469fa0f363ea67b7213a842b90909ca33dd851/charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50", size = 100220, upload-time = "2025-10-14T04:42:30.632Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.1.8" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b9/2e/0090cbf739cee7d23781ad4b89a9894a41538e4fcf4c31dcdd705b78eb8b/click-8.1.8.tar.gz", hash = "sha256:ed53c9d8990d83c2a27deae68e4ee337473f6330c040a31d4225c9574d16096a", size = 226593, upload-time = "2024-12-21T18:38:44.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/d4/7ebdbd03970677812aac39c869717059dbb71a4cfc033ca6e5221787892c/click-8.1.8-py3-none-any.whl", hash = "sha256:63c132bbbed01578a06712a2d1f497bb62d9c1c0d329b7903a866228027263b2", size = 98188, upload-time = "2024-12-21T18:38:41.666Z" }, +] + +[[package]] +name = "click-didyoumean" +version = "0.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/30/ce/217289b77c590ea1e7c24242d9ddd6e249e52c795ff10fac2c50062c48cb/click_didyoumean-0.3.1.tar.gz", hash = "sha256:4f82fdff0dbe64ef8ab2279bd6aa3f6a99c3b28c05aa09cbfc07c9d7fbb5a463", size = 3089, upload-time = "2024-03-24T08:22:07.499Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1b/5b/974430b5ffdb7a4f1941d13d83c64a0395114503cc357c6b9ae4ce5047ed/click_didyoumean-0.3.1-py3-none-any.whl", hash = "sha256:5c4bb6007cfea5f2fd6583a2fb6701a22a41eb98957e63d0fac41c10e7c3117c", size = 3631, upload-time = "2024-03-24T08:22:06.356Z" }, +] + +[[package]] +name = "click-plugins" +version = "1.1.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c3/a4/34847b59150da33690a36da3681d6bbc2ec14ee9a846bc30a6746e5984e4/click_plugins-1.1.1.2.tar.gz", hash = "sha256:d7af3984a99d243c131aa1a828331e7630f4a88a9741fd05c927b204bcf92261", size = 8343, upload-time = "2025-06-25T00:47:37.555Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3d/9a/2abecb28ae875e39c8cad711eb1186d8d14eab564705325e77e4e6ab9ae5/click_plugins-1.1.1.2-py2.py3-none-any.whl", hash = "sha256:008d65743833ffc1f5417bf0e78e8d2c23aab04d9745ba817bd3e71b0feb6aa6", size = 11051, upload-time = "2025-06-25T00:47:36.731Z" }, +] + +[[package]] +name = "click-repl" +version = "0.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "prompt-toolkit" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/a2/57f4ac79838cfae6912f997b4d1a64a858fb0c86d7fcaae6f7b58d267fca/click-repl-0.3.0.tar.gz", hash = "sha256:17849c23dba3d667247dc4defe1757fff98694e90fe37474f3feebb69ced26a9", size = 10449, upload-time = "2023-06-15T12:43:51.141Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/52/40/9d857001228658f0d59e97ebd4c346fe73e138c6de1bce61dc568a57c7f8/click_repl-0.3.0-py3-none-any.whl", hash = "sha256:fb7e06deb8da8de86180a33a9da97ac316751c094c6899382da7feeeeb51b812", size = 10289, upload-time = "2023-06-15T12:43:48.626Z" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "compute-worker" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "aiofiles" }, + { name = "argh" }, + { name = "celery" }, + { name = "docker" }, + { name = "loguru" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rich" }, + { name = "watchdog" }, + { name = "websockets" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiofiles", specifier = "==0.4.0" }, + { name = "argh", specifier = "==0.26.2" }, + { name = "celery", specifier = "==5.2.2" }, + { name = "docker", specifier = ">=7.1.0,<8" }, + { name = "loguru", specifier = ">=0.7.3,<0.8" }, + { name = "pyyaml", specifier = "==6.0.1" }, + { name = "requests", specifier = ">=2.32.4,<3" }, + { name = "rich", specifier = ">=14.2.0,<15" }, + { name = "watchdog", specifier = "==2.1.1" }, + { name = "websockets", specifier = "==9.1" }, +] + +[[package]] +name = "docker" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pywin32", marker = "sys_platform == 'win32'" }, + { name = "requests" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/91/9b/4a2ea29aeba62471211598dac5d96825bb49348fa07e906ea930394a83ce/docker-7.1.0.tar.gz", hash = "sha256:ad8c70e6e3f8926cb8a92619b832b4ea5299e2831c14284663184e200546fa6c", size = 117834, upload-time = "2024-05-23T11:13:57.216Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/26/57c6fb270950d476074c087527a558ccb6f4436657314bfb6cdf484114c4/docker-7.1.0-py3-none-any.whl", hash = "sha256:c96b93b7f0a746f9e77d325bcfb87422a3d8bd4f03136ae8a85b37f1898d5fc0", size = 147774, upload-time = "2024-05-23T11:13:55.01Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "kombu" +version = "5.6.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "amqp" }, + { name = "packaging" }, + { name = "tzdata" }, + { name = "vine" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b6/a5/607e533ed6c83ae1a696969b8e1c137dfebd5759a2e9682e26ff1b97740b/kombu-5.6.2.tar.gz", hash = "sha256:8060497058066c6f5aed7c26d7cd0d3b574990b09de842a8c5aaed0b92cc5a55", size = 472594, upload-time = "2025-12-29T20:30:07.779Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/0f/834427d8c03ff1d7e867d3db3d176470c64871753252b21b4f4897d1fa45/kombu-5.6.2-py3-none-any.whl", hash = "sha256:efcfc559da324d41d61ca311b0c64965ea35b4c55cc04ee36e55386145dace93", size = 214219, upload-time = "2025-12-29T20:30:05.74Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "markdown-it-py" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mdurl" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/38/71/3b932df36c1a044d397a1f92d1cf91ee0a503d91e470cbd670aa66b07ed0/markdown-it-py-3.0.0.tar.gz", hash = "sha256:e3f60a94fa066dc52ec76661e37c851cb232d92f9886b15cb560aaada2df8feb", size = 74596, upload-time = "2023-06-03T06:41:14.443Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/d7/1ec15b46af6af88f19b8e5ffea08fa375d433c998b8a7639e76935c14f1f/markdown_it_py-3.0.0-py3-none-any.whl", hash = "sha256:355216845c60bd96232cd8d8c40e8f9765cc86f46880e43a8fd22dc1a1a8cab1", size = 87528, upload-time = "2023-06-03T06:41:11.019Z" }, +] + +[[package]] +name = "mdurl" +version = "0.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d6/54/cfe61301667036ec958cb99bd3efefba235e65cdeb9c84d24a8293ba1d90/mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba", size = 8729, upload-time = "2022-08-14T12:40:10.846Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b3/38/89ba8ad64ae25be8de66a6d463314cf1eb366222074cfda9ee839c56a4b4/mdurl-0.1.2-py3-none-any.whl", hash = "sha256:84008a41e51615a49fc9966191ff91509e3c40b939176e643fd50a5c2196b8f8", size = 9979, upload-time = "2022-08-14T12:40:09.779Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "pygments" +version = "2.19.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/77/a5b8c569bf593b0140bde72ea885a803b82086995367bf2037de0159d924/pygments-2.19.2.tar.gz", hash = "sha256:636cb2477cec7f8952536970bc533bc43743542f70392ae026374600add5b887", size = 4968631, upload-time = "2025-06-21T13:39:12.283Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl", hash = "sha256:86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b", size = 1225217, upload-time = "2025-06-21T13:39:07.939Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pywin32" +version = "311" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/42/b86689aac0cdaee7ae1c58d464b0ff04ca909c19bb6502d4973cdd9f9544/pywin32-311-cp39-cp39-win32.whl", hash = "sha256:aba8f82d551a942cb20d4a83413ccbac30790b50efb89a75e4f586ac0bb8056b", size = 8760837, upload-time = "2025-07-14T20:12:59.59Z" }, + { url = "https://files.pythonhosted.org/packages/9f/8a/1403d0353f8c5a2f0829d2b1c4becbf9da2f0a4d040886404fc4a5431e4d/pywin32-311-cp39-cp39-win_amd64.whl", hash = "sha256:e0c4cfb0621281fe40387df582097fd796e80430597cb9944f0ae70447bacd91", size = 9590187, upload-time = "2025-07-14T20:13:01.419Z" }, + { url = "https://files.pythonhosted.org/packages/60/22/e0e8d802f124772cec9c75430b01a212f86f9de7546bda715e54140d5aeb/pywin32-311-cp39-cp39-win_arm64.whl", hash = "sha256:62ea666235135fee79bb154e695f3ff67370afefd71bd7fea7512fc70ef31e3d", size = 8778162, upload-time = "2025-07-14T20:13:03.544Z" }, +] + +[[package]] +name = "pyyaml" +version = "6.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/e5/af35f7ea75cf72f2cd079c95ee16797de7cd71f29ea7c68ae5ce7be1eda0/PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43", size = 125201, upload-time = "2023-07-18T00:00:23.308Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/57/c5/5d09b66b41d549914802f482a2118d925d876dc2a35b2d127694c1345c34/PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8", size = 197846, upload-time = "2023-07-17T23:59:46.424Z" }, + { url = "https://files.pythonhosted.org/packages/0e/88/21b2f16cb2123c1e9375f2c93486e35fdc86e63f02e274f0e99c589ef153/PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859", size = 174396, upload-time = "2023-07-17T23:59:49.538Z" }, + { url = "https://files.pythonhosted.org/packages/ac/6c/967d91a8edf98d2b2b01d149bd9e51b8f9fb527c98d80ebb60c6b21d60c4/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6", size = 731824, upload-time = "2023-07-17T23:59:58.111Z" }, + { url = "https://files.pythonhosted.org/packages/4a/4b/c71ef18ef83c82f99e6da8332910692af78ea32bd1d1d76c9787dfa36aea/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0", size = 754777, upload-time = "2023-07-18T00:00:06.716Z" }, + { url = "https://files.pythonhosted.org/packages/7d/39/472f2554a0f1e825bd7c5afc11c817cd7a2f3657460f7159f691fbb37c51/PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c", size = 738883, upload-time = "2023-07-18T00:00:14.423Z" }, + { url = "https://files.pythonhosted.org/packages/40/da/a175a35cf5583580e90ac3e2a3dbca90e43011593ae62ce63f79d7b28d92/PyYAML-6.0.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:04ac92ad1925b2cff1db0cfebffb6ffc43457495c9b3c39d3fcae417d7125dc5", size = 750294, upload-time = "2023-08-28T18:43:37.153Z" }, + { url = "https://files.pythonhosted.org/packages/24/62/7fcc372442ec8ea331da18c24b13710e010c5073ab851ef36bf9dacb283f/PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c", size = 136936, upload-time = "2023-07-18T00:00:17.167Z" }, + { url = "https://files.pythonhosted.org/packages/84/4d/82704d1ab9290b03da94e6425f5e87396b999fd7eb8e08f3a92c158402bf/PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486", size = 152751, upload-time = "2023-07-18T00:00:19.939Z" }, +] + +[[package]] +name = "requests" +version = "2.32.5" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c9/74/b3ff8e6c8446842c3f5c837e9c3dfcfe2018ea6ecef224c710c85ef728f4/requests-2.32.5.tar.gz", hash = "sha256:dbba0bac56e100853db0ea71b82b4dfd5fe2bf6d3754a8893c3af500cec7d7cf", size = 134517, upload-time = "2025-08-18T20:46:02.573Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl", hash = "sha256:2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6", size = 64738, upload-time = "2025-08-18T20:46:00.542Z" }, +] + +[[package]] +name = "rich" +version = "14.3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markdown-it-py" }, + { name = "pygments" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/74/99/a4cab2acbb884f80e558b0771e97e21e939c5dfb460f488d19df485e8298/rich-14.3.2.tar.gz", hash = "sha256:e712f11c1a562a11843306f5ed999475f09ac31ffb64281f73ab29ffdda8b3b8", size = 230143, upload-time = "2026-02-01T16:20:47.908Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/45/615f5babd880b4bd7d405cc0dc348234c5ffb6ed1ea33e152ede08b2072d/rich-14.3.2-py3-none-any.whl", hash = "sha256:08e67c3e90884651da3239ea668222d19bea7b589149d8014a21c633420dbb69", size = 309963, upload-time = "2026-02-01T16:20:46.078Z" }, +] + +[[package]] +name = "setuptools" +version = "80.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173", size = 1064234, upload-time = "2026-01-25T22:38:15.216Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "urllib3" +version = "2.6.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c7/24/5f1b3bdffd70275f6661c76461e25f024d5a38a46f04aaca912426a2b1d3/urllib3-2.6.3.tar.gz", hash = "sha256:1b62b6884944a57dbe321509ab94fd4d3b307075e0c2eae991ac71ee15ad38ed", size = 435556, upload-time = "2026-01-07T16:24:43.925Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl", hash = "sha256:bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4", size = 131584, upload-time = "2026-01-07T16:24:42.685Z" }, +] + +[[package]] +name = "vine" +version = "5.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bd/e4/d07b5f29d283596b9727dd5275ccbceb63c44a1a82aa9e4bfd20426762ac/vine-5.1.0.tar.gz", hash = "sha256:8b62e981d35c41049211cf62a0a1242d8c1ee9bd15bb196ce38aefd6799e61e0", size = 48980, upload-time = "2023-11-05T08:46:53.857Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/ff/7c0c86c43b3cbb927e0ccc0255cb4057ceba4799cd44ae95174ce8e8b5b2/vine-5.1.0-py3-none-any.whl", hash = "sha256:40fdf3c48b2cfe1c38a49e9ae2da6fda88e4794c810050a728bd7413811fb1dc", size = 9636, upload-time = "2023-11-05T08:46:51.205Z" }, +] + +[[package]] +name = "watchdog" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/7c/82cafb290b818c331192e52609af8d41c34b55f468957ba5bd0a8d2cb776/watchdog-2.1.1.tar.gz", hash = "sha256:2894440b4ea95a6ef4c5d152deedbe270cae46092682710b7028a04d6a6980f6", size = 105882, upload-time = "2021-05-10T13:51:02.629Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ae/85/655e322ef55e4c98672e7f003fa95dff5b58149c50465b93ef947b31be90/watchdog-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22c13c19599b0dec7192f8f7d26404d5223cb36c9a450e96430483e685dccd7e", size = 83829, upload-time = "2021-05-10T13:50:42.16Z" }, + { url = "https://files.pythonhosted.org/packages/bc/27/6f250c6a534b8811dcd0efcd5f9574dd2b8c077571aa66544947b0b76d0c/watchdog-2.1.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:aa59afc87a892ed92d7d88d09f4b736f1336fc35540b403da7ee00c3be74bd07", size = 74713, upload-time = "2021-05-10T13:50:46.671Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5f/3813b46bd10efa4870798850af2685cc3cce6e989d5a3397df0ee1cfe0e6/watchdog-2.1.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:a1b3f76e2a0713b406348dd5b9df2aa02bdd741a6ddf54f4c6410b395e077502", size = 74715, upload-time = "2021-05-10T13:50:48.086Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/6abfafa77d6c6ead43ba92fd5537fd2fc33f7dc916460457d06cba45a398/watchdog-2.1.1-py3-none-manylinux2014_i686.whl", hash = "sha256:9f1b124fe2d4a1f37b7068f6289c2b1eba44859eb790bf6bd709adff224a5469", size = 74710, upload-time = "2021-05-10T13:50:49.983Z" }, + { url = "https://files.pythonhosted.org/packages/34/87/5298db4bf7bef093254bedd48fee54a3fc63f30185b0f2359d0bb8f213a4/watchdog-2.1.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:a9005f968220b715101d5fcdde5f5deda54f0d1873f618724f547797171f5e97", size = 74711, upload-time = "2021-05-10T13:50:51.297Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5a/629a27cdb7c76744402598c76c0170d9298ecb61bb9238143811d1089897/watchdog-2.1.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:027c532e2fd3367d55fe235510fc304381a6cc88d0dcd619403e57ffbd83c1d2", size = 74714, upload-time = "2021-05-10T13:50:52.802Z" }, + { url = "https://files.pythonhosted.org/packages/fb/ef/5d2a010e6dea46260103a0615e7f433833a37dcee851e743cbf039a85b82/watchdog-2.1.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:4d83c89ba24bd67b7a7d5752a4ef953ec40db69d4d30582bd1f27d3ecb6b61b0", size = 74714, upload-time = "2021-05-10T13:50:54.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/f6/6b538562aaa62294ca0a1d18b59d9fcb1a43fe166fa5b3a258f445d64119/watchdog-2.1.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:67c645b1e500cc74d550e9aad4829309c5084dc55e8dc4e1c25d5da23e5be239", size = 74714, upload-time = "2021-05-10T13:50:56.916Z" }, + { url = "https://files.pythonhosted.org/packages/73/8f/cb225682a508d2c43f6a1f4cfe274a75a2e156ec2d73af055d5d47542f26/watchdog-2.1.1-py3-none-win32.whl", hash = "sha256:12645d41d7307601b318c48861e776ce7a9fdcad9f74961013ec39037050582c", size = 74698, upload-time = "2021-05-10T13:50:58.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/64/592c43792c0f6b18b031d5944ba1c36d4a2775d72cb06c4088050ab4834a/watchdog-2.1.1-py3-none-win_amd64.whl", hash = "sha256:16078cd241a95124acd4d8d3efba2140faec9300674b12413cc08be11b825d56", size = 74701, upload-time = "2021-05-10T13:50:59.987Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/69074682ce2e5dbe701755d778cdf5480448462e901ea088cc7e6e2c8261/watchdog-2.1.1-py3-none-win_ia64.whl", hash = "sha256:20d4cabfa2ad7239995d81a0163bc0264a3e104a64f33c6f0a21ad75a0d915d9", size = 74701, upload-time = "2021-05-10T13:51:01.299Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/62/a7c072fbfefb2980a00f99ca994279cb9ecf310cb2e6b2a4d2a28fe192b3/wcwidth-0.5.3.tar.gz", hash = "sha256:53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091", size = 157587, upload-time = "2026-01-31T03:52:10.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/c1/d73f12f8cdb1891334a2ccf7389eed244d3941e74d80dd220badb937f3fb/wcwidth-0.5.3-py3-none-any.whl", hash = "sha256:d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e", size = 92981, upload-time = "2026-01-31T03:52:09.14Z" }, +] + +[[package]] +name = "websockets" +version = "9.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0d/bd/5262054455ab2067e51de331bfbc53a1dfa9071af7c424cf7c0793c4349a/websockets-9.1.tar.gz", hash = "sha256:276d2339ebf0df4f45df453923ebd2270b87900eda5dfd4a6b0cfa15f82111c3", size = 76694, upload-time = "2021-05-27T19:34:30.628Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/b3/0ff0676cb0043bc85f4cb548733a37b5e7e9b82fe253edd0f5d173b2ec43/websockets-9.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e9e5fd6dbdf95d99bc03732ded1fc8ef22ebbc05999ac7e0c7bf57fe6e4e5ae2", size = 88721, upload-time = "2021-05-27T19:34:22.69Z" }, + { url = "https://files.pythonhosted.org/packages/46/e7/ebbe5d8ce59c77b59a13551fe0103c73131fab0b7cfb2fdc10b58f252e13/websockets-9.1-cp39-cp39-manylinux1_i686.whl", hash = "sha256:9e7fdc775fe7403dbd8bc883ba59576a6232eac96dacb56512daacf7af5d618d", size = 101297, upload-time = "2021-05-27T19:34:23.713Z" }, + { url = "https://files.pythonhosted.org/packages/96/d0/3e5beec93673fc4526e118f45e56df8a292b6f009002675614f4e3dfcf3a/websockets-9.1-cp39-cp39-manylinux1_x86_64.whl", hash = "sha256:597c28f3aa7a09e8c070a86b03107094ee5cdafcc0d55f2f2eac92faac8dc67d", size = 102182, upload-time = "2021-05-27T19:34:24.705Z" }, + { url = "https://files.pythonhosted.org/packages/18/9c/3334655fd3eb93fe3b728203db354711cec48044c2d7b8bfbde9ea0ffc5d/websockets-9.1-cp39-cp39-manylinux2010_i686.whl", hash = "sha256:ad893d889bc700a5835e0a95a3e4f2c39e91577ab232a3dc03c262a0f8fc4b5c", size = 101299, upload-time = "2021-05-27T19:34:25.696Z" }, + { url = "https://files.pythonhosted.org/packages/c8/31/bb59de44c04c5d81083a5ee93eeb3e9b30d32aa8f6b72080eb5da4bb73f7/websockets-9.1-cp39-cp39-manylinux2010_x86_64.whl", hash = "sha256:1d6b4fddb12ab9adf87b843cd4316c4bd602db8d5efd2fb83147f0458fe85135", size = 102182, upload-time = "2021-05-27T19:34:26.602Z" }, + { url = "https://files.pythonhosted.org/packages/21/9b/112c8439c718432fd3fb1f6fa56050767a70ad977712008cec036d061a7a/websockets-9.1-cp39-cp39-manylinux2014_aarch64.whl", hash = "sha256:ebf459a1c069f9866d8569439c06193c586e72c9330db1390af7c6a0a32c4afd", size = 102252, upload-time = "2021-05-27T19:34:27.549Z" }, + { url = "https://files.pythonhosted.org/packages/d6/c9/8d3e0904e624b1b83f1939170ed28002c971dcf960093eb2154af8408b67/websockets-9.1-cp39-cp39-win32.whl", hash = "sha256:be5fd35e99970518547edc906efab29afd392319f020c3c58b0e1a158e16ed20", size = 89556, upload-time = "2021-05-27T19:34:28.646Z" }, + { url = "https://files.pythonhosted.org/packages/d7/d7/cd60ce74675402998e285f9f54baf86c80daaa473e557c92f53c01b10f2b/websockets-9.1-cp39-cp39-win_amd64.whl", hash = "sha256:85db8090ba94e22d964498a47fdd933b8875a1add6ebc514c7ac8703eb97bbf0", size = 90217, upload-time = "2021-05-27T19:34:29.707Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] diff --git a/docker-compose.yml b/docker-compose.yml index 87fbba855..11be5e015 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -22,9 +22,11 @@ services: - django django: - build: . + build: + context: . + dockerfile: packaging/container/Containerfile # NOTE: We use watchmedo to reload gunicorn nicely, Uvicorn + Gunicorn reloads don't work well - command: bash -c "python manage.py collectstatic --noinput && cd /app/src && watchmedo auto-restart -p '*.py' --recursive -- python3 ./gunicorn_run.py" + command: ["python manage.py collectstatic --noinput && python manage.py migrate --no-input && cd /app/src && watchmedo auto-restart -p '*.py' --recursive -- python3 ./gunicorn_run.py"] environment: - DATABASE_URL=postgres://${DB_USERNAME}:${DB_PASSWORD}@${DB_HOST}:${DB_PORT}/${DB_NAME} env_file: .env @@ -95,7 +97,7 @@ services: builder: build: context: . - dockerfile: Dockerfile.builder + dockerfile: packaging/container/Containerfile.builder volumes: - .:/app:delegated restart: unless-stopped @@ -132,7 +134,7 @@ services: rabbit: build: context: . - dockerfile: Dockerfile.rabbitmq + dockerfile: packaging/container/Containerfile.rabbitmq args: - WORKER_CONNECTION_TIMEOUT=${WORKER_CONNECTION_TIMEOUT} # setting hostname here makes data persist properly between @@ -155,10 +157,7 @@ services: max-file: "5" flower: - # image: mher/flower - build: - context: . - dockerfile: Dockerfile.flower + image: mher/flower env_file: .env environment: - CELERY_BROKER_URL=pyamqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@${RABBITMQ_HOST}:${RABBITMQ_PORT}// @@ -190,10 +189,11 @@ services: #----------------------------------------------- site_worker: # This auto-reloads - command: bash -c "watchmedo auto-restart -p '*.py' --recursive -- celery -A celery_config worker -B -Q site-worker -l info -n site-worker@%n --concurrency=2" + command: ["watchmedo auto-restart -p '*.py' --recursive -- celery -A celery_config worker -B -Q site-worker -l info -n site-worker@%n --concurrency=2"] working_dir: /app/src build: context: . + dockerfile: packaging/container/Containerfile depends_on: - rabbit - db @@ -213,11 +213,11 @@ services: memory: 256M compute_worker: - command: ["watchmedo auto-restart -p '*.py' --recursive -- celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@%n"] + command: ["celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@%n"] working_dir: /app build: context: . - dockerfile: Dockerfile.compute_worker + dockerfile: packaging/container/Containerfile.compute_worker depends_on: - django - rabbit @@ -226,13 +226,13 @@ services: - ${HOST_DIRECTORY:-/tmp/codabench}:/codabench # Actual connection back to docker parent to run things - /var/run/docker.sock:/var/run/docker.sock + hostname: local_worker restart: unless-stopped env_file: .env environment: - BROKER_URL=pyamqp://${RABBITMQ_DEFAULT_USER}:${RABBITMQ_DEFAULT_PASS}@${RABBITMQ_HOST}:${RABBITMQ_PORT}// # Make the worker leave behind the submission so we can examine it - CODALAB_IGNORE_CLEANUP_STEP=1 - - COLUMNS=100 tty: true logging: options: diff --git a/documentation/docs/Developers_and_Administrators/Codabench-Installation.md b/documentation/docs/Developers_and_Administrators/Codabench-Installation.md index 0efc39068..2efe355a8 100644 --- a/documentation/docs/Developers_and_Administrators/Codabench-Installation.md +++ b/documentation/docs/Developers_and_Administrators/Codabench-Installation.md @@ -116,16 +116,17 @@ If static files are not loaded correctly, adding `DEBUG=True` to the `.env` file ### For Apple CPU (M1, M2 chips) -In `docker-compose.yml`, replace in the `compute_worker` service: - -```yaml title="docker-compose.yml" -command: bash -c "watchmedo auto-restart -p '*.py' --recursive -- celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@%n" -``` - -by - -```yaml title="docker-compose.yml" -command: bash -c "celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@%n" +Add a `docker-compose.override.yml` file with the following content: + +```yaml title="docker-compose.override.yml" +services: + django: + platform: linux/arm64 + site_worker: + platform: linux/arm64 + command: ["celery -A celery_config worker -B -Q site-worker -l info -n site-worker@%n --concurrency=2"] + compute_worker: + platform: linux/arm64 ``` diff --git a/documentation/docs/Developers_and_Administrators/Validation-and-deployment-of-pull-requests.md b/documentation/docs/Developers_and_Administrators/Validation-and-deployment-of-pull-requests.md index 8c571826f..6534b2834 100644 --- a/documentation/docs/Developers_and_Administrators/Validation-and-deployment-of-pull-requests.md +++ b/documentation/docs/Developers_and_Administrators/Validation-and-deployment-of-pull-requests.md @@ -153,7 +153,7 @@ One of the workflows of this repository creates a docker image and uploads it au These workflows launches when one of the following conditions are met : -- A change in the `Dockerfile.compute_worker` file +- A change in the `Containerfile.compute_worker` file - A change of any file within the `compute_worker/` directory The tag is decided by three different criterias : diff --git a/packaging/container/Containerfile b/packaging/container/Containerfile new file mode 100644 index 000000000..448a6ed17 --- /dev/null +++ b/packaging/container/Containerfile @@ -0,0 +1,20 @@ +FROM almalinux:10-minimal +RUN microdnf install -y tar gzip + +ENV PYTHONUNBUFFERED=1 + +# Install UV and add paths to PATH for uv and the future .venv created by uv +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH=$PATH:/root/.local/bin +ENV PATH=$PATH:/.venv/bin + + +COPY pyproject.toml ./ +COPY uv.lock ./ + +# Install dependencies +RUN uv sync --all-extras --frozen + + +WORKDIR /app +ENTRYPOINT ["/bin/bash", "-c"] diff --git a/packaging/container/Containerfile.builder b/packaging/container/Containerfile.builder new file mode 100644 index 000000000..98cc491ee --- /dev/null +++ b/packaging/container/Containerfile.builder @@ -0,0 +1,7 @@ +FROM node:lts-alpine3.23 + +# Setup volume +VOLUME /app +WORKDIR /app +ENTRYPOINT ["/bin/sh", "-c"] +CMD ["npm install && export PATH=./node_modules/.bin:$PATH && npm-watch"] \ No newline at end of file diff --git a/packaging/container/Containerfile.compute_worker b/packaging/container/Containerfile.compute_worker new file mode 100644 index 000000000..f5808687f --- /dev/null +++ b/packaging/container/Containerfile.compute_worker @@ -0,0 +1,23 @@ +FROM almalinux:10-minimal +RUN microdnf install -y tar gzip + +# This makes output not buffer and return immediately, nice for seeing results in stdout +ENV PYTHONUNBUFFERED=1 + +COPY compute_worker/pyproject.toml ./ +COPY compute_worker/uv.lock ./ +COPY compute_worker/celery_config.py ./ +COPY compute_worker/compute_worker.py ./ + + +# Install UV and add paths to PATH for uv and the future .venv created by uv +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH=$PATH:/root/.local/bin +ENV PATH=$PATH:/.venv/bin + + +# Install dependencies +RUN uv sync --frozen +COPY src/settings/logs_loguru.py /.venv/bin +ENTRYPOINT ["/bin/bash", "-c"] +CMD ["celery -A compute_worker worker -l info -Q compute-worker -n compute-worker@$HOSTNAME --concurrency=1"] diff --git a/Dockerfile.rabbitmq b/packaging/container/Containerfile.rabbitmq similarity index 100% rename from Dockerfile.rabbitmq rename to packaging/container/Containerfile.rabbitmq diff --git a/poetry.lock b/poetry.lock deleted file mode 100644 index ffcbaed7d..000000000 --- a/poetry.lock +++ /dev/null @@ -1,3419 +0,0 @@ -# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. - -[[package]] -name = "aiofiles" -version = "0.4.0" -description = "File support for asyncio." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "aiofiles-0.4.0-py3-none-any.whl", hash = "sha256:1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d"}, - {file = "aiofiles-0.4.0.tar.gz", hash = "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee"}, -] - -[[package]] -name = "amqp" -version = "2.6.1" -description = "Low-level AMQP client for Python (fork of amqplib)." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "amqp-2.6.1-py2.py3-none-any.whl", hash = "sha256:aa7f313fb887c91f15474c1229907a04dac0b8135822d6603437803424c0aa59"}, - {file = "amqp-2.6.1.tar.gz", hash = "sha256:70cdb10628468ff14e57ec2f751c7aa9e48e7e3651cfd62d431213c0c4e58f21"}, -] - -[package.dependencies] -vine = ">=1.1.3,<5.0.0a1" - -[[package]] -name = "ansicon" -version = "1.89.0" -description = "Python wrapper for loading Jason Hood's ANSICON" -optional = false -python-versions = "*" -groups = ["main"] -markers = "platform_system == \"Windows\"" -files = [ - {file = "ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec"}, - {file = "ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1"}, -] - -[[package]] -name = "appnope" -version = "0.1.4" -description = "Disable App Nap on macOS >= 10.9" -optional = false -python-versions = ">=3.6" -groups = ["main"] -markers = "sys_platform == \"darwin\"" -files = [ - {file = "appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c"}, - {file = "appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee"}, -] - -[[package]] -name = "argh" -version = "0.26.2" -description = "An unobtrusive argparse wrapper with natural syntax" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "argh-0.26.2-py2.py3-none-any.whl", hash = "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3"}, - {file = "argh-0.26.2.tar.gz", hash = "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65"}, -] - -[[package]] -name = "asgiref" -version = "3.10.0" -description = "ASGI specs, helper code, and adapters" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "asgiref-3.10.0-py3-none-any.whl", hash = "sha256:aef8a81283a34d0ab31630c9b7dfe70c812c95eba78171367ca8745e88124734"}, - {file = "asgiref-3.10.0.tar.gz", hash = "sha256:d89f2d8cd8b56dada7d52fa7dc8075baa08fb836560710d38c292a7a3f78c04e"}, -] - -[package.dependencies] -typing_extensions = {version = ">=4", markers = "python_version < \"3.11\""} - -[package.extras] -tests = ["mypy (>=1.14.0)", "pytest", "pytest-asyncio"] - -[[package]] -name = "asttokens" -version = "3.0.0" -description = "Annotate AST trees with source code positions" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, - {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, -] - -[package.extras] -astroid = ["astroid (>=2,<4)"] -test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] - -[[package]] -name = "async-timeout" -version = "5.0.1" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, - {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, -] - -[[package]] -name = "attrs" -version = "25.4.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373"}, - {file = "attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11"}, -] - -[[package]] -name = "automat" -version = "25.4.16" -description = "Self-service finite-state machines for the programmer on the go." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "automat-25.4.16-py3-none-any.whl", hash = "sha256:04e9bce696a8d5671ee698005af6e5a9fa15354140a87f4870744604dcdd3ba1"}, - {file = "automat-25.4.16.tar.gz", hash = "sha256:0017591a5477066e90d26b0e696ddc143baafd87b588cfac8100bc6be9634de0"}, -] - -[package.extras] -visualize = ["Twisted (>=16.1.1)", "graphviz (>0.5.1)"] - -[[package]] -name = "azure-common" -version = "1.1.28" -description = "Microsoft Azure Client Library for Python (Common)" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3"}, - {file = "azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad"}, -] - -[[package]] -name = "azure-core" -version = "1.36.0" -description = "Microsoft Azure Core Library for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "azure_core-1.36.0-py3-none-any.whl", hash = "sha256:fee9923a3a753e94a259563429f3644aaf05c486d45b1215d098115102d91d3b"}, - {file = "azure_core-1.36.0.tar.gz", hash = "sha256:22e5605e6d0bf1d229726af56d9e92bc37b6e726b141a18be0b4d424131741b7"}, -] - -[package.dependencies] -requests = ">=2.21.0" -typing-extensions = ">=4.6.0" - -[package.extras] -aio = ["aiohttp (>=3.0)"] -tracing = ["opentelemetry-api (>=1.26,<2.0)"] - -[[package]] -name = "azure-storage-blob" -version = "12.27.0" -description = "Microsoft Azure Blob Storage Client Library for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "azure_storage_blob-12.27.0-py3-none-any.whl", hash = "sha256:b7bef8acb79825f96f2fa24c7535e2924fb3dbc4840a2eebb5f117175bde3657"}, - {file = "azure_storage_blob-12.27.0.tar.gz", hash = "sha256:99e8e2cd2a6a723930c364ea0a0539d28e465bc77cf94ef12813c465dc09cb9a"}, -] - -[package.dependencies] -azure-core = ">=1.30.0" -cryptography = ">=2.1.4" -isodate = ">=0.6.1" -typing-extensions = ">=4.6.0" - -[package.extras] -aio = ["azure-core[aio] (>=1.30.0)"] - -[[package]] -name = "azure-storage-common" -version = "2.1.0" -description = "Microsoft Azure Storage Common Client Library for Python" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "azure-storage-common-2.1.0.tar.gz", hash = "sha256:ccedef5c67227bc4d6670ffd37cec18fb529a1b7c3a5e53e4096eb0cf23dc73f"}, - {file = "azure_storage_common-2.1.0-py2.py3-none-any.whl", hash = "sha256:b01a491a18839b9d05a4fe3421458a0ddb5ab9443c14e487f40d16f9a1dc2fbe"}, -] - -[package.dependencies] -azure-common = ">=1.1.5" -cryptography = "*" -python-dateutil = "*" -requests = "*" - -[[package]] -name = "backcall" -version = "0.2.0" -description = "Specifications for callback functions passed in to an API" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255"}, - {file = "backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e"}, -] - -[[package]] -name = "billiard" -version = "3.6.4.0" -description = "Python multiprocessing fork with improvements and bugfixes" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b"}, - {file = "billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547"}, -] - -[[package]] -name = "black" -version = "25.9.0" -description = "The uncompromising code formatter." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "black-25.9.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ce41ed2614b706fd55fd0b4a6909d06b5bab344ffbfadc6ef34ae50adba3d4f7"}, - {file = "black-25.9.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2ab0ce111ef026790e9b13bd216fa7bc48edd934ffc4cbf78808b235793cbc92"}, - {file = "black-25.9.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f96b6726d690c96c60ba682955199f8c39abc1ae0c3a494a9c62c0184049a713"}, - {file = "black-25.9.0-cp310-cp310-win_amd64.whl", hash = "sha256:d119957b37cc641596063cd7db2656c5be3752ac17877017b2ffcdb9dfc4d2b1"}, - {file = "black-25.9.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:456386fe87bad41b806d53c062e2974615825c7a52159cde7ccaeb0695fa28fa"}, - {file = "black-25.9.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a16b14a44c1af60a210d8da28e108e13e75a284bf21a9afa6b4571f96ab8bb9d"}, - {file = "black-25.9.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aaf319612536d502fdd0e88ce52d8f1352b2c0a955cc2798f79eeca9d3af0608"}, - {file = "black-25.9.0-cp311-cp311-win_amd64.whl", hash = "sha256:c0372a93e16b3954208417bfe448e09b0de5cc721d521866cd9e0acac3c04a1f"}, - {file = "black-25.9.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:1b9dc70c21ef8b43248f1d86aedd2aaf75ae110b958a7909ad8463c4aa0880b0"}, - {file = "black-25.9.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8e46eecf65a095fa62e53245ae2795c90bdecabd53b50c448d0a8bcd0d2e74c4"}, - {file = "black-25.9.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9101ee58ddc2442199a25cb648d46ba22cd580b00ca4b44234a324e3ec7a0f7e"}, - {file = "black-25.9.0-cp312-cp312-win_amd64.whl", hash = "sha256:77e7060a00c5ec4b3367c55f39cf9b06e68965a4f2e61cecacd6d0d9b7ec945a"}, - {file = "black-25.9.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0172a012f725b792c358d57fe7b6b6e8e67375dd157f64fa7a3097b3ed3e2175"}, - {file = "black-25.9.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3bec74ee60f8dfef564b573a96b8930f7b6a538e846123d5ad77ba14a8d7a64f"}, - {file = "black-25.9.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b756fc75871cb1bcac5499552d771822fd9db5a2bb8db2a7247936ca48f39831"}, - {file = "black-25.9.0-cp313-cp313-win_amd64.whl", hash = "sha256:846d58e3ce7879ec1ffe816bb9df6d006cd9590515ed5d17db14e17666b2b357"}, - {file = "black-25.9.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ef69351df3c84485a8beb6f7b8f9721e2009e20ef80a8d619e2d1788b7816d47"}, - {file = "black-25.9.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e3c1f4cd5e93842774d9ee4ef6cd8d17790e65f44f7cdbaab5f2cf8ccf22a823"}, - {file = "black-25.9.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:154b06d618233fe468236ba1f0e40823d4eb08b26f5e9261526fde34916b9140"}, - {file = "black-25.9.0-cp39-cp39-win_amd64.whl", hash = "sha256:e593466de7b998374ea2585a471ba90553283fb9beefcfa430d84a2651ed5933"}, - {file = "black-25.9.0-py3-none-any.whl", hash = "sha256:474b34c1342cdc157d307b56c4c65bce916480c4a8f6551fdc6bf9b486a7c4ae"}, - {file = "black-25.9.0.tar.gz", hash = "sha256:0474bca9a0dd1b51791fcc507a4e02078a1c63f6d4e4ae5544b9848c7adfb619"}, -] - -[package.dependencies] -click = ">=8.0.0" -mypy-extensions = ">=0.4.3" -packaging = ">=22.0" -pathspec = ">=0.9.0" -platformdirs = ">=2" -pytokens = ">=0.1.10" -tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} -typing-extensions = {version = ">=4.0.1", markers = "python_version < \"3.11\""} - -[package.extras] -colorama = ["colorama (>=0.4.3)"] -d = ["aiohttp (>=3.10)"] -jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] -uvloop = ["uvloop (>=0.15.2)"] - -[[package]] -name = "bleach" -version = "6.2.0" -description = "An easy safelist-based HTML-sanitizing tool." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "bleach-6.2.0-py3-none-any.whl", hash = "sha256:117d9c6097a7c3d22fd578fcd8d35ff1e125df6736f554da4e432fdd63f31e5e"}, - {file = "bleach-6.2.0.tar.gz", hash = "sha256:123e894118b8a599fd80d3ec1a6d4cc7ce4e5882b1317a7e1ba69b56e95f991f"}, -] - -[package.dependencies] -webencodings = "*" - -[package.extras] -css = ["tinycss2 (>=1.1.0,<1.5)"] - -[[package]] -name = "blessed" -version = "1.22.0" -description = "Easy, practical library for making terminal apps, by providing an elegant, well-documented interface to Colors, Keyboard input, and screen Positioning capabilities." -optional = false -python-versions = ">=2.7" -groups = ["main"] -files = [ - {file = "blessed-1.22.0-py2.py3-none-any.whl", hash = "sha256:a1fed52d708a1aa26dfb8d3eaecf6f4714bff590e728baeefcb44f2c16c8de82"}, - {file = "blessed-1.22.0.tar.gz", hash = "sha256:1818efb7c10015478286f21a412fcdd31a3d8b94a18f6d926e733827da7a844b"}, -] - -[package.dependencies] -jinxed = {version = ">=1.1.0", markers = "platform_system == \"Windows\""} -wcwidth = ">=0.1.4" - -[[package]] -name = "blessings" -version = "1.7" -description = "A thin, practical wrapper around terminal coloring, styling, and positioning" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "blessings-1.7-py2-none-any.whl", hash = "sha256:caad5211e7ba5afe04367cdd4cfc68fa886e2e08f6f35e76b7387d2109ccea6e"}, - {file = "blessings-1.7-py3-none-any.whl", hash = "sha256:b1fdd7e7a675295630f9ae71527a8ebc10bfefa236b3d6aa4932ee4462c17ba3"}, - {file = "blessings-1.7.tar.gz", hash = "sha256:98e5854d805f50a5b58ac2333411b0482516a8210f23f43308baeb58d77c157d"}, -] - -[package.dependencies] -six = "*" - -[[package]] -name = "boto3" -version = "1.26.76" -description = "The AWS SDK for Python" -optional = false -python-versions = ">= 3.7" -groups = ["main"] -files = [ - {file = "boto3-1.26.76-py3-none-any.whl", hash = "sha256:b4c2969b7677762914394b8273cc1905dfe5b71f250741c1a575487ae357e729"}, - {file = "boto3-1.26.76.tar.gz", hash = "sha256:30c7d967ed1c6b5a05643e42cae9d4d36c3f1cb6782637ddc7007a104cfd9027"}, -] - -[package.dependencies] -botocore = ">=1.29.76,<1.30.0" -jmespath = ">=0.7.1,<2.0.0" -s3transfer = ">=0.6.0,<0.7.0" - -[package.extras] -crt = ["botocore[crt] (>=1.21.0,<2.0a0)"] - -[[package]] -name = "botocore" -version = "1.29.76" -description = "Low-level, data-driven core of boto 3." -optional = false -python-versions = ">= 3.7" -groups = ["main"] -files = [ - {file = "botocore-1.29.76-py3-none-any.whl", hash = "sha256:70735b00cd529f152992231ca6757e458e5ec25db43767b3526e9a35b2f143b7"}, - {file = "botocore-1.29.76.tar.gz", hash = "sha256:c2f67b6b3f8acf2968eafca06526f07b9fb0d27bac4c68a635d51abb675134a7"}, -] - -[package.dependencies] -jmespath = ">=0.7.1,<2.0.0" -python-dateutil = ">=2.1,<3.0.0" -urllib3 = ">=1.25.4,<1.27" - -[package.extras] -crt = ["awscrt (==0.16.9)"] - -[[package]] -name = "bpython" -version = "0.21" -description = "Fancy Interface to the Python Interpreter" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "bpython-0.21-py3-none-any.whl", hash = "sha256:64a2032052c629f0fc2d215cdcf3cbdc005d9001a4e8c11b2126e80899be77fb"}, - {file = "bpython-0.21.tar.gz", hash = "sha256:88aa9b89974f6a7726499a2608fa7ded216d84c69e78114ab2ef996a45709487"}, -] - -[package.dependencies] -curtsies = ">=0.3.5" -cwcwidth = "*" -greenlet = "*" -pygments = "*" -pyxdg = "*" -requests = "*" - -[package.extras] -jedi = ["jedi (>=0.16)"] -urwid = ["urwid"] -watch = ["watchdog"] - -[[package]] -name = "celery" -version = "4.4.7" -description = "Distributed Task Queue." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "celery-4.4.7-py2.py3-none-any.whl", hash = "sha256:a92e1d56e650781fb747032a3997d16236d037c8199eacd5217d1a72893bca45"}, - {file = "celery-4.4.7.tar.gz", hash = "sha256:d220b13a8ed57c78149acf82c006785356071844afe0b27012a4991d44026f9f"}, -] - -[package.dependencies] -billiard = ">=3.6.3.0,<4.0" -kombu = ">=4.6.10,<4.7" -pytz = ">0.0.dev0" -vine = "1.3.0" - -[package.extras] -arangodb = ["pyArango (>=1.3.2)"] -auth = ["cryptography"] -azureblockblob = ["azure-common (==1.1.5)", "azure-storage (==0.36.0)", "azure-storage-common (==1.1.0)"] -brotli = ["brotli (>=1.0.0) ; platform_python_implementation == \"CPython\"", "brotlipy (>=0.7.0) ; platform_python_implementation == \"PyPy\""] -cassandra = ["cassandra-driver (<3.21.0)"] -consul = ["python-consul"] -cosmosdbsql = ["pydocumentdb (==2.3.2)"] -couchbase = ["couchbase (<3.0.0) ; platform_system != \"Windows\"", "couchbase-cffi (<3.0.0) ; platform_python_implementation == \"PyPy\""] -couchdb = ["pycouchdb"] -django = ["Django (>=1.11)"] -dynamodb = ["boto3 (>=1.9.178)"] -elasticsearch = ["elasticsearch"] -eventlet = ["eventlet (>=0.24.1)"] -gevent = ["gevent"] -librabbitmq = ["librabbitmq (>=1.5.0)"] -lzma = ["backports.lzma ; python_version < \"3.3\""] -memcache = ["pylibmc ; platform_system != \"Windows\""] -mongodb = ["pymongo[srv] (>=3.3.0)"] -msgpack = ["msgpack"] -pymemcache = ["python-memcached"] -pyro = ["pyro4"] -redis = ["redis (>=3.2.0)"] -riak = ["riak (>=2.0)"] -s3 = ["boto3 (>=1.9.125)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -solar = ["ephem"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.9.125)", "pycurl (==7.43.0.5)"] -tblib = ["tblib (>=1.3.0) ; python_version < \"3.8.0\"", "tblib (>=1.5.0) ; python_version >= \"3.8.0\""] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] -zstd = ["zstandard"] - -[[package]] -name = "certifi" -version = "2025.10.5" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "certifi-2025.10.5-py3-none-any.whl", hash = "sha256:0f212c2744a9bb6de0c56639a6f68afe01ecd92d91f14ae897c4fe7bbeeef0de"}, - {file = "certifi-2025.10.5.tar.gz", hash = "sha256:47c09d31ccf2acf0be3f701ea53595ee7e0b8fa08801c6624be771df09ae7b43"}, -] - -[[package]] -name = "cffi" -version = "2.0.0" -description = "Foreign Function Interface for Python calling C code." -optional = false -python-versions = ">=3.9" -groups = ["main"] -markers = "platform_python_implementation != \"PyPy\"" -files = [ - {file = "cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44"}, - {file = "cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4"}, - {file = "cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5"}, - {file = "cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb"}, - {file = "cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a"}, - {file = "cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:b4c854ef3adc177950a8dfc81a86f5115d2abd545751a304c5bcf2c2c7283cfe"}, - {file = "cffi-2.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2de9a304e27f7596cd03d16f1b7c72219bd944e99cc52b84d0145aefb07cbd3c"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:baf5215e0ab74c16e2dd324e8ec067ef59e41125d3eade2b863d294fd5035c92"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:730cacb21e1bdff3ce90babf007d0a0917cc3e6492f336c2f0134101e0944f93"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:6824f87845e3396029f3820c206e459ccc91760e8fa24422f8b0c3d1731cbec5"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9de40a7b0323d889cf8d23d1ef214f565ab154443c42737dfe52ff82cf857664"}, - {file = "cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a05d0c237b3349096d3981b727493e22147f934b20f6f125a3eba8f994bec4a9"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:94698a9c5f91f9d138526b48fe26a199609544591f859c870d477351dc7b2414"}, - {file = "cffi-2.0.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:5fed36fccc0612a53f1d4d9a816b50a36702c28a2aa880cb8a122b3466638743"}, - {file = "cffi-2.0.0-cp311-cp311-win32.whl", hash = "sha256:c649e3a33450ec82378822b3dad03cc228b8f5963c0c12fc3b1e0ab940f768a5"}, - {file = "cffi-2.0.0-cp311-cp311-win_amd64.whl", hash = "sha256:66f011380d0e49ed280c789fbd08ff0d40968ee7b665575489afa95c98196ab5"}, - {file = "cffi-2.0.0-cp311-cp311-win_arm64.whl", hash = "sha256:c6638687455baf640e37344fe26d37c404db8b80d037c3d29f58fe8d1c3b194d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:6d02d6655b0e54f54c4ef0b94eb6be0607b70853c45ce98bd278dc7de718be5d"}, - {file = "cffi-2.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8eca2a813c1cb7ad4fb74d368c2ffbbb4789d377ee5bb8df98373c2cc0dee76c"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:21d1152871b019407d8ac3985f6775c079416c282e431a4da6afe7aefd2bccbe"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b21e08af67b8a103c71a250401c78d5e0893beff75e28c53c98f4de42f774062"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:1e3a615586f05fc4065a8b22b8152f0c1b00cdbc60596d187c2a74f9e3036e4e"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:81afed14892743bbe14dacb9e36d9e0e504cd204e0b165062c488942b9718037"}, - {file = "cffi-2.0.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3e17ed538242334bf70832644a32a7aae3d83b57567f9fd60a26257e992b79ba"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3925dd22fa2b7699ed2617149842d2e6adde22b262fcbfada50e3d195e4b3a94"}, - {file = "cffi-2.0.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2c8f814d84194c9ea681642fd164267891702542f028a15fc97d4674b6206187"}, - {file = "cffi-2.0.0-cp312-cp312-win32.whl", hash = "sha256:da902562c3e9c550df360bfa53c035b2f241fed6d9aef119048073680ace4a18"}, - {file = "cffi-2.0.0-cp312-cp312-win_amd64.whl", hash = "sha256:da68248800ad6320861f129cd9c1bf96ca849a2771a59e0344e88681905916f5"}, - {file = "cffi-2.0.0-cp312-cp312-win_arm64.whl", hash = "sha256:4671d9dd5ec934cb9a73e7ee9676f9362aba54f7f34910956b84d727b0d73fb6"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:00bdf7acc5f795150faa6957054fbbca2439db2f775ce831222b66f192f03beb"}, - {file = "cffi-2.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:45d5e886156860dc35862657e1494b9bae8dfa63bf56796f2fb56e1679fc0bca"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:07b271772c100085dd28b74fa0cd81c8fb1a3ba18b21e03d7c27f3436a10606b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d48a880098c96020b02d5a1f7d9251308510ce8858940e6fa99ece33f610838b"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f93fd8e5c8c0a4aa1f424d6173f14a892044054871c771f8566e4008eaa359d2"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:dd4f05f54a52fb558f1ba9f528228066954fee3ebe629fc1660d874d040ae5a3"}, - {file = "cffi-2.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c8d3b5532fc71b7a77c09192b4a5a200ea992702734a2e9279a37f2478236f26"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:d9b29c1f0ae438d5ee9acb31cadee00a58c46cc9c0b2f9038c6b0b3470877a8c"}, - {file = "cffi-2.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6d50360be4546678fc1b79ffe7a66265e28667840010348dd69a314145807a1b"}, - {file = "cffi-2.0.0-cp313-cp313-win32.whl", hash = "sha256:74a03b9698e198d47562765773b4a8309919089150a0bb17d829ad7b44b60d27"}, - {file = "cffi-2.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:19f705ada2530c1167abacb171925dd886168931e0a7b78f5bffcae5c6b5be75"}, - {file = "cffi-2.0.0-cp313-cp313-win_arm64.whl", hash = "sha256:256f80b80ca3853f90c21b23ee78cd008713787b1b1e93eae9f3d6a7134abd91"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:fc33c5141b55ed366cfaad382df24fe7dcbc686de5be719b207bb248e3053dc5"}, - {file = "cffi-2.0.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c654de545946e0db659b3400168c9ad31b5d29593291482c43e3564effbcee13"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:24b6f81f1983e6df8db3adc38562c83f7d4a0c36162885ec7f7b77c7dcbec97b"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:12873ca6cb9b0f0d3a0da705d6086fe911591737a59f28b7936bdfed27c0d47c"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:d9b97165e8aed9272a6bb17c01e3cc5871a594a446ebedc996e2397a1c1ea8ef"}, - {file = "cffi-2.0.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:afb8db5439b81cf9c9d0c80404b60c3cc9c3add93e114dcae767f1477cb53775"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:737fe7d37e1a1bffe70bd5754ea763a62a066dc5913ca57e957824b72a85e205"}, - {file = "cffi-2.0.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:38100abb9d1b1435bc4cc340bb4489635dc2f0da7456590877030c9b3d40b0c1"}, - {file = "cffi-2.0.0-cp314-cp314-win32.whl", hash = "sha256:087067fa8953339c723661eda6b54bc98c5625757ea62e95eb4898ad5e776e9f"}, - {file = "cffi-2.0.0-cp314-cp314-win_amd64.whl", hash = "sha256:203a48d1fb583fc7d78a4c6655692963b860a417c0528492a6bc21f1aaefab25"}, - {file = "cffi-2.0.0-cp314-cp314-win_arm64.whl", hash = "sha256:dbd5c7a25a7cb98f5ca55d258b103a2054f859a46ae11aaf23134f9cc0d356ad"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:9a67fc9e8eb39039280526379fb3a70023d77caec1852002b4da7e8b270c4dd9"}, - {file = "cffi-2.0.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:7a66c7204d8869299919db4d5069a82f1561581af12b11b3c9f48c584eb8743d"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7cc09976e8b56f8cebd752f7113ad07752461f48a58cbba644139015ac24954c"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:92b68146a71df78564e4ef48af17551a5ddd142e5190cdf2c5624d0c3ff5b2e8"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b1e74d11748e7e98e2f426ab176d4ed720a64412b6a15054378afdb71e0f37dc"}, - {file = "cffi-2.0.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a3a209b96630bca57cce802da70c266eb08c6e97e5afd61a75611ee6c64592"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:7553fb2090d71822f02c629afe6042c299edf91ba1bf94951165613553984512"}, - {file = "cffi-2.0.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:6c6c373cfc5c83a975506110d17457138c8c63016b563cc9ed6e056a82f13ce4"}, - {file = "cffi-2.0.0-cp314-cp314t-win32.whl", hash = "sha256:1fc9ea04857caf665289b7a75923f2c6ed559b8298a1b8c49e59f7dd95c8481e"}, - {file = "cffi-2.0.0-cp314-cp314t-win_amd64.whl", hash = "sha256:d68b6cef7827e8641e8ef16f4494edda8b36104d79773a334beaa1e3521430f6"}, - {file = "cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:fe562eb1a64e67dd297ccc4f5addea2501664954f2692b69a76449ec7913ecbf"}, - {file = "cffi-2.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:de8dad4425a6ca6e4e5e297b27b5c824ecc7581910bf9aee86cb6835e6812aa7"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:4647afc2f90d1ddd33441e5b0e85b16b12ddec4fca55f0d9671fef036ecca27c"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3f4d46d8b35698056ec29bca21546e1551a205058ae1a181d871e278b0b28165"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:e6e73b9e02893c764e7e8d5bb5ce277f1a009cd5243f8228f75f842bf937c534"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:cb527a79772e5ef98fb1d700678fe031e353e765d1ca2d409c92263c6d43e09f"}, - {file = "cffi-2.0.0-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:61d028e90346df14fedc3d1e5441df818d095f3b87d286825dfcbd6459b7ef63"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0f6084a0ea23d05d20c3edcda20c3d006f9b6f3fefeac38f59262e10cef47ee2"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1cd13c99ce269b3ed80b417dcd591415d3372bcac067009b6e0f59c7d4015e65"}, - {file = "cffi-2.0.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:89472c9762729b5ae1ad974b777416bfda4ac5642423fa93bd57a09204712322"}, - {file = "cffi-2.0.0-cp39-cp39-win32.whl", hash = "sha256:2081580ebb843f759b9f617314a24ed5738c51d2aee65d31e02f6f7a2b97707a"}, - {file = "cffi-2.0.0-cp39-cp39-win_amd64.whl", hash = "sha256:b882b3df248017dba09d6b16defe9b5c407fe32fc7c65a9c69798e6175601be9"}, - {file = "cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529"}, -] - -[package.dependencies] -pycparser = {version = "*", markers = "implementation_name != \"PyPy\""} - -[[package]] -name = "channels" -version = "4.2.0" -description = "Brings async, event-driven capabilities to Django." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "channels-4.2.0-py3-none-any.whl", hash = "sha256:6b75bc8d6888fb7236e7e7bf1948520b72d296ad08216a242fc56b1db0ffde1a"}, - {file = "channels-4.2.0.tar.gz", hash = "sha256:d9e707487431ba5dbce9af982970dab3b0efd786580fadb99e45dca5e39fdd59"}, -] - -[package.dependencies] -asgiref = ">=3.6.0,<4" -Django = ">=4.2" - -[package.extras] -daphne = ["daphne (>=4.0.0)"] -tests = ["async-timeout", "coverage (>=4.5,<5.0)", "pytest", "pytest-asyncio", "pytest-django"] - -[[package]] -name = "channels-redis" -version = "4.0.0" -description = "Redis-backed ASGI channel layer implementation" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "channels_redis-4.0.0-py3-none-any.whl", hash = "sha256:81b59d68f53313e1aa891f23591841b684abb936b42e4d1a966d9e4dc63a95ec"}, - {file = "channels_redis-4.0.0.tar.gz", hash = "sha256:122414f29f525f7b9e0c9d59cdcfc4dc1b0eecba16fbb6a1c23f1d9b58f49dcb"}, -] - -[package.dependencies] -asgiref = ">=3.2.10,<4" -channels = "*" -msgpack = ">=1.0,<2.0" -redis = ">=4.2.0" - -[package.extras] -cryptography = ["cryptography (>=1.3.0)"] -tests = ["async-timeout", "cryptography (>=1.3.0)", "pytest", "pytest-asyncio"] - -[[package]] -name = "charset-normalizer" -version = "3.4.4" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d"}, - {file = "charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6e1fcf0720908f200cd21aa4e6750a48ff6ce4afe7ff5a79a90d5ed8a08296f8"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5f819d5fe9234f9f82d75bdfa9aef3a3d72c4d24a6e57aeaebba32a704553aa0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:a59cb51917aa591b1c4e6a43c132f0cdc3c76dbad6155df4e28ee626cc77a0a3"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8ef3c867360f88ac904fd3f5e1f902f13307af9052646963ee08ff4f131adafc"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d9e45d7faa48ee908174d8fe84854479ef838fc6a705c9315372eacbc2f02897"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:840c25fb618a231545cbab0564a799f101b63b9901f2569faecd6b222ac72381"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ca5862d5b3928c4940729dacc329aa9102900382fea192fc5e52eb69d6093815"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d9c7f57c3d666a53421049053eaacdd14bbd0a528e2186fcb2e672effd053bb0"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:277e970e750505ed74c832b4bf75dac7476262ee2a013f5574dd49075879e161"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31fd66405eaf47bb62e8cd575dc621c56c668f27d46a61d975a249930dd5e2a4"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:0d3d8f15c07f86e9ff82319b3d9ef6f4bf907608f53fe9d92b28ea9ae3d1fd89"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:9f7fcd74d410a36883701fafa2482a6af2ff5ba96b9a620e9e0721e28ead5569"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ebf3e58c7ec8a8bed6d66a75d7fb37b55e5015b03ceae72a8e7c74495551e224"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win32.whl", hash = "sha256:eecbc200c7fd5ddb9a7f16c7decb07b566c29fa2161a16cf67b8d068bd21690a"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_amd64.whl", hash = "sha256:5ae497466c7901d54b639cf42d5b8c1b6a4fead55215500d2f486d34db48d016"}, - {file = "charset_normalizer-3.4.4-cp311-cp311-win_arm64.whl", hash = "sha256:65e2befcd84bc6f37095f5961e68a6f077bf44946771354a28ad434c2cce0ae1"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0a98e6759f854bd25a58a73fa88833fba3b7c491169f86ce1180c948ab3fd394"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b5b290ccc2a263e8d185130284f8501e3e36c5e02750fc6b6bdeb2e9e96f1e25"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74bb723680f9f7a6234dcf67aea57e708ec1fbdf5699fb91dfd6f511b0a320ef"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f1e34719c6ed0b92f418c7c780480b26b5d9c50349e9a9af7d76bf757530350d"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2437418e20515acec67d86e12bf70056a33abdacb5cb1655042f6538d6b085a8"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11d694519d7f29d6cd09f6ac70028dba10f92f6cdd059096db198c283794ac86"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:ac1c4a689edcc530fc9d9aa11f5774b9e2f33f9a0c6a57864e90908f5208d30a"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:21d142cc6c0ec30d2efee5068ca36c128a30b0f2c53c1c07bd78cb6bc1d3be5f"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5dbe56a36425d26d6cfb40ce79c314a2e4dd6211d51d6d2191c00bed34f354cc"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5bfbb1b9acf3334612667b61bd3002196fe2a1eb4dd74d247e0f2a4d50ec9bbf"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:d055ec1e26e441f6187acf818b73564e6e6282709e9bcb5b63f5b23068356a15"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:af2d8c67d8e573d6de5bc30cdb27e9b95e49115cd9baad5ddbd1a6207aaa82a9"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:780236ac706e66881f3b7f2f32dfe90507a09e67d1d454c762cf642e6e1586e0"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win32.whl", hash = "sha256:5833d2c39d8896e4e19b689ffc198f08ea58116bee26dea51e362ecc7cd3ed26"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_amd64.whl", hash = "sha256:a79cfe37875f822425b89a82333404539ae63dbdddf97f84dcbc3d339aae9525"}, - {file = "charset_normalizer-3.4.4-cp312-cp312-win_arm64.whl", hash = "sha256:376bec83a63b8021bb5c8ea75e21c4ccb86e7e45ca4eb81146091b56599b80c3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:e1f185f86a6f3403aa2420e815904c67b2f9ebc443f045edd0de921108345794"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b39f987ae8ccdf0d2642338faf2abb1862340facc796048b604ef14919e55ed"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:3162d5d8ce1bb98dd51af660f2121c55d0fa541b46dff7bb9b9f86ea1d87de72"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:81d5eb2a312700f4ecaa977a8235b634ce853200e828fbadf3a9c50bab278328"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5bd2293095d766545ec1a8f612559f6b40abc0eb18bb2f5d1171872d34036ede"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a8a8b89589086a25749f471e6a900d3f662d1d3b6e2e59dcecf787b1cc3a1894"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc7637e2f80d8530ee4a78e878bce464f70087ce73cf7c1caf142416923b98f1"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f8bf04158c6b607d747e93949aa60618b61312fe647a6369f88ce2ff16043490"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:554af85e960429cf30784dd47447d5125aaa3b99a6f0683589dbd27e2f45da44"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:74018750915ee7ad843a774364e13a3db91682f26142baddf775342c3f5b1133"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:c0463276121fdee9c49b98908b3a89c39be45d86d1dbaa22957e38f6321d4ce3"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:362d61fd13843997c1c446760ef36f240cf81d3ebf74ac62652aebaf7838561e"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9a26f18905b8dd5d685d6d07b0cdf98a79f3c7a918906af7cc143ea2e164c8bc"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win32.whl", hash = "sha256:9b35f4c90079ff2e2edc5b26c0c77925e5d2d255c42c74fdb70fb49b172726ac"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_amd64.whl", hash = "sha256:b435cba5f4f750aa6c0a0d92c541fb79f69a387c91e61f1795227e4ed9cece14"}, - {file = "charset_normalizer-3.4.4-cp313-cp313-win_arm64.whl", hash = "sha256:542d2cee80be6f80247095cc36c418f7bddd14f4a6de45af91dfad36d817bba2"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-macosx_10_13_universal2.whl", hash = "sha256:da3326d9e65ef63a817ecbcc0df6e94463713b754fe293eaa03da99befb9a5bd"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8af65f14dc14a79b924524b1e7fffe304517b2bff5a58bf64f30b98bbc5079eb"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:74664978bb272435107de04e36db5a9735e78232b85b77d45cfb38f758efd33e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:752944c7ffbfdd10c074dc58ec2d5a8a4cd9493b314d367c14d24c17684ddd14"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:d1f13550535ad8cff21b8d757a3257963e951d96e20ec82ab44bc64aeb62a191"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ecaae4149d99b1c9e7b88bb03e3221956f68fd6d50be2ef061b2381b61d20838"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:cb6254dc36b47a990e59e1068afacdcd02958bdcce30bb50cc1700a8b9d624a6"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:c8ae8a0f02f57a6e61203a31428fa1d677cbe50c93622b4149d5c0f319c1d19e"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:47cc91b2f4dd2833fddaedd2893006b0106129d4b94fdb6af1f4ce5a9965577c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:82004af6c302b5d3ab2cfc4cc5f29db16123b1a8417f2e25f9066f91d4411090"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:2b7d8f6c26245217bd2ad053761201e9f9680f8ce52f0fcd8d0755aeae5b2152"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_s390x.whl", hash = "sha256:799a7a5e4fb2d5898c60b640fd4981d6a25f1c11790935a44ce38c54e985f828"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:99ae2cffebb06e6c22bdc25801d7b30f503cc87dbd283479e7b606f70aff57ec"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win32.whl", hash = "sha256:f9d332f8c2a2fcbffe1378594431458ddbef721c1769d78e2cbc06280d8155f9"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_amd64.whl", hash = "sha256:8a6562c3700cce886c5be75ade4a5db4214fda19fede41d9792d100288d8f94c"}, - {file = "charset_normalizer-3.4.4-cp314-cp314-win_arm64.whl", hash = "sha256:de00632ca48df9daf77a2c65a484531649261ec9f25489917f09e455cb09ddb2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ce8a0633f41a967713a59c4139d29110c07e826d131a316b50ce11b1d79b4f84"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:eaabd426fe94daf8fd157c32e571c85cb12e66692f15516a83a03264b08d06c3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:c4ef880e27901b6cc782f1b95f82da9313c0eb95c3af699103088fa0ac3ce9ac"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:2aaba3b0819274cc41757a1da876f810a3e4d7b6eb25699253a4effef9e8e4af"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:778d2e08eda00f4256d7f672ca9fef386071c9202f5e4607920b86d7803387f2"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f155a433c2ec037d4e8df17d18922c3a0d9b3232a396690f17175d2946f0218d"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a8bf8d0f749c5757af2142fe7903a9df1d2e8aa3841559b2bad34b08d0e2bcf3"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:194f08cbb32dc406d6e1aea671a68be0823673db2832b38405deba2fb0d88f63"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:6aee717dcfead04c6eb1ce3bd29ac1e22663cdea57f943c87d1eab9a025438d7"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:cd4b7ca9984e5e7985c12bc60a6f173f3c958eae74f3ef6624bb6b26e2abbae4"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_riscv64.whl", hash = "sha256:b7cf1017d601aa35e6bb650b6ad28652c9cd78ee6caff19f3c28d03e1c80acbf"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e912091979546adf63357d7e2ccff9b44f026c075aeaf25a52d0e95ad2281074"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5cb4d72eea50c8868f5288b7f7f33ed276118325c1dfd3957089f6b519e1382a"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win32.whl", hash = "sha256:837c2ce8c5a65a2035be9b3569c684358dfbf109fd3b6969630a87535495ceaa"}, - {file = "charset_normalizer-3.4.4-cp38-cp38-win_amd64.whl", hash = "sha256:44c2a8734b333e0578090c4cd6b16f275e07aa6614ca8715e6c038e865e70576"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:a9768c477b9d7bd54bc0c86dbaebdec6f03306675526c9927c0e8a04e8f94af9"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1bee1e43c28aa63cb16e5c14e582580546b08e535299b8b6158a7c9c768a1f3d"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:fd44c878ea55ba351104cb93cc85e74916eb8fa440ca7903e57575e97394f608"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:0f04b14ffe5fdc8c4933862d8306109a2c51e0704acfa35d51598eb45a1e89fc"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:cd09d08005f958f370f539f186d10aec3377d55b9eeb0d796025d4886119d76e"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4fe7859a4e3e8457458e2ff592f15ccb02f3da787fcd31e0183879c3ad4692a1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:fa09f53c465e532f4d3db095e0c55b615f010ad81803d383195b6b5ca6cbf5f3"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7fa17817dc5625de8a027cb8b26d9fefa3ea28c8253929b8d6649e705d2835b6"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:5947809c8a2417be3267efc979c47d76a079758166f7d43ef5ae8e9f92751f88"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4902828217069c3c5c71094537a8e623f5d097858ac6ca8252f7b4d10b7560f1"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:7c308f7e26e4363d79df40ca5b2be1c6ba9f02bdbccfed5abddb7859a6ce72cf"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:2c9d3c380143a1fedbff95a312aa798578371eb29da42106a29019368a475318"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:cb01158d8b88ee68f15949894ccc6712278243d95f344770fa7593fa2d94410c"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win32.whl", hash = "sha256:2677acec1a2f8ef614c6888b5b4ae4060cc184174a938ed4e8ef690e15d3e505"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_amd64.whl", hash = "sha256:f8e160feb2aed042cd657a72acc0b481212ed28b1b9a95c0cee1621b524e1966"}, - {file = "charset_normalizer-3.4.4-cp39-cp39-win_arm64.whl", hash = "sha256:b5d84d37db046c5ca74ee7bb47dd6cbc13f80665fdde3e8040bdd3fb015ecb50"}, - {file = "charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f"}, - {file = "charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a"}, -] - -[[package]] -name = "click" -version = "8.3.0" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "click-8.3.0-py3-none-any.whl", hash = "sha256:9b9f285302c6e3064f4330c05f05b81945b2a39544279343e6e7c5f27a9baddc"}, - {file = "click-8.3.0.tar.gz", hash = "sha256:e7b8232224eba16f4ebe410c25ced9f7875cb5f3263ffc93cc3e8da705e229c4"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -groups = ["main"] -markers = "sys_platform == \"win32\" or platform_system == \"Windows\"" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "constantly" -version = "23.10.4" -description = "Symbolic constants in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9"}, - {file = "constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd"}, -] - -[[package]] -name = "coreapi" -version = "2.3.3" -description = "Python client library for Core API." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "coreapi-2.3.3-py2.py3-none-any.whl", hash = "sha256:bf39d118d6d3e171f10df9ede5666f63ad80bba9a29a8ec17726a66cf52ee6f3"}, - {file = "coreapi-2.3.3.tar.gz", hash = "sha256:46145fcc1f7017c076a2ef684969b641d18a2991051fddec9458ad3f78ffc1cb"}, -] - -[package.dependencies] -coreschema = "*" -itypes = "*" -requests = "*" -uritemplate = "*" - -[[package]] -name = "coreschema" -version = "0.0.4" -description = "Core Schema." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "coreschema-0.0.4-py2-none-any.whl", hash = "sha256:5e6ef7bf38c1525d5e55a895934ab4273548629f16aed5c0a6caa74ebf45551f"}, - {file = "coreschema-0.0.4.tar.gz", hash = "sha256:9503506007d482ab0867ba14724b93c18a33b22b6d19fb419ef2d239dd4a1607"}, -] - -[package.dependencies] -jinja2 = "*" - -[[package]] -name = "cryptography" -version = "46.0.3" -description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -optional = false -python-versions = "!=3.9.0,!=3.9.1,>=3.8" -groups = ["main"] -files = [ - {file = "cryptography-46.0.3-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:109d4ddfadf17e8e7779c39f9b18111a09efb969a301a31e987416a0191ed93a"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:09859af8466b69bc3c27bdf4f5d84a665e0f7ab5088412e9e2ec49758eca5cbc"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:01ca9ff2885f3acc98c29f1860552e37f6d7c7d013d7334ff2a9de43a449315d"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:6eae65d4c3d33da080cff9c4ab1f711b15c1d9760809dad6ea763f3812d254cb"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:e5bf0ed4490068a2e72ac03d786693adeb909981cc596425d09032d372bcc849"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5ecfccd2329e37e9b7112a888e76d9feca2347f12f37918facbb893d7bb88ee8"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a2c0cd47381a3229c403062f764160d57d4d175e022c1df84e168c6251a22eec"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:549e234ff32571b1f4076ac269fcce7a808d3bf98b76c8dd560e42dbc66d7d91"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:c0a7bb1a68a5d3471880e264621346c48665b3bf1c3759d682fc0864c540bd9e"}, - {file = "cryptography-46.0.3-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:10b01676fc208c3e6feeb25a8b83d81767e8059e1fe86e1dc62d10a3018fa926"}, - {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:0abf1ffd6e57c67e92af68330d05760b7b7efb243aab8377e583284dbab72c71"}, - {file = "cryptography-46.0.3-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a04bee9ab6a4da801eb9b51f1b708a1b5b5c9eb48c03f74198464c66f0d344ac"}, - {file = "cryptography-46.0.3-cp311-abi3-win32.whl", hash = "sha256:f260d0d41e9b4da1ed1e0f1ce571f97fe370b152ab18778e9e8f67d6af432018"}, - {file = "cryptography-46.0.3-cp311-abi3-win_amd64.whl", hash = "sha256:a9a3008438615669153eb86b26b61e09993921ebdd75385ddd748702c5adfddb"}, - {file = "cryptography-46.0.3-cp311-abi3-win_arm64.whl", hash = "sha256:5d7f93296ee28f68447397bf5198428c9aeeab45705a55d53a6343455dcb2c3c"}, - {file = "cryptography-46.0.3-cp314-cp314t-macosx_10_9_universal2.whl", hash = "sha256:00a5e7e87938e5ff9ff5447ab086a5706a957137e6e433841e9d24f38a065217"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c8daeb2d2174beb4575b77482320303f3d39b8e81153da4f0fb08eb5fe86a6c5"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:39b6755623145ad5eff1dab323f4eae2a32a77a7abef2c5089a04a3d04366715"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:db391fa7c66df6762ee3f00c95a89e6d428f4d60e7abc8328f4fe155b5ac6e54"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:78a97cf6a8839a48c49271cdcbd5cf37ca2c1d6b7fdd86cc864f302b5e9bf459"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_ppc64le.whl", hash = "sha256:dfb781ff7eaa91a6f7fd41776ec37c5853c795d3b358d4896fdbb5df168af422"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:6f61efb26e76c45c4a227835ddeae96d83624fb0d29eb5df5b96e14ed1a0afb7"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_aarch64.whl", hash = "sha256:23b1a8f26e43f47ceb6d6a43115f33a5a37d57df4ea0ca295b780ae8546e8044"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_ppc64le.whl", hash = "sha256:b419ae593c86b87014b9be7396b385491ad7f320bde96826d0dd174459e54665"}, - {file = "cryptography-46.0.3-cp314-cp314t-manylinux_2_34_x86_64.whl", hash = "sha256:50fc3343ac490c6b08c0cf0d704e881d0d660be923fd3076db3e932007e726e3"}, - {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:22d7e97932f511d6b0b04f2bfd818d73dcd5928db509460aaf48384778eb6d20"}, - {file = "cryptography-46.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d55f3dffadd674514ad19451161118fd010988540cee43d8bc20675e775925de"}, - {file = "cryptography-46.0.3-cp314-cp314t-win32.whl", hash = "sha256:8a6e050cb6164d3f830453754094c086ff2d0b2f3a897a1d9820f6139a1f0914"}, - {file = "cryptography-46.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:760f83faa07f8b64e9c33fc963d790a2edb24efb479e3520c14a45741cd9b2db"}, - {file = "cryptography-46.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:516ea134e703e9fe26bcd1277a4b59ad30586ea90c365a87781d7887a646fe21"}, - {file = "cryptography-46.0.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:cb3d760a6117f621261d662bccc8ef5bc32ca673e037c83fbe565324f5c46936"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4b7387121ac7d15e550f5cb4a43aef2559ed759c35df7336c402bb8275ac9683"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:15ab9b093e8f09daab0f2159bb7e47532596075139dd74365da52ecc9cb46c5d"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:46acf53b40ea38f9c6c229599a4a13f0d46a6c3fa9ef19fc1a124d62e338dfa0"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:10ca84c4668d066a9878890047f03546f3ae0a6b8b39b697457b7757aaf18dbc"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:36e627112085bb3b81b19fed209c05ce2a52ee8b15d161b7c643a7d5a88491f3"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:1000713389b75c449a6e979ffc7dcc8ac90b437048766cef052d4d30b8220971"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:b02cf04496f6576afffef5ddd04a0cb7d49cf6be16a9059d793a30b035f6b6ac"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:71e842ec9bc7abf543b47cf86b9a743baa95f4677d22baa4c7d5c69e49e9bc04"}, - {file = "cryptography-46.0.3-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:402b58fc32614f00980b66d6e56a5b4118e6cb362ae8f3fda141ba4689bd4506"}, - {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:ef639cb3372f69ec44915fafcd6698b6cc78fbe0c2ea41be867f6ed612811963"}, - {file = "cryptography-46.0.3-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:3b51b8ca4f1c6453d8829e1eb7299499ca7f313900dd4d89a24b8b87c0a780d4"}, - {file = "cryptography-46.0.3-cp38-abi3-win32.whl", hash = "sha256:6276eb85ef938dc035d59b87c8a7dc559a232f954962520137529d77b18ff1df"}, - {file = "cryptography-46.0.3-cp38-abi3-win_amd64.whl", hash = "sha256:416260257577718c05135c55958b674000baef9a1c7d9e8f306ec60d71db850f"}, - {file = "cryptography-46.0.3-cp38-abi3-win_arm64.whl", hash = "sha256:d89c3468de4cdc4f08a57e214384d0471911a3830fcdaf7a8cc587e42a866372"}, - {file = "cryptography-46.0.3-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:a23582810fedb8c0bc47524558fb6c56aac3fc252cb306072fd2815da2a47c32"}, - {file = "cryptography-46.0.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e7aec276d68421f9574040c26e2a7c3771060bc0cff408bae1dcb19d3ab1e63c"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7ce938a99998ed3c8aa7e7272dca1a610401ede816d36d0693907d863b10d9ea"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:191bb60a7be5e6f54e30ba16fdfae78ad3a342a0599eb4193ba88e3f3d6e185b"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c70cc23f12726be8f8bc72e41d5065d77e4515efae3690326764ea1b07845cfb"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_aarch64.whl", hash = "sha256:9394673a9f4de09e28b5356e7fff97d778f8abad85c9d5ac4a4b7e25a0de7717"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-manylinux_2_34_x86_64.whl", hash = "sha256:94cd0549accc38d1494e1f8de71eca837d0509d0d44bf11d158524b0e12cebf9"}, - {file = "cryptography-46.0.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:6b5063083824e5509fdba180721d55909ffacccc8adbec85268b48439423d78c"}, - {file = "cryptography-46.0.3.tar.gz", hash = "sha256:a8b17438104fed022ce745b362294d9ce35b4c2e45c1d958ad4a4b019285f4a1"}, -] - -[package.dependencies] -cffi = {version = ">=2.0.0", markers = "python_full_version >= \"3.9.0\" and platform_python_implementation != \"PyPy\""} -typing-extensions = {version = ">=4.13.2", markers = "python_full_version < \"3.11.0\""} - -[package.extras] -docs = ["sphinx (>=5.3.0)", "sphinx-inline-tabs", "sphinx-rtd-theme (>=3.0.0)"] -docstest = ["pyenchant (>=3)", "readme-renderer (>=30.0)", "sphinxcontrib-spelling (>=7.3.1)"] -nox = ["nox[uv] (>=2024.4.15)"] -pep8test = ["check-sdist", "click (>=8.0.1)", "mypy (>=1.14)", "ruff (>=0.11.11)"] -sdist = ["build (>=1.0.0)"] -ssh = ["bcrypt (>=3.1.5)"] -test = ["certifi (>=2024)", "cryptography-vectors (==46.0.3)", "pretend (>=0.7)", "pytest (>=7.4.0)", "pytest-benchmark (>=4.0)", "pytest-cov (>=2.10.1)", "pytest-xdist (>=3.5.0)"] -test-randomorder = ["pytest-randomly"] - -[[package]] -name = "curtsies" -version = "0.4.3" -description = "Curses-like terminal wrapper, with colored strings!" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "curtsies-0.4.3-py3-none-any.whl", hash = "sha256:65a1b4d6ff887bd9b0f0836cc6dc68c3a2c65c57f51a62f0ee5df408edee1a99"}, - {file = "curtsies-0.4.3.tar.gz", hash = "sha256:102a0ffbf952124f1be222fd6989da4ec7cce04e49f613009e5f54ad37618825"}, -] - -[package.dependencies] -blessed = ">=1.5" -cwcwidth = "*" - -[[package]] -name = "cwcwidth" -version = "0.1.10" -description = "Python bindings for wc(s)width" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "cwcwidth-0.1.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:71932aaee8cba8be9365b3e4a96fd3cb4f02b3c54085cd18df26d5b90505af19"}, - {file = "cwcwidth-0.1.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2bcc437fb407850e7b8d700d08215e1f285456774802be072f80715a3054a9ad"}, - {file = "cwcwidth-0.1.10-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1af5edb0854442cf156497a0f7adf51ea1403a8a93404655d96769fc16307f4"}, - {file = "cwcwidth-0.1.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:a36396389a4172a89a76a7768519de33873de53b81604a80f57224574a6664e5"}, - {file = "cwcwidth-0.1.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:01393cd955ca9de61d845a438cadf02bd689d6c04201b7b06cf9bae57b54c7e0"}, - {file = "cwcwidth-0.1.10-cp310-cp310-win32.whl", hash = "sha256:14823e85163160028cc9f122a0448ddadd7f65d494602b2604211e8f3d0a1e10"}, - {file = "cwcwidth-0.1.10-cp310-cp310-win_amd64.whl", hash = "sha256:8e6b20572c6d17605a69c73e1aee86db051f3ebc90e99f2d99e8751c56553d53"}, - {file = "cwcwidth-0.1.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:849091bb6845a9ddb74497b9345eb2610fb4dff4f12263fb393dd62142163046"}, - {file = "cwcwidth-0.1.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:74a1ede59f73733860e775459ba07c723898cece905dd27bd536d0c99d8b42f1"}, - {file = "cwcwidth-0.1.10-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d15a42557a4ad2614b0281ee3dc27fb6ff9b83437f61cce44dc551926189080"}, - {file = "cwcwidth-0.1.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bf2a8e081fa882d2f97ad86443a5e3bac23c841961669d610944b7e81b2966cc"}, - {file = "cwcwidth-0.1.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:79e6f708f1b00f102252b43c3e9ab90d25eaab87d9f2b5649897fb07866b6252"}, - {file = "cwcwidth-0.1.10-cp311-cp311-win32.whl", hash = "sha256:33bf671f76932af133e66f0741619e9c3a8cebbca0a1f151be65e16cf4cf3e6d"}, - {file = "cwcwidth-0.1.10-cp311-cp311-win_amd64.whl", hash = "sha256:619def845e26598a6651620f2ef50bf3adb05979efb622415f0222c6447f1a62"}, - {file = "cwcwidth-0.1.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1d2b21ff2eb60c6793349b7fb161c40a8583a57ec32e61f47aab7938177bfdec"}, - {file = "cwcwidth-0.1.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e0316488349c3e5ca4b20de7daa1cb8e96a05d1d14d040d46e87a495da655f4a"}, - {file = "cwcwidth-0.1.10-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:848b6ffca1e32e28d2ccbb2cd395ccd3c38a7c4ec110728cd9d828eaf609b09e"}, - {file = "cwcwidth-0.1.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c3a7bfe1da478c0c27c549f68c6e28a583413da3ee451854ec2d983497bd18b8"}, - {file = "cwcwidth-0.1.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cff03100f49170bc50fc399d05a31b8fcb7b0cef26df1a8068fa943387107f6c"}, - {file = "cwcwidth-0.1.10-cp312-cp312-win32.whl", hash = "sha256:2dd9a92fdfbc53fc79f0953f39708dcf743fd27450c374985f419e3d47eb89d4"}, - {file = "cwcwidth-0.1.10-cp312-cp312-win_amd64.whl", hash = "sha256:734d764281e3d87c40d0265543f00a653409145fa9f48a93bc0fbf9a8e7932ca"}, - {file = "cwcwidth-0.1.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2391073280d774ab5d9af1d3aaa26ec456956d04daa1134fb71c31cd72ba5bba"}, - {file = "cwcwidth-0.1.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6bfbdc2943631ec770ee781b35b8876fa7e283ff2273f944e2a9ae1f3df4ecdf"}, - {file = "cwcwidth-0.1.10-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb0103c7db8d86e260e016ff89f8f00ef5eb75c481abc346bfaa756da9f976b4"}, - {file = "cwcwidth-0.1.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3b7d38c552edf663bf13f32310f9fd6661070409807b1b5bf89917e2de804ab1"}, - {file = "cwcwidth-0.1.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:1132be818498163a9208b9f4a28d759e08d3efeb885dfd10364434ccc7fa6a17"}, - {file = "cwcwidth-0.1.10-cp313-cp313-win32.whl", hash = "sha256:dcead1b7b60c99f8cda249feb8059e4da38587c34d0b5f3aa130f13c62c0ce35"}, - {file = "cwcwidth-0.1.10-cp313-cp313-win_amd64.whl", hash = "sha256:b6eafd16d3edfec9acfc3d7b8856313bc252e0eccd56fb088f51ceed14c1bbdd"}, - {file = "cwcwidth-0.1.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3d8bd02fb0bc375479f1af8ff4715d0d9593095c2c72cd7f2a18841cd3657541"}, - {file = "cwcwidth-0.1.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2c98ce6ddb32d7162695827ea96d9580866005eb3ed57c5cdbe83293690327a1"}, - {file = "cwcwidth-0.1.10-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9005da09777c769871d9c5f54f948585cf10bf49b0d176db3e22d922a3a3d77e"}, - {file = "cwcwidth-0.1.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a64a460e045108a7b9e93a6f06983d56435b2a091f3a7384848d7c32c23bcae0"}, - {file = "cwcwidth-0.1.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:b0eeaed08aa37843724d5bc5ce63fc71b6341b48dddee6c2aca5500058e57be2"}, - {file = "cwcwidth-0.1.10-cp39-cp39-win32.whl", hash = "sha256:37cef6a2c1e201b4654079980e93d8849b11198a12898612818d63ab1f818d7e"}, - {file = "cwcwidth-0.1.10-cp39-cp39-win_amd64.whl", hash = "sha256:00fc0b477057b4af431632fbd6b16690add9aed435dbf89ccca9672173540763"}, - {file = "cwcwidth-0.1.10.tar.gz", hash = "sha256:7468760f72c1f4107be1b2b2854bc000401ea36a69daed36fb966a1e19a7a124"}, -] - -[[package]] -name = "decorator" -version = "5.2.1" -description = "Decorators for Humans" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a"}, - {file = "decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360"}, -] - -[[package]] -name = "defusedxml" -version = "0.7.1" -description = "XML bomb protection for Python stdlib modules" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61"}, - {file = "defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69"}, -] - -[[package]] -name = "dj-database-url" -version = "0.4.2" -description = "Use Database URLs in your Django Application." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "dj-database-url-0.4.2.tar.gz", hash = "sha256:a6832d8445ee9d788c5baa48aef8130bf61fdc442f7d9a548424d25cd85c9f08"}, - {file = "dj_database_url-0.4.2-py2.py3-none-any.whl", hash = "sha256:e16d94c382ea0564c48038fa7fe8d9c890ef1ab1a8ec4cb48e732c124b9482fd"}, -] - -[[package]] -name = "django" -version = "4.2.25" -description = "A high-level Python web framework that encourages rapid development and clean, pragmatic design." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "django-4.2.25-py3-none-any.whl", hash = "sha256:9584cf26b174b35620e53c2558b09d7eb180a655a3470474f513ff9acb494f8c"}, - {file = "django-4.2.25.tar.gz", hash = "sha256:2391ab3d78191caaae2c963c19fd70b99e9751008da22a0adcc667c5a4f8d311"}, -] - -[package.dependencies] -asgiref = ">=3.6.0,<4" -sqlparse = ">=0.3.1" -tzdata = {version = "*", markers = "sys_platform == \"win32\""} - -[package.extras] -argon2 = ["argon2-cffi (>=19.1.0)"] -bcrypt = ["bcrypt"] - -[[package]] -name = "django-ajax-selects" -version = "2.0.0" -description = "Edit ForeignKey, ManyToManyField and CharField in Django Admin using jQuery UI AutoComplete." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-ajax-selects-2.0.0.tar.gz", hash = "sha256:f87325b25cae6e9e53b1290356e8d0e17587de57d3d19682ab3912b6bde68cb5"}, -] - -[[package]] -name = "django-cors-middleware" -version = "1.5.0" -description = "django-cors-middleware is a Django application for handling the server headers required for Cross-Origin Resource Sharing (CORS). Fork of django-cors-headers." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-cors-middleware-1.5.0.tar.gz", hash = "sha256:856dbe4d7aae65844ccc68acb49c6da7dbf7cbacaf5bcf37019f4c0c60b3be84"}, - {file = "django_cors_middleware-1.5.0-py3-none-any.whl", hash = "sha256:5bbdea85e22909d596e26f6e0dbc174d5521429fa3943ae02a2c6c48e76c88c7"}, -] - -[[package]] -name = "django-debug-toolbar" -version = "3.2" -description = "A configurable set of panels that display various debug information about the current request/response." -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "django-debug-toolbar-3.2.tar.gz", hash = "sha256:84e2607d900dbd571df0a2acf380b47c088efb787dce9805aefeb407341961d2"}, - {file = "django_debug_toolbar-3.2-py3-none-any.whl", hash = "sha256:9e5a25d0c965f7e686f6a8ba23613ca9ca30184daa26487706d4829f5cfb697a"}, -] - -[package.dependencies] -Django = ">=2.2" -sqlparse = ">=0.2.0" - -[[package]] -name = "django-enforce-host" -version = "1.0.1" -description = "Middleware to redirect requests to a canonical hostname" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-enforce-host-1.0.1.tar.gz", hash = "sha256:40c4b4830e7fc27710c1606e8f3a91e82f8f1d5ae6c26aaec76f453b1407fc3d"}, -] - -[[package]] -name = "django-extensions" -version = "3.2.3" -description = "Extensions for Django" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a"}, - {file = "django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401"}, -] - -[package.dependencies] -Django = ">=3.2" - -[[package]] -name = "django-filter" -version = "2.4.0" -description = "Django-filter is a reusable Django application for allowing users to filter querysets dynamically." -optional = false -python-versions = ">=3.5" -groups = ["main"] -files = [ - {file = "django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06"}, - {file = "django_filter-2.4.0-py3-none-any.whl", hash = "sha256:e00d32cebdb3d54273c48f4f878f898dced8d5dfaad009438fe61ebdf535ace1"}, -] - -[package.dependencies] -Django = ">=2.2" - -[[package]] -name = "django-oauth-toolkit" -version = "1.6.3" -description = "OAuth2 Provider for Django" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-oauth-toolkit-1.6.3.tar.gz", hash = "sha256:c3a0acd10a9c8442aedd298f8cb835d242c114ce0b8894c7e9290991bee667ca"}, - {file = "django_oauth_toolkit-1.6.3-py3-none-any.whl", hash = "sha256:d9acbe8ef193bf31d192d90ea2e2df5e7be8adab391cec4acf55f0c048a35274"}, -] - -[package.dependencies] -django = ">=2.2,<4.0.0 || >4.0.0" -jwcrypto = ">=0.8.0" -oauthlib = ">=3.1.0" -requests = ">=2.13.0" - -[[package]] -name = "django-querycount" -version = "0.7.0" -description = "Middleware that Prints the number of DB queries to the runserver console." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-querycount-0.7.0.tar.gz", hash = "sha256:8f5123d78716ff0704f2373e746a7200b8d8417798ce4a99bf2de87e3768f9ce"}, -] - -[[package]] -name = "django-redis" -version = "4.12.1" -description = "Full featured redis cache backend for Django." -optional = false -python-versions = ">=3.5" -groups = ["main"] -files = [ - {file = "django-redis-4.12.1.tar.gz", hash = "sha256:306589c7021e6468b2656edc89f62b8ba67e8d5a1c8877e2688042263daa7a63"}, - {file = "django_redis-4.12.1-py3-none-any.whl", hash = "sha256:1133b26b75baa3664164c3f44b9d5d133d1b8de45d94d79f38d1adc5b1d502e5"}, -] - -[package.dependencies] -Django = ">=2.2" -redis = ">=3.0.0" - -[[package]] -name = "django-storages" -version = "1.14.6" -description = "Support for many storage backends in Django" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "django_storages-1.14.6-py3-none-any.whl", hash = "sha256:11b7b6200e1cb5ffcd9962bd3673a39c7d6a6109e8096f0e03d46fab3d3aabd9"}, - {file = "django_storages-1.14.6.tar.gz", hash = "sha256:7a25ce8f4214f69ac9c7ce87e2603887f7ae99326c316bc8d2d75375e09341c9"}, -] - -[package.dependencies] -azure-core = {version = ">=1.13", optional = true, markers = "extra == \"azure\""} -azure-storage-blob = {version = ">=12", optional = true, markers = "extra == \"azure\""} -Django = ">=3.2" - -[package.extras] -azure = ["azure-core (>=1.13)", "azure-storage-blob (>=12)"] -boto3 = ["boto3 (>=1.4.4)"] -dropbox = ["dropbox (>=7.2.1)"] -google = ["google-cloud-storage (>=1.36.1)"] -libcloud = ["apache-libcloud"] -s3 = ["boto3 (>=1.4.4)"] -sftp = ["paramiko (>=1.15)"] - -[[package]] -name = "django-su" -version = "1.0.0" -description = "Login as any user from the Django admin interface, then switch back when done" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "django-su-1.0.0.tar.gz", hash = "sha256:1a3f98b2f757a3f47e33e90047c0a81cf965805fd7f91f67089292bdd461bd1a"}, -] - -[package.dependencies] -django = ">=2.2" - -[[package]] -name = "djangorestframework" -version = "3.16.1" -description = "Web APIs for Django, made easy." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "djangorestframework-3.16.1-py3-none-any.whl", hash = "sha256:33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec"}, - {file = "djangorestframework-3.16.1.tar.gz", hash = "sha256:166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7"}, -] - -[package.dependencies] -django = ">=4.2" - -[[package]] -name = "djangorestframework-csv" -version = "3.0.1" -description = "CSV Tools for Django REST Framework" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "djangorestframework-csv-3.0.1.tar.gz", hash = "sha256:76ca3530c362e90ed46316002ea0b17e7e4e14c78240c787125d2c8f7c6c0174"}, - {file = "djangorestframework_csv-3.0.1-py3-none-any.whl", hash = "sha256:91484439b3eb555eb6496dcf25c9f8d12746533feb9eb35360f5cccee42dfd15"}, -] - -[package.dependencies] -djangorestframework = "*" - -[[package]] -name = "drf-extensions" -version = "0.4.0" -description = "Extensions for Django REST Framework" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "drf-extensions-0.4.0.tar.gz", hash = "sha256:11223bc2e173233f4a108456df6433edebc895f65be0dcaa2a76f082fa3b91c3"}, - {file = "drf_extensions-0.4.0-py2.py3-none-any.whl", hash = "sha256:6638ced63fabfefaa18b81e288a9f459234825ca734ab8dc9942d788b6ee7af4"}, -] - -[package.dependencies] -djangorestframework = ">=3.8.1" - -[[package]] -name = "drf-extra-fields" -version = "3.7.0" -description = "Additional fields for Django Rest Framework." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "drf-extra-fields-3.7.0.tar.gz", hash = "sha256:d7e58b8f60432233328b8a64831e50ea5d05932d3cb63ade8fe66c0d3d21ac5b"}, - {file = "drf_extra_fields-3.7.0-py3-none-any.whl", hash = "sha256:3f3b1a6ec0eea02c9cabd62fe10e1673e1e42c5daa27fa9d4cea758c52c5cc30"}, -] - -[package.dependencies] -Django = ">=2.2" -djangorestframework = ">=3.9.2" -filetype = ">=1.2.0" - -[package.extras] -base64imagefield = ["Pillow (>=6.2.1)"] - -[[package]] -name = "drf-spectacular" -version = "0.28.0" -description = "Sane and flexible OpenAPI 3 schema generation for Django REST framework" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "drf_spectacular-0.28.0-py3-none-any.whl", hash = "sha256:856e7edf1056e49a4245e87a61e8da4baff46c83dbc25be1da2df77f354c7cb4"}, - {file = "drf_spectacular-0.28.0.tar.gz", hash = "sha256:2c778a47a40ab2f5078a7c42e82baba07397bb35b074ae4680721b2805943061"}, -] - -[package.dependencies] -Django = ">=2.2" -djangorestframework = ">=3.10.3" -inflection = ">=0.3.1" -jsonschema = ">=2.6.0" -PyYAML = ">=5.1" -uritemplate = ">=2.0.0" - -[package.extras] -offline = ["drf-spectacular-sidecar"] -sidecar = ["drf-spectacular-sidecar"] - -[[package]] -name = "drf-writable-nested" -version = "0.6.2" -description = "Writable nested helpers for django-rest-framework's serializers" -optional = false -python-versions = ">=3.5" -groups = ["main"] -files = [ - {file = "drf_writable_nested-0.6.2-py3-none-any.whl", hash = "sha256:bb413286bd5ebf943460ba7c2dc177d572d6447d5287228cc763062c5a12e3d6"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.3.0" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "exceptiongroup-1.3.0-py3-none-any.whl", hash = "sha256:4d111e6e0c13d0644cad6ddaa7ed0261a0b36971f6d23e7ec9b4b9097da78a10"}, - {file = "exceptiongroup-1.3.0.tar.gz", hash = "sha256:b241f5885f560bc56a59ee63ca4c6a8bfa46ae4ad651af316d4e81817bb9fd88"}, -] - -[package.dependencies] -typing-extensions = {version = ">=4.6.0", markers = "python_version < \"3.13\""} - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "executing" -version = "2.2.1" -description = "Get the currently executing AST node of a frame, and other information" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017"}, - {file = "executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4"}, -] - -[package.extras] -tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipython", "littleutils", "pytest", "rich ; python_version >= \"3.11\""] - -[[package]] -name = "factory-boy" -version = "2.11.1" -description = "A versatile test fixtures replacement based on thoughtbot's factory_bot for Ruby." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "factory_boy-2.11.1-py2.py3-none-any.whl", hash = "sha256:d552cb872b310ae78bd7429bf318e42e1e903b1a109e899a523293dfa762ea4f"}, - {file = "factory_boy-2.11.1.tar.gz", hash = "sha256:6f25cc4761ac109efd503f096e2ad99421b1159f01a29dbb917359dcd68e08ca"}, -] - -[package.dependencies] -Faker = ">=0.7.0" - -[[package]] -name = "faker" -version = "37.11.0" -description = "Faker is a Python package that generates fake data for you." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "faker-37.11.0-py3-none-any.whl", hash = "sha256:1508d2da94dfd1e0087b36f386126d84f8583b3de19ac18e392a2831a6676c57"}, - {file = "faker-37.11.0.tar.gz", hash = "sha256:22969803849ba0618be8eee2dd01d0d9e2cd3b75e6ff1a291fa9abcdb34da5e6"}, -] - -[package.dependencies] -tzdata = "*" - -[[package]] -name = "filetype" -version = "1.2.0" -description = "Infer file type and MIME type of any file/buffer. No external dependencies." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25"}, - {file = "filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb"}, -] - -[[package]] -name = "flake8" -version = "3.8.4" -description = "the modular source code checker: pep8 pyflakes and co" -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,>=2.7" -groups = ["main"] -files = [ - {file = "flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839"}, - {file = "flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b"}, -] - -[package.dependencies] -mccabe = ">=0.6.0,<0.7.0" -pycodestyle = ">=2.6.0a1,<2.7.0" -pyflakes = ">=2.2.0,<2.3.0" - -[[package]] -name = "flex" -version = "6.12.0" -description = "Swagger Schema validation." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "flex-6.12.0-py3-none-any.whl", hash = "sha256:b12403eba2a0499fbbc9f39ea846a3a580c05620efd386e042055a26ec4c37b0"}, - {file = "flex-6.12.0.tar.gz", hash = "sha256:c7713c55efca07aef81c93db639590b5df2c5bf1f2e29c089e57d3137330109e"}, -] - -[package.dependencies] -click = ">=3.3" -jsonpointer = ">=1.7" -PyYAML = ">=3.11" -requests = ">=2.4.3" -rfc3987 = ">=1.3.4" -six = ">=1.7.3" -strict-rfc3339 = ">=0.7" -validate-email = ">=1.2" - -[[package]] -name = "greenlet" -version = "3.2.4" -description = "Lightweight in-process concurrent programming" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "greenlet-3.2.4-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:8c68325b0d0acf8d91dde4e6f930967dd52a5302cd4062932a6b2e7c2969f47c"}, - {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:94385f101946790ae13da500603491f04a76b6e4c059dab271b3ce2e283b2590"}, - {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f10fd42b5ee276335863712fa3da6608e93f70629c631bf77145021600abc23c"}, - {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c8c9e331e58180d0d83c5b7999255721b725913ff6bc6cf39fa2a45841a4fd4b"}, - {file = "greenlet-3.2.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:58b97143c9cc7b86fc458f215bd0932f1757ce649e05b640fea2e79b54cedb31"}, - {file = "greenlet-3.2.4-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c2ca18a03a8cfb5b25bc1cbe20f3d9a4c80d8c3b13ba3df49ac3961af0b1018d"}, - {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9fe0a28a7b952a21e2c062cd5756d34354117796c6d9215a87f55e38d15402c5"}, - {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:8854167e06950ca75b898b104b63cc646573aa5fef1353d4508ecdd1ee76254f"}, - {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:f47617f698838ba98f4ff4189aef02e7343952df3a615f847bb575c3feb177a7"}, - {file = "greenlet-3.2.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:af41be48a4f60429d5cad9d22175217805098a9ef7c40bfef44f7669fb9d74d8"}, - {file = "greenlet-3.2.4-cp310-cp310-win_amd64.whl", hash = "sha256:73f49b5368b5359d04e18d15828eecc1806033db5233397748f4ca813ff1056c"}, - {file = "greenlet-3.2.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:96378df1de302bc38e99c3a9aa311967b7dc80ced1dcc6f171e99842987882a2"}, - {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:1ee8fae0519a337f2329cb78bd7a8e128ec0f881073d43f023c7b8d4831d5246"}, - {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:94abf90142c2a18151632371140b3dba4dee031633fe614cb592dbb6c9e17bc3"}, - {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:4d1378601b85e2e5171b99be8d2dc85f594c79967599328f95c1dc1a40f1c633"}, - {file = "greenlet-3.2.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0db5594dce18db94f7d1650d7489909b57afde4c580806b8d9203b6e79cdc079"}, - {file = "greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8"}, - {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52"}, - {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa"}, - {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c"}, - {file = "greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5"}, - {file = "greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9"}, - {file = "greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd"}, - {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb"}, - {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:f28588772bb5fb869a8eb331374ec06f24a83a9c25bfa1f38b6993afe9c1e968"}, - {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:5c9320971821a7cb77cfab8d956fa8e39cd07ca44b6070db358ceb7f8797c8c9"}, - {file = "greenlet-3.2.4-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c60a6d84229b271d44b70fb6e5fa23781abb5d742af7b808ae3f6efd7c9c60f6"}, - {file = "greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0"}, - {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0"}, - {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f"}, - {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0"}, - {file = "greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d"}, - {file = "greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02"}, - {file = "greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31"}, - {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945"}, - {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:710638eb93b1fa52823aa91bf75326f9ecdfd5e0466f00789246a5280f4ba0fc"}, - {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:c5111ccdc9c88f423426df3fd1811bfc40ed66264d35aa373420a34377efc98a"}, - {file = "greenlet-3.2.4-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d76383238584e9711e20ebe14db6c88ddcedc1829a9ad31a584389463b5aa504"}, - {file = "greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671"}, - {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b"}, - {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae"}, - {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b"}, - {file = "greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929"}, - {file = "greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b"}, - {file = "greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0"}, - {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f"}, - {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c17b6b34111ea72fc5a4e4beec9711d2226285f0386ea83477cbb97c30a3f3a5"}, - {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1"}, - {file = "greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735"}, - {file = "greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337"}, - {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269"}, - {file = "greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681"}, - {file = "greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01"}, - {file = "greenlet-3.2.4-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:b6a7c19cf0d2742d0809a4c05975db036fdff50cd294a93632d6a310bf9ac02c"}, - {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:27890167f55d2387576d1f41d9487ef171849ea0359ce1510ca6e06c8bece11d"}, - {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18d9260df2b5fbf41ae5139e1be4e796d99655f023a636cd0e11e6406cca7d58"}, - {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:671df96c1f23c4a0d4077a325483c1503c96a1b7d9db26592ae770daa41233d4"}, - {file = "greenlet-3.2.4-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:16458c245a38991aa19676900d48bd1a6f2ce3e16595051a4db9d012154e8433"}, - {file = "greenlet-3.2.4-cp39-cp39-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c9913f1a30e4526f432991f89ae263459b1c64d1608c0d22a5c79c287b3c70df"}, - {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b90654e092f928f110e0007f572007c9727b5265f7632c2fa7415b4689351594"}, - {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:81701fd84f26330f0d5f4944d4e92e61afe6319dcd9775e39396e39d7c3e5f98"}, - {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:28a3c6b7cd72a96f61b0e4b2a36f681025b60ae4779cc73c1535eb5f29560b10"}, - {file = "greenlet-3.2.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:52206cd642670b0b320a1fd1cbfd95bca0e043179c1d8a045f2c6109dfe973be"}, - {file = "greenlet-3.2.4-cp39-cp39-win32.whl", hash = "sha256:65458b409c1ed459ea899e939f0e1cdb14f58dbc803f2f93c5eab5694d32671b"}, - {file = "greenlet-3.2.4-cp39-cp39-win_amd64.whl", hash = "sha256:d2e685ade4dafd447ede19c31277a224a239a0a1a4eca4e6390efedf20260cfb"}, - {file = "greenlet-3.2.4.tar.gz", hash = "sha256:0dca0d95ff849f9a364385f36ab49f50065d76964944638be9691e1832e9f86d"}, -] - -[package.extras] -docs = ["Sphinx", "furo"] -test = ["objgraph", "psutil", "setuptools"] - -[[package]] -name = "gunicorn" -version = "22.0.0" -description = "WSGI HTTP Server for UNIX" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9"}, - {file = "gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63"}, -] - -[package.dependencies] -packaging = "*" - -[package.extras] -eventlet = ["eventlet (>=0.24.1,!=0.36.0)"] -gevent = ["gevent (>=1.4.0)"] -setproctitle = ["setproctitle"] -testing = ["coverage", "eventlet", "gevent", "pytest", "pytest-cov"] -tornado = ["tornado (>=0.2)"] - -[[package]] -name = "h11" -version = "0.16.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86"}, - {file = "h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1"}, -] - -[[package]] -name = "hyperlink" -version = "21.0.0" -description = "A featureful, immutable, and correct URL for Python." -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4"}, - {file = "hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b"}, -] - -[package.dependencies] -idna = ">=2.5" - -[[package]] -name = "idna" -version = "3.11" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea"}, - {file = "idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902"}, -] - -[package.extras] -all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2)"] - -[[package]] -name = "incremental" -version = "24.7.2" -description = "A small library that versions your Python projects." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "incremental-24.7.2-py3-none-any.whl", hash = "sha256:8cb2c3431530bec48ad70513931a760f446ad6c25e8333ca5d95e24b0ed7b8fe"}, - {file = "incremental-24.7.2.tar.gz", hash = "sha256:fb4f1d47ee60efe87d4f6f0ebb5f70b9760db2b2574c59c8e8912be4ebd464c9"}, -] - -[package.dependencies] -setuptools = ">=61.0" -tomli = {version = "*", markers = "python_version < \"3.11\""} - -[package.extras] -scripts = ["click (>=6.0)"] - -[[package]] -name = "inflection" -version = "0.5.1" -description = "A port of Ruby on Rails inflector to Python" -optional = false -python-versions = ">=3.5" -groups = ["main"] -files = [ - {file = "inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2"}, - {file = "inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417"}, -] - -[[package]] -name = "iniconfig" -version = "2.3.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12"}, - {file = "iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730"}, -] - -[[package]] -name = "ipdb" -version = "0.13.0" -description = "IPython-enabled pdb" -optional = false -python-versions = ">=2.7" -groups = ["main"] -files = [ - {file = "ipdb-0.13.0.tar.gz", hash = "sha256:b90f1f661028af17c5043b4ea4534bc2f303d1f23b0c762a08923c7c454d7a59"}, -] - -[package.dependencies] -ipython = {version = ">=5.1.0", markers = "python_version >= \"3.4\""} -setuptools = "*" - -[[package]] -name = "ipython" -version = "8.0.1" -description = "IPython: Productive Interactive Computing" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "ipython-8.0.1-py3-none-any.whl", hash = "sha256:c503a0dd6ccac9c8c260b211f2dd4479c042b49636b097cc9a0d55fe62dff64c"}, - {file = "ipython-8.0.1.tar.gz", hash = "sha256:ab564d4521ea8ceaac26c3a2c6e5ddbca15c8848fd5a5cc325f960da88d42974"}, -] - -[package.dependencies] -appnope = {version = "*", markers = "sys_platform == \"darwin\""} -backcall = "*" -black = "*" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -decorator = "*" -jedi = ">=0.16" -matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} -pickleshare = "*" -prompt-toolkit = ">=2.0.0,<3.0.0 || >3.0.0,<3.0.1 || >3.0.1,<3.1.0" -pygments = "*" -setuptools = ">=18.5" -stack-data = "*" -traitlets = ">=5" - -[package.extras] -all = ["Sphinx (>=1.3)", "curio", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.19)", "pandas", "pygments", "pytest", "pytest-asyncio", "qtconsole", "testpath", "trio"] -doc = ["Sphinx (>=1.3)"] -kernel = ["ipykernel"] -nbconvert = ["nbconvert"] -nbformat = ["nbformat"] -notebook = ["ipywidgets", "notebook"] -parallel = ["ipyparallel"] -qtconsole = ["qtconsole"] -test = ["pygments", "pytest", "pytest-asyncio", "testpath"] -test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.19)", "pandas", "pygments", "pytest", "testpath", "trio"] - -[[package]] -name = "isodate" -version = "0.7.2" -description = "An ISO 8601 date/time/duration parser and formatter" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15"}, - {file = "isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6"}, -] - -[[package]] -name = "itypes" -version = "1.2.0" -description = "Simple immutable types for python." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "itypes-1.2.0-py2.py3-none-any.whl", hash = "sha256:03da6872ca89d29aef62773672b2d408f490f80db48b23079a4b194c86dd04c6"}, - {file = "itypes-1.2.0.tar.gz", hash = "sha256:af886f129dea4a2a1e3d36595a2d139589e4dd287f5cab0b40e799ee81570ff1"}, -] - -[[package]] -name = "jedi" -version = "0.19.2" -description = "An autocompletion tool for Python that can be used for text editors." -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, - {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, -] - -[package.dependencies] -parso = ">=0.8.4,<0.9.0" - -[package.extras] -docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] - -[[package]] -name = "jinja2" -version = "3.1.4" -description = "A very fast and expressive template engine." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d"}, - {file = "jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369"}, -] - -[package.dependencies] -MarkupSafe = ">=2.0" - -[package.extras] -i18n = ["Babel (>=2.7)"] - -[[package]] -name = "jinxed" -version = "1.3.0" -description = "Jinxed Terminal Library" -optional = false -python-versions = "*" -groups = ["main"] -markers = "platform_system == \"Windows\"" -files = [ - {file = "jinxed-1.3.0-py2.py3-none-any.whl", hash = "sha256:b993189f39dc2d7504d802152671535b06d380b26d78070559551cbf92df4fc5"}, - {file = "jinxed-1.3.0.tar.gz", hash = "sha256:1593124b18a41b7a3da3b078471442e51dbad3d77b4d4f2b0c26ab6f7d660dbf"}, -] - -[package.dependencies] -ansicon = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "jmespath" -version = "1.0.1" -description = "JSON Matching Expressions" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "jmespath-1.0.1-py3-none-any.whl", hash = "sha256:02e2e4cc71b5bcab88332eebf907519190dd9e6e82107fa7f83b1003a6252980"}, - {file = "jmespath-1.0.1.tar.gz", hash = "sha256:90261b206d6defd58fdd5e85f478bf633a2901798906be2ad389150c5c60edbe"}, -] - -[[package]] -name = "jsonpointer" -version = "3.0.0" -description = "Identify specific nodes in a JSON document (RFC 6901)" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942"}, - {file = "jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef"}, -] - -[[package]] -name = "jsonschema" -version = "4.25.1" -description = "An implementation of JSON Schema validation for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "jsonschema-4.25.1-py3-none-any.whl", hash = "sha256:3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63"}, - {file = "jsonschema-4.25.1.tar.gz", hash = "sha256:e4a9655ce0da0c0b67a085847e00a3a51449e1157f4f75e9fb5aa545e122eb85"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -jsonschema-specifications = ">=2023.3.6" -referencing = ">=0.28.4" -rpds-py = ">=0.7.1" - -[package.extras] -format = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3987", "uri-template", "webcolors (>=1.11)"] -format-nongpl = ["fqdn", "idna", "isoduration", "jsonpointer (>1.13)", "rfc3339-validator", "rfc3986-validator (>0.1.0)", "rfc3987-syntax (>=1.1.0)", "uri-template", "webcolors (>=24.6.0)"] - -[[package]] -name = "jsonschema-specifications" -version = "2025.9.1" -description = "The JSON Schema meta-schemas and vocabularies, exposed as a Registry" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe"}, - {file = "jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d"}, -] - -[package.dependencies] -referencing = ">=0.31.0" - -[[package]] -name = "jwcrypto" -version = "1.5.6" -description = "Implementation of JOSE Web standards" -optional = false -python-versions = ">= 3.8" -groups = ["main"] -files = [ - {file = "jwcrypto-1.5.6-py3-none-any.whl", hash = "sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789"}, - {file = "jwcrypto-1.5.6.tar.gz", hash = "sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039"}, -] - -[package.dependencies] -cryptography = ">=3.4" -typing-extensions = ">=4.5.0" - -[[package]] -name = "kombu" -version = "4.6.11" -description = "Messaging library for Python." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -groups = ["main"] -files = [ - {file = "kombu-4.6.11-py2.py3-none-any.whl", hash = "sha256:be48cdffb54a2194d93ad6533d73f69408486483d189fe9f5990ee24255b0e0a"}, - {file = "kombu-4.6.11.tar.gz", hash = "sha256:ca1b45faac8c0b18493d02a8571792f3c40291cf2bcf1f55afed3d8f3aa7ba74"}, -] - -[package.dependencies] -amqp = ">=2.6.0,<2.7" - -[package.extras] -azureservicebus = ["azure-servicebus (>=0.21.1)"] -azurestoragequeues = ["azure-storage-queue"] -consul = ["python-consul (>=0.6.0)"] -librabbitmq = ["librabbitmq (>=1.5.2)"] -mongodb = ["pymongo (>=3.3.0)"] -msgpack = ["msgpack"] -pyro = ["pyro4"] -qpid = ["qpid-python (>=0.26)", "qpid-tools (>=0.26)"] -redis = ["redis (>=3.3.11)"] -slmq = ["softlayer-messaging (>=1.0.3)"] -sqlalchemy = ["sqlalchemy"] -sqs = ["boto3 (>=1.4.4)", "pycurl (==7.43.0.2)"] -yaml = ["PyYAML (>=3.10)"] -zookeeper = ["kazoo (>=1.3.1)"] - -[[package]] -name = "loguru" -version = "0.7.3" -description = "Python logging made (stupidly) simple" -optional = false -python-versions = "<4.0,>=3.5" -groups = ["main"] -files = [ - {file = "loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c"}, - {file = "loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6"}, -] - -[package.dependencies] -colorama = {version = ">=0.3.4", markers = "sys_platform == \"win32\""} -win32-setctime = {version = ">=1.0.0", markers = "sys_platform == \"win32\""} - -[package.extras] -dev = ["Sphinx (==8.1.3) ; python_version >= \"3.11\"", "build (==1.2.2) ; python_version >= \"3.11\"", "colorama (==0.4.5) ; python_version < \"3.8\"", "colorama (==0.4.6) ; python_version >= \"3.8\"", "exceptiongroup (==1.1.3) ; python_version >= \"3.7\" and python_version < \"3.11\"", "freezegun (==1.1.0) ; python_version < \"3.8\"", "freezegun (==1.5.0) ; python_version >= \"3.8\"", "mypy (==0.910) ; python_version < \"3.6\"", "mypy (==0.971) ; python_version == \"3.6\"", "mypy (==1.13.0) ; python_version >= \"3.8\"", "mypy (==1.4.1) ; python_version == \"3.7\"", "myst-parser (==4.0.0) ; python_version >= \"3.11\"", "pre-commit (==4.0.1) ; python_version >= \"3.9\"", "pytest (==6.1.2) ; python_version < \"3.8\"", "pytest (==8.3.2) ; python_version >= \"3.8\"", "pytest-cov (==2.12.1) ; python_version < \"3.8\"", "pytest-cov (==5.0.0) ; python_version == \"3.8\"", "pytest-cov (==6.0.0) ; python_version >= \"3.9\"", "pytest-mypy-plugins (==1.9.3) ; python_version >= \"3.6\" and python_version < \"3.8\"", "pytest-mypy-plugins (==3.1.0) ; python_version >= \"3.8\"", "sphinx-rtd-theme (==3.0.2) ; python_version >= \"3.11\"", "tox (==3.27.1) ; python_version < \"3.8\"", "tox (==4.23.2) ; python_version >= \"3.8\"", "twine (==6.0.1) ; python_version >= \"3.11\""] - -[[package]] -name = "markdown" -version = "2.6.11" -description = "Python implementation of Markdown." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "Markdown-2.6.11-py2.py3-none-any.whl", hash = "sha256:9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f"}, - {file = "Markdown-2.6.11.tar.gz", hash = "sha256:a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81"}, -] - -[[package]] -name = "markupsafe" -version = "3.0.3" -description = "Safely add untrusted strings to HTML/XML markup." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559"}, - {file = "markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591"}, - {file = "markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6"}, - {file = "markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1"}, - {file = "markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa"}, - {file = "markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8"}, - {file = "markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1"}, - {file = "markupsafe-3.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1cc7ea17a6824959616c525620e387f6dd30fec8cb44f649e31712db02123dad"}, - {file = "markupsafe-3.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4bd4cd07944443f5a265608cc6aab442e4f74dff8088b0dfc8238647b8f6ae9a"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b5420a1d9450023228968e7e6a9ce57f65d148ab56d2313fcd589eee96a7a50"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf"}, - {file = "markupsafe-3.0.3-cp311-cp311-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:bc51efed119bc9cfdf792cdeaa4d67e8f6fcccab66ed4bfdd6bde3e59bfcbb2f"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:068f375c472b3e7acbe2d5318dea141359e6900156b5b2ba06a30b169086b91a"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:7be7b61bb172e1ed687f1754f8e7484f1c8019780f6f6b0786e76bb01c2ae115"}, - {file = "markupsafe-3.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:f9e130248f4462aaa8e2552d547f36ddadbeaa573879158d721bbd33dfe4743a"}, - {file = "markupsafe-3.0.3-cp311-cp311-win32.whl", hash = "sha256:0db14f5dafddbb6d9208827849fad01f1a2609380add406671a26386cdf15a19"}, - {file = "markupsafe-3.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:de8a88e63464af587c950061a5e6a67d3632e36df62b986892331d4620a35c01"}, - {file = "markupsafe-3.0.3-cp311-cp311-win_arm64.whl", hash = "sha256:3b562dd9e9ea93f13d53989d23a7e775fdfd1066c33494ff43f5418bc8c58a5c"}, - {file = "markupsafe-3.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d53197da72cc091b024dd97249dfc7794d6a56530370992a5e1a08983ad9230e"}, - {file = "markupsafe-3.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1872df69a4de6aead3491198eaf13810b565bdbeec3ae2dc8780f14458ec73ce"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3a7e8ae81ae39e62a41ec302f972ba6ae23a5c5396c8e60113e9066ef893da0d"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d6dd0be5b5b189d31db7cda48b91d7e0a9795f31430b7f271219ab30f1d3ac9d"}, - {file = "markupsafe-3.0.3-cp312-cp312-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:94c6f0bb423f739146aec64595853541634bde58b2135f27f61c1ffd1cd4d16a"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:be8813b57049a7dc738189df53d69395eba14fb99345e0a5994914a3864c8a4b"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:83891d0e9fb81a825d9a6d61e3f07550ca70a076484292a70fde82c4b807286f"}, - {file = "markupsafe-3.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:77f0643abe7495da77fb436f50f8dab76dbc6e5fd25d39589a0f1fe6548bfa2b"}, - {file = "markupsafe-3.0.3-cp312-cp312-win32.whl", hash = "sha256:d88b440e37a16e651bda4c7c2b930eb586fd15ca7406cb39e211fcff3bf3017d"}, - {file = "markupsafe-3.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:26a5784ded40c9e318cfc2bdb30fe164bdb8665ded9cd64d500a34fb42067b1c"}, - {file = "markupsafe-3.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:35add3b638a5d900e807944a078b51922212fb3dedb01633a8defc4b01a3c85f"}, - {file = "markupsafe-3.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e1cf1972137e83c5d4c136c43ced9ac51d0e124706ee1c8aa8532c1287fa8795"}, - {file = "markupsafe-3.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:116bb52f642a37c115f517494ea5feb03889e04df47eeff5b130b1808ce7c219"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:133a43e73a802c5562be9bbcd03d090aa5a1fe899db609c29e8c8d815c5f6de6"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ccfcd093f13f0f0b7fdd0f198b90053bf7b2f02a3927a30e63f3ccc9df56b676"}, - {file = "markupsafe-3.0.3-cp313-cp313-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:509fa21c6deb7a7a273d629cf5ec029bc209d1a51178615ddf718f5918992ab9"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4afe79fb3de0b7097d81da19090f4df4f8d3a2b3adaa8764138aac2e44f3af1"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:795e7751525cae078558e679d646ae45574b47ed6e7771863fcc079a6171a0fc"}, - {file = "markupsafe-3.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8485f406a96febb5140bfeca44a73e3ce5116b2501ac54fe953e488fb1d03b12"}, - {file = "markupsafe-3.0.3-cp313-cp313-win32.whl", hash = "sha256:bdd37121970bfd8be76c5fb069c7751683bdf373db1ed6c010162b2a130248ed"}, - {file = "markupsafe-3.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:9a1abfdc021a164803f4d485104931fb8f8c1efd55bc6b748d2f5774e78b62c5"}, - {file = "markupsafe-3.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:7e68f88e5b8799aa49c85cd116c932a1ac15caaa3f5db09087854d218359e485"}, - {file = "markupsafe-3.0.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:218551f6df4868a8d527e3062d0fb968682fe92054e89978594c28e642c43a73"}, - {file = "markupsafe-3.0.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3524b778fe5cfb3452a09d31e7b5adefeea8c5be1d43c4f810ba09f2ceb29d37"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4e885a3d1efa2eadc93c894a21770e4bc67899e3543680313b09f139e149ab19"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8709b08f4a89aa7586de0aadc8da56180242ee0ada3999749b183aa23df95025"}, - {file = "markupsafe-3.0.3-cp313-cp313t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:b8512a91625c9b3da6f127803b166b629725e68af71f8184ae7e7d54686a56d6"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9b79b7a16f7fedff2495d684f2b59b0457c3b493778c9eed31111be64d58279f"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_riscv64.whl", hash = "sha256:12c63dfb4a98206f045aa9563db46507995f7ef6d83b2f68eda65c307c6829eb"}, - {file = "markupsafe-3.0.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8f71bc33915be5186016f675cd83a1e08523649b0e33efdb898db577ef5bb009"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win32.whl", hash = "sha256:69c0b73548bc525c8cb9a251cddf1931d1db4d2258e9599c28c07ef3580ef354"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win_amd64.whl", hash = "sha256:1b4b79e8ebf6b55351f0d91fe80f893b4743f104bff22e90697db1590e47a218"}, - {file = "markupsafe-3.0.3-cp313-cp313t-win_arm64.whl", hash = "sha256:ad2cf8aa28b8c020ab2fc8287b0f823d0a7d8630784c31e9ee5edea20f406287"}, - {file = "markupsafe-3.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:eaa9599de571d72e2daf60164784109f19978b327a3910d3e9de8c97b5b70cfe"}, - {file = "markupsafe-3.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:c47a551199eb8eb2121d4f0f15ae0f923d31350ab9280078d1e5f12b249e0026"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f34c41761022dd093b4b6896d4810782ffbabe30f2d443ff5f083e0cbbb8c737"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:457a69a9577064c05a97c41f4e65148652db078a3a509039e64d3467b9e7ef97"}, - {file = "markupsafe-3.0.3-cp314-cp314-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e8afc3f2ccfa24215f8cb28dcf43f0113ac3c37c2f0f0806d8c70e4228c5cf4d"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:ec15a59cf5af7be74194f7ab02d0f59a62bdcf1a537677ce67a2537c9b87fcda"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:0eb9ff8191e8498cca014656ae6b8d61f39da5f95b488805da4bb029cccbfbaf"}, - {file = "markupsafe-3.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:2713baf880df847f2bece4230d4d094280f4e67b1e813eec43b4c0e144a34ffe"}, - {file = "markupsafe-3.0.3-cp314-cp314-win32.whl", hash = "sha256:729586769a26dbceff69f7a7dbbf59ab6572b99d94576a5592625d5b411576b9"}, - {file = "markupsafe-3.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:bdc919ead48f234740ad807933cdf545180bfbe9342c2bb451556db2ed958581"}, - {file = "markupsafe-3.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:5a7d5dc5140555cf21a6fefbdbf8723f06fcd2f63ef108f2854de715e4422cb4"}, - {file = "markupsafe-3.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:1353ef0c1b138e1907ae78e2f6c63ff67501122006b0f9abad68fda5f4ffc6ab"}, - {file = "markupsafe-3.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:1085e7fbddd3be5f89cc898938f42c0b3c711fdcb37d75221de2666af647c175"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1b52b4fb9df4eb9ae465f8d0c228a00624de2334f216f178a995ccdcf82c4634"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fed51ac40f757d41b7c48425901843666a6677e3e8eb0abcff09e4ba6e664f50"}, - {file = "markupsafe-3.0.3-cp314-cp314t-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:f190daf01f13c72eac4efd5c430a8de82489d9cff23c364c3ea822545032993e"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:e56b7d45a839a697b5eb268c82a71bd8c7f6c94d6fd50c3d577fa39a9f1409f5"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:f3e98bb3798ead92273dc0e5fd0f31ade220f59a266ffd8a4f6065e0a3ce0523"}, - {file = "markupsafe-3.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:5678211cb9333a6468fb8d8be0305520aa073f50d17f089b5b4b477ea6e67fdc"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win32.whl", hash = "sha256:915c04ba3851909ce68ccc2b8e2cd691618c4dc4c4232fb7982bca3f41fd8c3d"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4faffd047e07c38848ce017e8725090413cd80cbc23d86e55c587bf979e579c9"}, - {file = "markupsafe-3.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32001d6a8fc98c8cb5c947787c5d08b0a50663d139f1305bac5885d98d9b40fa"}, - {file = "markupsafe-3.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:15d939a21d546304880945ca1ecb8a039db6b4dc49b2c5a400387cdae6a62e26"}, - {file = "markupsafe-3.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f71a396b3bf33ecaa1626c255855702aca4d3d9fea5e051b41ac59a9c1c41edc"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:0f4b68347f8c5eab4a13419215bdfd7f8c9b19f2b25520968adfad23eb0ce60c"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e8fc20152abba6b83724d7ff268c249fa196d8259ff481f3b1476383f8f24e42"}, - {file = "markupsafe-3.0.3-cp39-cp39-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:949b8d66bc381ee8b007cd945914c721d9aba8e27f71959d750a46f7c282b20b"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:3537e01efc9d4dccdf77221fb1cb3b8e1a38d5428920e0657ce299b20324d758"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:591ae9f2a647529ca990bc681daebdd52c8791ff06c2bfa05b65163e28102ef2"}, - {file = "markupsafe-3.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a320721ab5a1aba0a233739394eb907f8c8da5c98c9181d1161e77a0c8e36f2d"}, - {file = "markupsafe-3.0.3-cp39-cp39-win32.whl", hash = "sha256:df2449253ef108a379b8b5d6b43f4b1a8e81a061d6537becd5582fba5f9196d7"}, - {file = "markupsafe-3.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:7c3fb7d25180895632e5d3148dbdc29ea38ccb7fd210aa27acbd1201a1902c6e"}, - {file = "markupsafe-3.0.3-cp39-cp39-win_arm64.whl", hash = "sha256:38664109c14ffc9e7437e86b4dceb442b0096dfe3541d7864d9cbe1da4cf36c8"}, - {file = "markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698"}, -] - -[[package]] -name = "matplotlib-inline" -version = "0.1.7" -description = "Inline Matplotlib backend for Jupyter" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "matplotlib_inline-0.1.7-py3-none-any.whl", hash = "sha256:df192d39a4ff8f21b1895d72e6a13f5fcc5099f00fa84384e0ea28c2cc0653ca"}, - {file = "matplotlib_inline-0.1.7.tar.gz", hash = "sha256:8423b23ec666be3d16e16b60bdd8ac4e86e840ebd1dd11a30b9f117f2fa0ab90"}, -] - -[package.dependencies] -traitlets = "*" - -[[package]] -name = "mccabe" -version = "0.6.1" -description = "McCabe checker, plugin for flake8" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42"}, - {file = "mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f"}, -] - -[[package]] -name = "msgpack" -version = "1.1.2" -description = "MessagePack serializer" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2"}, - {file = "msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87"}, - {file = "msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251"}, - {file = "msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a"}, - {file = "msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f"}, - {file = "msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f"}, - {file = "msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9"}, - {file = "msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa"}, - {file = "msgpack-1.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e86a607e558d22985d856948c12a3fa7b42efad264dca8a3ebbcfa2735d786c"}, - {file = "msgpack-1.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:283ae72fc89da59aa004ba147e8fc2f766647b1251500182fac0350d8af299c0"}, - {file = "msgpack-1.1.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:61c8aa3bd513d87c72ed0b37b53dd5c5a0f58f2ff9f26e1555d3bd7948fb7296"}, - {file = "msgpack-1.1.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:454e29e186285d2ebe65be34629fa0e8605202c60fbc7c4c650ccd41870896ef"}, - {file = "msgpack-1.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:7bc8813f88417599564fafa59fd6f95be417179f76b40325b500b3c98409757c"}, - {file = "msgpack-1.1.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bafca952dc13907bdfdedfc6a5f579bf4f292bdd506fadb38389afa3ac5b208e"}, - {file = "msgpack-1.1.2-cp311-cp311-win32.whl", hash = "sha256:602b6740e95ffc55bfb078172d279de3773d7b7db1f703b2f1323566b878b90e"}, - {file = "msgpack-1.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d198d275222dc54244bf3327eb8cbe00307d220241d9cec4d306d49a44e85f68"}, - {file = "msgpack-1.1.2-cp311-cp311-win_arm64.whl", hash = "sha256:86f8136dfa5c116365a8a651a7d7484b65b13339731dd6faebb9a0242151c406"}, - {file = "msgpack-1.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:70a0dff9d1f8da25179ffcf880e10cf1aad55fdb63cd59c9a49a1b82290062aa"}, - {file = "msgpack-1.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:446abdd8b94b55c800ac34b102dffd2f6aa0ce643c55dfc017ad89347db3dbdb"}, - {file = "msgpack-1.1.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c63eea553c69ab05b6747901b97d620bb2a690633c77f23feb0c6a947a8a7b8f"}, - {file = "msgpack-1.1.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:372839311ccf6bdaf39b00b61288e0557916c3729529b301c52c2d88842add42"}, - {file = "msgpack-1.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2929af52106ca73fcb28576218476ffbb531a036c2adbcf54a3664de124303e9"}, - {file = "msgpack-1.1.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:be52a8fc79e45b0364210eef5234a7cf8d330836d0a64dfbb878efa903d84620"}, - {file = "msgpack-1.1.2-cp312-cp312-win32.whl", hash = "sha256:1fff3d825d7859ac888b0fbda39a42d59193543920eda9d9bea44d958a878029"}, - {file = "msgpack-1.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:1de460f0403172cff81169a30b9a92b260cb809c4cb7e2fc79ae8d0510c78b6b"}, - {file = "msgpack-1.1.2-cp312-cp312-win_arm64.whl", hash = "sha256:be5980f3ee0e6bd44f3a9e9dea01054f175b50c3e6cdb692bc9424c0bbb8bf69"}, - {file = "msgpack-1.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4efd7b5979ccb539c221a4c4e16aac1a533efc97f3b759bb5a5ac9f6d10383bf"}, - {file = "msgpack-1.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:42eefe2c3e2af97ed470eec850facbe1b5ad1d6eacdbadc42ec98e7dcf68b4b7"}, - {file = "msgpack-1.1.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1fdf7d83102bf09e7ce3357de96c59b627395352a4024f6e2458501f158bf999"}, - {file = "msgpack-1.1.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fac4be746328f90caa3cd4bc67e6fe36ca2bf61d5c6eb6d895b6527e3f05071e"}, - {file = "msgpack-1.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:fffee09044073e69f2bad787071aeec727183e7580443dfeb8556cbf1978d162"}, - {file = "msgpack-1.1.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5928604de9b032bc17f5099496417f113c45bc6bc21b5c6920caf34b3c428794"}, - {file = "msgpack-1.1.2-cp313-cp313-win32.whl", hash = "sha256:a7787d353595c7c7e145e2331abf8b7ff1e6673a6b974ded96e6d4ec09f00c8c"}, - {file = "msgpack-1.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:a465f0dceb8e13a487e54c07d04ae3ba131c7c5b95e2612596eafde1dccf64a9"}, - {file = "msgpack-1.1.2-cp313-cp313-win_arm64.whl", hash = "sha256:e69b39f8c0aa5ec24b57737ebee40be647035158f14ed4b40e6f150077e21a84"}, - {file = "msgpack-1.1.2-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:e23ce8d5f7aa6ea6d2a2b326b4ba46c985dbb204523759984430db7114f8aa00"}, - {file = "msgpack-1.1.2-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6c15b7d74c939ebe620dd8e559384be806204d73b4f9356320632d783d1f7939"}, - {file = "msgpack-1.1.2-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:99e2cb7b9031568a2a5c73aa077180f93dd2e95b4f8d3b8e14a73ae94a9e667e"}, - {file = "msgpack-1.1.2-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:180759d89a057eab503cf62eeec0aa61c4ea1200dee709f3a8e9397dbb3b6931"}, - {file = "msgpack-1.1.2-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:04fb995247a6e83830b62f0b07bf36540c213f6eac8e851166d8d86d83cbd014"}, - {file = "msgpack-1.1.2-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8e22ab046fa7ede9e36eeb4cfad44d46450f37bb05d5ec482b02868f451c95e2"}, - {file = "msgpack-1.1.2-cp314-cp314-win32.whl", hash = "sha256:80a0ff7d4abf5fecb995fcf235d4064b9a9a8a40a3ab80999e6ac1e30b702717"}, - {file = "msgpack-1.1.2-cp314-cp314-win_amd64.whl", hash = "sha256:9ade919fac6a3e7260b7f64cea89df6bec59104987cbea34d34a2fa15d74310b"}, - {file = "msgpack-1.1.2-cp314-cp314-win_arm64.whl", hash = "sha256:59415c6076b1e30e563eb732e23b994a61c159cec44deaf584e5cc1dd662f2af"}, - {file = "msgpack-1.1.2-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:897c478140877e5307760b0ea66e0932738879e7aa68144d9b78ea4c8302a84a"}, - {file = "msgpack-1.1.2-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:a668204fa43e6d02f89dbe79a30b0d67238d9ec4c5bd8a940fc3a004a47b721b"}, - {file = "msgpack-1.1.2-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5559d03930d3aa0f3aacb4c42c776af1a2ace2611871c84a75afe436695e6245"}, - {file = "msgpack-1.1.2-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:70c5a7a9fea7f036b716191c29047374c10721c389c21e9ffafad04df8c52c90"}, - {file = "msgpack-1.1.2-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:f2cb069d8b981abc72b41aea1c580ce92d57c673ec61af4c500153a626cb9e20"}, - {file = "msgpack-1.1.2-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:d62ce1f483f355f61adb5433ebfd8868c5f078d1a52d042b0a998682b4fa8c27"}, - {file = "msgpack-1.1.2-cp314-cp314t-win32.whl", hash = "sha256:1d1418482b1ee984625d88aa9585db570180c286d942da463533b238b98b812b"}, - {file = "msgpack-1.1.2-cp314-cp314t-win_amd64.whl", hash = "sha256:5a46bf7e831d09470ad92dff02b8b1ac92175ca36b087f904a0519857c6be3ff"}, - {file = "msgpack-1.1.2-cp314-cp314t-win_arm64.whl", hash = "sha256:d99ef64f349d5ec3293688e91486c5fdb925ed03807f64d98d205d2713c60b46"}, - {file = "msgpack-1.1.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ea5405c46e690122a76531ab97a079e184c0daf491e588592d6a23d3e32af99e"}, - {file = "msgpack-1.1.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9fba231af7a933400238cb357ecccf8ab5d51535ea95d94fc35b7806218ff844"}, - {file = "msgpack-1.1.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a8f6e7d30253714751aa0b0c84ae28948e852ee7fb0524082e6716769124bc23"}, - {file = "msgpack-1.1.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:94fd7dc7d8cb0a54432f296f2246bc39474e017204ca6f4ff345941d4ed285a7"}, - {file = "msgpack-1.1.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:350ad5353a467d9e3b126d8d1b90fe05ad081e2e1cef5753f8c345217c37e7b8"}, - {file = "msgpack-1.1.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:6bde749afe671dc44893f8d08e83bf475a1a14570d67c4bb5cec5573463c8833"}, - {file = "msgpack-1.1.2-cp39-cp39-win32.whl", hash = "sha256:ad09b984828d6b7bb52d1d1d0c9be68ad781fa004ca39216c8a1e63c0f34ba3c"}, - {file = "msgpack-1.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:67016ae8c8965124fdede9d3769528ad8284f14d635337ffa6a713a580f6c030"}, - {file = "msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e"}, -] - -[[package]] -name = "mypy-extensions" -version = "1.1.0" -description = "Type system extensions for programs checked with the mypy type checker." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505"}, - {file = "mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558"}, -] - -[[package]] -name = "oauthlib" -version = "3.3.1" -description = "A generic, spec-compliant, thorough implementation of the OAuth request-signing logic" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1"}, - {file = "oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9"}, -] - -[package.extras] -rsa = ["cryptography (>=3.0.0)"] -signals = ["blinker (>=1.4.0)"] -signedtoken = ["cryptography (>=3.0.0)", "pyjwt (>=2.0.0,<3)"] - -[[package]] -name = "oyaml" -version = "0.7" -description = "Ordered YAML: drop-in replacement for PyYAML which preserves dict ordering" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "oyaml-0.7-py2.py3-none-any.whl", hash = "sha256:1a81fbb1d5c3158bf6410577f11daf2b741a1b4eea2a47064e7ecd1fb2699425"}, - {file = "oyaml-0.7.tar.gz", hash = "sha256:a0359138057aba8650f81d4456c553f145773c4a172d27c606429ca45e31f8d9"}, -] - -[package.dependencies] -pyyaml = "*" - -[[package]] -name = "packaging" -version = "25.0" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "packaging-25.0-py3-none-any.whl", hash = "sha256:29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484"}, - {file = "packaging-25.0.tar.gz", hash = "sha256:d443872c98d677bf60f6a1f2f8c1cb748e8fe762d2bf9d3148b5599295b0fc4f"}, -] - -[[package]] -name = "parso" -version = "0.8.5" -description = "A Python Parser" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887"}, - {file = "parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a"}, -] - -[package.extras] -qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["docopt", "pytest"] - -[[package]] -name = "pathspec" -version = "0.12.1" -description = "Utility library for gitignore style pattern matching of file paths." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pathspec-0.12.1-py3-none-any.whl", hash = "sha256:a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08"}, - {file = "pathspec-0.12.1.tar.gz", hash = "sha256:a482d51503a1ab33b1c67a6c3813a26953dbdc71c31dacaef9a838c4e29f5712"}, -] - -[[package]] -name = "pexpect" -version = "4.9.0" -description = "Pexpect allows easy control of interactive console applications." -optional = false -python-versions = "*" -groups = ["main"] -markers = "sys_platform != \"win32\"" -files = [ - {file = "pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523"}, - {file = "pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f"}, -] - -[package.dependencies] -ptyprocess = ">=0.5" - -[[package]] -name = "pickleshare" -version = "0.7.5" -description = "Tiny 'shelve'-like database with concurrency support" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56"}, - {file = "pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca"}, -] - -[[package]] -name = "pillow" -version = "10.3.0" -description = "Python Imaging Library (Fork)" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45"}, - {file = "pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475"}, - {file = "pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3"}, - {file = "pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5"}, - {file = "pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2"}, - {file = "pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f"}, - {file = "pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_10_10_x86_64.whl", hash = "sha256:5f77cf66e96ae734717d341c145c5949c63180842a545c47a0ce7ae52ca83795"}, - {file = "pillow-10.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4b878386c4bf293578b48fc570b84ecfe477d3b77ba39a6e87150af77f40c57"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fdcbb4068117dfd9ce0138d068ac512843c52295ed996ae6dd1faf537b6dbc27"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9797a6c8fe16f25749b371c02e2ade0efb51155e767a971c61734b1bf6293994"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9e91179a242bbc99be65e139e30690e081fe6cb91a8e77faf4c409653de39451"}, - {file = "pillow-10.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:1b87bd9d81d179bd8ab871603bd80d8645729939f90b71e62914e816a76fc6bd"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:81d09caa7b27ef4e61cb7d8fbf1714f5aec1c6b6c5270ee53504981e6e9121ad"}, - {file = "pillow-10.3.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:048ad577748b9fa4a99a0548c64f2cb8d672d5bf2e643a739ac8faff1164238c"}, - {file = "pillow-10.3.0-cp311-cp311-win32.whl", hash = "sha256:7161ec49ef0800947dc5570f86568a7bb36fa97dd09e9827dc02b718c5643f09"}, - {file = "pillow-10.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:8eb0908e954d093b02a543dc963984d6e99ad2b5e36503d8a0aaf040505f747d"}, - {file = "pillow-10.3.0-cp311-cp311-win_arm64.whl", hash = "sha256:4e6f7d1c414191c1199f8996d3f2282b9ebea0945693fb67392c75a3a320941f"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_10_10_x86_64.whl", hash = "sha256:e46f38133e5a060d46bd630faa4d9fa0202377495df1f068a8299fd78c84de84"}, - {file = "pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:50b8eae8f7334ec826d6eeffaeeb00e36b5e24aa0b9df322c247539714c6df19"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9d3bea1c75f8c53ee4d505c3e67d8c158ad4df0d83170605b50b64025917f338"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:19aeb96d43902f0a783946a0a87dbdad5c84c936025b8419da0a0cd7724356b1"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:74d28c17412d9caa1066f7a31df8403ec23d5268ba46cd0ad2c50fb82ae40462"}, - {file = "pillow-10.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:ff61bfd9253c3915e6d41c651d5f962da23eda633cf02262990094a18a55371a"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d886f5d353333b4771d21267c7ecc75b710f1a73d72d03ca06df49b09015a9ef"}, - {file = "pillow-10.3.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b5ec25d8b17217d635f8935dbc1b9aa5907962fae29dff220f2659487891cd3"}, - {file = "pillow-10.3.0-cp312-cp312-win32.whl", hash = "sha256:51243f1ed5161b9945011a7360e997729776f6e5d7005ba0c6879267d4c5139d"}, - {file = "pillow-10.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:412444afb8c4c7a6cc11a47dade32982439925537e483be7c0ae0cf96c4f6a0b"}, - {file = "pillow-10.3.0-cp312-cp312-win_arm64.whl", hash = "sha256:798232c92e7665fe82ac085f9d8e8ca98826f8e27859d9a96b41d519ecd2e49a"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_10_10_x86_64.whl", hash = "sha256:4eaa22f0d22b1a7e93ff0a596d57fdede2e550aecffb5a1ef1106aaece48e96b"}, - {file = "pillow-10.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cd5e14fbf22a87321b24c88669aad3a51ec052eb145315b3da3b7e3cc105b9a2"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1530e8f3a4b965eb6a7785cf17a426c779333eb62c9a7d1bbcf3ffd5bf77a4aa"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d512aafa1d32efa014fa041d38868fda85028e3f930a96f85d49c7d8ddc0383"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:339894035d0ede518b16073bdc2feef4c991ee991a29774b33e515f1d308e08d"}, - {file = "pillow-10.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:aa7e402ce11f0885305bfb6afb3434b3cd8f53b563ac065452d9d5654c7b86fd"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:0ea2a783a2bdf2a561808fe4a7a12e9aa3799b701ba305de596bc48b8bdfce9d"}, - {file = "pillow-10.3.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:c78e1b00a87ce43bb37642c0812315b411e856a905d58d597750eb79802aaaa3"}, - {file = "pillow-10.3.0-cp38-cp38-win32.whl", hash = "sha256:72d622d262e463dfb7595202d229f5f3ab4b852289a1cd09650362db23b9eb0b"}, - {file = "pillow-10.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:2034f6759a722da3a3dbd91a81148cf884e91d1b747992ca288ab88c1de15999"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_10_10_x86_64.whl", hash = "sha256:2ed854e716a89b1afcedea551cd85f2eb2a807613752ab997b9974aaa0d56936"}, - {file = "pillow-10.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:dc1a390a82755a8c26c9964d457d4c9cbec5405896cba94cf51f36ea0d855002"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4203efca580f0dd6f882ca211f923168548f7ba334c189e9eab1178ab840bf60"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3102045a10945173d38336f6e71a8dc71bcaeed55c3123ad4af82c52807b9375"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:6fb1b30043271ec92dc65f6d9f0b7a830c210b8a96423074b15c7bc999975f57"}, - {file = "pillow-10.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:1dfc94946bc60ea375cc39cff0b8da6c7e5f8fcdc1d946beb8da5c216156ddd8"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b09b86b27a064c9624d0a6c54da01c1beaf5b6cadfa609cf63789b1d08a797b9"}, - {file = "pillow-10.3.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d3b2348a78bc939b4fed6552abfd2e7988e0f81443ef3911a4b8498ca084f6eb"}, - {file = "pillow-10.3.0-cp39-cp39-win32.whl", hash = "sha256:45ebc7b45406febf07fef35d856f0293a92e7417ae7933207e90bf9090b70572"}, - {file = "pillow-10.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:0ba26351b137ca4e0db0342d5d00d2e355eb29372c05afd544ebf47c0956ffeb"}, - {file = "pillow-10.3.0-cp39-cp39-win_arm64.whl", hash = "sha256:50fd3f6b26e3441ae07b7c979309638b72abc1a25da31a81a7fbd9495713ef4f"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3"}, - {file = "pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_10_10_x86_64.whl", hash = "sha256:aff76a55a8aa8364d25400a210a65ff59d0168e0b4285ba6bf2bd83cf675ba32"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b7bc2176354defba3edc2b9a777744462da2f8e921fbaf61e52acb95bafa9828"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:793b4e24db2e8742ca6423d3fde8396db336698c55cd34b660663ee9e45ed37f"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d93480005693d247f8346bc8ee28c72a2191bdf1f6b5db469c096c0c867ac015"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:c83341b89884e2b2e55886e8fbbf37c3fa5efd6c8907124aeb72f285ae5696e5"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:1a1d1915db1a4fdb2754b9de292642a39a7fb28f1736699527bb649484fb966a"}, - {file = "pillow-10.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a0eaa93d054751ee9964afa21c06247779b90440ca41d184aeb5d410f20ff591"}, - {file = "pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d"}, -] - -[package.extras] -docs = ["furo", "olefile", "sphinx (>=2.4)", "sphinx-copybutton", "sphinx-inline-tabs", "sphinx-removed-in", "sphinxext-opengraph"] -fpx = ["olefile"] -mic = ["olefile"] -tests = ["check-manifest", "coverage", "defusedxml", "markdown2", "olefile", "packaging", "pyroma", "pytest", "pytest-cov", "pytest-timeout"] -typing = ["typing-extensions ; python_version < \"3.10\""] -xmp = ["defusedxml"] - -[[package]] -name = "platformdirs" -version = "4.5.0" -description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "platformdirs-4.5.0-py3-none-any.whl", hash = "sha256:e578a81bb873cbb89a41fcc904c7ef523cc18284b7e3b3ccf06aca1403b7ebd3"}, - {file = "platformdirs-4.5.0.tar.gz", hash = "sha256:70ddccdd7c99fc5942e9fc25636a8b34d04c24b335100223152c2803e4063312"}, -] - -[package.extras] -docs = ["furo (>=2025.9.25)", "proselint (>=0.14)", "sphinx (>=8.2.3)", "sphinx-autodoc-typehints (>=3.2)"] -test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=8.4.2)", "pytest-cov (>=7)", "pytest-mock (>=3.15.1)"] -type = ["mypy (>=1.18.2)"] - -[[package]] -name = "pluggy" -version = "1.6.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746"}, - {file = "pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["coverage", "pytest", "pytest-benchmark"] - -[[package]] -name = "prompt-toolkit" -version = "3.0.52" -description = "Library for building powerful interactive command lines in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955"}, - {file = "prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855"}, -] - -[package.dependencies] -wcwidth = "*" - -[[package]] -name = "psycopg2-binary" -version = "2.9.11" -description = "psycopg2 - Python-PostgreSQL Database Adapter" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6fe6b47d0b42ce1c9f1fa3e35bb365011ca22e39db37074458f27921dca40f2"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c0e4262e089516603a09474ee13eabf09cb65c332277e39af68f6233911087"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e"}, - {file = "psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:0e8480afd62362d0a6a27dd09e4ca2def6fa50ed3a4e7c09165266106b2ffa10"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:763c93ef1df3da6d1a90f86ea7f3f806dc06b21c198fa87c3c25504abec9404a"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2e164359396576a3cc701ba8af4751ae68a07235d7a380c631184a611220d9a4"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:d57c9c387660b8893093459738b6abddbb30a7eab058b77b0d0d1c7d521ddfd7"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:2c226ef95eb2250974bf6fa7a842082b31f68385c4f3268370e3f3870e7859ee"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a311f1edc9967723d3511ea7d2708e2c3592e3405677bf53d5c7246753591fbb"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ebb415404821b6d1c47353ebe9c8645967a5235e6d88f914147e7fd411419e6f"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f07c9c4a5093258a03b28fab9b4f151aa376989e7f35f855088234e656ee6a94"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:00ce1830d971f43b667abe4a56e42c1e2d594b32da4802e44a73bacacb25535f"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:cffe9d7697ae7456649617e8bb8d7a45afb71cd13f7ab22af3e5c61f04840908"}, - {file = "psycopg2_binary-2.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:304fd7b7f97eef30e91b8f7e720b3db75fee010b520e434ea35ed1ff22501d03"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:be9b840ac0525a283a96b556616f5b4820e0526addb8dcf6525a0fa162730be4"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f090b7ddd13ca842ebfe301cd587a76a4cf0913b1e429eb92c1be5dbeb1a19bc"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ab8905b5dcb05bf3fb22e0cf90e10f469563486ffb6a96569e51f897c750a76a"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:bf940cd7e7fec19181fdbc29d76911741153d51cab52e5c21165f3262125685e"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fa0f693d3c68ae925966f0b14b8edda71696608039f4ed61b1fe9ffa468d16db"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a1cf393f1cdaf6a9b57c0a719a1068ba1069f022a59b8b1fe44b006745b59757"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ef7a6beb4beaa62f88592ccc65df20328029d721db309cb3250b0aae0fa146c3"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:31b32c457a6025e74d233957cc9736742ac5a6cb196c6b68499f6bb51390bd6a"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:edcb3aeb11cb4bf13a2af3c53a15b3d612edeb6409047ea0b5d6a21a9d744b34"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:62b6d93d7c0b61a1dd6197d208ab613eb7dcfdcca0a49c42ceb082257991de9d"}, - {file = "psycopg2_binary-2.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:b33fabeb1fde21180479b2d4667e994de7bbf0eec22832ba5d9b5e4cf65b6c6d"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:b8fb3db325435d34235b044b199e56cdf9ff41223a4b9752e8576465170bb38c"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:366df99e710a2acd90efed3764bb1e28df6c675d33a7fb40df9b7281694432ee"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8c55b385daa2f92cb64b12ec4536c66954ac53654c7f15a203578da4e78105c0"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:c0377174bf1dd416993d16edc15357f6eb17ac998244cca19bc67cdc0e2e5766"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5c6ff3335ce08c75afaed19e08699e8aacf95d4a260b495a4a8545244fe2ceb3"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:84011ba3109e06ac412f95399b704d3d6950e386b7994475b231cf61eec2fc1f"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ba34475ceb08cccbdd98f6b46916917ae6eeb92b5ae111df10b544c3a4621dc4"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:b31e90fdd0f968c2de3b26ab014314fe814225b6c324f770952f7d38abf17e3c"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:d526864e0f67f74937a8fce859bd56c979f5e2ec57ca7c627f5f1071ef7fee60"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:04195548662fa544626c8ea0f06561eb6203f1984ba5b4562764fbeb4c3d14b1"}, - {file = "psycopg2_binary-2.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:efff12b432179443f54e230fdf60de1f6cc726b6c832db8701227d089310e8aa"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:92e3b669236327083a2e33ccfa0d320dd01b9803b3e14dd986a4fc54aa00f4e1"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:e0deeb03da539fa3577fcb0b3f2554a97f7e5477c246098dbb18091a4a01c16f"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9b52a3f9bb540a3e4ec0f6ba6d31339727b2950c9772850d6545b7eae0b9d7c5"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:db4fd476874ccfdbb630a54426964959e58da4c61c9feba73e6094d51303d7d8"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47f212c1d3be608a12937cc131bd85502954398aaa1320cb4c14421a0ffccf4c"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:e35b7abae2b0adab776add56111df1735ccc71406e56203515e228a8dc07089f"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:fcf21be3ce5f5659daefd2b3b3b6e4727b028221ddc94e6c1523425579664747"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:9bd81e64e8de111237737b29d68039b9c813bdf520156af36d26819c9a979e5f"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:32770a4d666fbdafab017086655bcddab791d7cb260a16679cc5a7338b64343b"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c3cb3a676873d7506825221045bd70e0427c905b9c8ee8d6acd70cfcbd6e576d"}, - {file = "psycopg2_binary-2.9.11-cp314-cp314-win_amd64.whl", hash = "sha256:4012c9c954dfaccd28f94e84ab9f94e12df76b4afb22331b1f0d3154893a6316"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:20e7fb94e20b03dcc783f76c0865f9da39559dcc0c28dd1a3fce0d01902a6b9c"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4bdab48575b6f870f465b397c38f1b415520e9879fdf10a53ee4f49dcbdf8a21"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:9d3a9edcfbe77a3ed4bc72836d466dfce4174beb79eda79ea155cc77237ed9e8"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:44fc5c2b8fa871ce7f0023f619f1349a0aa03a0857f2c96fbc01c657dcbbdb49"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9c55460033867b4622cda1b6872edf445809535144152e5d14941ef591980edf"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:2d11098a83cca92deaeaed3d58cfd150d49b3b06ee0d0852be466bf87596899e"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:691c807d94aecfbc76a14e1408847d59ff5b5906a04a23e12a89007672b9e819"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b81627b691f29c4c30a8f322546ad039c40c328373b11dff7490a3e1b517855"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:b637d6d941209e8d96a072d7977238eea128046effbf37d1d8b2c0764750017d"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:41360b01c140c2a03d346cec3280cf8a71aa07d94f3b1509fa0161c366af66b4"}, - {file = "psycopg2_binary-2.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:875039274f8a2361e5207857899706da840768e2a775bf8c65e82f60b197df02"}, -] - -[[package]] -name = "ptyprocess" -version = "0.7.0" -description = "Run a subprocess in a pseudo terminal" -optional = false -python-versions = "*" -groups = ["main"] -markers = "sys_platform != \"win32\"" -files = [ - {file = "ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35"}, - {file = "ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220"}, -] - -[[package]] -name = "pure-eval" -version = "0.2.3" -description = "Safely evaluate AST nodes without side effects" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0"}, - {file = "pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42"}, -] - -[package.extras] -tests = ["pytest"] - -[[package]] -name = "pycodestyle" -version = "2.6.0" -description = "Python style guide checker" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367"}, - {file = "pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e"}, -] - -[[package]] -name = "pycparser" -version = "2.23" -description = "C parser in Python" -optional = false -python-versions = ">=3.8" -groups = ["main"] -markers = "platform_python_implementation != \"PyPy\" and implementation_name != \"PyPy\"" -files = [ - {file = "pycparser-2.23-py3-none-any.whl", hash = "sha256:e5c6e8d3fbad53479cab09ac03729e0a9faf2bee3db8208a550daf5af81a5934"}, - {file = "pycparser-2.23.tar.gz", hash = "sha256:78816d4f24add8f10a06d6f05b4d424ad9e96cfebf68a4ddc99c65c0720d00c2"}, -] - -[[package]] -name = "pyflakes" -version = "2.2.0" -description = "passive checker of Python programs" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92"}, - {file = "pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8"}, -] - -[[package]] -name = "pygments" -version = "2.2.0" -description = "Pygments is a syntax highlighting package written in Python." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "Pygments-2.2.0-py2.py3-none-any.whl", hash = "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d"}, - {file = "Pygments-2.2.0.tar.gz", hash = "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc"}, -] - -[[package]] -name = "pyjwt" -version = "2.10.1" -description = "JSON Web Token implementation in Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "PyJWT-2.10.1-py3-none-any.whl", hash = "sha256:dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb"}, - {file = "pyjwt-2.10.1.tar.gz", hash = "sha256:3cc5772eb20009233caf06e9d8a0577824723b44e6648ee0a2aedb6cf9381953"}, -] - -[package.extras] -crypto = ["cryptography (>=3.4.0)"] -dev = ["coverage[toml] (==5.0.4)", "cryptography (>=3.4.0)", "pre-commit", "pytest (>=6.0.0,<7.0.0)", "sphinx", "sphinx-rtd-theme", "zope.interface"] -docs = ["sphinx", "sphinx-rtd-theme", "zope.interface"] -tests = ["coverage[toml] (==5.0.4)", "pytest (>=6.0.0,<7.0.0)"] - -[[package]] -name = "pyrabbit2" -version = "1.0.7" -description = "A Pythonic interface to the RabbitMQ Management HTTP API" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pyrabbit2-1.0.7-py3-none-any.whl", hash = "sha256:9c5ac7751781705083f893c6aec0909b2ee0ad28e373e4fdbde6231172d64504"}, - {file = "pyrabbit2-1.0.7.tar.gz", hash = "sha256:d27160cb35c096f0072df57307233d01b117a451236e136604a8e51be6f106c0"}, -] - -[package.dependencies] -requests = "*" - -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-django" -version = "4.11.1" -description = "A Django plugin for pytest." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pytest_django-4.11.1-py3-none-any.whl", hash = "sha256:1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10"}, - {file = "pytest_django-4.11.1.tar.gz", hash = "sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -docs = ["sphinx", "sphinx_rtd_theme"] -testing = ["Django", "django-configurations (>=2.0)"] - -[[package]] -name = "python-dateutil" -version = "2.7.3" -description = "Extensions to the standard Python datetime module" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] -files = [ - {file = "python-dateutil-2.7.3.tar.gz", hash = "sha256:e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8"}, - {file = "python_dateutil-2.7.3-py2.py3-none-any.whl", hash = "sha256:1adb80e7a782c12e52ef9a8182bebeb73f1d7e24e374397af06fb4956c8dc5c0"}, -] - -[package.dependencies] -six = ">=1.5" - -[[package]] -name = "python3-openid" -version = "3.2.0" -description = "OpenID support for modern servers and consumers." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf"}, - {file = "python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b"}, -] - -[package.dependencies] -defusedxml = "*" - -[package.extras] -mysql = ["mysql-connector-python"] -postgresql = ["psycopg2"] - -[[package]] -name = "pytokens" -version = "0.2.0" -description = "A Fast, spec compliant Python 3.13+ tokenizer that runs on older Pythons." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "pytokens-0.2.0-py3-none-any.whl", hash = "sha256:74d4b318c67f4295c13782ddd9abcb7e297ec5630ad060eb90abf7ebbefe59f8"}, - {file = "pytokens-0.2.0.tar.gz", hash = "sha256:532d6421364e5869ea57a9523bf385f02586d4662acbcc0342afd69511b4dd43"}, -] - -[package.extras] -dev = ["black", "build", "mypy", "pytest", "pytest-cov", "setuptools", "tox", "twine", "wheel"] - -[[package]] -name = "pytz" -version = "2025.2" -description = "World timezone definitions, modern and historical" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00"}, - {file = "pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3"}, -] - -[[package]] -name = "pyxdg" -version = "0.28" -description = "PyXDG contains implementations of freedesktop.org standards in python." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab"}, - {file = "pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4"}, -] - -[[package]] -name = "pyyaml" -version = "5.3.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "PyYAML-5.3.1-cp27-cp27m-win32.whl", hash = "sha256:74809a57b329d6cc0fdccee6318f44b9b8649961fa73144a98735b0aaf029f1f"}, - {file = "PyYAML-5.3.1-cp27-cp27m-win_amd64.whl", hash = "sha256:240097ff019d7c70a4922b6869d8a86407758333f02203e0fc6ff79c5dcede76"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win32.whl", hash = "sha256:4f4b913ca1a7319b33cfb1369e91e50354d6f07a135f3b901aca02aa95940bd2"}, - {file = "PyYAML-5.3.1-cp35-cp35m-win_amd64.whl", hash = "sha256:cc8955cfbfc7a115fa81d85284ee61147059a753344bc51098f3ccd69b0d7e0c"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win32.whl", hash = "sha256:7739fc0fa8205b3ee8808aea45e968bc90082c10aef6ea95e855e10abf4a37b2"}, - {file = "PyYAML-5.3.1-cp36-cp36m-win_amd64.whl", hash = "sha256:69f00dca373f240f842b2931fb2c7e14ddbacd1397d57157a9b005a6a9942648"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win32.whl", hash = "sha256:d13155f591e6fcc1ec3b30685d50bf0711574e2c0dfffd7644babf8b5102ca1a"}, - {file = "PyYAML-5.3.1-cp37-cp37m-win_amd64.whl", hash = "sha256:73f099454b799e05e5ab51423c7bcf361c58d3206fa7b0d555426b1f4d9a3eaf"}, - {file = "PyYAML-5.3.1-cp38-cp38-win32.whl", hash = "sha256:06a0d7ba600ce0b2d2fe2e78453a470b5a6e000a985dd4a4e54e436cc36b0e97"}, - {file = "PyYAML-5.3.1-cp38-cp38-win_amd64.whl", hash = "sha256:95f71d2af0ff4227885f7a6605c37fd53d3a106fcab511b8860ecca9fcf400ee"}, - {file = "PyYAML-5.3.1-cp39-cp39-win32.whl", hash = "sha256:ad9c67312c84def58f3c04504727ca879cb0013b2517c85a9a253f0cb6380c0a"}, - {file = "PyYAML-5.3.1-cp39-cp39-win_amd64.whl", hash = "sha256:6034f55dab5fea9e53f436aa68fa3ace2634918e8b5994d82f3621c04ff5ed2e"}, - {file = "PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d"}, -] - -[[package]] -name = "redis" -version = "6.4.0" -description = "Python client for Redis database and key-value store" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "redis-6.4.0-py3-none-any.whl", hash = "sha256:f0544fa9604264e9464cdf4814e7d4830f74b165d52f2a330a760a88dd248b7f"}, - {file = "redis-6.4.0.tar.gz", hash = "sha256:b01bc7282b8444e28ec36b261df5375183bb47a07eb9c603f284e89cbc5ef010"}, -] - -[package.dependencies] -async-timeout = {version = ">=4.0.3", markers = "python_full_version < \"3.11.3\""} - -[package.extras] -hiredis = ["hiredis (>=3.2.0)"] -jwt = ["pyjwt (>=2.9.0)"] -ocsp = ["cryptography (>=36.0.1)", "pyopenssl (>=20.0.1)", "requests (>=2.31.0)"] - -[[package]] -name = "referencing" -version = "0.37.0" -description = "JSON Referencing + Python" -optional = false -python-versions = ">=3.10" -groups = ["main"] -files = [ - {file = "referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231"}, - {file = "referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8"}, -] - -[package.dependencies] -attrs = ">=22.2.0" -rpds-py = ">=0.7.0" -typing-extensions = {version = ">=4.4.0", markers = "python_version < \"3.13\""} - -[[package]] -name = "requests" -version = "2.32.2" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c"}, - {file = "requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "requests-oauthlib" -version = "2.0.0" -description = "OAuthlib authentication support for Requests." -optional = false -python-versions = ">=3.4" -groups = ["main"] -files = [ - {file = "requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9"}, - {file = "requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36"}, -] - -[package.dependencies] -oauthlib = ">=3.0.0" -requests = ">=2.0.0" - -[package.extras] -rsa = ["oauthlib[signedtoken] (>=3.0.0)"] - -[[package]] -name = "rfc3987" -version = "1.3.8" -description = "Parsing and validation of URIs (RFC 3986) and IRIs (RFC 3987)" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53"}, - {file = "rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733"}, -] - -[[package]] -name = "rpds-py" -version = "0.27.1" -description = "Python bindings to Rust's persistent data structures (rpds)" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "rpds_py-0.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:68afeec26d42ab3b47e541b272166a0b4400313946871cba3ed3a4fc0cab1cef"}, - {file = "rpds_py-0.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74e5b2f7bb6fa38b1b10546d27acbacf2a022a8b5543efb06cfebc72a59c85be"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9024de74731df54546fab0bfbcdb49fae19159ecaecfc8f37c18d2c7e2c0bd61"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31d3ebadefcd73b73928ed0b2fd696f7fefda8629229f81929ac9c1854d0cffb"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b2e7f8f169d775dd9092a1743768d771f1d1300453ddfe6325ae3ab5332b4657"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d905d16f77eb6ab2e324e09bfa277b4c8e5e6b8a78a3e7ff8f3cdf773b4c013"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:50c946f048209e6362e22576baea09193809f87687a95a8db24e5fbdb307b93a"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:3deab27804d65cd8289eb814c2c0e807c4b9d9916c9225e363cb0cf875eb67c1"}, - {file = "rpds_py-0.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8b61097f7488de4be8244c89915da8ed212832ccf1e7c7753a25a394bf9b1f10"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8a3f29aba6e2d7d90528d3c792555a93497fe6538aa65eb675b44505be747808"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:dd6cd0485b7d347304067153a6dc1d73f7d4fd995a396ef32a24d24b8ac63ac8"}, - {file = "rpds_py-0.27.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:6f4461bf931108c9fa226ffb0e257c1b18dc2d44cd72b125bec50ee0ab1248a9"}, - {file = "rpds_py-0.27.1-cp310-cp310-win32.whl", hash = "sha256:ee5422d7fb21f6a00c1901bf6559c49fee13a5159d0288320737bbf6585bd3e4"}, - {file = "rpds_py-0.27.1-cp310-cp310-win_amd64.whl", hash = "sha256:3e039aabf6d5f83c745d5f9a0a381d031e9ed871967c0a5c38d201aca41f3ba1"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:be898f271f851f68b318872ce6ebebbc62f303b654e43bf72683dbdc25b7c881"}, - {file = "rpds_py-0.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:62ac3d4e3e07b58ee0ddecd71d6ce3b1637de2d373501412df395a0ec5f9beb5"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4708c5c0ceb2d034f9991623631d3d23cb16e65c83736ea020cdbe28d57c0a0e"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:abfa1171a9952d2e0002aba2ad3780820b00cc3d9c98c6630f2e93271501f66c"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b507d19f817ebaca79574b16eb2ae412e5c0835542c93fe9983f1e432aca195"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168b025f8fd8d8d10957405f3fdcef3dc20f5982d398f90851f4abc58c566c52"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cb56c6210ef77caa58e16e8c17d35c63fe3f5b60fd9ba9d424470c3400bcf9ed"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:d252f2d8ca0195faa707f8eb9368955760880b2b42a8ee16d382bf5dd807f89a"}, - {file = "rpds_py-0.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6e5e54da1e74b91dbc7996b56640f79b195d5925c2b78efaa8c5d53e1d88edde"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:ffce0481cc6e95e5b3f0a47ee17ffbd234399e6d532f394c8dce320c3b089c21"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a205fdfe55c90c2cd8e540ca9ceba65cbe6629b443bc05db1f590a3db8189ff9"}, - {file = "rpds_py-0.27.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:689fb5200a749db0415b092972e8eba85847c23885c8543a8b0f5c009b1a5948"}, - {file = "rpds_py-0.27.1-cp311-cp311-win32.whl", hash = "sha256:3182af66048c00a075010bc7f4860f33913528a4b6fc09094a6e7598e462fe39"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_amd64.whl", hash = "sha256:b4938466c6b257b2f5c4ff98acd8128ec36b5059e5c8f8372d79316b1c36bb15"}, - {file = "rpds_py-0.27.1-cp311-cp311-win_arm64.whl", hash = "sha256:2f57af9b4d0793e53266ee4325535a31ba48e2f875da81a9177c9926dfa60746"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:ae2775c1973e3c30316892737b91f9283f9908e3cc7625b9331271eaaed7dc90"}, - {file = "rpds_py-0.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2643400120f55c8a96f7c9d858f7be0c88d383cd4653ae2cf0d0c88f668073e5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:16323f674c089b0360674a4abd28d5042947d54ba620f72514d69be4ff64845e"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9a1f4814b65eacac94a00fc9a526e3fdafd78e439469644032032d0d63de4881"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7ba32c16b064267b22f1850a34051121d423b6f7338a12b9459550eb2096e7ec"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5c20f33fd10485b80f65e800bbe5f6785af510b9f4056c5a3c612ebc83ba6cb"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:466bfe65bd932da36ff279ddd92de56b042f2266d752719beb97b08526268ec5"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:41e532bbdcb57c92ba3be62c42e9f096431b4cf478da9bc3bc6ce5c38ab7ba7a"}, - {file = "rpds_py-0.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f149826d742b406579466283769a8ea448eed82a789af0ed17b0cd5770433444"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:80c60cfb5310677bd67cb1e85a1e8eb52e12529545441b43e6f14d90b878775a"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7ee6521b9baf06085f62ba9c7a3e5becffbc32480d2f1b351559c001c38ce4c1"}, - {file = "rpds_py-0.27.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a512c8263249a9d68cac08b05dd59d2b3f2061d99b322813cbcc14c3c7421998"}, - {file = "rpds_py-0.27.1-cp312-cp312-win32.whl", hash = "sha256:819064fa048ba01b6dadc5116f3ac48610435ac9a0058bbde98e569f9e785c39"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_amd64.whl", hash = "sha256:d9199717881f13c32c4046a15f024971a3b78ad4ea029e8da6b86e5aa9cf4594"}, - {file = "rpds_py-0.27.1-cp312-cp312-win_arm64.whl", hash = "sha256:33aa65b97826a0e885ef6e278fbd934e98cdcfed80b63946025f01e2f5b29502"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e4b9fcfbc021633863a37e92571d6f91851fa656f0180246e84cbd8b3f6b329b"}, - {file = "rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55266dafa22e672f5a4f65019015f90336ed31c6383bd53f5e7826d21a0e0b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78827d7ac08627ea2c8e02c9e5b41180ea5ea1f747e9db0915e3adf36b62dcf"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae92443798a40a92dc5f0b01d8a7c93adde0c4dc965310a29ae7c64d72b9fad2"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c46c9dd2403b66a2a3b9720ec4b74d4ab49d4fabf9f03dfdce2d42af913fe8d0"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2efe4eb1d01b7f5f1939f4ef30ecea6c6b3521eec451fb93191bf84b2a522418"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:15d3b4d83582d10c601f481eca29c3f138d44c92187d197aff663a269197c02d"}, - {file = "rpds_py-0.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4ed2e16abbc982a169d30d1a420274a709949e2cbdef119fe2ec9d870b42f274"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a75f305c9b013289121ec0f1181931975df78738cdf650093e6b86d74aa7d8dd"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:67ce7620704745881a3d4b0ada80ab4d99df390838839921f99e63c474f82cf2"}, - {file = "rpds_py-0.27.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9d992ac10eb86d9b6f369647b6a3f412fc0075cfd5d799530e84d335e440a002"}, - {file = "rpds_py-0.27.1-cp313-cp313-win32.whl", hash = "sha256:4f75e4bd8ab8db624e02c8e2fc4063021b58becdbe6df793a8111d9343aec1e3"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_amd64.whl", hash = "sha256:f9025faafc62ed0b75a53e541895ca272815bec18abe2249ff6501c8f2e12b83"}, - {file = "rpds_py-0.27.1-cp313-cp313-win_arm64.whl", hash = "sha256:ed10dc32829e7d222b7d3b93136d25a406ba9788f6a7ebf6809092da1f4d279d"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:92022bbbad0d4426e616815b16bc4127f83c9a74940e1ccf3cfe0b387aba0228"}, - {file = "rpds_py-0.27.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:47162fdab9407ec3f160805ac3e154df042e577dd53341745fc7fb3f625e6d92"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb89bec23fddc489e5d78b550a7b773557c9ab58b7946154a10a6f7a214a48b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e48af21883ded2b3e9eb48cb7880ad8598b31ab752ff3be6457001d78f416723"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6f5b7bd8e219ed50299e58551a410b64daafb5017d54bbe822e003856f06a802"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08f1e20bccf73b08d12d804d6e1c22ca5530e71659e6673bce31a6bb71c1e73f"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dc5dceeaefcc96dc192e3a80bbe1d6c410c469e97bdd47494a7d930987f18b2"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_31_riscv64.whl", hash = "sha256:d76f9cc8665acdc0c9177043746775aa7babbf479b5520b78ae4002d889f5c21"}, - {file = "rpds_py-0.27.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:134fae0e36022edad8290a6661edf40c023562964efea0cc0ec7f5d392d2aaef"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:eb11a4f1b2b63337cfd3b4d110af778a59aae51c81d195768e353d8b52f88081"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:13e608ac9f50a0ed4faec0e90ece76ae33b34c0e8656e3dceb9a7db994c692cd"}, - {file = "rpds_py-0.27.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:dd2135527aa40f061350c3f8f89da2644de26cd73e4de458e79606384f4f68e7"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win32.whl", hash = "sha256:3020724ade63fe320a972e2ffd93b5623227e684315adce194941167fee02688"}, - {file = "rpds_py-0.27.1-cp313-cp313t-win_amd64.whl", hash = "sha256:8ee50c3e41739886606388ba3ab3ee2aae9f35fb23f833091833255a31740797"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:acb9aafccaae278f449d9c713b64a9e68662e7799dbd5859e2c6b3c67b56d334"}, - {file = "rpds_py-0.27.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:b7fb801aa7f845ddf601c49630deeeccde7ce10065561d92729bfe81bd21fb33"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fe0dd05afb46597b9a2e11c351e5e4283c741237e7f617ffb3252780cca9336a"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b6dfb0e058adb12d8b1d1b25f686e94ffa65d9995a5157afe99743bf7369d62b"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ed090ccd235f6fa8bb5861684567f0a83e04f52dfc2e5c05f2e4b1309fcf85e7"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf876e79763eecf3e7356f157540d6a093cef395b65514f17a356f62af6cc136"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:12ed005216a51b1d6e2b02a7bd31885fe317e45897de81d86dcce7d74618ffff"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:ee4308f409a40e50593c7e3bb8cbe0b4d4c66d1674a316324f0c2f5383b486f9"}, - {file = "rpds_py-0.27.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0b08d152555acf1f455154d498ca855618c1378ec810646fcd7c76416ac6dc60"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:dce51c828941973a5684d458214d3a36fcd28da3e1875d659388f4f9f12cc33e"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:c1476d6f29eb81aa4151c9a31219b03f1f798dc43d8af1250a870735516a1212"}, - {file = "rpds_py-0.27.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:3ce0cac322b0d69b63c9cdb895ee1b65805ec9ffad37639f291dd79467bee675"}, - {file = "rpds_py-0.27.1-cp314-cp314-win32.whl", hash = "sha256:dfbfac137d2a3d0725758cd141f878bf4329ba25e34979797c89474a89a8a3a3"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_amd64.whl", hash = "sha256:a6e57b0abfe7cc513450fcf529eb486b6e4d3f8aee83e92eb5f1ef848218d456"}, - {file = "rpds_py-0.27.1-cp314-cp314-win_arm64.whl", hash = "sha256:faf8d146f3d476abfee026c4ae3bdd9ca14236ae4e4c310cbd1cf75ba33d24a3"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:ba81d2b56b6d4911ce735aad0a1d4495e808b8ee4dc58715998741a26874e7c2"}, - {file = "rpds_py-0.27.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:84f7d509870098de0e864cad0102711c1e24e9b1a50ee713b65928adb22269e4"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a9e960fc78fecd1100539f14132425e1d5fe44ecb9239f8f27f079962021523e"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:62f85b665cedab1a503747617393573995dac4600ff51869d69ad2f39eb5e817"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fed467af29776f6556250c9ed85ea5a4dd121ab56a5f8b206e3e7a4c551e48ec"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2729615f9d430af0ae6b36cf042cb55c0936408d543fb691e1a9e36648fd35a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b207d881a9aef7ba753d69c123a35d96ca7cb808056998f6b9e8747321f03b8"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:639fd5efec029f99b79ae47e5d7e00ad8a773da899b6309f6786ecaf22948c48"}, - {file = "rpds_py-0.27.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fecc80cb2a90e28af8a9b366edacf33d7a91cbfe4c2c4544ea1246e949cfebeb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:42a89282d711711d0a62d6f57d81aa43a1368686c45bc1c46b7f079d55692734"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:cf9931f14223de59551ab9d38ed18d92f14f055a5f78c1d8ad6493f735021bbb"}, - {file = "rpds_py-0.27.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:f39f58a27cc6e59f432b568ed8429c7e1641324fbe38131de852cd77b2d534b0"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win32.whl", hash = "sha256:d5fa0ee122dc09e23607a28e6d7b150da16c662e66409bbe85230e4c85bb528a"}, - {file = "rpds_py-0.27.1-cp314-cp314t-win_amd64.whl", hash = "sha256:6567d2bb951e21232c2f660c24cf3470bb96de56cdcb3f071a83feeaff8a2772"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:c918c65ec2e42c2a78d19f18c553d77319119bf43aa9e2edf7fb78d624355527"}, - {file = "rpds_py-0.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1fea2b1a922c47c51fd07d656324531adc787e415c8b116530a1d29c0516c62d"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bbf94c58e8e0cd6b6f38d8de67acae41b3a515c26169366ab58bdca4a6883bb8"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c2a8fed130ce946d5c585eddc7c8eeef0051f58ac80a8ee43bd17835c144c2cc"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:037a2361db72ee98d829bc2c5b7cc55598ae0a5e0ec1823a56ea99374cfd73c1"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5281ed1cc1d49882f9997981c88df1a22e140ab41df19071222f7e5fc4e72125"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fd50659a069c15eef8aa3d64bbef0d69fd27bb4a50c9ab4f17f83a16cbf8905"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_31_riscv64.whl", hash = "sha256:c4b676c4ae3921649a15d28ed10025548e9b561ded473aa413af749503c6737e"}, - {file = "rpds_py-0.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:079bc583a26db831a985c5257797b2b5d3affb0386e7ff886256762f82113b5e"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:4e44099bd522cba71a2c6b97f68e19f40e7d85399de899d66cdb67b32d7cb786"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e202e6d4188e53c6661af813b46c37ca2c45e497fc558bacc1a7630ec2695aec"}, - {file = "rpds_py-0.27.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f41f814b8eaa48768d1bb551591f6ba45f87ac76899453e8ccd41dba1289b04b"}, - {file = "rpds_py-0.27.1-cp39-cp39-win32.whl", hash = "sha256:9e71f5a087ead99563c11fdaceee83ee982fd39cf67601f4fd66cb386336ee52"}, - {file = "rpds_py-0.27.1-cp39-cp39-win_amd64.whl", hash = "sha256:71108900c9c3c8590697244b9519017a400d9ba26a36c48381b3f64743a44aab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:7ba22cb9693df986033b91ae1d7a979bc399237d45fccf875b76f62bb9e52ddf"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:5b640501be9288c77738b5492b3fd3abc4ba95c50c2e41273c8a1459f08298d3"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb08b65b93e0c6dd70aac7f7890a9c0938d5ec71d5cb32d45cf844fb8ae47636"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7ff07d696a7a38152ebdb8212ca9e5baab56656749f3d6004b34ab726b550b8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb7c72262deae25366e3b6c0c0ba46007967aea15d1eea746e44ddba8ec58dcc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b002cab05d6339716b03a4a3a2ce26737f6231d7b523f339fa061d53368c9d8"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23f6b69d1c26c4704fec01311963a41d7de3ee0570a84ebde4d544e5a1859ffc"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:530064db9146b247351f2a0250b8f00b289accea4596a033e94be2389977de71"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7b90b0496570bd6b0321724a330d8b545827c4df2034b6ddfc5f5275f55da2ad"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:879b0e14a2da6a1102a3fc8af580fc1ead37e6d6692a781bd8c83da37429b5ab"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:0d807710df3b5faa66c731afa162ea29717ab3be17bdc15f90f2d9f183da4059"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:3adc388fc3afb6540aec081fa59e6e0d3908722771aa1e37ffe22b220a436f0b"}, - {file = "rpds_py-0.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c796c0c1cc68cb08b0284db4229f5af76168172670c74908fdbd4b7d7f515819"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_10_12_x86_64.whl", hash = "sha256:cdfe4bb2f9fe7458b7453ad3c33e726d6d1c7c0a72960bcc23800d77384e42df"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-macosx_11_0_arm64.whl", hash = "sha256:8fabb8fd848a5f75a2324e4a84501ee3a5e3c78d8603f83475441866e60b94a3"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eda8719d598f2f7f3e0f885cba8646644b55a187762bec091fa14a2b819746a9"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3c64d07e95606ec402a0a1c511fe003873fa6af630bda59bac77fac8b4318ebc"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:93a2ed40de81bcff59aabebb626562d48332f3d028ca2036f1d23cbb52750be4"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:387ce8c44ae94e0ec50532d9cb0edce17311024c9794eb196b90e1058aadeb66"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aaf94f812c95b5e60ebaf8bfb1898a7d7cb9c1af5744d4a67fa47796e0465d4e"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:4848ca84d6ded9b58e474dfdbad4b8bfb450344c0551ddc8d958bf4b36aa837c"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bde09cbcf2248b73c7c323be49b280180ff39fadcfe04e7b6f54a678d02a7cf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:94c44ee01fd21c9058f124d2d4f0c9dc7634bec93cd4b38eefc385dabe71acbf"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:df8b74962e35c9249425d90144e721eed198e6555a0e22a563d29fe4486b51f6"}, - {file = "rpds_py-0.27.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:dc23e6820e3b40847e2f4a7726462ba0cf53089512abe9ee16318c366494c17a"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:aa8933159edc50be265ed22b401125c9eebff3171f570258854dbce3ecd55475"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:a50431bf02583e21bf273c71b89d710e7a710ad5e39c725b14e685610555926f"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78af06ddc7fe5cc0e967085a9115accee665fb912c22a3f54bad70cc65b05fe6"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:70d0738ef8fee13c003b100c2fbd667ec4f133468109b3472d249231108283a3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2f6fd8a1cea5bbe599b6e78a6e5ee08db434fc8ffea51ff201c8765679698b3"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8177002868d1426305bb5de1e138161c2ec9eb2d939be38291d7c431c4712df8"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:008b839781d6c9bf3b6a8984d1d8e56f0ec46dc56df61fd669c49b58ae800400"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:a55b9132bb1ade6c734ddd2759c8dc132aa63687d259e725221f106b83a0e485"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a46fdec0083a26415f11d5f236b79fa1291c32aaa4a17684d82f7017a1f818b1"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:8a63b640a7845f2bdd232eb0d0a4a2dd939bcdd6c57e6bb134526487f3160ec5"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:7e32721e5d4922deaaf963469d795d5bde6093207c52fec719bd22e5d1bedbc4"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:2c426b99a068601b5f4623573df7a7c3d72e87533a2dd2253353a03e7502566c"}, - {file = "rpds_py-0.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4fc9b7fe29478824361ead6e14e4f5aed570d477e06088826537e202d25fe859"}, - {file = "rpds_py-0.27.1.tar.gz", hash = "sha256:26a1c73171d10b7acccbded82bf6a586ab8203601e565badc74bbbf8bc5a10f8"}, -] - -[[package]] -name = "s3transfer" -version = "0.6.0" -description = "An Amazon S3 Transfer Manager" -optional = false -python-versions = ">= 3.7" -groups = ["main"] -files = [ - {file = "s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd"}, - {file = "s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947"}, -] - -[package.dependencies] -botocore = ">=1.12.36,<2.0a0" - -[package.extras] -crt = ["botocore[crt] (>=1.20.29,<2.0a0)"] - -[[package]] -name = "setuptools" -version = "80.9.0" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "setuptools-80.9.0-py3-none-any.whl", hash = "sha256:062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922"}, - {file = "setuptools-80.9.0.tar.gz", hash = "sha256:f36b47402ecde768dbfafc46e8e4207b4360c654f1f3bb84475f0a28628fb19c"}, -] - -[package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1) ; sys_platform != \"cygwin\"", "ruff (>=0.8.0) ; sys_platform != \"cygwin\""] -core = ["importlib_metadata (>=6) ; python_version < \"3.10\"", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1) ; python_version < \"3.11\"", "wheel (>=0.43.0)"] -cover = ["pytest-cov"] -doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] -enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21) ; python_version >= \"3.9\" and sys_platform != \"cygwin\"", "jaraco.envs (>=2.2)", "jaraco.path (>=3.7.2)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf ; sys_platform != \"cygwin\"", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib_metadata (>=7.0.2) ; python_version < \"3.10\"", "jaraco.develop (>=7.21) ; sys_platform != \"cygwin\"", "mypy (==1.14.*)", "pytest-mypy"] - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" -groups = ["main"] -files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] - -[[package]] -name = "social-auth-app-django" -version = "5.4.3" -description = "Python Social Authentication, Django integration." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "social_auth_app_django-5.4.3-py3-none-any.whl", hash = "sha256:db70b972faeb10ee1ec83d0dc7dbd0558d5f5830417bba317b712b10ff58d031"}, - {file = "social_auth_app_django-5.4.3.tar.gz", hash = "sha256:d1f4286d5ca1e512c9b2f686e7ecb2a0128148f1a33d853b69dc07b58508362e"}, -] - -[package.dependencies] -Django = ">=3.2" -social-auth-core = ">=4.4,<5.0" - -[package.extras] -dev = ["coverage (>=3.6)"] - -[[package]] -name = "social-auth-core" -version = "4.7.0" -description = "Python social authentication made simple." -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "social_auth_core-4.7.0-py3-none-any.whl", hash = "sha256:9eef9b49c332d1a3265b37dcc698a7ace97c3fc59df2d874b51576d11d31f6a6"}, - {file = "social_auth_core-4.7.0.tar.gz", hash = "sha256:2bba127c7b7166a81085ddb0c248d93751b3bc3cdab8569f62d9f70c6bc4ed40"}, -] - -[package.dependencies] -cryptography = ">=1.4" -defusedxml = ">=0.5.0" -oauthlib = ">=1.0.3" -PyJWT = ">=2.7.0" -python3-openid = ">=3.0.10" -requests = ">=2.9.1" -requests-oauthlib = ">=0.6.1" - -[package.extras] -all = ["social-auth-core[azuread]", "social-auth-core[google-onetap]", "social-auth-core[saml]", "social-auth-core[shopify]"] -allpy3 = ["social-auth-core[all]"] -azuread = ["cryptography (>=2.1.1)"] -dev = ["coverage (>=3.6)", "flake8 (>=5.0.4)", "google-auth-stubs (==0.3.0)", "mypy (==1.16.1)", "pyright (==1.1.402)", "pytest (>=4.5)", "pytest-cov (>=2.7.1)", "pytest-xdist (>=3.6.1)", "responses (==0.25.7)", "types-defusedxml (==0.7.0.20250516)", "types-oauthlib (==3.3.0.20250622)", "types-python-jose (==3.5.0.20250531)", "types-requests (==2.32.4.20250611)", "types-requests-oauthlib (==2.0.0.20250516)"] -google-onetap = ["google-auth (>=2.40.0,<2.41.0)"] -ping = ["python-jose (>=3.4.0,<4.0)"] -saml = ["python3-saml (>=1.5.0)"] -shopify = ["ShopifyAPI"] - -[[package]] -name = "sqlparse" -version = "0.5.3" -description = "A non-validating SQL parser." -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "sqlparse-0.5.3-py3-none-any.whl", hash = "sha256:cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca"}, - {file = "sqlparse-0.5.3.tar.gz", hash = "sha256:09f67787f56a0b16ecdbde1bfc7f5d9c3371ca683cfeaa8e6ff60b4807ec9272"}, -] - -[package.extras] -dev = ["build", "hatch"] -doc = ["sphinx"] - -[[package]] -name = "stack-data" -version = "0.6.3" -description = "Extract data from python stack frames and tracebacks for informative displays" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695"}, - {file = "stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9"}, -] - -[package.dependencies] -asttokens = ">=2.1.0" -executing = ">=1.2.0" -pure-eval = "*" - -[package.extras] -tests = ["cython", "littleutils", "pygments", "pytest", "typeguard"] - -[[package]] -name = "strict-rfc3339" -version = "0.7" -description = "Strict, simple, lightweight RFC3339 functions" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "strict-rfc3339-0.7.tar.gz", hash = "sha256:5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277"}, -] - -[[package]] -name = "tomli" -version = "2.3.0" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "tomli-2.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:88bd15eb972f3664f5ed4b57c1634a97153b4bac4479dcb6a495f41921eb7f45"}, - {file = "tomli-2.3.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:883b1c0d6398a6a9d29b508c331fa56adbcdff647f6ace4dfca0f50e90dfd0ba"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d1381caf13ab9f300e30dd8feadb3de072aeb86f1d34a8569453ff32a7dea4bf"}, - {file = "tomli-2.3.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a0e285d2649b78c0d9027570d4da3425bdb49830a6156121360b3f8511ea3441"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:0a154a9ae14bfcf5d8917a59b51ffd5a3ac1fd149b71b47a3a104ca4edcfa845"}, - {file = "tomli-2.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:74bf8464ff93e413514fefd2be591c3b0b23231a77f901db1eb30d6f712fc42c"}, - {file = "tomli-2.3.0-cp311-cp311-win32.whl", hash = "sha256:00b5f5d95bbfc7d12f91ad8c593a1659b6387b43f054104cda404be6bda62456"}, - {file = "tomli-2.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:4dc4ce8483a5d429ab602f111a93a6ab1ed425eae3122032db7e9acf449451be"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7d86942e56ded512a594786a5ba0a5e521d02529b3826e7761a05138341a2ac"}, - {file = "tomli-2.3.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:73ee0b47d4dad1c5e996e3cd33b8a76a50167ae5f96a2607cbe8cc773506ab22"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:792262b94d5d0a466afb5bc63c7daa9d75520110971ee269152083270998316f"}, - {file = "tomli-2.3.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4f195fe57ecceac95a66a75ac24d9d5fbc98ef0962e09b2eddec5d39375aae52"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e31d432427dcbf4d86958c184b9bfd1e96b5b71f8eb17e6d02531f434fd335b8"}, - {file = "tomli-2.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:7b0882799624980785240ab732537fcfc372601015c00f7fc367c55308c186f6"}, - {file = "tomli-2.3.0-cp312-cp312-win32.whl", hash = "sha256:ff72b71b5d10d22ecb084d345fc26f42b5143c5533db5e2eaba7d2d335358876"}, - {file = "tomli-2.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:1cb4ed918939151a03f33d4242ccd0aa5f11b3547d0cf30f7c74a408a5b99878"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5192f562738228945d7b13d4930baffda67b69425a7f0da96d360b0a3888136b"}, - {file = "tomli-2.3.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:be71c93a63d738597996be9528f4abe628d1adf5e6eb11607bc8fe1a510b5dae"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c4665508bcbac83a31ff8ab08f424b665200c0e1e645d2bd9ab3d3e557b6185b"}, - {file = "tomli-2.3.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4021923f97266babc6ccab9f5068642a0095faa0a51a246a6a02fccbb3514eaf"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a4ea38c40145a357d513bffad0ed869f13c1773716cf71ccaa83b0fa0cc4e42f"}, - {file = "tomli-2.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ad805ea85eda330dbad64c7ea7a4556259665bdf9d2672f5dccc740eb9d3ca05"}, - {file = "tomli-2.3.0-cp313-cp313-win32.whl", hash = "sha256:97d5eec30149fd3294270e889b4234023f2c69747e555a27bd708828353ab606"}, - {file = "tomli-2.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:0c95ca56fbe89e065c6ead5b593ee64b84a26fca063b5d71a1122bf26e533999"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:cebc6fe843e0733ee827a282aca4999b596241195f43b4cc371d64fc6639da9e"}, - {file = "tomli-2.3.0-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:4c2ef0244c75aba9355561272009d934953817c49f47d768070c3c94355c2aa3"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c22a8bf253bacc0cf11f35ad9808b6cb75ada2631c2d97c971122583b129afbc"}, - {file = "tomli-2.3.0-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0eea8cc5c5e9f89c9b90c4896a8deefc74f518db5927d0e0e8d4a80953d774d0"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:b74a0e59ec5d15127acdabd75ea17726ac4c5178ae51b85bfe39c4f8a278e879"}, - {file = "tomli-2.3.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:b5870b50c9db823c595983571d1296a6ff3e1b88f734a4c8f6fc6188397de005"}, - {file = "tomli-2.3.0-cp314-cp314-win32.whl", hash = "sha256:feb0dacc61170ed7ab602d3d972a58f14ee3ee60494292d384649a3dc38ef463"}, - {file = "tomli-2.3.0-cp314-cp314-win_amd64.whl", hash = "sha256:b273fcbd7fc64dc3600c098e39136522650c49bca95df2d11cf3b626422392c8"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:940d56ee0410fa17ee1f12b817b37a4d4e4dc4d27340863cc67236c74f582e77"}, - {file = "tomli-2.3.0-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:f85209946d1fe94416debbb88d00eb92ce9cd5266775424ff81bc959e001acaf"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a56212bdcce682e56b0aaf79e869ba5d15a6163f88d5451cbde388d48b13f530"}, - {file = "tomli-2.3.0-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c5f3ffd1e098dfc032d4d3af5c0ac64f6d286d98bc148698356847b80fa4de1b"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:5e01decd096b1530d97d5d85cb4dff4af2d8347bd35686654a004f8dea20fc67"}, - {file = "tomli-2.3.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:8a35dd0e643bb2610f156cca8db95d213a90015c11fee76c946aa62b7ae7e02f"}, - {file = "tomli-2.3.0-cp314-cp314t-win32.whl", hash = "sha256:a1f7f282fe248311650081faafa5f4732bdbfef5d45fe3f2e702fbc6f2d496e0"}, - {file = "tomli-2.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:70a251f8d4ba2d9ac2542eecf008b3c8a9fc5c3f9f02c56a9d7952612be2fdba"}, - {file = "tomli-2.3.0-py3-none-any.whl", hash = "sha256:e95b1af3c5b07d9e643909b5abbec77cd9f1217e6d0bca72b0234736b9fb1f1b"}, - {file = "tomli-2.3.0.tar.gz", hash = "sha256:64be704a875d2a59753d80ee8a533c3fe183e3f06807ff7dc2232938ccb01549"}, -] - -[[package]] -name = "traitlets" -version = "5.14.3" -description = "Traitlets Python configuration system" -optional = false -python-versions = ">=3.8" -groups = ["main"] -files = [ - {file = "traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f"}, - {file = "traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7"}, -] - -[package.extras] -docs = ["myst-parser", "pydata-sphinx-theme", "sphinx"] -test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0,<8.2)", "pytest-mock", "pytest-mypy-testing"] - -[[package]] -name = "twisted" -version = "24.7.0" -description = "An asynchronous networking framework written in Python" -optional = false -python-versions = ">=3.8.0" -groups = ["main"] -files = [ - {file = "twisted-24.7.0-py3-none-any.whl", hash = "sha256:734832ef98108136e222b5230075b1079dad8a3fc5637319615619a7725b0c81"}, - {file = "twisted-24.7.0.tar.gz", hash = "sha256:5a60147f044187a127ec7da96d170d49bcce50c6fd36f594e60f4587eff4d394"}, -] - -[package.dependencies] -attrs = ">=21.3.0" -automat = ">=0.8.0" -constantly = ">=15.1" -hyperlink = ">=17.1.1" -incremental = ">=24.7.0" -typing-extensions = ">=4.2.0" -zope-interface = ">=5" - -[package.extras] -all-non-platform = ["appdirs (>=1.4.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "hypothesis (>=6.56)", "idna (>=2.4)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "priority (>=1.1.0,<2.0)", "pyhamcrest (>=2)", "pyhamcrest (>=2)", "pyopenssl (>=21.0.0)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "pyserial (>=3.0)", "pywin32 (!=226) ; platform_system == \"Windows\"", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "service-identity (>=18.1.0)"] -conch = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)"] -dev = ["coverage (>=7.5,<8.0)", "cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pydoctor (>=23.9.0,<23.10.0)", "pyflakes (>=2.2,<3.0)", "pyhamcrest (>=2)", "python-subunit (>=1.4,<2.0)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "twistedchecker (>=0.7,<1.0)"] -dev-release = ["pydoctor (>=23.9.0,<23.10.0)", "pydoctor (>=23.9.0,<23.10.0)", "sphinx (>=6,<7)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "towncrier (>=23.6,<24.0)"] -gtk-platform = ["appdirs (>=1.4.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "hypothesis (>=6.56)", "idna (>=2.4)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "priority (>=1.1.0,<2.0)", "pygobject", "pygobject", "pyhamcrest (>=2)", "pyhamcrest (>=2)", "pyopenssl (>=21.0.0)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "pyserial (>=3.0)", "pywin32 (!=226) ; platform_system == \"Windows\"", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "service-identity (>=18.1.0)"] -http2 = ["h2 (>=3.0,<5.0)", "priority (>=1.1.0,<2.0)"] -macos-platform = ["appdirs (>=1.4.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "hypothesis (>=6.56)", "idna (>=2.4)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "priority (>=1.1.0,<2.0)", "pyhamcrest (>=2)", "pyhamcrest (>=2)", "pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "pyopenssl (>=21.0.0)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "pyserial (>=3.0)", "pywin32 (!=226) ; platform_system == \"Windows\"", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "service-identity (>=18.1.0)"] -mypy = ["appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "coverage (>=7.5,<8.0)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "idna (>=2.4)", "mypy (>=1.8,<2.0)", "mypy-zope (>=1.0.3,<1.1.0)", "priority (>=1.1.0,<2.0)", "pydoctor (>=23.9.0,<23.10.0)", "pyflakes (>=2.2,<3.0)", "pyhamcrest (>=2)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "python-subunit (>=1.4,<2.0)", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "sphinx (>=6,<7)", "sphinx-rtd-theme (>=1.3,<2.0)", "towncrier (>=23.6,<24.0)", "twistedchecker (>=0.7,<1.0)", "types-pyopenssl", "types-setuptools"] -osx-platform = ["appdirs (>=1.4.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "hypothesis (>=6.56)", "idna (>=2.4)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "priority (>=1.1.0,<2.0)", "pyhamcrest (>=2)", "pyhamcrest (>=2)", "pyobjc-core", "pyobjc-core", "pyobjc-framework-cfnetwork", "pyobjc-framework-cfnetwork", "pyobjc-framework-cocoa", "pyobjc-framework-cocoa", "pyopenssl (>=21.0.0)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "pyserial (>=3.0)", "pywin32 (!=226) ; platform_system == \"Windows\"", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "service-identity (>=18.1.0)"] -serial = ["pyserial (>=3.0)", "pywin32 (!=226) ; platform_system == \"Windows\""] -test = ["cython-test-exception-raiser (>=1.0.2,<2)", "hypothesis (>=6.56)", "pyhamcrest (>=2)"] -tls = ["idna (>=2.4)", "pyopenssl (>=21.0.0)", "service-identity (>=18.1.0)"] -windows-platform = ["appdirs (>=1.4.0)", "appdirs (>=1.4.0)", "bcrypt (>=3.1.3)", "bcrypt (>=3.1.3)", "cryptography (>=3.3)", "cryptography (>=3.3)", "cython-test-exception-raiser (>=1.0.2,<2)", "cython-test-exception-raiser (>=1.0.2,<2)", "h2 (>=3.0,<5.0)", "h2 (>=3.0,<5.0)", "hypothesis (>=6.56)", "hypothesis (>=6.56)", "idna (>=2.4)", "idna (>=2.4)", "priority (>=1.1.0,<2.0)", "priority (>=1.1.0,<2.0)", "pyhamcrest (>=2)", "pyhamcrest (>=2)", "pyopenssl (>=21.0.0)", "pyopenssl (>=21.0.0)", "pyserial (>=3.0)", "pyserial (>=3.0)", "pywin32 (!=226)", "pywin32 (!=226)", "pywin32 (!=226) ; platform_system == \"Windows\"", "pywin32 (!=226) ; platform_system == \"Windows\"", "service-identity (>=18.1.0)", "service-identity (>=18.1.0)", "twisted-iocpsupport (>=1.0.2)", "twisted-iocpsupport (>=1.0.2)"] - -[[package]] -name = "typing-extensions" -version = "4.15.0" -description = "Backported and Experimental Type Hints for Python 3.9+" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548"}, - {file = "typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466"}, -] - -[[package]] -name = "tzdata" -version = "2025.2" -description = "Provider of IANA time zone data" -optional = false -python-versions = ">=2" -groups = ["main"] -files = [ - {file = "tzdata-2025.2-py2.py3-none-any.whl", hash = "sha256:1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8"}, - {file = "tzdata-2025.2.tar.gz", hash = "sha256:b60a638fcc0daffadf82fe0f57e53d06bdec2f36c4df66280ae79bce6bd6f2b9"}, -] - -[[package]] -name = "uritemplate" -version = "4.2.0" -description = "Implementation of RFC 6570 URI Templates" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686"}, - {file = "uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e"}, -] - -[[package]] -name = "urllib3" -version = "1.26.20" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,>=2.7" -groups = ["main"] -files = [ - {file = "urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e"}, - {file = "urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32"}, -] - -[package.extras] -brotli = ["brotli (==1.0.9) ; os_name != \"nt\" and python_version < \"3\" and platform_python_implementation == \"CPython\"", "brotli (>=1.0.9) ; python_version >= \"3\" and platform_python_implementation == \"CPython\"", "brotlicffi (>=0.8.0) ; (os_name != \"nt\" or python_version >= \"3\") and platform_python_implementation != \"CPython\"", "brotlipy (>=0.6.0) ; os_name == \"nt\" and python_version < \"3\""] -secure = ["certifi", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "ipaddress ; python_version == \"2.7\"", "pyOpenSSL (>=0.14)", "urllib3-secure-extra"] -socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] - -[[package]] -name = "uvicorn" -version = "0.22.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996"}, - {file = "uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8"}, -] - -[package.dependencies] -click = ">=7.0" -h11 = ">=0.8" - -[package.extras] -standard = ["colorama (>=0.4) ; sys_platform == \"win32\"", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1) ; sys_platform != \"win32\" and sys_platform != \"cygwin\" and platform_python_implementation != \"PyPy\"", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "validate-email" -version = "1.3" -description = "Validate_email verify if an email address is valid and really exists." -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "validate_email-1.3.tar.gz", hash = "sha256:784719dc5f780be319cdd185dc85dd93afebdb6ebb943811bc4c7c5f9c72aeaf"}, -] - -[[package]] -name = "vine" -version = "1.3.0" -description = "Promises, promises, promises." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -groups = ["main"] -files = [ - {file = "vine-1.3.0-py2.py3-none-any.whl", hash = "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af"}, - {file = "vine-1.3.0.tar.gz", hash = "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87"}, -] - -[[package]] -name = "watchdog" -version = "2.1.1" -description = "Filesystem events monitoring" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "watchdog-2.1.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:f3edbe1e15e229d2ba8ff5156908adba80d1ba21a9282d9f72247403280fc799"}, - {file = "watchdog-2.1.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:c1325b47463fce231d88eb74f330ab0cb4a1bab5defe12c0c80a3a4f197345b4"}, - {file = "watchdog-2.1.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:5b391bac7edbdf96fb82a381d04829bbc0d1bb259c206b2b283ef8989340240f"}, - {file = "watchdog-2.1.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:22c13c19599b0dec7192f8f7d26404d5223cb36c9a450e96430483e685dccd7e"}, - {file = "watchdog-2.1.1-pp36-pypy36_pp73-macosx_10_9_x86_64.whl", hash = "sha256:604ca364a79c27a694ab10947cd41de81bf229cff507a3156bf2c56c064971a1"}, - {file = "watchdog-2.1.1-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:dca75d12712997c713f76e6d68ff41580598c7df94cedf83f1089342e7709081"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:aa59afc87a892ed92d7d88d09f4b736f1336fc35540b403da7ee00c3be74bd07"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:a1b3f76e2a0713b406348dd5b9df2aa02bdd741a6ddf54f4c6410b395e077502"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_i686.whl", hash = "sha256:9f1b124fe2d4a1f37b7068f6289c2b1eba44859eb790bf6bd709adff224a5469"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:a9005f968220b715101d5fcdde5f5deda54f0d1873f618724f547797171f5e97"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:027c532e2fd3367d55fe235510fc304381a6cc88d0dcd619403e57ffbd83c1d2"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:4d83c89ba24bd67b7a7d5752a4ef953ec40db69d4d30582bd1f27d3ecb6b61b0"}, - {file = "watchdog-2.1.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:67c645b1e500cc74d550e9aad4829309c5084dc55e8dc4e1c25d5da23e5be239"}, - {file = "watchdog-2.1.1-py3-none-win32.whl", hash = "sha256:12645d41d7307601b318c48861e776ce7a9fdcad9f74961013ec39037050582c"}, - {file = "watchdog-2.1.1-py3-none-win_amd64.whl", hash = "sha256:16078cd241a95124acd4d8d3efba2140faec9300674b12413cc08be11b825d56"}, - {file = "watchdog-2.1.1-py3-none-win_ia64.whl", hash = "sha256:20d4cabfa2ad7239995d81a0163bc0264a3e104a64f33c6f0a21ad75a0d915d9"}, - {file = "watchdog-2.1.1.tar.gz", hash = "sha256:2894440b4ea95a6ef4c5d152deedbe270cae46092682710b7028a04d6a6980f6"}, -] - -[package.extras] -watchmedo = ["PyYAML (>=3.10)", "argh (>=0.24.1)"] - -[[package]] -name = "wcwidth" -version = "0.2.14" -description = "Measures the displayed width of unicode strings in a terminal" -optional = false -python-versions = ">=3.6" -groups = ["main"] -files = [ - {file = "wcwidth-0.2.14-py2.py3-none-any.whl", hash = "sha256:a7bb560c8aee30f9957e5f9895805edd20602f2d7f720186dfd906e82b4982e1"}, - {file = "wcwidth-0.2.14.tar.gz", hash = "sha256:4d478375d31bc5395a3c55c40ccdf3354688364cd61c4f6adacaa9215d0b3605"}, -] - -[[package]] -name = "webencodings" -version = "0.5.1" -description = "Character encoding aliases for legacy web content" -optional = false -python-versions = "*" -groups = ["main"] -files = [ - {file = "webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78"}, - {file = "webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923"}, -] - -[[package]] -name = "websockets" -version = "10.4" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.7" -groups = ["main"] -files = [ - {file = "websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48"}, - {file = "websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab"}, - {file = "websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4"}, - {file = "websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1"}, - {file = "websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331"}, - {file = "websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a"}, - {file = "websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:47a2964021f2110116cc1125b3e6d87ab5ad16dea161949e7244ec583b905bb4"}, - {file = "websockets-10.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:e789376b52c295c4946403bd0efecf27ab98f05319df4583d3c48e43c7342c2f"}, - {file = "websockets-10.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7d3f0b61c45c3fa9a349cf484962c559a8a1d80dae6977276df8fd1fa5e3cb8c"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f55b5905705725af31ccef50e55391621532cd64fbf0bc6f4bac935f0fccec46"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00c870522cdb69cd625b93f002961ffb0c095394f06ba8c48f17eef7c1541f96"}, - {file = "websockets-10.4-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f38706e0b15d3c20ef6259fd4bc1700cd133b06c3c1bb108ffe3f8947be15fa"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f2c38d588887a609191d30e902df2a32711f708abfd85d318ca9b367258cfd0c"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:fe10ddc59b304cb19a1bdf5bd0a7719cbbc9fbdd57ac80ed436b709fcf889106"}, - {file = "websockets-10.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:90fcf8929836d4a0e964d799a58823547df5a5e9afa83081761630553be731f9"}, - {file = "websockets-10.4-cp311-cp311-win32.whl", hash = "sha256:b9968694c5f467bf67ef97ae7ad4d56d14be2751000c1207d31bf3bb8860bae8"}, - {file = "websockets-10.4-cp311-cp311-win_amd64.whl", hash = "sha256:a7a240d7a74bf8d5cb3bfe6be7f21697a28ec4b1a437607bae08ac7acf5b4882"}, - {file = "websockets-10.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:74de2b894b47f1d21cbd0b37a5e2b2392ad95d17ae983e64727e18eb281fe7cb"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e3a686ecb4aa0d64ae60c9c9f1a7d5d46cab9bfb5d91a2d303d00e2cd4c4c5cc"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b0d15c968ea7a65211e084f523151dbf8ae44634de03c801b8bd070b74e85033"}, - {file = "websockets-10.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00213676a2e46b6ebf6045bc11d0f529d9120baa6f58d122b4021ad92adabd41"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:e23173580d740bf8822fd0379e4bf30aa1d5a92a4f252d34e893070c081050df"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:dd500e0a5e11969cdd3320935ca2ff1e936f2358f9c2e61f100a1660933320ea"}, - {file = "websockets-10.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:4239b6027e3d66a89446908ff3027d2737afc1a375f8fd3eea630a4842ec9a0c"}, - {file = "websockets-10.4-cp37-cp37m-win32.whl", hash = "sha256:8a5cc00546e0a701da4639aa0bbcb0ae2bb678c87f46da01ac2d789e1f2d2038"}, - {file = "websockets-10.4-cp37-cp37m-win_amd64.whl", hash = "sha256:a9f9a735deaf9a0cadc2d8c50d1a5bcdbae8b6e539c6e08237bc4082d7c13f28"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5c1289596042fad2cdceb05e1ebf7aadf9995c928e0da2b7a4e99494953b1b94"}, - {file = "websockets-10.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0cff816f51fb33c26d6e2b16b5c7d48eaa31dae5488ace6aae468b361f422b63"}, - {file = "websockets-10.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:dd9becd5fe29773d140d68d607d66a38f60e31b86df75332703757ee645b6faf"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45ec8e75b7dbc9539cbfafa570742fe4f676eb8b0d3694b67dabe2f2ceed8aa6"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f72e5cd0f18f262f5da20efa9e241699e0cf3a766317a17392550c9ad7b37d8"}, - {file = "websockets-10.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:185929b4808b36a79c65b7865783b87b6841e852ef5407a2fb0c03381092fa3b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:7d27a7e34c313b3a7f91adcd05134315002aaf8540d7b4f90336beafaea6217c"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:884be66c76a444c59f801ac13f40c76f176f1bfa815ef5b8ed44321e74f1600b"}, - {file = "websockets-10.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:931c039af54fc195fe6ad536fde4b0de04da9d5916e78e55405436348cfb0e56"}, - {file = "websockets-10.4-cp38-cp38-win32.whl", hash = "sha256:db3c336f9eda2532ec0fd8ea49fef7a8df8f6c804cdf4f39e5c5c0d4a4ad9a7a"}, - {file = "websockets-10.4-cp38-cp38-win_amd64.whl", hash = "sha256:48c08473563323f9c9debac781ecf66f94ad5a3680a38fe84dee5388cf5acaf6"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:40e826de3085721dabc7cf9bfd41682dadc02286d8cf149b3ad05bff89311e4f"}, - {file = "websockets-10.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:56029457f219ade1f2fc12a6504ea61e14ee227a815531f9738e41203a429112"}, - {file = "websockets-10.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f5fc088b7a32f244c519a048c170f14cf2251b849ef0e20cbbb0fdf0fdaf556f"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2fc8709c00704194213d45e455adc106ff9e87658297f72d544220e32029cd3d"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0154f7691e4fe6c2b2bc275b5701e8b158dae92a1ab229e2b940efe11905dff4"}, - {file = "websockets-10.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c6d2264f485f0b53adf22697ac11e261ce84805c232ed5dbe6b1bcb84b00ff0"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9bc42e8402dc5e9905fb8b9649f57efcb2056693b7e88faa8fb029256ba9c68c"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:edc344de4dac1d89300a053ac973299e82d3db56330f3494905643bb68801269"}, - {file = "websockets-10.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:84bc2a7d075f32f6ed98652db3a680a17a4edb21ca7f80fe42e38753a58ee02b"}, - {file = "websockets-10.4-cp39-cp39-win32.whl", hash = "sha256:c94ae4faf2d09f7c81847c63843f84fe47bf6253c9d60b20f25edfd30fb12588"}, - {file = "websockets-10.4-cp39-cp39-win_amd64.whl", hash = "sha256:bbccd847aa0c3a69b5f691a84d2341a4f8a629c6922558f2a70611305f902d74"}, - {file = "websockets-10.4-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:82ff5e1cae4e855147fd57a2863376ed7454134c2bf49ec604dfe71e446e2193"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d210abe51b5da0ffdbf7b43eed0cfdff8a55a1ab17abbec4301c9ff077dd0342"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:942de28af58f352a6f588bc72490ae0f4ccd6dfc2bd3de5945b882a078e4e179"}, - {file = "websockets-10.4-pp37-pypy37_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9b27d6c1c6cd53dc93614967e9ce00ae7f864a2d9f99fe5ed86706e1ecbf485"}, - {file = "websockets-10.4-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:3d3cac3e32b2c8414f4f87c1b2ab686fa6284a980ba283617404377cd448f631"}, - {file = "websockets-10.4-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:da39dd03d130162deb63da51f6e66ed73032ae62e74aaccc4236e30edccddbb0"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389f8dbb5c489e305fb113ca1b6bdcdaa130923f77485db5b189de343a179393"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09a1814bb15eff7069e51fed0826df0bc0702652b5cb8f87697d469d79c23576"}, - {file = "websockets-10.4-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ff64a1d38d156d429404aaa84b27305e957fd10c30e5880d1765c9480bea490f"}, - {file = "websockets-10.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b343f521b047493dc4022dd338fc6db9d9282658862756b4f6fd0e996c1380e1"}, - {file = "websockets-10.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:932af322458da7e4e35df32f050389e13d3d96b09d274b22a7aa1808f292fee4"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a4162139374a49eb18ef5b2f4da1dd95c994588f5033d64e0bbfda4b6b6fcf"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c57e4c1349fbe0e446c9fa7b19ed2f8a4417233b6984277cce392819123142d3"}, - {file = "websockets-10.4-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b627c266f295de9dea86bd1112ed3d5fafb69a348af30a2422e16590a8ecba13"}, - {file = "websockets-10.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:05a7233089f8bd355e8cbe127c2e8ca0b4ea55467861906b80d2ebc7db4d6b72"}, - {file = "websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3"}, -] - -[[package]] -name = "whitenoise" -version = "5.2.0" -description = "Radically simplified static file serving for WSGI applications" -optional = false -python-versions = ">=3.5, <4" -groups = ["main"] -files = [ - {file = "whitenoise-5.2.0-py2.py3-none-any.whl", hash = "sha256:05d00198c777028d72d8b0bbd234db605ef6d60e9410125124002518a48e515d"}, - {file = "whitenoise-5.2.0.tar.gz", hash = "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7"}, -] - -[package.extras] -brotli = ["Brotli"] - -[[package]] -name = "win32-setctime" -version = "1.2.0" -description = "A small Python utility to set file creation time on Windows" -optional = false -python-versions = ">=3.5" -groups = ["main"] -markers = "sys_platform == \"win32\"" -files = [ - {file = "win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390"}, - {file = "win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0"}, -] - -[package.extras] -dev = ["black (>=19.3b0) ; python_version >= \"3.6\"", "pytest (>=4.6.2)"] - -[[package]] -name = "zope-interface" -version = "8.0.1" -description = "Interfaces for Python" -optional = false -python-versions = ">=3.9" -groups = ["main"] -files = [ - {file = "zope_interface-8.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:fd7195081b8637eeed8d73e4d183b07199a1dc738fb28b3de6666b1b55662570"}, - {file = "zope_interface-8.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f7c4bc4021108847bce763673ce70d0716b08dfc2ba9889e7bad46ac2b3bb924"}, - {file = "zope_interface-8.0.1-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:758803806b962f32c87b31bb18c298b022965ba34fe532163831cc39118c24ab"}, - {file = "zope_interface-8.0.1-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:f8e88f35f86bbe8243cad4b2972deef0fdfca0a0723455abbebdc83bbab96b69"}, - {file = "zope_interface-8.0.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7844765695937d9b0d83211220b72e2cf6ac81a08608ad2b58f2c094af498d83"}, - {file = "zope_interface-8.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:64fa7b206dd9669f29d5c1241a768bebe8ab1e8a4b63ee16491f041e058c09d0"}, - {file = "zope_interface-8.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4bd01022d2e1bce4a4a4ed9549edb25393c92e607d7daa6deff843f1f68b479d"}, - {file = "zope_interface-8.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:29be8db8b712d94f1c05e24ea230a879271d787205ba1c9a6100d1d81f06c69a"}, - {file = "zope_interface-8.0.1-cp311-cp311-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:51ae1b856565b30455b7879fdf0a56a88763b401d3f814fa9f9542d7410dbd7e"}, - {file = "zope_interface-8.0.1-cp311-cp311-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d2e7596149cb1acd1d4d41b9f8fe2ffc0e9e29e2e91d026311814181d0d9efaf"}, - {file = "zope_interface-8.0.1-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b2737c11c34fb9128816759864752d007ec4f987b571c934c30723ed881a7a4f"}, - {file = "zope_interface-8.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:cf66e4bf731aa7e0ced855bb3670e8cda772f6515a475c6a107bad5cb6604103"}, - {file = "zope_interface-8.0.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:115f27c1cc95ce7a517d960ef381beedb0a7ce9489645e80b9ab3cbf8a78799c"}, - {file = "zope_interface-8.0.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:af655c573b84e3cb6a4f6fd3fbe04e4dc91c63c6b6f99019b3713ef964e589bc"}, - {file = "zope_interface-8.0.1-cp312-cp312-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:23f82ef9b2d5370750cc1bf883c3b94c33d098ce08557922a3fbc7ff3b63dfe1"}, - {file = "zope_interface-8.0.1-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:35a1565d5244997f2e629c5c68715b3d9d9036e8df23c4068b08d9316dcb2822"}, - {file = "zope_interface-8.0.1-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:029ea1db7e855a475bf88d9910baab4e94d007a054810e9007ac037a91c67c6f"}, - {file = "zope_interface-8.0.1-cp312-cp312-win_amd64.whl", hash = "sha256:0beb3e7f7dc153944076fcaf717a935f68d39efa9fce96ec97bafcc0c2ea6cab"}, - {file = "zope_interface-8.0.1-cp313-cp313-macosx_10_9_x86_64.whl", hash = "sha256:c7cc027fc5c61c5d69e5080c30b66382f454f43dc379c463a38e78a9c6bab71a"}, - {file = "zope_interface-8.0.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:fcf9097ff3003b7662299f1c25145e15260ec2a27f9a9e69461a585d79ca8552"}, - {file = "zope_interface-8.0.1-cp313-cp313-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:6d965347dd1fb9e9a53aa852d4ded46b41ca670d517fd54e733a6b6a4d0561c2"}, - {file = "zope_interface-8.0.1-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9a3b8bb77a4b89427a87d1e9eb969ab05e38e6b4a338a9de10f6df23c33ec3c2"}, - {file = "zope_interface-8.0.1-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:87e6b089002c43231fb9afec89268391bcc7a3b66e76e269ffde19a8112fb8d5"}, - {file = "zope_interface-8.0.1-cp313-cp313-win_amd64.whl", hash = "sha256:64a43f5280aa770cbafd0307cb3d1ff430e2a1001774e8ceb40787abe4bb6658"}, - {file = "zope_interface-8.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b84464a9fcf801289fa8b15bfc0829e7855d47fb4a8059555effc6f2d1d9a613"}, - {file = "zope_interface-8.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7b915cf7e747b5356d741be79a153aa9107e8923bc93bcd65fc873caf0fb5c50"}, - {file = "zope_interface-8.0.1-cp39-cp39-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:110c73ddf974b369ef3c6e7b0d87d44673cf4914eba3fe8a33bfb21c6c606ad8"}, - {file = "zope_interface-8.0.1-cp39-cp39-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:9e9bdca901c1bcc34e438001718512c65b3b8924aabcd732b6e7a7f0cd715f17"}, - {file = "zope_interface-8.0.1-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bbd22d4801ad3e8ec704ba9e3e6a4ac2e875e4d77e363051ccb76153d24c5519"}, - {file = "zope_interface-8.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:a0016ca85f93b938824e2f9a43534446e95134a2945b084944786e1ace2020bc"}, - {file = "zope_interface-8.0.1.tar.gz", hash = "sha256:eba5610d042c3704a48222f7f7c6ab5b243ed26f917e2bc69379456b115e02d1"}, -] - -[package.extras] -docs = ["Sphinx", "furo", "repoze.sphinx.autointerface"] -test = ["coverage[toml]", "zope.event", "zope.testing"] -testing = ["coverage[toml]", "zope.event", "zope.testing"] - -[metadata] -lock-version = "2.1" -python-versions = ">=3.10,<3.11" -content-hash = "5c992cca1f15347bd3cebb7071cd0f49a27b2c61cbbbb15a997cd8ec2db56957" diff --git a/pyproject.toml b/pyproject.toml index 6a2b578fe..4202d6d14 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,78 +1,91 @@ -[tool.poetry] +[project] name = "codabench" version = "0.1.0" description = "" -authors = ["Codalab"] +authors = [{ name = "Codalab" }] +requires-python = ">=3.10,<3.11" readme = "README.md" -package-mode = false +classifiers = [ + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.10", +] +dependencies = [ + "django>=4.2.0,<5", + "django-oauth-toolkit==1.6.3", + "django-cors-middleware==1.5.0", + "social-auth-core>=4.1.0,<5", + "social-auth-app-django>=5.0.0,<6", + "six==1.16.0", + "django-extensions>=3.2,<4", + "channels==4.2.0", + "channels-redis==4.0.0", + "pillow==10.3.0", + "celery==4.4.7", + "gunicorn==22.0.0", + "urllib3>=1.25.4,<1.27", + "uvicorn>=0.22.0,<0.23", + "pyyaml==5.3.1", + "watchdog==2.1.1", + "argh==0.26.2", + "python-dateutil==2.7.3", + "bpython>=0.21.0,<0.22", + "websockets>=10.4.0,<11", + "aiofiles==0.4.0", + "oyaml==0.7", + "factory-boy==2.11.1", + "bleach>=5.0.0", + "django-debug-toolbar==3.2", + "django-querycount==0.7.0", + "blessings==1.7", + "django-su>=1.0.0,<2", + "django-ajax-selects==2.0.0", + "dj-database-url==0.4.2", + "psycopg2-binary>=2.9.9,<3", + "django-redis==4.12.1", + "django-storages[azure]>=1.14.6,<2", + "azure-storage-blob>=12,<13", + "azure-storage-common==2.1.0", + "boto3==1.26.76", + "whitenoise==5.2.0", + "djangorestframework>=3.13.0", + "djangorestframework-csv==3.0.1", + "drf-extensions==0.4.0", + "markdown==2.6.11", + "pygments==2.2.0", + "drf-writable-nested==0.6.2", + "django-filter==2.4.0", + "flex==6.12.0", + "pyrabbit2==1.0.7", + "django-enforce-host==1.0.1", + "twisted==24.7.0", + "ipdb==0.13", + "jinja2==3.1.4", + "requests==2.32.2", + "drf-extra-fields>=3.5.0", + "botocore==1.29.76", + "s3transfer==0.6.0", + "drf-spectacular>=0.28.0,<0.29", + "coreapi>=2.3.3,<3", + "loguru>=0.7.3,<0.8", + "tzdata>=2025.3", +] -[tool.poetry.dependencies] -python = ">=3.10,<3.11" -django = "^4.2.0" -django-oauth-toolkit = "1.6.3" -django-cors-middleware = "1.5.0" -social-auth-core = "^4.1.0" -social-auth-app-django = "^5.0.0" -six = "1.16.0" -django-extensions = "^3.2" -channels = "4.2.0" -channels-redis = "4.0.0" -pillow = "10.3.0" -celery = "4.4.7" -gunicorn = "22.0.0" -urllib3 = ">=1.25.4,<1.27" -uvicorn = "^0.22.0" -pyyaml = "5.3.1" -watchdog = "2.1.1" -argh = "0.26.2" -python-dateutil = "2.7.3" -bpython = "^0.21.0" -websockets = "^10.4.0" -aiofiles = "0.4.0" -oyaml = "0.7" -factory-boy = "2.11.1" -bleach = ">=5.0.0" -django-debug-toolbar = "3.2" -django-querycount = "0.7.0" -blessings = "1.7" -django-su = "^1.0.0" -django-ajax-selects = "2.0.0" -dj-database-url = "0.4.2" -psycopg2-binary = "^2.9.9" -django-redis = "4.12.1" -django-storages = {extras = ["azure"], version = "^1.14.6"} -azure-storage-blob = "^12" -azure-storage-common = "2.1.0" -boto3 = "1.26.76" -whitenoise = "5.2.0" -djangorestframework = ">=3.13.0" -djangorestframework-csv = "3.0.1" -drf-extensions = "0.4.0" -markdown = "2.6.11" -pygments = "2.2.0" -drf-writable-nested = "0.6.2" -django-filter = "2.4.0" -flex = "6.12.0" -pyrabbit2 = "1.0.7" -django-enforce-host = "1.0.1" -twisted = "24.7.0" -ipdb = "0.13" -flake8 = "3.8.4" -pytest = "^7.0.0" -pytest-django = "^4.5.0" -jinja2 = "3.1.4" -requests = "2.32.2" -drf-extra-fields = ">=3.5.0" -botocore = "1.29.76" -s3transfer = "0.6.0" -drf-spectacular = "^0.28.0" -coreapi = "^2.3.3" -loguru = "^0.7.3" +[tool.uv] +package = false + +[build-system] +requires = ["uv_build>=0.9.16,<0.10.0"] +build-backend = "uv_build" + +[dependency-groups] +dev = [ + "flake8>=3.8.4", + "pytest==7.4.4", + "pytest-django==4.11.1", +] [tool.pytest.ini_options] DJANGO_SETTINGS_MODULE = "settings.develop" # Just "settings" since pytest will be running from src/ pythonpath = [".", "src", "src/apps"] testpaths = ["src"] # Tell pytest to look for tests in src/ addopts = "-v --tb=short --reuse-db" -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" + diff --git a/uv.lock b/uv.lock new file mode 100644 index 000000000..1bea781f0 --- /dev/null +++ b/uv.lock @@ -0,0 +1,1967 @@ +version = 1 +revision = 3 +requires-python = "==3.10.*" + +[[package]] +name = "aiofiles" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/94/c2/e3cb60c1b7d9478203d4514e2d33ea424ad9bb98e45b21d6225db93f25c9/aiofiles-0.4.0.tar.gz", hash = "sha256:021ea0ba314a86027c166ecc4b4c07f2d40fc0f4b3a950d1868a0f2571c2bbee", size = 9270, upload-time = "2018-08-11T17:24:08.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f2/a67a23bc0bb61d88f82aa7fb84a2fb5f278becfbdc038c5cbb36c31feaf1/aiofiles-0.4.0-py3-none-any.whl", hash = "sha256:1e644c2573f953664368de28d2aa4c89dfd64550429d0c27c4680ccd3aa4985d", size = 9191, upload-time = "2018-08-11T17:24:07.206Z" }, +] + +[[package]] +name = "amqp" +version = "2.6.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "vine" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/37/9f/d54494a157d0dcd1673fe7a1bcce7ac70d3eb6d5d6149749450c87a2c959/amqp-2.6.1.tar.gz", hash = "sha256:70cdb10628468ff14e57ec2f751c7aa9e48e7e3651cfd62d431213c0c4e58f21", size = 119956, upload-time = "2020-07-31T16:32:31.914Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/90/bb5ce93521772f083cb2d7a413bb82eda5afc62b4192adb7ea4c7b4858b9/amqp-2.6.1-py2.py3-none-any.whl", hash = "sha256:aa7f313fb887c91f15474c1229907a04dac0b8135822d6603437803424c0aa59", size = 48006, upload-time = "2020-07-31T16:32:22.693Z" }, +] + +[[package]] +name = "ansicon" +version = "1.89.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/e2/1c866404ddbd280efedff4a9f15abfe943cb83cde6e895022370f3a61f85/ansicon-1.89.0.tar.gz", hash = "sha256:e4d039def5768a47e4afec8e89e83ec3ae5a26bf00ad851f914d1240b444d2b1", size = 67312, upload-time = "2019-04-29T20:23:57.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/75/f9/f1c10e223c7b56a38109a3f2eb4e7fe9a757ea3ed3a166754fb30f65e466/ansicon-1.89.0-py2.py3-none-any.whl", hash = "sha256:f1def52d17f65c2c9682cf8370c03f541f410c1752d6a14029f97318e4b9dfec", size = 63675, upload-time = "2019-04-29T20:23:53.83Z" }, +] + +[[package]] +name = "appnope" +version = "0.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/35/5d/752690df9ef5b76e169e68d6a129fa6d08a7100ca7f754c89495db3c6019/appnope-0.1.4.tar.gz", hash = "sha256:1de3860566df9caf38f01f86f65e0e13e379af54f9e4bee1e66b48f2efffd1ee", size = 4170, upload-time = "2024-02-06T09:43:11.258Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/29/5ecc3a15d5a33e31b26c11426c45c501e439cb865d0bff96315d86443b78/appnope-0.1.4-py2.py3-none-any.whl", hash = "sha256:502575ee11cd7a28c0205f379b525beefebab9d161b7c964670864014ed7213c", size = 4321, upload-time = "2024-02-06T09:43:09.663Z" }, +] + +[[package]] +name = "argh" +version = "0.26.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/75/1183b5d1663a66aebb2c184e0398724b624cecd4f4b679cb6e25de97ed15/argh-0.26.2.tar.gz", hash = "sha256:e9535b8c84dc9571a48999094fda7f33e63c3f1b74f3e5f3ac0105a58405bb65", size = 32913, upload-time = "2016-05-11T20:55:36.296Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/1c/e667a7126f0b84aaa1c56844337bf0ac12445d1beb9c8a6199a7314944bf/argh-0.26.2-py2.py3-none-any.whl", hash = "sha256:a9b3aaa1904eeb78e32394cd46c6f37ac0fb4af6dc488daa58971bdc7d7fcaf3", size = 30872, upload-time = "2016-05-11T20:55:26.893Z" }, +] + +[[package]] +name = "asgiref" +version = "3.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/63/40/f03da1264ae8f7cfdbf9146542e5e7e8100a4c66ab48e791df9a03d3f6c0/asgiref-3.11.1.tar.gz", hash = "sha256:5f184dc43b7e763efe848065441eac62229c9f7b0475f41f80e207a114eda4ce", size = 38550, upload-time = "2026-02-03T13:30:14.33Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/0a/a72d10ed65068e115044937873362e6e32fab1b7dce0046aeb224682c989/asgiref-3.11.1-py3-none-any.whl", hash = "sha256:e8667a091e69529631969fd45dc268fa79b99c92c5fcdda727757e52146ec133", size = 24345, upload-time = "2026-02-03T13:30:13.039Z" }, +] + +[[package]] +name = "asttokens" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/be/a5/8e3f9b6771b0b408517c82d97aed8f2036509bc247d46114925e32fe33f0/asttokens-3.0.1.tar.gz", hash = "sha256:71a4ee5de0bde6a31d64f6b13f2293ac190344478f081c3d1bccfcf5eacb0cb7", size = 62308, upload-time = "2025-11-15T16:43:48.578Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/39/e7eaf1799466a4aef85b6a4fe7bd175ad2b1c6345066aa33f1f58d4b18d0/asttokens-3.0.1-py3-none-any.whl", hash = "sha256:15a3ebc0f43c2d0a50eeafea25e19046c68398e487b9f1f5b517f7c0f40f976a", size = 27047, upload-time = "2025-11-15T16:43:16.109Z" }, +] + +[[package]] +name = "async-timeout" +version = "5.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a5/ae/136395dfbfe00dfc94da3f3e136d0b13f394cba8f4841120e34226265780/async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3", size = 9274, upload-time = "2024-11-06T16:41:39.6Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/ba/e2081de779ca30d473f21f5b30e0e737c438205440784c7dfc81efc2b029/async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c", size = 6233, upload-time = "2024-11-06T16:41:37.9Z" }, +] + +[[package]] +name = "attrs" +version = "25.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6b/5c/685e6633917e101e5dcb62b9dd76946cbb57c26e133bae9e0cd36033c0a9/attrs-25.4.0.tar.gz", hash = "sha256:16d5969b87f0859ef33a48b35d55ac1be6e42ae49d5e853b597db70c35c57e11", size = 934251, upload-time = "2025-10-06T13:54:44.725Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3a/2a/7cc015f5b9f5db42b7d48157e23356022889fc354a2813c15934b7cb5c0e/attrs-25.4.0-py3-none-any.whl", hash = "sha256:adcf7e2a1fb3b36ac48d97835bb6d8ade15b8dcce26aba8bf1d14847b57a3373", size = 67615, upload-time = "2025-10-06T13:54:43.17Z" }, +] + +[[package]] +name = "automat" +version = "25.4.16" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e3/0f/d40bbe294bbf004d436a8bcbcfaadca8b5140d39ad0ad3d73d1a8ba15f14/automat-25.4.16.tar.gz", hash = "sha256:0017591a5477066e90d26b0e696ddc143baafd87b588cfac8100bc6be9634de0", size = 129977, upload-time = "2025-04-16T20:12:16.002Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/ff/1175b0b7371e46244032d43a56862d0af455823b5280a50c63d99cc50f18/automat-25.4.16-py3-none-any.whl", hash = "sha256:04e9bce696a8d5671ee698005af6e5a9fa15354140a87f4870744604dcdd3ba1", size = 42842, upload-time = "2025-04-16T20:12:14.447Z" }, +] + +[[package]] +name = "azure-common" +version = "1.1.28" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/3e/71/f6f71a276e2e69264a97ad39ef850dca0a04fce67b12570730cb38d0ccac/azure-common-1.1.28.zip", hash = "sha256:4ac0cd3214e36b6a1b6a442686722a5d8cc449603aa833f3f0f40bda836704a3", size = 20914, upload-time = "2022-02-03T19:39:44.373Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/62/55/7f118b9c1b23ec15ca05d15a578d8207aa1706bc6f7c87218efffbbf875d/azure_common-1.1.28-py2.py3-none-any.whl", hash = "sha256:5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad", size = 14462, upload-time = "2022-02-03T19:39:42.417Z" }, +] + +[[package]] +name = "azure-core" +version = "1.38.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/dc/1b/e503e08e755ea94e7d3419c9242315f888fc664211c90d032e40479022bf/azure_core-1.38.0.tar.gz", hash = "sha256:8194d2682245a3e4e3151a667c686464c3786fed7918b394d035bdcd61bb5993", size = 363033, upload-time = "2026-01-12T17:03:05.535Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/d8/b8fcba9464f02b121f39de2db2bf57f0b216fe11d014513d666e8634380d/azure_core-1.38.0-py3-none-any.whl", hash = "sha256:ab0c9b2cd71fecb1842d52c965c95285d3cfb38902f6766e4a471f1cd8905335", size = 217825, upload-time = "2026-01-12T17:03:07.291Z" }, +] + +[[package]] +name = "azure-storage-blob" +version = "12.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-core" }, + { name = "cryptography" }, + { name = "isodate" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/24/072ba8e27b0e2d8fec401e9969b429d4f5fc4c8d4f0f05f4661e11f7234a/azure_storage_blob-12.28.0.tar.gz", hash = "sha256:e7d98ea108258d29aa0efbfd591b2e2075fa1722a2fae8699f0b3c9de11eff41", size = 604225, upload-time = "2026-01-06T23:48:57.282Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d8/3a/6ef2047a072e54e1142718d433d50e9514c999a58f51abfff7902f3a72f8/azure_storage_blob-12.28.0-py3-none-any.whl", hash = "sha256:00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461", size = 431499, upload-time = "2026-01-06T23:48:58.995Z" }, +] + +[[package]] +name = "azure-storage-common" +version = "2.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "azure-common" }, + { name = "cryptography" }, + { name = "python-dateutil" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/12/e074fe454bc327fbe2a61e20d3260473ee4a0fd85387baf249dc83c8e774/azure-storage-common-2.1.0.tar.gz", hash = "sha256:ccedef5c67227bc4d6670ffd37cec18fb529a1b7c3a5e53e4096eb0cf23dc73f", size = 41869, upload-time = "2019-08-02T04:24:21.763Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6b/a0/6794b318ce0118d1a4053bdf0149a60807407db9b710354f2b203c2f5975/azure_storage_common-2.1.0-py2.py3-none-any.whl", hash = "sha256:b01a491a18839b9d05a4fe3421458a0ddb5ab9443c14e487f40d16f9a1dc2fbe", size = 47778, upload-time = "2019-08-02T04:24:14.67Z" }, +] + +[[package]] +name = "backcall" +version = "0.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/40/764a663805d84deee23043e1426a9175567db89c8b3287b5c2ad9f71aa93/backcall-0.2.0.tar.gz", hash = "sha256:5cbdbf27be5e7cfadb448baf0aa95508f91f2bbc6c6437cd9cd06e2a4c215e1e", size = 18041, upload-time = "2020-06-09T15:11:32.931Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4c/1c/ff6546b6c12603d8dd1070aa3c3d273ad4c07f5771689a7b69a550e8c951/backcall-0.2.0-py2.py3-none-any.whl", hash = "sha256:fbbce6a29f263178a1f7915c1940bde0ec2b2a967566fe1c65c1dfb7422bd255", size = 11157, upload-time = "2020-06-09T15:11:30.87Z" }, +] + +[[package]] +name = "billiard" +version = "3.6.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/92/91/40de1901da8ec9eeb7c6a22143ba5d55d8aaa790761ca31342cedcd5c793/billiard-3.6.4.0.tar.gz", hash = "sha256:299de5a8da28a783d51b197d496bef4f1595dd023a93a4f59dde1886ae905547", size = 155303, upload-time = "2021-04-01T09:23:50.092Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2b/89/0c43de91d4e52eaa7bd748771d417f6ac9e51e66b2f61928c2151bf65878/billiard-3.6.4.0-py3-none-any.whl", hash = "sha256:87103ea78fa6ab4d5c751c4909bcff74617d985de7fa8b672cf8618afd5a875b", size = 89472, upload-time = "2021-04-01T09:23:42.019Z" }, +] + +[[package]] +name = "black" +version = "26.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "mypy-extensions" }, + { name = "packaging" }, + { name = "pathspec" }, + { name = "platformdirs" }, + { name = "pytokens" }, + { name = "tomli" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/13/88/560b11e521c522440af991d46848a2bde64b5f7202ec14e1f46f9509d328/black-26.1.0.tar.gz", hash = "sha256:d294ac3340eef9c9eb5d29288e96dc719ff269a88e27b396340459dd85da4c58", size = 658785, upload-time = "2026-01-18T04:50:11.993Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/1b/523329e713f965ad0ea2b7a047eeb003007792a0353622ac7a8cb2ee6fef/black-26.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ca699710dece84e3ebf6e92ee15f5b8f72870ef984bf944a57a777a48357c168", size = 1849661, upload-time = "2026-01-18T04:59:12.425Z" }, + { url = "https://files.pythonhosted.org/packages/14/82/94c0640f7285fa71c2f32879f23e609dd2aa39ba2641f395487f24a578e7/black-26.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:5e8e75dabb6eb83d064b0db46392b25cabb6e784ea624219736e8985a6b3675d", size = 1689065, upload-time = "2026-01-18T04:59:13.993Z" }, + { url = "https://files.pythonhosted.org/packages/f0/78/474373cbd798f9291ed8f7107056e343fd39fef42de4a51c7fd0d360840c/black-26.1.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:eb07665d9a907a1a645ee41a0df8a25ffac8ad9c26cdb557b7b88eeeeec934e0", size = 1751502, upload-time = "2026-01-18T04:59:15.971Z" }, + { url = "https://files.pythonhosted.org/packages/29/89/59d0e350123f97bc32c27c4d79563432d7f3530dca2bff64d855c178af8b/black-26.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:7ed300200918147c963c87700ccf9966dceaefbbb7277450a8d646fc5646bf24", size = 1400102, upload-time = "2026-01-18T04:59:17.8Z" }, + { url = "https://files.pythonhosted.org/packages/e1/bc/5d866c7ae1c9d67d308f83af5462ca7046760158bbf142502bad8f22b3a1/black-26.1.0-cp310-cp310-win_arm64.whl", hash = "sha256:c5b7713daea9bf943f79f8c3b46f361cc5229e0e604dcef6a8bb6d1c37d9df89", size = 1207038, upload-time = "2026-01-18T04:59:19.543Z" }, + { url = "https://files.pythonhosted.org/packages/e4/3d/51bdb3ecbfadfaf825ec0c75e1de6077422b4afa2091c6c9ba34fbfc0c2d/black-26.1.0-py3-none-any.whl", hash = "sha256:1054e8e47ebd686e078c0bb0eaf31e6ce69c966058d122f2c0c950311f9f3ede", size = 204010, upload-time = "2026-01-18T04:50:09.978Z" }, +] + +[[package]] +name = "bleach" +version = "6.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "webencodings" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/07/18/3c8523962314be6bf4c8989c79ad9531c825210dd13a8669f6b84336e8bd/bleach-6.3.0.tar.gz", hash = "sha256:6f3b91b1c0a02bb9a78b5a454c92506aa0fdf197e1d5e114d2e00c6f64306d22", size = 203533, upload-time = "2025-10-27T17:57:39.211Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/3a/577b549de0cc09d95f11087ee63c739bba856cd3952697eec4c4bb91350a/bleach-6.3.0-py3-none-any.whl", hash = "sha256:fe10ec77c93ddf3d13a73b035abaac7a9f5e436513864ccdad516693213c65d6", size = 164437, upload-time = "2025-10-27T17:57:37.538Z" }, +] + +[[package]] +name = "blessed" +version = "1.29.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinxed", marker = "sys_platform == 'win32'" }, + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/cb/1f/ed37dbe0fd7f026cfbff0d968b924f1a53411e1c3a4639762467d3b06d24/blessed-1.29.0.tar.gz", hash = "sha256:4938cbfea8280885c853c0700850704aeacb25a97fca56de5e1e30ca63a0f1aa", size = 13950929, upload-time = "2026-02-01T15:26:38.202Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ff/47/566dcc08f8037511355a49220a3eecb795f955bb6145f419d5e60dbeaa00/blessed-1.29.0-py3-none-any.whl", hash = "sha256:cd5f339a308ac5e97d814c4bcbf7ce9723c465ca73c42744ea72646a0c653f6e", size = 100645, upload-time = "2026-02-01T15:26:35.632Z" }, +] + +[[package]] +name = "blessings" +version = "1.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5c/f8/9f5e69a63a9243448350b44c87fae74588aa634979e6c0c501f26a4f6df7/blessings-1.7.tar.gz", hash = "sha256:98e5854d805f50a5b58ac2333411b0482516a8210f23f43308baeb58d77c157d", size = 28194, upload-time = "2018-06-21T14:00:25.518Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/03/74/489f85a78247609c6b4f13733cbf3ba0d864b11aa565617b645d6fdf2a4a/blessings-1.7-py3-none-any.whl", hash = "sha256:b1fdd7e7a675295630f9ae71527a8ebc10bfefa236b3d6aa4932ee4462c17ba3", size = 18460, upload-time = "2018-06-21T14:00:24.412Z" }, +] + +[[package]] +name = "boto3" +version = "1.26.76" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, + { name = "jmespath" }, + { name = "s3transfer" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/29/a8/3ffdf9744fd5d0330cd0303ff3bd52c1491934e5bd5fba2353d14641685f/boto3-1.26.76.tar.gz", hash = "sha256:30c7d967ed1c6b5a05643e42cae9d4d36c3f1cb6782637ddc7007a104cfd9027", size = 104194, upload-time = "2023-02-21T21:23:47.28Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/95/a43050c34b38d38379a9fea1986492c9d70b7ee4522f80a0f09117443b55/boto3-1.26.76-py3-none-any.whl", hash = "sha256:b4c2969b7677762914394b8273cc1905dfe5b71f250741c1a575487ae357e729", size = 132672, upload-time = "2023-02-21T21:23:43.783Z" }, +] + +[[package]] +name = "botocore" +version = "1.29.76" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jmespath" }, + { name = "python-dateutil" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fb/4b/87b54878085654cd3a01175b849e273cbf049bc01a141e1b9b512d956a9a/botocore-1.29.76.tar.gz", hash = "sha256:c2f67b6b3f8acf2968eafca06526f07b9fb0d27bac4c68a635d51abb675134a7", size = 10806066, upload-time = "2023-02-21T21:23:31.884Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/93/e862d4b2ec9b0c8f7a6ee3141df138c00aa91de42839e55b68e3ebb53bf2/botocore-1.29.76-py3-none-any.whl", hash = "sha256:70735b00cd529f152992231ca6757e458e5ec25db43767b3526e9a35b2f143b7", size = 10419210, upload-time = "2023-02-21T21:23:27.086Z" }, +] + +[[package]] +name = "bpython" +version = "0.21" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "curtsies" }, + { name = "cwcwidth" }, + { name = "greenlet" }, + { name = "pygments" }, + { name = "pyxdg" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8f/34/7bdeba9999d2dfe5c0682291966bfa7edcedf2859885fa0037b8a38d0878/bpython-0.21.tar.gz", hash = "sha256:88aa9b89974f6a7726499a2608fa7ded216d84c69e78114ab2ef996a45709487", size = 208206, upload-time = "2021-01-25T08:16:36.487Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a8/d8/b05ef2d144b9551ba4db2737b73f42692f9ec115aa4fde436794745fca7e/bpython-0.21-py3-none-any.whl", hash = "sha256:64a2032052c629f0fc2d215cdcf3cbdc005d9001a4e8c11b2126e80899be77fb", size = 180463, upload-time = "2021-01-25T08:16:34.114Z" }, +] + +[[package]] +name = "celery" +version = "4.4.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "billiard" }, + { name = "kombu" }, + { name = "pytz" }, + { name = "vine" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fe/58/c7ced9705c2cedf526e183e428d1b145910cb8bc7ea537a2ec9a6552c056/celery-4.4.7.tar.gz", hash = "sha256:d220b13a8ed57c78149acf82c006785356071844afe0b27012a4991d44026f9f", size = 1469812, upload-time = "2020-07-31T17:42:18.792Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c8/0c/609e3611d20c9f8d883852d1be5516671f630fb08c8c1e56911567dfba7b/celery-4.4.7-py2.py3-none-any.whl", hash = "sha256:a92e1d56e650781fb747032a3997d16236d037c8199eacd5217d1a72893bca45", size = 427577, upload-time = "2020-07-31T17:41:39.793Z" }, +] + +[[package]] +name = "certifi" +version = "2026.1.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e0/2d/a891ca51311197f6ad14a7ef42e2399f36cf2f9bd44752b3dc4eab60fdc5/certifi-2026.1.4.tar.gz", hash = "sha256:ac726dd470482006e014ad384921ed6438c457018f4b3d204aea4281258b2120", size = 154268, upload-time = "2026-01-04T02:42:41.825Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e6/ad/3cc14f097111b4de0040c83a525973216457bbeeb63739ef1ed275c1c021/certifi-2026.1.4-py3-none-any.whl", hash = "sha256:9943707519e4add1115f44c2bc244f782c0249876bf51b6599fee1ffbedd685c", size = 152900, upload-time = "2026-01-04T02:42:40.15Z" }, +] + +[[package]] +name = "cffi" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pycparser", marker = "implementation_name != 'PyPy'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/eb/56/b1ba7935a17738ae8453301356628e8147c79dbb825bcbc73dc7401f9846/cffi-2.0.0.tar.gz", hash = "sha256:44d1b5909021139fe36001ae048dbdde8214afa20200eda0f64c068cac5d5529", size = 523588, upload-time = "2025-09-08T23:24:04.541Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/93/d7/516d984057745a6cd96575eea814fe1edd6646ee6efd552fb7b0921dec83/cffi-2.0.0-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:0cf2d91ecc3fcc0625c2c530fe004f82c110405f101548512cce44322fa8ac44", size = 184283, upload-time = "2025-09-08T23:22:08.01Z" }, + { url = "https://files.pythonhosted.org/packages/9e/84/ad6a0b408daa859246f57c03efd28e5dd1b33c21737c2db84cae8c237aa5/cffi-2.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f73b96c41e3b2adedc34a7356e64c8eb96e03a3782b535e043a986276ce12a49", size = 180504, upload-time = "2025-09-08T23:22:10.637Z" }, + { url = "https://files.pythonhosted.org/packages/50/bd/b1a6362b80628111e6653c961f987faa55262b4002fcec42308cad1db680/cffi-2.0.0-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:53f77cbe57044e88bbd5ed26ac1d0514d2acf0591dd6bb02a3ae37f76811b80c", size = 208811, upload-time = "2025-09-08T23:22:12.267Z" }, + { url = "https://files.pythonhosted.org/packages/4f/27/6933a8b2562d7bd1fb595074cf99cc81fc3789f6a6c05cdabb46284a3188/cffi-2.0.0-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:3e837e369566884707ddaf85fc1744b47575005c0a229de3327f8f9a20f4efeb", size = 216402, upload-time = "2025-09-08T23:22:13.455Z" }, + { url = "https://files.pythonhosted.org/packages/05/eb/b86f2a2645b62adcfff53b0dd97e8dfafb5c8aa864bd0d9a2c2049a0d551/cffi-2.0.0-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:5eda85d6d1879e692d546a078b44251cdd08dd1cfb98dfb77b670c97cee49ea0", size = 203217, upload-time = "2025-09-08T23:22:14.596Z" }, + { url = "https://files.pythonhosted.org/packages/9f/e0/6cbe77a53acf5acc7c08cc186c9928864bd7c005f9efd0d126884858a5fe/cffi-2.0.0-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:9332088d75dc3241c702d852d4671613136d90fa6881da7d770a483fd05248b4", size = 203079, upload-time = "2025-09-08T23:22:15.769Z" }, + { url = "https://files.pythonhosted.org/packages/98/29/9b366e70e243eb3d14a5cb488dfd3a0b6b2f1fb001a203f653b93ccfac88/cffi-2.0.0-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fc7de24befaeae77ba923797c7c87834c73648a05a4bde34b3b7e5588973a453", size = 216475, upload-time = "2025-09-08T23:22:17.427Z" }, + { url = "https://files.pythonhosted.org/packages/21/7a/13b24e70d2f90a322f2900c5d8e1f14fa7e2a6b3332b7309ba7b2ba51a5a/cffi-2.0.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf364028c016c03078a23b503f02058f1814320a56ad535686f90565636a9495", size = 218829, upload-time = "2025-09-08T23:22:19.069Z" }, + { url = "https://files.pythonhosted.org/packages/60/99/c9dc110974c59cc981b1f5b66e1d8af8af764e00f0293266824d9c4254bc/cffi-2.0.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e11e82b744887154b182fd3e7e8512418446501191994dbf9c9fc1f32cc8efd5", size = 211211, upload-time = "2025-09-08T23:22:20.588Z" }, + { url = "https://files.pythonhosted.org/packages/49/72/ff2d12dbf21aca1b32a40ed792ee6b40f6dc3a9cf1644bd7ef6e95e0ac5e/cffi-2.0.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8ea985900c5c95ce9db1745f7933eeef5d314f0565b27625d9a10ec9881e1bfb", size = 218036, upload-time = "2025-09-08T23:22:22.143Z" }, + { url = "https://files.pythonhosted.org/packages/e2/cc/027d7fb82e58c48ea717149b03bcadcbdc293553edb283af792bd4bcbb3f/cffi-2.0.0-cp310-cp310-win32.whl", hash = "sha256:1f72fb8906754ac8a2cc3f9f5aaa298070652a0ffae577e0ea9bd480dc3c931a", size = 172184, upload-time = "2025-09-08T23:22:23.328Z" }, + { url = "https://files.pythonhosted.org/packages/33/fa/072dd15ae27fbb4e06b437eb6e944e75b068deb09e2a2826039e49ee2045/cffi-2.0.0-cp310-cp310-win_amd64.whl", hash = "sha256:b18a3ed7d5b3bd8d9ef7a8cb226502c6bf8308df1525e1cc676c3680e7176739", size = 182790, upload-time = "2025-09-08T23:22:24.752Z" }, +] + +[[package]] +name = "channels" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/96/e2/10d949dca9eb8a85c5735efefe3309033419e7d4f4193a70f6ede58b2951/channels-4.2.0.tar.gz", hash = "sha256:d9e707487431ba5dbce9af982970dab3b0efd786580fadb99e45dca5e39fdd59", size = 26554, upload-time = "2024-11-15T15:46:19.324Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7e/4e/f36a0e2c04504014385cbc13119a15b8a716e524e8e5ed9480581397691a/channels-4.2.0-py3-none-any.whl", hash = "sha256:6b75bc8d6888fb7236e7e7bf1948520b72d296ad08216a242fc56b1db0ffde1a", size = 30935, upload-time = "2024-11-15T15:46:17.361Z" }, +] + +[[package]] +name = "channels-redis" +version = "4.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "channels" }, + { name = "msgpack" }, + { name = "redis" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/8d/bf96c62e3ca6c5ae59eb3482804afbe026c1c98b05b3ab65a0d46663644a/channels_redis-4.0.0.tar.gz", hash = "sha256:122414f29f525f7b9e0c9d59cdcfc4dc1b0eecba16fbb6a1c23f1d9b58f49dcb", size = 20351, upload-time = "2022-10-07T09:54:48.214Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5d/9c/5307e139eb143ec9e6c74dde733bcd50c6c6a281185d395822001ff6bec6/channels_redis-4.0.0-py3-none-any.whl", hash = "sha256:81b59d68f53313e1aa891f23591841b684abb936b42e4d1a966d9e4dc63a95ec", size = 18050, upload-time = "2022-10-07T09:54:44.647Z" }, +] + +[[package]] +name = "charset-normalizer" +version = "3.4.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/13/69/33ddede1939fdd074bce5434295f38fae7136463422fe4fd3e0e89b98062/charset_normalizer-3.4.4.tar.gz", hash = "sha256:94537985111c35f28720e43603b8e7b43a6ecfb2ce1d3058bbe955b73404e21a", size = 129418, upload-time = "2025-10-14T04:42:32.879Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/b8/6d51fc1d52cbd52cd4ccedd5b5b2f0f6a11bbf6765c782298b0f3e808541/charset_normalizer-3.4.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:e824f1492727fa856dd6eda4f7cee25f8518a12f3c4a56a74e8095695089cf6d", size = 209709, upload-time = "2025-10-14T04:40:11.385Z" }, + { url = "https://files.pythonhosted.org/packages/5c/af/1f9d7f7faafe2ddfb6f72a2e07a548a629c61ad510fe60f9630309908fef/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4bd5d4137d500351a30687c2d3971758aac9a19208fc110ccb9d7188fbe709e8", size = 148814, upload-time = "2025-10-14T04:40:13.135Z" }, + { url = "https://files.pythonhosted.org/packages/79/3d/f2e3ac2bbc056ca0c204298ea4e3d9db9b4afe437812638759db2c976b5f/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_armv7l.manylinux_2_17_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:027f6de494925c0ab2a55eab46ae5129951638a49a34d87f4c3eda90f696b4ad", size = 144467, upload-time = "2025-10-14T04:40:14.728Z" }, + { url = "https://files.pythonhosted.org/packages/ec/85/1bf997003815e60d57de7bd972c57dc6950446a3e4ccac43bc3070721856/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:f820802628d2694cb7e56db99213f930856014862f3fd943d290ea8438d07ca8", size = 162280, upload-time = "2025-10-14T04:40:16.14Z" }, + { url = "https://files.pythonhosted.org/packages/3e/8e/6aa1952f56b192f54921c436b87f2aaf7c7a7c3d0d1a765547d64fd83c13/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:798d75d81754988d2565bff1b97ba5a44411867c0cf32b77a7e8f8d84796b10d", size = 159454, upload-time = "2025-10-14T04:40:17.567Z" }, + { url = "https://files.pythonhosted.org/packages/36/3b/60cbd1f8e93aa25d1c669c649b7a655b0b5fb4c571858910ea9332678558/charset_normalizer-3.4.4-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9d1bb833febdff5c8927f922386db610b49db6e0d4f4ee29601d71e7c2694313", size = 153609, upload-time = "2025-10-14T04:40:19.08Z" }, + { url = "https://files.pythonhosted.org/packages/64/91/6a13396948b8fd3c4b4fd5bc74d045f5637d78c9675585e8e9fbe5636554/charset_normalizer-3.4.4-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:9cd98cdc06614a2f768d2b7286d66805f94c48cde050acdbbb7db2600ab3197e", size = 151849, upload-time = "2025-10-14T04:40:20.607Z" }, + { url = "https://files.pythonhosted.org/packages/b7/7a/59482e28b9981d105691e968c544cc0df3b7d6133152fb3dcdc8f135da7a/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:077fbb858e903c73f6c9db43374fd213b0b6a778106bc7032446a8e8b5b38b93", size = 151586, upload-time = "2025-10-14T04:40:21.719Z" }, + { url = "https://files.pythonhosted.org/packages/92/59/f64ef6a1c4bdd2baf892b04cd78792ed8684fbc48d4c2afe467d96b4df57/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:244bfb999c71b35de57821b8ea746b24e863398194a4014e4c76adc2bbdfeff0", size = 145290, upload-time = "2025-10-14T04:40:23.069Z" }, + { url = "https://files.pythonhosted.org/packages/6b/63/3bf9f279ddfa641ffa1962b0db6a57a9c294361cc2f5fcac997049a00e9c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:64b55f9dce520635f018f907ff1b0df1fdc31f2795a922fb49dd14fbcdf48c84", size = 163663, upload-time = "2025-10-14T04:40:24.17Z" }, + { url = "https://files.pythonhosted.org/packages/ed/09/c9e38fc8fa9e0849b172b581fd9803bdf6e694041127933934184e19f8c3/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:faa3a41b2b66b6e50f84ae4a68c64fcd0c44355741c6374813a800cd6695db9e", size = 151964, upload-time = "2025-10-14T04:40:25.368Z" }, + { url = "https://files.pythonhosted.org/packages/d2/d1/d28b747e512d0da79d8b6a1ac18b7ab2ecfd81b2944c4c710e166d8dd09c/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:6515f3182dbe4ea06ced2d9e8666d97b46ef4c75e326b79bb624110f122551db", size = 161064, upload-time = "2025-10-14T04:40:26.806Z" }, + { url = "https://files.pythonhosted.org/packages/bb/9a/31d62b611d901c3b9e5500c36aab0ff5eb442043fb3a1c254200d3d397d9/charset_normalizer-3.4.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cc00f04ed596e9dc0da42ed17ac5e596c6ccba999ba6bd92b0e0aef2f170f2d6", size = 155015, upload-time = "2025-10-14T04:40:28.284Z" }, + { url = "https://files.pythonhosted.org/packages/1f/f3/107e008fa2bff0c8b9319584174418e5e5285fef32f79d8ee6a430d0039c/charset_normalizer-3.4.4-cp310-cp310-win32.whl", hash = "sha256:f34be2938726fc13801220747472850852fe6b1ea75869a048d6f896838c896f", size = 99792, upload-time = "2025-10-14T04:40:29.613Z" }, + { url = "https://files.pythonhosted.org/packages/eb/66/e396e8a408843337d7315bab30dbf106c38966f1819f123257f5520f8a96/charset_normalizer-3.4.4-cp310-cp310-win_amd64.whl", hash = "sha256:a61900df84c667873b292c3de315a786dd8dac506704dea57bc957bd31e22c7d", size = 107198, upload-time = "2025-10-14T04:40:30.644Z" }, + { url = "https://files.pythonhosted.org/packages/b5/58/01b4f815bf0312704c267f2ccb6e5d42bcc7752340cd487bc9f8c3710597/charset_normalizer-3.4.4-cp310-cp310-win_arm64.whl", hash = "sha256:cead0978fc57397645f12578bfd2d5ea9138ea0fac82b2f63f7f7c6877986a69", size = 100262, upload-time = "2025-10-14T04:40:32.108Z" }, + { url = "https://files.pythonhosted.org/packages/0a/4c/925909008ed5a988ccbb72dcc897407e5d6d3bd72410d69e051fc0c14647/charset_normalizer-3.4.4-py3-none-any.whl", hash = "sha256:7a32c560861a02ff789ad905a2fe94e3f840803362c84fecf1851cb4cf3dc37f", size = 53402, upload-time = "2025-10-14T04:42:31.76Z" }, +] + +[[package]] +name = "click" +version = "8.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3d/fa/656b739db8587d7b5dfa22e22ed02566950fbfbcdc20311993483657a5c0/click-8.3.1.tar.gz", hash = "sha256:12ff4785d337a1bb490bb7e9c2b1ee5da3112e94a8622f26a6c77f5d2fc6842a", size = 295065, upload-time = "2025-11-15T20:45:42.706Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/98/78/01c019cdb5d6498122777c1a43056ebb3ebfeef2076d9d026bfe15583b2b/click-8.3.1-py3-none-any.whl", hash = "sha256:981153a64e25f12d547d3426c367a4857371575ee7ad18df2a6183ab0545b2a6", size = 108274, upload-time = "2025-11-15T20:45:41.139Z" }, +] + +[[package]] +name = "codabench" +version = "0.1.0" +source = { virtual = "." } +dependencies = [ + { name = "aiofiles" }, + { name = "argh" }, + { name = "azure-storage-blob" }, + { name = "azure-storage-common" }, + { name = "bleach" }, + { name = "blessings" }, + { name = "boto3" }, + { name = "botocore" }, + { name = "bpython" }, + { name = "celery" }, + { name = "channels" }, + { name = "channels-redis" }, + { name = "coreapi" }, + { name = "dj-database-url" }, + { name = "django" }, + { name = "django-ajax-selects" }, + { name = "django-cors-middleware" }, + { name = "django-debug-toolbar" }, + { name = "django-enforce-host" }, + { name = "django-extensions" }, + { name = "django-filter" }, + { name = "django-oauth-toolkit" }, + { name = "django-querycount" }, + { name = "django-redis" }, + { name = "django-storages", extra = ["azure"] }, + { name = "django-su" }, + { name = "djangorestframework" }, + { name = "djangorestframework-csv" }, + { name = "drf-extensions" }, + { name = "drf-extra-fields" }, + { name = "drf-spectacular" }, + { name = "drf-writable-nested" }, + { name = "factory-boy" }, + { name = "flex" }, + { name = "gunicorn" }, + { name = "ipdb" }, + { name = "jinja2" }, + { name = "loguru" }, + { name = "markdown" }, + { name = "oyaml" }, + { name = "pillow" }, + { name = "psycopg2-binary" }, + { name = "pygments" }, + { name = "pyrabbit2" }, + { name = "python-dateutil" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "s3transfer" }, + { name = "six" }, + { name = "social-auth-app-django" }, + { name = "social-auth-core" }, + { name = "twisted" }, + { name = "tzdata" }, + { name = "urllib3" }, + { name = "uvicorn" }, + { name = "watchdog" }, + { name = "websockets" }, + { name = "whitenoise" }, +] + +[package.dev-dependencies] +dev = [ + { name = "flake8" }, + { name = "pytest" }, + { name = "pytest-django" }, +] + +[package.metadata] +requires-dist = [ + { name = "aiofiles", specifier = "==0.4.0" }, + { name = "argh", specifier = "==0.26.2" }, + { name = "azure-storage-blob", specifier = ">=12,<13" }, + { name = "azure-storage-common", specifier = "==2.1.0" }, + { name = "bleach", specifier = ">=5.0.0" }, + { name = "blessings", specifier = "==1.7" }, + { name = "boto3", specifier = "==1.26.76" }, + { name = "botocore", specifier = "==1.29.76" }, + { name = "bpython", specifier = ">=0.21.0,<0.22" }, + { name = "celery", specifier = "==4.4.7" }, + { name = "channels", specifier = "==4.2.0" }, + { name = "channels-redis", specifier = "==4.0.0" }, + { name = "coreapi", specifier = ">=2.3.3,<3" }, + { name = "dj-database-url", specifier = "==0.4.2" }, + { name = "django", specifier = ">=4.2.0,<5" }, + { name = "django-ajax-selects", specifier = "==2.0.0" }, + { name = "django-cors-middleware", specifier = "==1.5.0" }, + { name = "django-debug-toolbar", specifier = "==3.2" }, + { name = "django-enforce-host", specifier = "==1.0.1" }, + { name = "django-extensions", specifier = ">=3.2,<4" }, + { name = "django-filter", specifier = "==2.4.0" }, + { name = "django-oauth-toolkit", specifier = "==1.6.3" }, + { name = "django-querycount", specifier = "==0.7.0" }, + { name = "django-redis", specifier = "==4.12.1" }, + { name = "django-storages", extras = ["azure"], specifier = ">=1.14.6,<2" }, + { name = "django-su", specifier = ">=1.0.0,<2" }, + { name = "djangorestframework", specifier = ">=3.13.0" }, + { name = "djangorestframework-csv", specifier = "==3.0.1" }, + { name = "drf-extensions", specifier = "==0.4.0" }, + { name = "drf-extra-fields", specifier = ">=3.5.0" }, + { name = "drf-spectacular", specifier = ">=0.28.0,<0.29" }, + { name = "drf-writable-nested", specifier = "==0.6.2" }, + { name = "factory-boy", specifier = "==2.11.1" }, + { name = "flex", specifier = "==6.12.0" }, + { name = "gunicorn", specifier = "==22.0.0" }, + { name = "ipdb", specifier = "==0.13" }, + { name = "jinja2", specifier = "==3.1.4" }, + { name = "loguru", specifier = ">=0.7.3,<0.8" }, + { name = "markdown", specifier = "==2.6.11" }, + { name = "oyaml", specifier = "==0.7" }, + { name = "pillow", specifier = "==10.3.0" }, + { name = "psycopg2-binary", specifier = ">=2.9.9,<3" }, + { name = "pygments", specifier = "==2.2.0" }, + { name = "pyrabbit2", specifier = "==1.0.7" }, + { name = "python-dateutil", specifier = "==2.7.3" }, + { name = "pyyaml", specifier = "==5.3.1" }, + { name = "requests", specifier = "==2.32.2" }, + { name = "s3transfer", specifier = "==0.6.0" }, + { name = "six", specifier = "==1.16.0" }, + { name = "social-auth-app-django", specifier = ">=5.0.0,<6" }, + { name = "social-auth-core", specifier = ">=4.1.0,<5" }, + { name = "twisted", specifier = "==24.7.0" }, + { name = "tzdata", specifier = ">=2025.3" }, + { name = "urllib3", specifier = ">=1.25.4,<1.27" }, + { name = "uvicorn", specifier = ">=0.22.0,<0.23" }, + { name = "watchdog", specifier = "==2.1.1" }, + { name = "websockets", specifier = ">=10.4.0,<11" }, + { name = "whitenoise", specifier = "==5.2.0" }, +] + +[package.metadata.requires-dev] +dev = [ + { name = "flake8", specifier = ">=3.8.4" }, + { name = "pytest", specifier = "==7.4.4" }, + { name = "pytest-django", specifier = "==4.11.1" }, +] + +[[package]] +name = "colorama" +version = "0.4.6" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/53/6f443c9a4a8358a93a6792e2acffb9d9d5cb0a5cfd8802644b7b1c9a02e4/colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44", size = 27697, upload-time = "2022-10-25T02:36:22.414Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d1/d6/3965ed04c63042e047cb6a3e6ed1a63a35087b6a609aa3a15ed8ac56c221/colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6", size = 25335, upload-time = "2022-10-25T02:36:20.889Z" }, +] + +[[package]] +name = "constantly" +version = "23.10.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/6f/cb2a94494ff74aa9528a36c5b1422756330a75a8367bf20bd63171fc324d/constantly-23.10.4.tar.gz", hash = "sha256:aa92b70a33e2ac0bb33cd745eb61776594dc48764b06c35e0efd050b7f1c7cbd", size = 13300, upload-time = "2023-10-28T23:18:24.316Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b8/40/c199d095151addf69efdb4b9ca3a4f20f70e20508d6222bffb9b76f58573/constantly-23.10.4-py3-none-any.whl", hash = "sha256:3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9", size = 13547, upload-time = "2023-10-28T23:18:23.038Z" }, +] + +[[package]] +name = "coreapi" +version = "2.3.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "coreschema" }, + { name = "itypes" }, + { name = "requests" }, + { name = "uritemplate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ca/f2/5fc0d91a0c40b477b016c0f77d9d419ba25fc47cc11a96c825875ddce5a6/coreapi-2.3.3.tar.gz", hash = "sha256:46145fcc1f7017c076a2ef684969b641d18a2991051fddec9458ad3f78ffc1cb", size = 18788, upload-time = "2017-10-05T14:04:38.221Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fc/3a/9dedaad22962770edd334222f2b3c3e7ad5e1c8cab1d6a7992c30329e2e5/coreapi-2.3.3-py2.py3-none-any.whl", hash = "sha256:bf39d118d6d3e171f10df9ede5666f63ad80bba9a29a8ec17726a66cf52ee6f3", size = 25636, upload-time = "2017-10-05T14:04:40.687Z" }, +] + +[[package]] +name = "coreschema" +version = "0.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "jinja2" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/93/08/1d105a70104e078718421e6c555b8b293259e7fc92f7e9a04869947f198f/coreschema-0.0.4.tar.gz", hash = "sha256:9503506007d482ab0867ba14724b93c18a33b22b6d19fb419ef2d239dd4a1607", size = 10974, upload-time = "2017-02-08T12:23:49.42Z" } + +[[package]] +name = "cryptography" +version = "46.0.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cffi", marker = "platform_python_implementation != 'PyPy'" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/78/19/f748958276519adf6a0c1e79e7b8860b4830dda55ccdf29f2719b5fc499c/cryptography-46.0.4.tar.gz", hash = "sha256:bfd019f60f8abc2ed1b9be4ddc21cfef059c841d86d710bb69909a688cbb8f59", size = 749301, upload-time = "2026-01-28T00:24:37.379Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8d/99/157aae7949a5f30d51fcb1a9851e8ebd5c74bf99b5285d8bb4b8b9ee641e/cryptography-46.0.4-cp311-abi3-macosx_10_9_universal2.whl", hash = "sha256:281526e865ed4166009e235afadf3a4c4cba6056f99336a99efba65336fd5485", size = 7173686, upload-time = "2026-01-28T00:23:07.515Z" }, + { url = "https://files.pythonhosted.org/packages/87/91/874b8910903159043b5c6a123b7e79c4559ddd1896e38967567942635778/cryptography-46.0.4-cp311-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5f14fba5bf6f4390d7ff8f086c566454bff0411f6d8aa7af79c88b6f9267aecc", size = 4275871, upload-time = "2026-01-28T00:23:09.439Z" }, + { url = "https://files.pythonhosted.org/packages/c0/35/690e809be77896111f5b195ede56e4b4ed0435b428c2f2b6d35046fbb5e8/cryptography-46.0.4-cp311-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:47bcd19517e6389132f76e2d5303ded6cf3f78903da2158a671be8de024f4cd0", size = 4423124, upload-time = "2026-01-28T00:23:11.529Z" }, + { url = "https://files.pythonhosted.org/packages/1a/5b/a26407d4f79d61ca4bebaa9213feafdd8806dc69d3d290ce24996d3cfe43/cryptography-46.0.4-cp311-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:01df4f50f314fbe7009f54046e908d1754f19d0c6d3070df1e6268c5a4af09fa", size = 4277090, upload-time = "2026-01-28T00:23:13.123Z" }, + { url = "https://files.pythonhosted.org/packages/0c/d8/4bb7aec442a9049827aa34cee1aa83803e528fa55da9a9d45d01d1bb933e/cryptography-46.0.4-cp311-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:5aa3e463596b0087b3da0dbe2b2487e9fc261d25da85754e30e3b40637d61f81", size = 4947652, upload-time = "2026-01-28T00:23:14.554Z" }, + { url = "https://files.pythonhosted.org/packages/2b/08/f83e2e0814248b844265802d081f2fac2f1cbe6cd258e72ba14ff006823a/cryptography-46.0.4-cp311-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:0a9ad24359fee86f131836a9ac3bffc9329e956624a2d379b613f8f8abaf5255", size = 4455157, upload-time = "2026-01-28T00:23:16.443Z" }, + { url = "https://files.pythonhosted.org/packages/0a/05/19d849cf4096448779d2dcc9bb27d097457dac36f7273ffa875a93b5884c/cryptography-46.0.4-cp311-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:dc1272e25ef673efe72f2096e92ae39dea1a1a450dd44918b15351f72c5a168e", size = 3981078, upload-time = "2026-01-28T00:23:17.838Z" }, + { url = "https://files.pythonhosted.org/packages/e6/89/f7bac81d66ba7cde867a743ea5b37537b32b5c633c473002b26a226f703f/cryptography-46.0.4-cp311-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:de0f5f4ec8711ebc555f54735d4c673fc34b65c44283895f1a08c2b49d2fd99c", size = 4276213, upload-time = "2026-01-28T00:23:19.257Z" }, + { url = "https://files.pythonhosted.org/packages/da/9f/7133e41f24edd827020ad21b068736e792bc68eecf66d93c924ad4719fb3/cryptography-46.0.4-cp311-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:eeeb2e33d8dbcccc34d64651f00a98cb41b2dc69cef866771a5717e6734dfa32", size = 4912190, upload-time = "2026-01-28T00:23:21.244Z" }, + { url = "https://files.pythonhosted.org/packages/a6/f7/6d43cbaddf6f65b24816e4af187d211f0bc536a29961f69faedc48501d8e/cryptography-46.0.4-cp311-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:3d425eacbc9aceafd2cb429e42f4e5d5633c6f873f5e567077043ef1b9bbf616", size = 4454641, upload-time = "2026-01-28T00:23:22.866Z" }, + { url = "https://files.pythonhosted.org/packages/9e/4f/ebd0473ad656a0ac912a16bd07db0f5d85184924e14fc88feecae2492834/cryptography-46.0.4-cp311-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:91627ebf691d1ea3976a031b61fb7bac1ccd745afa03602275dda443e11c8de0", size = 4405159, upload-time = "2026-01-28T00:23:25.278Z" }, + { url = "https://files.pythonhosted.org/packages/d1/f7/7923886f32dc47e27adeff8246e976d77258fd2aa3efdd1754e4e323bf49/cryptography-46.0.4-cp311-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2d08bc22efd73e8854b0b7caff402d735b354862f1145d7be3b9c0f740fef6a0", size = 4666059, upload-time = "2026-01-28T00:23:26.766Z" }, + { url = "https://files.pythonhosted.org/packages/eb/a7/0fca0fd3591dffc297278a61813d7f661a14243dd60f499a7a5b48acb52a/cryptography-46.0.4-cp311-abi3-win32.whl", hash = "sha256:82a62483daf20b8134f6e92898da70d04d0ef9a75829d732ea1018678185f4f5", size = 3026378, upload-time = "2026-01-28T00:23:28.317Z" }, + { url = "https://files.pythonhosted.org/packages/2d/12/652c84b6f9873f0909374864a57b003686c642ea48c84d6c7e2c515e6da5/cryptography-46.0.4-cp311-abi3-win_amd64.whl", hash = "sha256:6225d3ebe26a55dbc8ead5ad1265c0403552a63336499564675b29eb3184c09b", size = 3478614, upload-time = "2026-01-28T00:23:30.275Z" }, + { url = "https://files.pythonhosted.org/packages/56/f7/f648fdbb61d0d45902d3f374217451385edc7e7768d1b03ff1d0e5ffc17b/cryptography-46.0.4-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a9556ba711f7c23f77b151d5798f3ac44a13455cc68db7697a1096e6d0563cab", size = 7169583, upload-time = "2026-01-28T00:23:56.558Z" }, + { url = "https://files.pythonhosted.org/packages/d8/cc/8f3224cbb2a928de7298d6ed4790f5ebc48114e02bdc9559196bfb12435d/cryptography-46.0.4-cp38-abi3-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8bf75b0259e87fa70bddc0b8b4078b76e7fd512fd9afae6c1193bcf440a4dbef", size = 4275419, upload-time = "2026-01-28T00:23:58.364Z" }, + { url = "https://files.pythonhosted.org/packages/17/43/4a18faa7a872d00e4264855134ba82d23546c850a70ff209e04ee200e76f/cryptography-46.0.4-cp38-abi3-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:3c268a3490df22270955966ba236d6bc4a8f9b6e4ffddb78aac535f1a5ea471d", size = 4419058, upload-time = "2026-01-28T00:23:59.867Z" }, + { url = "https://files.pythonhosted.org/packages/ee/64/6651969409821d791ba12346a124f55e1b76f66a819254ae840a965d4b9c/cryptography-46.0.4-cp38-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:812815182f6a0c1d49a37893a303b44eaac827d7f0d582cecfc81b6427f22973", size = 4278151, upload-time = "2026-01-28T00:24:01.731Z" }, + { url = "https://files.pythonhosted.org/packages/20/0b/a7fce65ee08c3c02f7a8310cc090a732344066b990ac63a9dfd0a655d321/cryptography-46.0.4-cp38-abi3-manylinux_2_28_ppc64le.whl", hash = "sha256:a90e43e3ef65e6dcf969dfe3bb40cbf5aef0d523dff95bfa24256be172a845f4", size = 4939441, upload-time = "2026-01-28T00:24:03.175Z" }, + { url = "https://files.pythonhosted.org/packages/db/a7/20c5701e2cd3e1dfd7a19d2290c522a5f435dd30957d431dcb531d0f1413/cryptography-46.0.4-cp38-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:a05177ff6296644ef2876fce50518dffb5bcdf903c85250974fc8bc85d54c0af", size = 4451617, upload-time = "2026-01-28T00:24:05.403Z" }, + { url = "https://files.pythonhosted.org/packages/00/dc/3e16030ea9aa47b63af6524c354933b4fb0e352257c792c4deeb0edae367/cryptography-46.0.4-cp38-abi3-manylinux_2_31_armv7l.whl", hash = "sha256:daa392191f626d50f1b136c9b4cf08af69ca8279d110ea24f5c2700054d2e263", size = 3977774, upload-time = "2026-01-28T00:24:06.851Z" }, + { url = "https://files.pythonhosted.org/packages/42/c8/ad93f14118252717b465880368721c963975ac4b941b7ef88f3c56bf2897/cryptography-46.0.4-cp38-abi3-manylinux_2_34_aarch64.whl", hash = "sha256:e07ea39c5b048e085f15923511d8121e4a9dc45cee4e3b970ca4f0d338f23095", size = 4277008, upload-time = "2026-01-28T00:24:08.926Z" }, + { url = "https://files.pythonhosted.org/packages/00/cf/89c99698151c00a4631fbfcfcf459d308213ac29e321b0ff44ceeeac82f1/cryptography-46.0.4-cp38-abi3-manylinux_2_34_ppc64le.whl", hash = "sha256:d5a45ddc256f492ce42a4e35879c5e5528c09cd9ad12420828c972951d8e016b", size = 4903339, upload-time = "2026-01-28T00:24:12.009Z" }, + { url = "https://files.pythonhosted.org/packages/03/c3/c90a2cb358de4ac9309b26acf49b2a100957e1ff5cc1e98e6c4996576710/cryptography-46.0.4-cp38-abi3-manylinux_2_34_x86_64.whl", hash = "sha256:6bb5157bf6a350e5b28aee23beb2d84ae6f5be390b2f8ee7ea179cda077e1019", size = 4451216, upload-time = "2026-01-28T00:24:13.975Z" }, + { url = "https://files.pythonhosted.org/packages/96/2c/8d7f4171388a10208671e181ca43cdc0e596d8259ebacbbcfbd16de593da/cryptography-46.0.4-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:dd5aba870a2c40f87a3af043e0dee7d9eb02d4aff88a797b48f2b43eff8c3ab4", size = 4404299, upload-time = "2026-01-28T00:24:16.169Z" }, + { url = "https://files.pythonhosted.org/packages/e9/23/cbb2036e450980f65c6e0a173b73a56ff3bccd8998965dea5cc9ddd424a5/cryptography-46.0.4-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:93d8291da8d71024379ab2cb0b5c57915300155ad42e07f76bea6ad838d7e59b", size = 4664837, upload-time = "2026-01-28T00:24:17.629Z" }, + { url = "https://files.pythonhosted.org/packages/0a/21/f7433d18fe6d5845329cbdc597e30caf983229c7a245bcf54afecc555938/cryptography-46.0.4-cp38-abi3-win32.whl", hash = "sha256:0563655cb3c6d05fb2afe693340bc050c30f9f34e15763361cf08e94749401fc", size = 3009779, upload-time = "2026-01-28T00:24:20.198Z" }, + { url = "https://files.pythonhosted.org/packages/3a/6a/bd2e7caa2facffedf172a45c1a02e551e6d7d4828658c9a245516a598d94/cryptography-46.0.4-cp38-abi3-win_amd64.whl", hash = "sha256:fa0900b9ef9c49728887d1576fd8d9e7e3ea872fa9b25ef9b64888adc434e976", size = 3466633, upload-time = "2026-01-28T00:24:21.851Z" }, +] + +[[package]] +name = "curtsies" +version = "0.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "blessed" }, + { name = "cwcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d1/18/5741cb42624089a815520d5b65c39c3e59673a77fd1fab6ad65bdebf2f91/curtsies-0.4.3.tar.gz", hash = "sha256:102a0ffbf952124f1be222fd6989da4ec7cce04e49f613009e5f54ad37618825", size = 53401, upload-time = "2025-06-05T06:33:20.099Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ab/9b/b8ee3720d056309f4ab667bfc85995c4351f67b22e8c2008612b70350c3a/curtsies-0.4.3-py3-none-any.whl", hash = "sha256:65a1b4d6ff887bd9b0f0836cc6dc68c3a2c65c57f51a62f0ee5df408edee1a99", size = 35482, upload-time = "2025-06-05T06:33:19.122Z" }, +] + +[[package]] +name = "cwcwidth" +version = "0.1.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7f/bc/1746c7650e8c676e7799d40fc31d37d88882c18d92fbcdd1d014c8c8786c/cwcwidth-0.1.11.tar.gz", hash = "sha256:594d8855a6319cc3ef36e0b6374fae02e4f4fe17cd87d0debe8b6e00eb186c17", size = 71727, upload-time = "2025-10-28T08:22:08.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cc/ee/8073e18f9ec39195b7d44d153eea900f409324b973626c571ccc61b0b7f3/cwcwidth-0.1.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:7bf37420fc4894ff21eedb069cd75f38a8f330a5c79501160a7bb21c79163ad9", size = 25105, upload-time = "2025-10-28T08:21:31.577Z" }, + { url = "https://files.pythonhosted.org/packages/f8/32/22d951c240200129e4b47849dcc6dd25f8222e5cf3812f08ad19dd1f0072/cwcwidth-0.1.11-cp310-cp310-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:fd61620714344d529250a6d7b5896f51261b65526c84299691cf062cbf4666ce", size = 93135, upload-time = "2025-10-28T08:21:33.009Z" }, + { url = "https://files.pythonhosted.org/packages/ab/d3/ef90bdf90a572dcad2eca0007752f452cd912ccec1a07b3bda3b95498d9e/cwcwidth-0.1.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea4a44ce6101a9f47491dae881cb97a31930e9d7ebd77854a2b7ee79674b3859", size = 96992, upload-time = "2025-10-28T08:21:34.168Z" }, + { url = "https://files.pythonhosted.org/packages/a4/f8/efa7c8ee215617ca5ec8ddf469e4d7578e9aecbe819e877c830ab1a847af/cwcwidth-0.1.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d72185b2c20d85b90ef22eeec650c9e48a0652f8787811b806f2d54f1b2bbe39", size = 95306, upload-time = "2025-10-28T08:21:35.44Z" }, + { url = "https://files.pythonhosted.org/packages/e8/b2/72263ab2f036398d1babc1b4ab8a6f1c84ed2c630eb1fbf3c48e7b44d68f/cwcwidth-0.1.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e8e32df4db4a6c15770b885795f8e1bb709fc272337d4c0567691130f66ab83a", size = 94791, upload-time = "2025-10-28T08:21:36.436Z" }, + { url = "https://files.pythonhosted.org/packages/89/e5/47790bea7f0a7abd6f50eb844caed668058819bd3edff2464b1b09755494/cwcwidth-0.1.11-cp310-cp310-win32.whl", hash = "sha256:0be3ab3e9b0b7691dce2c7099b038319cb5bc1384f53ec4c7e84371a92670db4", size = 23608, upload-time = "2025-10-28T08:21:37.691Z" }, + { url = "https://files.pythonhosted.org/packages/fa/3d/4ea6783ac7e3807204d589a167c57c5d18571c3f4723b322f139175f44e1/cwcwidth-0.1.11-cp310-cp310-win_amd64.whl", hash = "sha256:bdc00d41885d9ec4ef201e7f1c09225f895b63dde2b913bb5a62e9ce805ecf31", size = 25819, upload-time = "2025-10-28T08:21:38.458Z" }, +] + +[[package]] +name = "decorator" +version = "5.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/43/fa/6d96a0978d19e17b68d634497769987b16c8f4cd0a7a05048bec693caa6b/decorator-5.2.1.tar.gz", hash = "sha256:65f266143752f734b0a7cc83c46f4618af75b8c5911b00ccb61d0ac9b6da0360", size = 56711, upload-time = "2025-02-24T04:41:34.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/4e/8c/f3147f5c4b73e7550fe5f9352eaa956ae838d5c51eb58e7a25b9f3e2643b/decorator-5.2.1-py3-none-any.whl", hash = "sha256:d316bb415a2d9e2d2b3abcc4084c6502fc09240e292cd76a76afc106a1c8e04a", size = 9190, upload-time = "2025-02-24T04:41:32.565Z" }, +] + +[[package]] +name = "defusedxml" +version = "0.7.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0f/d5/c66da9b79e5bdb124974bfe172b4daf3c984ebd9c2a06e2b8a4dc7331c72/defusedxml-0.7.1.tar.gz", hash = "sha256:1bb3032db185915b62d7c6209c5a8792be6a32ab2fedacc84e01b52c51aa3e69", size = 75520, upload-time = "2021-03-08T10:59:26.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" }, +] + +[[package]] +name = "dj-database-url" +version = "0.4.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c8/4b/b23dbcf4c5711f26e2222bb2e300915c9c8d35e643b0af00c2d8f36c9490/dj-database-url-0.4.2.tar.gz", hash = "sha256:a6832d8445ee9d788c5baa48aef8130bf61fdc442f7d9a548424d25cd85c9f08", size = 4268, upload-time = "2017-01-05T17:47:41.756Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/91/84/50cbfabb91593cff18a37046986f7c2eb69224a694a52ae614711dfa11c6/dj_database_url-0.4.2-py2.py3-none-any.whl", hash = "sha256:e16d94c382ea0564c48038fa7fe8d9c890ef1ab1a8ec4cb48e732c124b9482fd", size = 5573, upload-time = "2017-01-05T17:47:42.749Z" }, +] + +[[package]] +name = "django" +version = "4.2.28" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asgiref" }, + { name = "sqlparse" }, + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/fa/a9/25b75b11a4c7a6efe1661c181afe504992e0659ca6eedb72a065cdd91a25/django-4.2.28.tar.gz", hash = "sha256:a4b9cd881991add394cafa8bb3b11ad1742d1e1470ba99c3ef53dc540316ccfe", size = 10464933, upload-time = "2026-02-03T13:55:27.686Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/68/20/6d0808bc7500a6c654eae17b53f791a50af2c3f3ac4f328cbec324948c31/django-4.2.28-py3-none-any.whl", hash = "sha256:49a23c1b83ef31525f8d71a57b040f91d34660edb3f086280a8519855655ed3c", size = 7995543, upload-time = "2026-02-03T13:55:09.798Z" }, +] + +[[package]] +name = "django-ajax-selects" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a4/0e/d3199bb8bf2b4e86e68ed7fc79813113a20fd93e6bab67a339963d0b8018/django-ajax-selects-2.0.0.tar.gz", hash = "sha256:f87325b25cae6e9e53b1290356e8d0e17587de57d3d19682ab3912b6bde68cb5", size = 39025, upload-time = "2020-10-04T12:42:51.814Z" } + +[[package]] +name = "django-cors-middleware" +version = "1.5.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/21/b9/1dea04e58f3e0b0d3c14499c27527464ef1e4e5e4e164c621927226f5ef5/django-cors-middleware-1.5.0.tar.gz", hash = "sha256:856dbe4d7aae65844ccc68acb49c6da7dbf7cbacaf5bcf37019f4c0c60b3be84", size = 8914, upload-time = "2019-12-09T19:42:02.961Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/99/3c/22c2f99afb6b5645c2bac806568b1c750b14a083fe65a75cdbca1d40afb1/django_cors_middleware-1.5.0-py3-none-any.whl", hash = "sha256:5bbdea85e22909d596e26f6e0dbc174d5521429fa3943ae02a2c6c48e76c88c7", size = 9195, upload-time = "2019-12-09T19:42:01.105Z" }, +] + +[[package]] +name = "django-debug-toolbar" +version = "3.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "sqlparse" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/06/2f/accc248441f1868e3ec3b5f036cde61064de3aa650649ef856dd9ee574b3/django-debug-toolbar-3.2.tar.gz", hash = "sha256:84e2607d900dbd571df0a2acf380b47c088efb787dce9805aefeb407341961d2", size = 115348, upload-time = "2020-12-03T08:16:13.529Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e2/57/7db3f8d53e1e66584e1e9ae13b327d59b5a8317db27365cea2a98b1e8ce0/django_debug_toolbar-3.2-py3-none-any.whl", hash = "sha256:9e5a25d0c965f7e686f6a8ba23613ca9ca30184daa26487706d4829f5cfb697a", size = 200405, upload-time = "2020-12-03T08:16:11.574Z" }, +] + +[[package]] +name = "django-enforce-host" +version = "1.0.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ec/be/42be6c659757b47808d2e76bfbe1b40e9f48acd62eff63307cbdb0687204/django-enforce-host-1.0.1.tar.gz", hash = "sha256:40c4b4830e7fc27710c1606e8f3a91e82f8f1d5ae6c26aaec76f453b1407fc3d", size = 5778, upload-time = "2017-11-24T16:37:15.983Z" } + +[[package]] +name = "django-extensions" +version = "3.2.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/f1/318684c9466968bf9a9c221663128206e460c1a67f595055be4b284cde8a/django-extensions-3.2.3.tar.gz", hash = "sha256:44d27919d04e23b3f40231c4ab7af4e61ce832ef46d610cc650d53e68328410a", size = 277216, upload-time = "2023-06-05T17:09:01.447Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a7/7e/ba12b9660642663f5273141018d2bec0a1cae1711f4f6d1093920e157946/django_extensions-3.2.3-py3-none-any.whl", hash = "sha256:9600b7562f79a92cbf1fde6403c04fee314608fefbb595502e34383ae8203401", size = 229868, upload-time = "2023-06-05T17:08:58.197Z" }, +] + +[[package]] +name = "django-filter" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/7b/cf/adae3e55995ea27e1dceb493e0226557d4207d8819ddb99591df5204a471/django-filter-2.4.0.tar.gz", hash = "sha256:84e9d5bb93f237e451db814ed422a3a625751cbc9968b484ecc74964a8696b06", size = 146904, upload-time = "2020-09-27T09:08:58.079Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/2b/b2fe483c3095b6222725dd05f9ad9e6ed6cb7347c154fdbd80238d36f1a8/django_filter-2.4.0-py3-none-any.whl", hash = "sha256:e00d32cebdb3d54273c48f4f878f898dced8d5dfaad009438fe61ebdf535ace1", size = 73156, upload-time = "2020-09-27T09:08:52.69Z" }, +] + +[[package]] +name = "django-oauth-toolkit" +version = "1.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "jwcrypto" }, + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/b8/61647cca18e54da5c91ff996f10ad0d34227316a0b3a58ca71dea0d57112/django-oauth-toolkit-1.6.3.tar.gz", hash = "sha256:c3a0acd10a9c8442aedd298f8cb835d242c114ce0b8894c7e9290991bee667ca", size = 46041, upload-time = "2022-01-11T14:03:34.941Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5c/fc/8ee023ce2eb337370001463d22888373213ea32afff8de705db27e01fd6c/django_oauth_toolkit-1.6.3-py3-none-any.whl", hash = "sha256:d9acbe8ef193bf31d192d90ea2e2df5e7be8adab391cec4acf55f0c048a35274", size = 62588, upload-time = "2022-01-11T14:03:57.701Z" }, +] + +[[package]] +name = "django-querycount" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/37/92/3adda1e9cafeb9823e5b60baed60fc5f8c8d2afd58e2ec80d074763d29a5/django-querycount-0.7.0.tar.gz", hash = "sha256:8f5123d78716ff0704f2373e746a7200b8d8417798ce4a99bf2de87e3768f9ce", size = 5342, upload-time = "2017-09-17T17:54:32.252Z" } + +[[package]] +name = "django-redis" +version = "4.12.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "redis" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/f9/3d/b2518821dee8ca518c27cfa1b67e29e21f0b23f9783ecdc2e1cc0f3516a8/django-redis-4.12.1.tar.gz", hash = "sha256:306589c7021e6468b2656edc89f62b8ba67e8d5a1c8877e2688042263daa7a63", size = 23350, upload-time = "2020-05-27T11:38:55.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/4c/9044b873ef1cc136b8057453ea1d75ba1c9f24f6e88c7bbf2c3d083e0caf/django_redis-4.12.1-py3-none-any.whl", hash = "sha256:1133b26b75baa3664164c3f44b9d5d133d1b8de45d94d79f38d1adc5b1d502e5", size = 19676, upload-time = "2020-05-27T11:38:54.109Z" }, +] + +[[package]] +name = "django-storages" +version = "1.14.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ff/d6/2e50e378fff0408d558f36c4acffc090f9a641fd6e084af9e54d45307efa/django_storages-1.14.6.tar.gz", hash = "sha256:7a25ce8f4214f69ac9c7ce87e2603887f7ae99326c316bc8d2d75375e09341c9", size = 87587, upload-time = "2025-04-02T02:34:55.103Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1f/21/3cedee63417bc5553eed0c204be478071c9ab208e5e259e97287590194f1/django_storages-1.14.6-py3-none-any.whl", hash = "sha256:11b7b6200e1cb5ffcd9962bd3673a39c7d6a6109e8096f0e03d46fab3d3aabd9", size = 33095, upload-time = "2025-04-02T02:34:53.291Z" }, +] + +[package.optional-dependencies] +azure = [ + { name = "azure-core" }, + { name = "azure-storage-blob" }, +] + +[[package]] +name = "django-su" +version = "1.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d3/cf/5d5bdaff569468dba3053a7a623f64fcf5e36d5a936a5617a1c1972a7da4/django-su-1.0.0.tar.gz", hash = "sha256:1a3f98b2f757a3f47e33e90047c0a81cf965805fd7f91f67089292bdd461bd1a", size = 23677, upload-time = "2022-04-01T14:56:01.013Z" } + +[[package]] +name = "djangorestframework" +version = "3.16.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8a/95/5376fe618646fde6899b3cdc85fd959716bb67542e273a76a80d9f326f27/djangorestframework-3.16.1.tar.gz", hash = "sha256:166809528b1aced0a17dc66c24492af18049f2c9420dbd0be29422029cfc3ff7", size = 1089735, upload-time = "2025-08-06T17:50:53.251Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b0/ce/bf8b9d3f415be4ac5588545b5fcdbbb841977db1c1d923f7568eeabe1689/djangorestframework-3.16.1-py3-none-any.whl", hash = "sha256:33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec", size = 1080442, upload-time = "2025-08-06T17:50:50.667Z" }, +] + +[[package]] +name = "djangorestframework-csv" +version = "3.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "djangorestframework" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5a/6c/88106c98803b5c028707856137fe4ca7546f5cb2c777c39a6c8b992bee78/djangorestframework-csv-3.0.1.tar.gz", hash = "sha256:76ca3530c362e90ed46316002ea0b17e7e4e14c78240c787125d2c8f7c6c0174", size = 31738, upload-time = "2023-10-24T17:48:57.765Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e7/9f/e960e881653c2d14c95c6843977daad71bad74d8ec3485f4a0491a0f2628/djangorestframework_csv-3.0.1-py3-none-any.whl", hash = "sha256:91484439b3eb555eb6496dcf25c9f8d12746533feb9eb35360f5cccee42dfd15", size = 47360, upload-time = "2023-10-24T17:48:54.818Z" }, +] + +[[package]] +name = "drf-extensions" +version = "0.4.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "djangorestframework" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/48/c0/e0dbf7f671a3d899418e47ef7e4c0d3b9c671dd0fa882d89c0ab464ee5bb/drf-extensions-0.4.0.tar.gz", hash = "sha256:11223bc2e173233f4a108456df6433edebc895f65be0dcaa2a76f082fa3b91c3", size = 164609, upload-time = "2018-09-11T04:39:00.412Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/07/2f/3088a685eb9e892005238cb08034a1d5bcfedc746d5505569b5bde35fd70/drf_extensions-0.4.0-py2.py3-none-any.whl", hash = "sha256:6638ced63fabfefaa18b81e288a9f459234825ca734ab8dc9942d788b6ee7af4", size = 21032, upload-time = "2018-09-11T04:47:32.538Z" }, +] + +[[package]] +name = "drf-extra-fields" +version = "3.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "djangorestframework" }, + { name = "filetype" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a4/1d/311a0f359546c2de7b5251b2b802a02e6513a89be3e4280c98ae2edfbdd9/drf-extra-fields-3.7.0.tar.gz", hash = "sha256:d7e58b8f60432233328b8a64831e50ea5d05932d3cb63ade8fe66c0d3d21ac5b", size = 25355, upload-time = "2023-08-08T18:16:34.947Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/9d/30ec8fff60178a954b9fb3dff06aef0fb26ffeab8a102f8ce37b024e2a61/drf_extra_fields-3.7.0-py3-none-any.whl", hash = "sha256:3f3b1a6ec0eea02c9cabd62fe10e1673e1e42c5daa27fa9d4cea758c52c5cc30", size = 17764, upload-time = "2023-08-08T18:16:32.868Z" }, +] + +[[package]] +name = "drf-spectacular" +version = "0.28.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "djangorestframework" }, + { name = "inflection" }, + { name = "jsonschema" }, + { name = "pyyaml" }, + { name = "uritemplate" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/da/b9/741056455aed00fa51a1df41fad5ad27c8e0d433b6bf490d4e60e2808bc6/drf_spectacular-0.28.0.tar.gz", hash = "sha256:2c778a47a40ab2f5078a7c42e82baba07397bb35b074ae4680721b2805943061", size = 237849, upload-time = "2024-11-30T08:49:02.355Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fb/66/c2929871393b1515c3767a670ff7d980a6882964a31a4ca2680b30d7212a/drf_spectacular-0.28.0-py3-none-any.whl", hash = "sha256:856e7edf1056e49a4245e87a61e8da4baff46c83dbc25be1da2df77f354c7cb4", size = 103928, upload-time = "2024-11-30T08:48:57.288Z" }, +] + +[[package]] +name = "drf-writable-nested" +version = "0.6.2" +source = { registry = "https://pypi.org/simple" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/73/31/8b337d8b40231567bdd432ae873bf147bbbcfb42fc5b2adcfd8f6311bf2e/drf_writable_nested-0.6.2-py3-none-any.whl", hash = "sha256:bb413286bd5ebf943460ba7c2dc177d572d6447d5287228cc763062c5a12e3d6", size = 8814, upload-time = "2020-10-29T16:29:11.074Z" }, +] + +[[package]] +name = "exceptiongroup" +version = "1.3.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/50/79/66800aadf48771f6b62f7eb014e352e5d06856655206165d775e675a02c9/exceptiongroup-1.3.1.tar.gz", hash = "sha256:8b412432c6055b0b7d14c310000ae93352ed6754f70fa8f7c34141f91c4e3219", size = 30371, upload-time = "2025-11-21T23:01:54.787Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8a/0e/97c33bf5009bdbac74fd2beace167cab3f978feb69cc36f1ef79360d6c4e/exceptiongroup-1.3.1-py3-none-any.whl", hash = "sha256:a7a39a3bd276781e98394987d3a5701d0c4edffb633bb7a5144577f82c773598", size = 16740, upload-time = "2025-11-21T23:01:53.443Z" }, +] + +[[package]] +name = "executing" +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cc/28/c14e053b6762b1044f34a13aab6859bbf40456d37d23aa286ac24cfd9a5d/executing-2.2.1.tar.gz", hash = "sha256:3632cc370565f6648cc328b32435bd120a1e4ebb20c77e3fdde9a13cd1e533c4", size = 1129488, upload-time = "2025-09-01T09:48:10.866Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c1/ea/53f2148663b321f21b5a606bd5f191517cf40b7072c0497d3c92c4a13b1e/executing-2.2.1-py2.py3-none-any.whl", hash = "sha256:760643d3452b4d777d295bb167ccc74c64a81df23fb5e08eff250c425a4b2017", size = 28317, upload-time = "2025-09-01T09:48:08.5Z" }, +] + +[[package]] +name = "factory-boy" +version = "2.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "faker" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/d5/b4/649fc4bfd0daf308b5cd10bfa51c50bfa4c4c79e091ed301aca69ef6780e/factory_boy-2.11.1.tar.gz", hash = "sha256:6f25cc4761ac109efd503f096e2ad99421b1159f01a29dbb917359dcd68e08ca", size = 43254, upload-time = "2018-05-05T15:05:42.587Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/19/6c/b2ac85b3f0b48ac968af3741c4f020bf272ab9dabbd1643e9c719441099a/factory_boy-2.11.1-py2.py3-none-any.whl", hash = "sha256:d552cb872b310ae78bd7429bf318e42e1e903b1a109e899a523293dfa762ea4f", size = 36795, upload-time = "2018-05-05T15:05:40.728Z" }, +] + +[[package]] +name = "faker" +version = "40.1.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "tzdata", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5e/77/1c3ff07b6739b9a1d23ca01ec0a90a309a33b78e345a3eb52f9ce9240e36/faker-40.1.2.tar.gz", hash = "sha256:b76a68163aa5f171d260fc24827a8349bc1db672f6a665359e8d0095e8135d30", size = 1949802, upload-time = "2026-01-13T20:51:49.917Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/46/ec/91a434c8a53d40c3598966621dea9c50512bec6ce8e76fa1751015e74cef/faker-40.1.2-py3-none-any.whl", hash = "sha256:93503165c165d330260e4379fd6dc07c94da90c611ed3191a0174d2ab9966a42", size = 1985633, upload-time = "2026-01-13T20:51:47.982Z" }, +] + +[[package]] +name = "filetype" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/29/745f7d30d47fe0f251d3ad3dc2978a23141917661998763bebb6da007eb1/filetype-1.2.0.tar.gz", hash = "sha256:66b56cd6474bf41d8c54660347d37afcc3f7d1970648de365c102ef77548aadb", size = 998020, upload-time = "2022-11-02T17:34:04.141Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/79/1b8fa1bb3568781e84c9200f951c735f3f157429f44be0495da55894d620/filetype-1.2.0-py2.py3-none-any.whl", hash = "sha256:7ce71b6880181241cf7ac8697a2f1eb6a8bd9b429f7ad6d27b8db9ba5f1c2d25", size = 19970, upload-time = "2022-11-02T17:34:01.425Z" }, +] + +[[package]] +name = "flake8" +version = "3.8.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "mccabe" }, + { name = "pycodestyle" }, + { name = "pyflakes" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/71/6a/b3341ef7e7f3585add027d876a7d9837cdfe3320b6c6b5fd0cddfa9ceeac/flake8-3.8.4.tar.gz", hash = "sha256:aadae8761ec651813c24be05c6f7b4680857ef6afaae4651a4eccaef97ce6c3b", size = 163583, upload-time = "2020-10-02T23:34:03.958Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d4/ca/3971802ee6251da1abead1a22831d7f4743781e2f743bd266bdd2f46c19b/flake8-3.8.4-py2.py3-none-any.whl", hash = "sha256:749dbbd6bfd0cf1318af27bf97a14e28e5ff548ef8e5b1566ccfb25a11e7c839", size = 72910, upload-time = "2020-10-02T23:34:01.861Z" }, +] + +[[package]] +name = "flex" +version = "6.12.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "jsonpointer" }, + { name = "pyyaml" }, + { name = "requests" }, + { name = "rfc3987" }, + { name = "six" }, + { name = "strict-rfc3339" }, + { name = "validate-email" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/bc/03/d9d4bd3852bc259b31519ff939c3758b488136dfa65a6b02472c97a930a7/flex-6.12.0.tar.gz", hash = "sha256:c7713c55efca07aef81c93db639590b5df2c5bf1f2e29c089e57d3137330109e", size = 40629, upload-time = "2018-01-24T22:11:25.68Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/97/b6/5617010203a109d05d6a3406ad8091946b80f612bf238060a35dc57a4b32/flex-6.12.0-py3-none-any.whl", hash = "sha256:b12403eba2a0499fbbc9f39ea846a3a580c05620efd386e042055a26ec4c37b0", size = 77373, upload-time = "2018-01-24T22:11:27.35Z" }, +] + +[[package]] +name = "greenlet" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/8a/99/1cd3411c56a410994669062bd73dd58270c00cc074cac15f385a1fd91f8a/greenlet-3.3.1.tar.gz", hash = "sha256:41848f3230b58c08bb43dee542e74a2a2e34d3c59dc3076cec9151aeeedcae98", size = 184690, upload-time = "2026-01-23T15:31:02.076Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/fe/65/5b235b40581ad75ab97dcd8b4218022ae8e3ab77c13c919f1a1dfe9171fd/greenlet-3.3.1-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:04bee4775f40ecefcdaa9d115ab44736cd4b9c5fba733575bfe9379419582e13", size = 273723, upload-time = "2026-01-23T15:30:37.521Z" }, + { url = "https://files.pythonhosted.org/packages/ce/ad/eb4729b85cba2d29499e0a04ca6fbdd8f540afd7be142fd571eea43d712f/greenlet-3.3.1-cp310-cp310-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:50e1457f4fed12a50e427988a07f0f9df53cf0ee8da23fab16e6732c2ec909d4", size = 574874, upload-time = "2026-01-23T16:00:54.551Z" }, + { url = "https://files.pythonhosted.org/packages/87/32/57cad7fe4c8b82fdaa098c89498ef85ad92dfbb09d5eb713adedfc2ae1f5/greenlet-3.3.1-cp310-cp310-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:070472cd156f0656f86f92e954591644e158fd65aa415ffbe2d44ca77656a8f5", size = 586309, upload-time = "2026-01-23T16:05:25.18Z" }, + { url = "https://files.pythonhosted.org/packages/66/66/f041005cb87055e62b0d68680e88ec1a57f4688523d5e2fb305841bc8307/greenlet-3.3.1-cp310-cp310-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:1108b61b06b5224656121c3c8ee8876161c491cbe74e5c519e0634c837cf93d5", size = 597461, upload-time = "2026-01-23T16:15:51.943Z" }, + { url = "https://files.pythonhosted.org/packages/87/eb/8a1ec2da4d55824f160594a75a9d8354a5fe0a300fb1c48e7944265217e1/greenlet-3.3.1-cp310-cp310-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3a300354f27dd86bae5fbf7002e6dd2b3255cd372e9242c933faf5e859b703fe", size = 586985, upload-time = "2026-01-23T15:32:47.968Z" }, + { url = "https://files.pythonhosted.org/packages/15/1c/0621dd4321dd8c351372ee8f9308136acb628600658a49be1b7504208738/greenlet-3.3.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e84b51cbebf9ae573b5fbd15df88887815e3253fc000a7d0ff95170e8f7e9729", size = 1547271, upload-time = "2026-01-23T16:04:18.977Z" }, + { url = "https://files.pythonhosted.org/packages/9d/53/24047f8924c83bea7a59c8678d9571209c6bfe5f4c17c94a78c06024e9f2/greenlet-3.3.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:e0093bd1a06d899892427217f0ff2a3c8f306182b8c754336d32e2d587c131b4", size = 1613427, upload-time = "2026-01-23T15:33:44.428Z" }, + { url = "https://files.pythonhosted.org/packages/ff/07/ac9bf1ec008916d1a3373cae212884c1dcff4a4ba0d41127ce81a8deb4e9/greenlet-3.3.1-cp310-cp310-win_amd64.whl", hash = "sha256:7932f5f57609b6a3b82cc11877709aa7a98e3308983ed93552a1c377069b20c8", size = 226100, upload-time = "2026-01-23T15:30:56.957Z" }, +] + +[[package]] +name = "gunicorn" +version = "22.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/1e/88/e2f93c5738a4c1f56a458fc7a5b1676fc31dcdbb182bef6b40a141c17d66/gunicorn-22.0.0.tar.gz", hash = "sha256:4a0b436239ff76fb33f11c07a16482c521a7e09c1ce3cc293c2330afe01bec63", size = 3639760, upload-time = "2024-04-16T22:58:19.218Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/29/97/6d610ae77b5633d24b69c2ff1ac3044e0e565ecbd1ec188f02c45073054c/gunicorn-22.0.0-py3-none-any.whl", hash = "sha256:350679f91b24062c86e386e198a15438d53a7a8207235a78ba1b53df4c4378d9", size = 84443, upload-time = "2024-04-16T22:58:15.233Z" }, +] + +[[package]] +name = "h11" +version = "0.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/01/ee/02a2c011bdab74c6fb3c75474d40b3052059d95df7e73351460c8588d963/h11-0.16.0.tar.gz", hash = "sha256:4e35b956cf45792e4caa5885e69fba00bdbc6ffafbfa020300e549b208ee5ff1", size = 101250, upload-time = "2025-04-24T03:35:25.427Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl", hash = "sha256:63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86", size = 37515, upload-time = "2025-04-24T03:35:24.344Z" }, +] + +[[package]] +name = "hyperlink" +version = "21.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "idna" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/51/1947bd81d75af87e3bb9e34593a4cf118115a8feb451ce7a69044ef1412e/hyperlink-21.0.0.tar.gz", hash = "sha256:427af957daa58bc909471c6c40f74c5450fa123dd093fc53efd2e91d2705a56b", size = 140743, upload-time = "2021-01-08T05:51:20.972Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl", hash = "sha256:e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4", size = 74638, upload-time = "2021-01-08T05:51:22.906Z" }, +] + +[[package]] +name = "idna" +version = "3.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6f/6d/0703ccc57f3a7233505399edb88de3cbd678da106337b9fcde432b65ed60/idna-3.11.tar.gz", hash = "sha256:795dafcc9c04ed0c1fb032c2aa73654d8e8c5023a7df64a53f39190ada629902", size = 194582, upload-time = "2025-10-12T14:55:20.501Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl", hash = "sha256:771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea", size = 71008, upload-time = "2025-10-12T14:55:18.883Z" }, +] + +[[package]] +name = "incremental" +version = "24.11.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "packaging" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ef/3c/82e84109e02c492f382c711c58a3dd91badda6d746def81a1465f74dc9f5/incremental-24.11.0.tar.gz", hash = "sha256:87d3480dbb083c1d736222511a8cf380012a8176c2456d01ef483242abbbcf8c", size = 24000, upload-time = "2025-11-28T02:30:17.861Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/1d/55/0f4df2a44053867ea9cbea73fc588b03c55605cd695cee0a3d86f0029cb2/incremental-24.11.0-py3-none-any.whl", hash = "sha256:a34450716b1c4341fe6676a0598e88a39e04189f4dce5dc96f656e040baa10b3", size = 21109, upload-time = "2025-11-28T02:30:16.442Z" }, +] + +[[package]] +name = "inflection" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e1/7e/691d061b7329bc8d54edbf0ec22fbfb2afe61facb681f9aaa9bff7a27d04/inflection-0.5.1.tar.gz", hash = "sha256:1a29730d366e996aaacffb2f1f1cb9593dc38e2ddd30c91250c6dde09ea9b417", size = 15091, upload-time = "2020-08-22T08:16:29.139Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl", hash = "sha256:f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2", size = 9454, upload-time = "2020-08-22T08:16:27.816Z" }, +] + +[[package]] +name = "iniconfig" +version = "2.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/34/14ca021ce8e5dfedc35312d08ba8bf51fdd999c576889fc2c24cb97f4f10/iniconfig-2.3.0.tar.gz", hash = "sha256:c76315c77db068650d49c5b56314774a7804df16fee4402c1f19d6d15d8c4730", size = 20503, upload-time = "2025-10-18T21:55:43.219Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/b1/3846dd7f199d53cb17f49cba7e651e9ce294d8497c8c150530ed11865bb8/iniconfig-2.3.0-py3-none-any.whl", hash = "sha256:f631c04d2c48c52b84d0d0549c99ff3859c98df65b3101406327ecc7d53fbf12", size = 7484, upload-time = "2025-10-18T21:55:41.639Z" }, +] + +[[package]] +name = "ipdb" +version = "0.13.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ipython" }, + { name = "setuptools" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/a6/4347f7dd5621961bd6f9a1de3e25692b4231a615132347667ba603f65da6/ipdb-0.13.0.tar.gz", hash = "sha256:b90f1f661028af17c5043b4ea4534bc2f303d1f23b0c762a08923c7c454d7a59", size = 13840, upload-time = "2020-02-28T13:59:48.788Z" } + +[[package]] +name = "ipython" +version = "8.0.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "appnope", marker = "sys_platform == 'darwin'" }, + { name = "backcall" }, + { name = "black" }, + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "decorator" }, + { name = "jedi" }, + { name = "matplotlib-inline" }, + { name = "pexpect", marker = "sys_platform != 'win32'" }, + { name = "pickleshare" }, + { name = "prompt-toolkit" }, + { name = "pygments" }, + { name = "setuptools" }, + { name = "stack-data" }, + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c2/4f/67e0c9ab885a5ba54b6dfe5f630df70b73a2de5ef04c402e0691c1936273/ipython-8.0.1.tar.gz", hash = "sha256:ab564d4521ea8ceaac26c3a2c6e5ddbca15c8848fd5a5cc325f960da88d42974", size = 5306811, upload-time = "2022-01-19T13:27:48.392Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/88/3e505ba3accd31f464f92dcd8c229f2d0d7af14ead91c1899c52648336be/ipython-8.0.1-py3-none-any.whl", hash = "sha256:c503a0dd6ccac9c8c260b211f2dd4479c042b49636b097cc9a0d55fe62dff64c", size = 747494, upload-time = "2022-01-19T13:27:45.266Z" }, +] + +[[package]] +name = "isodate" +version = "0.7.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/54/4d/e940025e2ce31a8ce1202635910747e5a87cc3a6a6bb2d00973375014749/isodate-0.7.2.tar.gz", hash = "sha256:4cd1aa0f43ca76f4a6c6c0292a85f40b35ec2e43e315b59f06e6d32171a953e6", size = 29705, upload-time = "2024-10-08T23:04:11.5Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl", hash = "sha256:28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15", size = 22320, upload-time = "2024-10-08T23:04:09.501Z" }, +] + +[[package]] +name = "itypes" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0e/53/764524b3907d0af00523f8794daca181c08ca7cb32ceee25a0754d5e63a5/itypes-1.2.0.tar.gz", hash = "sha256:af886f129dea4a2a1e3d36595a2d139589e4dd287f5cab0b40e799ee81570ff1", size = 4355, upload-time = "2020-04-19T21:50:13.144Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3f/bb/3bd99c7cd34d4a123b2903e16da364f6d2078b1c3a3530a8ad105c668104/itypes-1.2.0-py2.py3-none-any.whl", hash = "sha256:03da6872ca89d29aef62773672b2d408f490f80db48b23079a4b194c86dd04c6", size = 4756, upload-time = "2020-04-19T21:50:11.704Z" }, +] + +[[package]] +name = "jedi" +version = "0.19.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "parso" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/72/3a/79a912fbd4d8dd6fbb02bf69afd3bb72cf0c729bb3063c6f4498603db17a/jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0", size = 1231287, upload-time = "2024-11-11T01:41:42.873Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c0/5a/9cac0c82afec3d09ccd97c8b6502d48f165f9124db81b4bcb90b4af974ee/jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9", size = 1572278, upload-time = "2024-11-11T01:41:40.175Z" }, +] + +[[package]] +name = "jinja2" +version = "3.1.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "markupsafe" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/ed/55/39036716d19cab0747a5020fc7e907f362fbf48c984b14e62127f7e68e5d/jinja2-3.1.4.tar.gz", hash = "sha256:4a3aee7acbbe7303aede8e9648d13b8bf88a429282aa6122a993f0ac800cb369", size = 240245, upload-time = "2024-05-05T23:42:02.455Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/31/80/3a54838c3fb461f6fec263ebf3a3a41771bd05190238de3486aae8540c36/jinja2-3.1.4-py3-none-any.whl", hash = "sha256:bc5dd2abb727a5319567b7a813e6a2e7318c39f4f487cfe6c89c6f9c7d25197d", size = 133271, upload-time = "2024-05-05T23:41:59.928Z" }, +] + +[[package]] +name = "jinxed" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ansicon", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/20/d0/59b2b80e7a52d255f9e0ad040d2e826342d05580c4b1d7d7747cfb8db731/jinxed-1.3.0.tar.gz", hash = "sha256:1593124b18a41b7a3da3b078471442e51dbad3d77b4d4f2b0c26ab6f7d660dbf", size = 80981, upload-time = "2024-07-31T22:39:18.854Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/27/e3/0e0014d6ab159d48189e92044ace13b1e1fe9aa3024ba9f4e8cf172aa7c2/jinxed-1.3.0-py2.py3-none-any.whl", hash = "sha256:b993189f39dc2d7504d802152671535b06d380b26d78070559551cbf92df4fc5", size = 33085, upload-time = "2024-07-31T22:39:17.426Z" }, +] + +[[package]] +name = "jmespath" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d3/59/322338183ecda247fb5d1763a6cbe46eff7222eaeebafd9fa65d4bf5cb11/jmespath-1.1.0.tar.gz", hash = "sha256:472c87d80f36026ae83c6ddd0f1d05d4e510134ed462851fd5f754c8c3cbb88d", size = 27377, upload-time = "2026-01-22T16:35:26.279Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl", hash = "sha256:a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64", size = 20419, upload-time = "2026-01-22T16:35:24.919Z" }, +] + +[[package]] +name = "jsonpointer" +version = "3.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/6a/0a/eebeb1fa92507ea94016a2a790b93c2ae41a7e18778f85471dc54475ed25/jsonpointer-3.0.0.tar.gz", hash = "sha256:2b2d729f2091522d61c3b31f82e11870f60b68f43fbc705cb76bf4b832af59ef", size = 9114, upload-time = "2024-06-10T19:24:42.462Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/71/92/5e77f98553e9e75130c78900d000368476aed74276eb8ae8796f65f00918/jsonpointer-3.0.0-py2.py3-none-any.whl", hash = "sha256:13e088adc14fca8b6aa8177c044e12701e6ad4b28ff10e65f2267a90109c9942", size = 7595, upload-time = "2024-06-10T19:24:40.698Z" }, +] + +[[package]] +name = "jsonschema" +version = "4.26.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "jsonschema-specifications" }, + { name = "referencing" }, + { name = "rpds-py" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" }, +] + +[[package]] +name = "jsonschema-specifications" +version = "2025.9.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "referencing" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" }, +] + +[[package]] +name = "jwcrypto" +version = "1.5.6" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/db/870e5d5fb311b0bcf049630b5ba3abca2d339fd5e13ba175b4c13b456d08/jwcrypto-1.5.6.tar.gz", hash = "sha256:771a87762a0c081ae6166958a954f80848820b2ab066937dc8b8379d65b1b039", size = 87168, upload-time = "2024-03-06T19:58:31.831Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl", hash = "sha256:150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789", size = 92520, upload-time = "2024-03-06T19:58:29.765Z" }, +] + +[[package]] +name = "kombu" +version = "4.6.11" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "amqp" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/45/e1/00f2e3f6f5575aa2f7ee41e2fd884ce573f8146e136bde37daf45ef7ca5e/kombu-4.6.11.tar.gz", hash = "sha256:ca1b45faac8c0b18493d02a8571792f3c40291cf2bcf1f55afed3d8f3aa7ba74", size = 406968, upload-time = "2020-06-24T07:11:39.261Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/34/3eea6a3a9ff81b0c7ddbdceb22a1ffc1b5907d863f27ca19a68777d2211d/kombu-4.6.11-py2.py3-none-any.whl", hash = "sha256:be48cdffb54a2194d93ad6533d73f69408486483d189fe9f5990ee24255b0e0a", size = 184431, upload-time = "2020-06-24T07:11:18.413Z" }, +] + +[[package]] +name = "loguru" +version = "0.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "win32-setctime", marker = "sys_platform == 'win32'" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/3a/05/a1dae3dffd1116099471c643b8924f5aa6524411dc6c63fdae648c4f1aca/loguru-0.7.3.tar.gz", hash = "sha256:19480589e77d47b8d85b2c827ad95d49bf31b0dcde16593892eb51dd18706eb6", size = 63559, upload-time = "2024-12-06T11:20:56.608Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/29/0348de65b8cc732daa3e33e67806420b2ae89bdce2b04af740289c5c6c8c/loguru-0.7.3-py3-none-any.whl", hash = "sha256:31a33c10c8e1e10422bfd431aeb5d351c7cf7fa671e3c4df004162264b28220c", size = 61595, upload-time = "2024-12-06T11:20:54.538Z" }, +] + +[[package]] +name = "markdown" +version = "2.6.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/73/fc5c850f44af5889192dff783b7b0d8f3fe8d30b65c8e3f78f8f0265fecf/Markdown-2.6.11.tar.gz", hash = "sha256:a856869c7ff079ad84a3e19cd87a64998350c2b94e9e08e44270faef33400f81", size = 274132, upload-time = "2018-01-05T00:44:45.566Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6d/7d/488b90f470b96531a3f5788cf12a93332f543dbab13c423a5e7ce96a0493/Markdown-2.6.11-py2.py3-none-any.whl", hash = "sha256:9ba587db9daee7ec761cfc656272be6aabe2ed300fece21208e4aab2e457bc8f", size = 78419, upload-time = "2018-01-05T00:44:43.316Z" }, +] + +[[package]] +name = "markupsafe" +version = "3.0.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/7e/99/7690b6d4034fffd95959cbe0c02de8deb3098cc577c67bb6a24fe5d7caa7/markupsafe-3.0.3.tar.gz", hash = "sha256:722695808f4b6457b320fdc131280796bdceb04ab50fe1795cd540799ebe1698", size = 80313, upload-time = "2025-09-27T18:37:40.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e8/4b/3541d44f3937ba468b75da9eebcae497dcf67adb65caa16760b0a6807ebb/markupsafe-3.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2f981d352f04553a7171b8e44369f2af4055f888dfb147d55e42d29e29e74559", size = 11631, upload-time = "2025-09-27T18:36:05.558Z" }, + { url = "https://files.pythonhosted.org/packages/98/1b/fbd8eed11021cabd9226c37342fa6ca4e8a98d8188a8d9b66740494960e4/markupsafe-3.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e1c1493fb6e50ab01d20a22826e57520f1284df32f2d8601fdd90b6304601419", size = 12057, upload-time = "2025-09-27T18:36:07.165Z" }, + { url = "https://files.pythonhosted.org/packages/40/01/e560d658dc0bb8ab762670ece35281dec7b6c1b33f5fbc09ebb57a185519/markupsafe-3.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:1ba88449deb3de88bd40044603fafffb7bc2b055d626a330323a9ed736661695", size = 22050, upload-time = "2025-09-27T18:36:08.005Z" }, + { url = "https://files.pythonhosted.org/packages/af/cd/ce6e848bbf2c32314c9b237839119c5a564a59725b53157c856e90937b7a/markupsafe-3.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f42d0984e947b8adf7dd6dde396e720934d12c506ce84eea8476409563607591", size = 20681, upload-time = "2025-09-27T18:36:08.881Z" }, + { url = "https://files.pythonhosted.org/packages/c9/2a/b5c12c809f1c3045c4d580b035a743d12fcde53cf685dbc44660826308da/markupsafe-3.0.3-cp310-cp310-manylinux_2_31_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:c0c0b3ade1c0b13b936d7970b1d37a57acde9199dc2aecc4c336773e1d86049c", size = 20705, upload-time = "2025-09-27T18:36:10.131Z" }, + { url = "https://files.pythonhosted.org/packages/cf/e3/9427a68c82728d0a88c50f890d0fc072a1484de2f3ac1ad0bfc1a7214fd5/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:0303439a41979d9e74d18ff5e2dd8c43ed6c6001fd40e5bf2e43f7bd9bbc523f", size = 21524, upload-time = "2025-09-27T18:36:11.324Z" }, + { url = "https://files.pythonhosted.org/packages/bc/36/23578f29e9e582a4d0278e009b38081dbe363c5e7165113fad546918a232/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:d2ee202e79d8ed691ceebae8e0486bd9a2cd4794cec4824e1c99b6f5009502f6", size = 20282, upload-time = "2025-09-27T18:36:12.573Z" }, + { url = "https://files.pythonhosted.org/packages/56/21/dca11354e756ebd03e036bd8ad58d6d7168c80ce1fe5e75218e4945cbab7/markupsafe-3.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:177b5253b2834fe3678cb4a5f0059808258584c559193998be2601324fdeafb1", size = 20745, upload-time = "2025-09-27T18:36:13.504Z" }, + { url = "https://files.pythonhosted.org/packages/87/99/faba9369a7ad6e4d10b6a5fbf71fa2a188fe4a593b15f0963b73859a1bbd/markupsafe-3.0.3-cp310-cp310-win32.whl", hash = "sha256:2a15a08b17dd94c53a1da0438822d70ebcd13f8c3a95abe3a9ef9f11a94830aa", size = 14571, upload-time = "2025-09-27T18:36:14.779Z" }, + { url = "https://files.pythonhosted.org/packages/d6/25/55dc3ab959917602c96985cb1253efaa4ff42f71194bddeb61eb7278b8be/markupsafe-3.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:c4ffb7ebf07cfe8931028e3e4c85f0357459a3f9f9490886198848f4fa002ec8", size = 15056, upload-time = "2025-09-27T18:36:16.125Z" }, + { url = "https://files.pythonhosted.org/packages/d0/9e/0a02226640c255d1da0b8d12e24ac2aa6734da68bff14c05dd53b94a0fc3/markupsafe-3.0.3-cp310-cp310-win_arm64.whl", hash = "sha256:e2103a929dfa2fcaf9bb4e7c091983a49c9ac3b19c9061b6d5427dd7d14d81a1", size = 13932, upload-time = "2025-09-27T18:36:17.311Z" }, +] + +[[package]] +name = "matplotlib-inline" +version = "0.2.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "traitlets" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c7/74/97e72a36efd4ae2bccb3463284300f8953f199b5ffbc04cbbb0ec78f74b1/matplotlib_inline-0.2.1.tar.gz", hash = "sha256:e1ee949c340d771fc39e241ea75683deb94762c8fa5f2927ec57c83c4dffa9fe", size = 8110, upload-time = "2025-10-23T09:00:22.126Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/af/33/ee4519fa02ed11a94aef9559552f3b17bb863f2ecfe1a35dc7f548cde231/matplotlib_inline-0.2.1-py3-none-any.whl", hash = "sha256:d56ce5156ba6085e00a9d54fead6ed29a9c47e215cd1bba2e976ef39f5710a76", size = 9516, upload-time = "2025-10-23T09:00:20.675Z" }, +] + +[[package]] +name = "mccabe" +version = "0.6.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/06/18/fa675aa501e11d6d6ca0ae73a101b2f3571a565e0f7d38e062eec18a91ee/mccabe-0.6.1.tar.gz", hash = "sha256:dd8d182285a0fe56bace7f45b5e7d1a6ebcbf524e8f3bd87eb0f125271b8831f", size = 8612, upload-time = "2017-01-26T22:13:15.699Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/87/89/479dc97e18549e21354893e4ee4ef36db1d237534982482c3681ee6e7b57/mccabe-0.6.1-py2.py3-none-any.whl", hash = "sha256:ab8a6258860da4b6677da4bd2fe5dc2c659cff31b3ee4f7f5d64e79735b80d42", size = 8556, upload-time = "2017-01-26T22:13:14.36Z" }, +] + +[[package]] +name = "msgpack" +version = "1.1.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/4d/f2/bfb55a6236ed8725a96b0aa3acbd0ec17588e6a2c3b62a93eb513ed8783f/msgpack-1.1.2.tar.gz", hash = "sha256:3b60763c1373dd60f398488069bcdc703cd08a711477b5d480eecc9f9626f47e", size = 173581, upload-time = "2025-10-08T09:15:56.596Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f5/a2/3b68a9e769db68668b25c6108444a35f9bd163bb848c0650d516761a59c0/msgpack-1.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0051fffef5a37ca2cd16978ae4f0aef92f164df86823871b5162812bebecd8e2", size = 81318, upload-time = "2025-10-08T09:14:38.722Z" }, + { url = "https://files.pythonhosted.org/packages/5b/e1/2b720cc341325c00be44e1ed59e7cfeae2678329fbf5aa68f5bda57fe728/msgpack-1.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a605409040f2da88676e9c9e5853b3449ba8011973616189ea5ee55ddbc5bc87", size = 83786, upload-time = "2025-10-08T09:14:40.082Z" }, + { url = "https://files.pythonhosted.org/packages/71/e5/c2241de64bfceac456b140737812a2ab310b10538a7b34a1d393b748e095/msgpack-1.1.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:8b696e83c9f1532b4af884045ba7f3aa741a63b2bc22617293a2c6a7c645f251", size = 398240, upload-time = "2025-10-08T09:14:41.151Z" }, + { url = "https://files.pythonhosted.org/packages/b7/09/2a06956383c0fdebaef5aa9246e2356776f12ea6f2a44bd1368abf0e46c4/msgpack-1.1.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:365c0bbe981a27d8932da71af63ef86acc59ed5c01ad929e09a0b88c6294e28a", size = 406070, upload-time = "2025-10-08T09:14:42.821Z" }, + { url = "https://files.pythonhosted.org/packages/0e/74/2957703f0e1ef20637d6aead4fbb314330c26f39aa046b348c7edcf6ca6b/msgpack-1.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:41d1a5d875680166d3ac5c38573896453bbbea7092936d2e107214daf43b1d4f", size = 393403, upload-time = "2025-10-08T09:14:44.38Z" }, + { url = "https://files.pythonhosted.org/packages/a5/09/3bfc12aa90f77b37322fc33e7a8a7c29ba7c8edeadfa27664451801b9860/msgpack-1.1.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:354e81bcdebaab427c3df4281187edc765d5d76bfb3a7c125af9da7a27e8458f", size = 398947, upload-time = "2025-10-08T09:14:45.56Z" }, + { url = "https://files.pythonhosted.org/packages/4b/4f/05fcebd3b4977cb3d840f7ef6b77c51f8582086de5e642f3fefee35c86fc/msgpack-1.1.2-cp310-cp310-win32.whl", hash = "sha256:e64c8d2f5e5d5fda7b842f55dec6133260ea8f53c4257d64494c534f306bf7a9", size = 64769, upload-time = "2025-10-08T09:14:47.334Z" }, + { url = "https://files.pythonhosted.org/packages/d0/3e/b4547e3a34210956382eed1c85935fff7e0f9b98be3106b3745d7dec9c5e/msgpack-1.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:db6192777d943bdaaafb6ba66d44bf65aa0e9c5616fa1d2da9bb08828c6b39aa", size = 71293, upload-time = "2025-10-08T09:14:48.665Z" }, +] + +[[package]] +name = "mypy-extensions" +version = "1.1.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/a2/6e/371856a3fb9d31ca8dac321cda606860fa4548858c0cc45d9d1d4ca2628b/mypy_extensions-1.1.0.tar.gz", hash = "sha256:52e68efc3284861e772bbcd66823fde5ae21fd2fdb51c62a211403730b916558", size = 6343, upload-time = "2025-04-22T14:54:24.164Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl", hash = "sha256:1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505", size = 4963, upload-time = "2025-04-22T14:54:22.983Z" }, +] + +[[package]] +name = "oauthlib" +version = "3.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/5f/19930f824ffeb0ad4372da4812c50edbd1434f678c90c2733e1188edfc63/oauthlib-3.3.1.tar.gz", hash = "sha256:0f0f8aa759826a193cf66c12ea1af1637f87b9b4622d46e866952bb022e538c9", size = 185918, upload-time = "2025-06-19T22:48:08.269Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl", hash = "sha256:88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1", size = 160065, upload-time = "2025-06-19T22:48:06.508Z" }, +] + +[[package]] +name = "oyaml" +version = "0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pyyaml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/4d/e4/10a6f3d73affb5d59a1ee2b7663619dd84a8326b4ced38a261cd722dea02/oyaml-0.7.tar.gz", hash = "sha256:a0359138057aba8650f81d4456c553f145773c4a172d27c606429ca45e31f8d9", size = 2466, upload-time = "2018-09-13T15:49:24.147Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7c/31/fb610d5c7a84f7100a31287726f10b6de532b2fc6d72ec89214c0736c5bf/oyaml-0.7-py2.py3-none-any.whl", hash = "sha256:1a81fbb1d5c3158bf6410577f11daf2b741a1b4eea2a47064e7ecd1fb2699425", size = 2841, upload-time = "2018-09-13T15:49:22.614Z" }, +] + +[[package]] +name = "packaging" +version = "26.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/65/ee/299d360cdc32edc7d2cf530f3accf79c4fca01e96ffc950d8a52213bd8e4/packaging-26.0.tar.gz", hash = "sha256:00243ae351a257117b6a241061796684b084ed1c516a08c48a3f7e147a9d80b4", size = 143416, upload-time = "2026-01-21T20:50:39.064Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl", hash = "sha256:b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529", size = 74366, upload-time = "2026-01-21T20:50:37.788Z" }, +] + +[[package]] +name = "parso" +version = "0.8.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d4/de/53e0bcf53d13e005bd8c92e7855142494f41171b34c2536b86187474184d/parso-0.8.5.tar.gz", hash = "sha256:034d7354a9a018bdce352f48b2a8a450f05e9d6ee85db84764e9b6bd96dafe5a", size = 401205, upload-time = "2025-08-23T15:15:28.028Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/16/32/f8e3c85d1d5250232a5d3477a2a28cc291968ff175caeadaf3cc19ce0e4a/parso-0.8.5-py2.py3-none-any.whl", hash = "sha256:646204b5ee239c396d040b90f9e272e9a8017c630092bf59980beb62fd033887", size = 106668, upload-time = "2025-08-23T15:15:25.663Z" }, +] + +[[package]] +name = "pathspec" +version = "1.0.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/fa/36/e27608899f9b8d4dff0617b2d9ab17ca5608956ca44461ac14ac48b44015/pathspec-1.0.4.tar.gz", hash = "sha256:0210e2ae8a21a9137c0d470578cb0e595af87edaa6ebf12ff176f14a02e0e645", size = 131200, upload-time = "2026-01-27T03:59:46.938Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ef/3c/2c197d226f9ea224a9ab8d197933f9da0ae0aac5b6e0f884e2b8d9c8e9f7/pathspec-1.0.4-py3-none-any.whl", hash = "sha256:fb6ae2fd4e7c921a165808a552060e722767cfa526f99ca5156ed2ce45a5c723", size = 55206, upload-time = "2026-01-27T03:59:45.137Z" }, +] + +[[package]] +name = "pexpect" +version = "4.9.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "ptyprocess" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/92/cc564bf6381ff43ce1f4d06852fc19a2f11d180f23dc32d9588bee2f149d/pexpect-4.9.0.tar.gz", hash = "sha256:ee7d41123f3c9911050ea2c2dac107568dc43b2d3b0c7557a33212c398ead30f", size = 166450, upload-time = "2023-11-25T09:07:26.339Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9e/c3/059298687310d527a58bb01f3b1965787ee3b40dce76752eda8b44e9a2c5/pexpect-4.9.0-py2.py3-none-any.whl", hash = "sha256:7236d1e080e4936be2dc3e326cec0af72acf9212a7e1d060210e70a47e253523", size = 63772, upload-time = "2023-11-25T06:56:14.81Z" }, +] + +[[package]] +name = "pickleshare" +version = "0.7.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/d8/b6/df3c1c9b616e9c0edbc4fbab6ddd09df9535849c64ba51fcb6531c32d4d8/pickleshare-0.7.5.tar.gz", hash = "sha256:87683d47965c1da65cdacaf31c8441d12b8044cdec9aca500cd78fc2c683afca", size = 6161, upload-time = "2018-09-25T19:17:37.249Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/9a/41/220f49aaea88bc6fa6cba8d05ecf24676326156c23b991e80b3f2fc24c77/pickleshare-0.7.5-py2.py3-none-any.whl", hash = "sha256:9649af414d74d4df115d5d718f82acb59c9d418196b7b4290ed47a12ce62df56", size = 6877, upload-time = "2018-09-25T19:17:35.817Z" }, +] + +[[package]] +name = "pillow" +version = "10.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ef/43/c50c17c5f7d438e836c169e343695534c38c77f60e7c90389bd77981bc21/pillow-10.3.0.tar.gz", hash = "sha256:9d2455fbf44c914840c793e89aa82d0e1763a14253a000743719ae5946814b2d", size = 46572854, upload-time = "2024-04-01T12:19:40.048Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/a4/cd3e60cda9ff7aa35eeb88325f8fb06898fb49523e367bacc35a5546317a/pillow-10.3.0-cp310-cp310-macosx_10_10_x86_64.whl", hash = "sha256:90b9e29824800e90c84e4022dd5cc16eb2d9605ee13f05d47641eb183cd73d45", size = 3528879, upload-time = "2024-04-01T12:17:01.553Z" }, + { url = "https://files.pythonhosted.org/packages/d4/0e/e344d6532f30b3b8de3d7a36fd05d5a43e4164afd1b41882529e766ef959/pillow-10.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a2c405445c79c3f5a124573a051062300936b0281fee57637e706453e452746c", size = 3352905, upload-time = "2024-04-01T12:17:05.1Z" }, + { url = "https://files.pythonhosted.org/packages/bb/a5/7958a4c0941b611a7706db510b9a85939346990df55ea05ecdfffb2b050c/pillow-10.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:78618cdbccaa74d3f88d0ad6cb8ac3007f1a6fa5c6f19af64b55ca170bfa1edf", size = 4309181, upload-time = "2024-04-01T12:17:07.378Z" }, + { url = "https://files.pythonhosted.org/packages/01/d7/0d3021e6c2da8f2a5d6f7e97ebf0bf540e69ebe3d0384c207401bfe88ef5/pillow-10.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:261ddb7ca91fcf71757979534fb4c128448b5b4c55cb6152d280312062f69599", size = 4420421, upload-time = "2024-04-01T12:17:09.822Z" }, + { url = "https://files.pythonhosted.org/packages/88/3c/708d0fc162f3c7099254b488b80ec4aba2a7fbdb958c03279390cf6e1140/pillow-10.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ce49c67f4ea0609933d01c0731b34b8695a7a748d6c8d186f95e7d085d2fe475", size = 4333092, upload-time = "2024-04-01T12:17:12.454Z" }, + { url = "https://files.pythonhosted.org/packages/b5/a2/7a09695dc636bf8d0a1b63022f58701177b7dc6fad30f6d6bc343e5473a4/pillow-10.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b14f16f94cbc61215115b9b1236f9c18403c15dd3c52cf629072afa9d54c1cbf", size = 4499372, upload-time = "2024-04-01T12:17:15.022Z" }, + { url = "https://files.pythonhosted.org/packages/dd/b8/ff0e2a7f4bba4d0121bfcd06387ea28660d7497ea038f99640bb10015125/pillow-10.3.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:d33891be6df59d93df4d846640f0e46f1a807339f09e79a8040bc887bdcd7ed3", size = 4528038, upload-time = "2024-04-01T12:17:18.102Z" }, + { url = "https://files.pythonhosted.org/packages/d5/9f/f19b94322353ca97e3b653255bf26b385ded07582f33eb6cd17f44d2b2bc/pillow-10.3.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:b50811d664d392f02f7761621303eba9d1b056fb1868c8cdf4231279645c25f5", size = 4592192, upload-time = "2024-04-01T12:17:20.336Z" }, + { url = "https://files.pythonhosted.org/packages/51/ed/d419981dd1a5db1b594af2637d9cb1c7b09857c72465fbd26644ff385bfb/pillow-10.3.0-cp310-cp310-win32.whl", hash = "sha256:ca2870d5d10d8726a27396d3ca4cf7976cec0f3cb706debe88e3a5bd4610f7d2", size = 2217272, upload-time = "2024-04-01T12:17:22.281Z" }, + { url = "https://files.pythonhosted.org/packages/75/4c/2a850f886a2de7fbd25eedd2c40afec56db872b3e52491d8953698080505/pillow-10.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:f0d0591a0aeaefdaf9a5e545e7485f89910c977087e7de2b6c388aec32011e9f", size = 2531321, upload-time = "2024-04-01T12:17:24.267Z" }, + { url = "https://files.pythonhosted.org/packages/8d/9a/29ed468c7b6d10b14447e58a457fd77a9d3dbf4cb921768f3ab7d42833b5/pillow-10.3.0-cp310-cp310-win_arm64.whl", hash = "sha256:ccce24b7ad89adb5a1e34a6ba96ac2530046763912806ad4c247356a8f33a67b", size = 2229533, upload-time = "2024-04-01T12:17:26.837Z" }, + { url = "https://files.pythonhosted.org/packages/67/75/8264c4c1a25b4868050c4c1a923e4aae0bcce2f4032de6ec416decf37dee/pillow-10.3.0-pp310-pypy310_pp73-macosx_10_10_x86_64.whl", hash = "sha256:6b02471b72526ab8a18c39cb7967b72d194ec53c1fd0a70b050565a0f366d355", size = 3482638, upload-time = "2024-04-01T12:19:07.399Z" }, + { url = "https://files.pythonhosted.org/packages/93/59/475343cdbc035cc5d7056c4c37cb1aaad5af05c9ae762508b6f8e8f27bf1/pillow-10.3.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:8ab74c06ffdab957d7670c2a5a6e1a70181cd10b727cd788c4dd9005b6a8acd9", size = 3324189, upload-time = "2024-04-01T12:19:09.771Z" }, + { url = "https://files.pythonhosted.org/packages/73/9f/cf2523a1c3a98afd0052b11d12d866453a60151bfc5876620e88cd5be55c/pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:048eeade4c33fdf7e08da40ef402e748df113fd0b4584e32c4af74fe78baaeb2", size = 3414179, upload-time = "2024-04-01T12:19:11.781Z" }, + { url = "https://files.pythonhosted.org/packages/12/d1/010dca4eaaaeb9da9edb702d2f663b6dac98ff5e84ce09e9d82f96c6a9f3/pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e2ec1e921fd07c7cda7962bad283acc2f2a9ccc1b971ee4b216b75fad6f0463", size = 3468521, upload-time = "2024-04-01T12:19:14.105Z" }, + { url = "https://files.pythonhosted.org/packages/ff/4c/8c7e9830ccca3219cdf4c1bdd3b0664025c91034a29242aedec5a997cbfe/pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c8e73e99da7db1b4cad7f8d682cf6abad7844da39834c288fbfa394a47bbced", size = 3455893, upload-time = "2024-04-01T12:19:16.175Z" }, + { url = "https://files.pythonhosted.org/packages/aa/e3/a84acfed7c3ccb23ff58fa68ae9f3ec071d63cfb7885edb6eb48bbc907f7/pillow-10.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:16563993329b79513f59142a6b02055e10514c1a8e86dca8b48a893e33cf91e3", size = 3557538, upload-time = "2024-04-01T12:19:18.778Z" }, + { url = "https://files.pythonhosted.org/packages/a9/f7/ff318e659997961f3b513d98c336a9aecc5432524610399f5aa7bf9d511e/pillow-10.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:dd78700f5788ae180b5ee8902c6aea5a5726bac7c364b202b4b3e3ba2d293170", size = 2531671, upload-time = "2024-04-01T12:19:21.075Z" }, +] + +[[package]] +name = "platformdirs" +version = "4.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cf/86/0248f086a84f01b37aaec0fa567b397df1a119f73c16f6c7a9aac73ea309/platformdirs-4.5.1.tar.gz", hash = "sha256:61d5cdcc6065745cdd94f0f878977f8de9437be93de97c1c12f853c9c0cdcbda", size = 21715, upload-time = "2025-12-05T13:52:58.638Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cb/28/3bfe2fa5a7b9c46fe7e13c97bda14c895fb10fa2ebf1d0abb90e0cea7ee1/platformdirs-4.5.1-py3-none-any.whl", hash = "sha256:d03afa3963c806a9bed9d5125c8f4cb2fdaf74a55ab60e5d59b3fde758104d31", size = 18731, upload-time = "2025-12-05T13:52:56.823Z" }, +] + +[[package]] +name = "pluggy" +version = "1.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f9/e2/3e91f31a7d2b083fe6ef3fa267035b518369d9511ffab804f839851d2779/pluggy-1.6.0.tar.gz", hash = "sha256:7dcc130b76258d33b90f61b658791dede3486c3e6bfb003ee5c9bfb396dd22f3", size = 69412, upload-time = "2025-05-15T12:30:07.975Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" }, +] + +[[package]] +name = "prompt-toolkit" +version = "3.0.52" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "wcwidth" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a1/96/06e01a7b38dce6fe1db213e061a4602dd6032a8a97ef6c1a862537732421/prompt_toolkit-3.0.52.tar.gz", hash = "sha256:28cde192929c8e7321de85de1ddbe736f1375148b02f2e17edd840042b1be855", size = 434198, upload-time = "2025-08-27T15:24:02.057Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/84/03/0d3ce49e2505ae70cf43bc5bb3033955d2fc9f932163e84dc0779cc47f48/prompt_toolkit-3.0.52-py3-none-any.whl", hash = "sha256:9aac639a3bbd33284347de5ad8d68ecc044b91a762dc39b7c21095fcd6a19955", size = 391431, upload-time = "2025-08-27T15:23:59.498Z" }, +] + +[[package]] +name = "psycopg2-binary" +version = "2.9.11" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/6c/8767aaa597ba424643dc87348c6f1754dd9f48e80fdc1b9f7ca5c3a7c213/psycopg2-binary-2.9.11.tar.gz", hash = "sha256:b6aed9e096bf63f9e75edf2581aa9a7e7186d97ab5c177aa6c87797cd591236c", size = 379620, upload-time = "2025-10-10T11:14:48.041Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6a/f2/8e377d29c2ecf99f6062d35ea606b036e8800720eccfec5fe3dd672c2b24/psycopg2_binary-2.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d6fe6b47d0b42ce1c9f1fa3e35bb365011ca22e39db37074458f27921dca40f2", size = 3756506, upload-time = "2025-10-10T11:10:30.144Z" }, + { url = "https://files.pythonhosted.org/packages/24/cc/dc143ea88e4ec9d386106cac05023b69668bd0be20794c613446eaefafe5/psycopg2_binary-2.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a6c0e4262e089516603a09474ee13eabf09cb65c332277e39af68f6233911087", size = 3863943, upload-time = "2025-10-10T11:10:34.586Z" }, + { url = "https://files.pythonhosted.org/packages/8c/df/16848771155e7c419c60afeb24950b8aaa3ab09c0a091ec3ccca26a574d0/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c47676e5b485393f069b4d7a811267d3168ce46f988fa602658b8bb901e9e64d", size = 4410873, upload-time = "2025-10-10T11:10:38.951Z" }, + { url = "https://files.pythonhosted.org/packages/43/79/5ef5f32621abd5a541b89b04231fe959a9b327c874a1d41156041c75494b/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:a28d8c01a7b27a1e3265b11250ba7557e5f72b5ee9e5f3a2fa8d2949c29bf5d2", size = 4468016, upload-time = "2025-10-10T11:10:43.319Z" }, + { url = "https://files.pythonhosted.org/packages/f0/9b/d7542d0f7ad78f57385971f426704776d7b310f5219ed58da5d605b1892e/psycopg2_binary-2.9.11-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f3f2732cf504a1aa9e9609d02f79bea1067d99edf844ab92c247bbca143303b", size = 4164996, upload-time = "2025-10-10T11:10:46.705Z" }, + { url = "https://files.pythonhosted.org/packages/14/ed/e409388b537fa7414330687936917c522f6a77a13474e4238219fcfd9a84/psycopg2_binary-2.9.11-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:865f9945ed1b3950d968ec4690ce68c55019d79e4497366d36e090327ce7db14", size = 3981881, upload-time = "2025-10-30T02:54:57.182Z" }, + { url = "https://files.pythonhosted.org/packages/bf/30/50e330e63bb05efc6fa7c1447df3e08954894025ca3dcb396ecc6739bc26/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:91537a8df2bde69b1c1db01d6d944c831ca793952e4f57892600e96cee95f2cd", size = 3650857, upload-time = "2025-10-10T11:10:50.112Z" }, + { url = "https://files.pythonhosted.org/packages/f0/e0/4026e4c12bb49dd028756c5b0bc4c572319f2d8f1c9008e0dad8cc9addd7/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4dca1f356a67ecb68c81a7bc7809f1569ad9e152ce7fd02c2f2036862ca9f66b", size = 3296063, upload-time = "2025-10-10T11:10:54.089Z" }, + { url = "https://files.pythonhosted.org/packages/2c/34/eb172be293c886fef5299fe5c3fcf180a05478be89856067881007934a7c/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:0da4de5c1ac69d94ed4364b6cbe7190c1a70d325f112ba783d83f8440285f152", size = 3043464, upload-time = "2025-10-30T02:55:02.483Z" }, + { url = "https://files.pythonhosted.org/packages/18/1c/532c5d2cb11986372f14b798a95f2eaafe5779334f6a80589a68b5fcf769/psycopg2_binary-2.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37d8412565a7267f7d79e29ab66876e55cb5e8e7b3bbf94f8206f6795f8f7e7e", size = 3345378, upload-time = "2025-10-10T11:11:01.039Z" }, + { url = "https://files.pythonhosted.org/packages/70/e7/de420e1cf16f838e1fa17b1120e83afff374c7c0130d088dba6286fcf8ea/psycopg2_binary-2.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:c665f01ec8ab273a61c62beeb8cce3014c214429ced8a308ca1fc410ecac3a39", size = 2713904, upload-time = "2025-10-10T11:11:04.81Z" }, +] + +[[package]] +name = "ptyprocess" +version = "0.7.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/e5/16ff212c1e452235a90aeb09066144d0c5a6a8c0834397e03f5224495c4e/ptyprocess-0.7.0.tar.gz", hash = "sha256:5c5d0a3b48ceee0b48485e0c26037c0acd7d29765ca3fbb5cb3831d347423220", size = 70762, upload-time = "2020-12-28T15:15:30.155Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/22/a6/858897256d0deac81a172289110f31629fc4cee19b6f01283303e18c8db3/ptyprocess-0.7.0-py2.py3-none-any.whl", hash = "sha256:4b41f3967fce3af57cc7e94b888626c18bf37a083e3651ca8feeb66d492fef35", size = 13993, upload-time = "2020-12-28T15:15:28.35Z" }, +] + +[[package]] +name = "pure-eval" +version = "0.2.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/cd/05/0a34433a064256a578f1783a10da6df098ceaa4a57bbeaa96a6c0352786b/pure_eval-0.2.3.tar.gz", hash = "sha256:5f4e983f40564c576c7c8635ae88db5956bb2229d7e9237d03b3c0b0190eaf42", size = 19752, upload-time = "2024-07-21T12:58:21.801Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/8e/37/efad0257dc6e593a18957422533ff0f87ede7c9c6ea010a2177d738fb82f/pure_eval-0.2.3-py3-none-any.whl", hash = "sha256:1db8e35b67b3d218d818ae653e27f06c3aa420901fa7b081ca98cbedc874e0d0", size = 11842, upload-time = "2024-07-21T12:58:20.04Z" }, +] + +[[package]] +name = "pycodestyle" +version = "2.6.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/bb/82/0df047a5347d607be504ad5faa255caa7919562962b934f9372b157e8a70/pycodestyle-2.6.0.tar.gz", hash = "sha256:c58a7d2815e0e8d7972bf1803331fb0152f867bd89adf8a01dfd55085434192e", size = 100213, upload-time = "2020-05-11T20:02:55.636Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/10/5b/88879fb861ab79aef45c7e199cae3ef7af487b5603dcb363517a50602dd7/pycodestyle-2.6.0-py2.py3-none-any.whl", hash = "sha256:2295e7b2f6b5bd100585ebcb1f616591b652db8a741695b3d8f5d28bdc934367", size = 41364, upload-time = "2020-05-11T20:02:52.968Z" }, +] + +[[package]] +name = "pycparser" +version = "3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1b/7d/92392ff7815c21062bea51aa7b87d45576f649f16458d78b7cf94b9ab2e6/pycparser-3.0.tar.gz", hash = "sha256:600f49d217304a5902ac3c37e1281c9fe94e4d0489de643a9504c5cdfdfc6b29", size = 103492, upload-time = "2026-01-21T14:26:51.89Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl", hash = "sha256:b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992", size = 48172, upload-time = "2026-01-21T14:26:50.693Z" }, +] + +[[package]] +name = "pyflakes" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f1/e2/e02fc89959619590eec0c35f366902535ade2728479fc3082c8af8840013/pyflakes-2.2.0.tar.gz", hash = "sha256:35b2d75ee967ea93b55750aa9edbbf72813e06a66ba54438df2cfac9e3c27fc8", size = 65307, upload-time = "2020-04-10T03:52:19.335Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/69/5b/fd01b0c696f2f9a6d2c839883b642493b431f28fa32b29abc465ef675473/pyflakes-2.2.0-py2.py3-none-any.whl", hash = "sha256:0d94e0e05a19e57a99444b6ddcf9a6eb2e5c68d3ca1e98e90707af8152c90a92", size = 66950, upload-time = "2020-04-10T03:52:17.62Z" }, +] + +[[package]] +name = "pygments" +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/2a/2e4e77803a8bd6408a2903340ac498cb0a2181811af7c9ec92cb70b0308a/Pygments-2.2.0.tar.gz", hash = "sha256:dbae1046def0efb574852fab9e90209b23f556367b5a320c0bcb871c77c3e8cc", size = 2113944, upload-time = "2017-01-22T21:22:59.952Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/02/ee/b6e02dc6529e82b75bb06823ff7d005b141037cb1416b10c6f00fc419dca/Pygments-2.2.0-py2.py3-none-any.whl", hash = "sha256:78f3f434bcc5d6ee09020f92ba487f95ba50f1e3ef83ae96b9d5ffa1bab25c5d", size = 841734, upload-time = "2017-01-22T21:22:37.819Z" }, +] + +[[package]] +name = "pyjwt" +version = "2.11.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5c/5a/b46fa56bf322901eee5b0454a34343cdbdae202cd421775a8ee4e42fd519/pyjwt-2.11.0.tar.gz", hash = "sha256:35f95c1f0fbe5d5ba6e43f00271c275f7a1a4db1dab27bf708073b75318ea623", size = 98019, upload-time = "2026-01-30T19:59:55.694Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6f/01/c26ce75ba460d5cd503da9e13b21a33804d38c2165dec7b716d06b13010c/pyjwt-2.11.0-py3-none-any.whl", hash = "sha256:94a6bde30eb5c8e04fee991062b534071fd1439ef58d2adc9ccb823e7bcd0469", size = 28224, upload-time = "2026-01-30T19:59:54.539Z" }, +] + +[[package]] +name = "pyrabbit2" +version = "1.0.7" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/db/df9e7ba2cfedbe41eb06384affa4687b5ded14f633c0b2765f78c8c0b443/pyrabbit2-1.0.7.tar.gz", hash = "sha256:d27160cb35c096f0072df57307233d01b117a451236e136604a8e51be6f106c0", size = 11533, upload-time = "2019-01-24T11:49:13.946Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d2/38/e5de737bc5a1b556ed4f3086f14eceb4b62c637957907c0d37df6585a112/pyrabbit2-1.0.7-py3-none-any.whl", hash = "sha256:9c5ac7751781705083f893c6aec0909b2ee0ad28e373e4fdbde6231172d64504", size = 12045, upload-time = "2019-01-24T11:49:12.511Z" }, +] + +[[package]] +name = "pytest" +version = "7.4.4" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "colorama", marker = "sys_platform == 'win32'" }, + { name = "exceptiongroup" }, + { name = "iniconfig" }, + { name = "packaging" }, + { name = "pluggy" }, + { name = "tomli" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/80/1f/9d8e98e4133ffb16c90f3b405c43e38d3abb715bb5d7a63a5a684f7e46a3/pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280", size = 1357116, upload-time = "2023-12-31T12:00:18.035Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/51/ff/f6e8b8f39e08547faece4bd80f89d5a8de68a38b2d179cc1c4490ffa3286/pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8", size = 325287, upload-time = "2023-12-31T12:00:13.963Z" }, +] + +[[package]] +name = "pytest-django" +version = "4.11.1" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "pytest" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/b1/fb/55d580352db26eb3d59ad50c64321ddfe228d3d8ac107db05387a2fadf3a/pytest_django-4.11.1.tar.gz", hash = "sha256:a949141a1ee103cb0e7a20f1451d355f83f5e4a5d07bdd4dcfdd1fd0ff227991", size = 86202, upload-time = "2025-04-03T18:56:09.338Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl", hash = "sha256:1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10", size = 25281, upload-time = "2025-04-03T18:56:07.678Z" }, +] + +[[package]] +name = "python-dateutil" +version = "2.7.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "six" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/a0/b0/a4e3241d2dee665fea11baec21389aec6886655cd4db7647ddf96c3fad15/python-dateutil-2.7.3.tar.gz", hash = "sha256:e27001de32f627c22380a688bcc43ce83504a7bc5da472209b4c70f02829f0b8", size = 302871, upload-time = "2018-05-10T12:02:18.124Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/cf/f5/af2b09c957ace60dcfac112b669c45c8c97e32f94aa8b56da4c6d1682825/python_dateutil-2.7.3-py2.py3-none-any.whl", hash = "sha256:1adb80e7a782c12e52ef9a8182bebeb73f1d7e24e374397af06fb4956c8dc5c0", size = 211414, upload-time = "2018-05-10T12:02:16.089Z" }, +] + +[[package]] +name = "python3-openid" +version = "3.2.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "defusedxml" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/5f/4a/29feb8da6c44f77007dcd29518fea73a3d5653ee02a587ae1f17f1f5ddb5/python3-openid-3.2.0.tar.gz", hash = "sha256:33fbf6928f401e0b790151ed2b5290b02545e8775f982485205a066f874aaeaf", size = 305600, upload-time = "2020-06-29T12:15:49.026Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/a5/c6ba13860bdf5525f1ab01e01cc667578d6f1efc8a1dba355700fb04c29b/python3_openid-3.2.0-py3-none-any.whl", hash = "sha256:6626f771e0417486701e0b4daff762e7212e820ca5b29fcc0d05f6f8736dfa6b", size = 133681, upload-time = "2020-06-29T12:15:47.502Z" }, +] + +[[package]] +name = "pytokens" +version = "0.4.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b6/34/b4e015b99031667a7b960f888889c5bd34ef585c85e1cb56a594b92836ac/pytokens-0.4.1.tar.gz", hash = "sha256:292052fe80923aae2260c073f822ceba21f3872ced9a68bb7953b348e561179a", size = 23015, upload-time = "2026-01-30T01:03:45.924Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/42/24/f206113e05cb8ef51b3850e7ef88f20da6f4bf932190ceb48bd3da103e10/pytokens-0.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a44ed93ea23415c54f3face3b65ef2b844d96aeb3455b8a69b3df6beab6acc5", size = 161522, upload-time = "2026-01-30T01:02:50.393Z" }, + { url = "https://files.pythonhosted.org/packages/d4/e9/06a6bf1b90c2ed81a9c7d2544232fe5d2891d1cd480e8a1809ca354a8eb2/pytokens-0.4.1-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:add8bf86b71a5d9fb5b89f023a80b791e04fba57960aa790cc6125f7f1d39dfe", size = 246945, upload-time = "2026-01-30T01:02:52.399Z" }, + { url = "https://files.pythonhosted.org/packages/69/66/f6fb1007a4c3d8b682d5d65b7c1fb33257587a5f782647091e3408abe0b8/pytokens-0.4.1-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:670d286910b531c7b7e3c0b453fd8156f250adb140146d234a82219459b9640c", size = 259525, upload-time = "2026-01-30T01:02:53.737Z" }, + { url = "https://files.pythonhosted.org/packages/04/92/086f89b4d622a18418bac74ab5db7f68cf0c21cf7cc92de6c7b919d76c88/pytokens-0.4.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:4e691d7f5186bd2842c14813f79f8884bb03f5995f0575272009982c5ac6c0f7", size = 262693, upload-time = "2026-01-30T01:02:54.871Z" }, + { url = "https://files.pythonhosted.org/packages/b4/7b/8b31c347cf94a3f900bdde750b2e9131575a61fdb620d3d3c75832262137/pytokens-0.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:27b83ad28825978742beef057bfe406ad6ed524b2d28c252c5de7b4a6dd48fa2", size = 103567, upload-time = "2026-01-30T01:02:56.414Z" }, + { url = "https://files.pythonhosted.org/packages/c6/78/397db326746f0a342855b81216ae1f0a32965deccfd7c830a2dbc66d2483/pytokens-0.4.1-py3-none-any.whl", hash = "sha256:26cef14744a8385f35d0e095dc8b3a7583f6c953c2e3d269c7f82484bf5ad2de", size = 13729, upload-time = "2026-01-30T01:03:45.029Z" }, +] + +[[package]] +name = "pytz" +version = "2025.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/f8/bf/abbd3cdfb8fbc7fb3d4d38d320f2441b1e7cbe29be4f23797b4a2b5d8aac/pytz-2025.2.tar.gz", hash = "sha256:360b9e3dbb49a209c21ad61809c7fb453643e048b38924c765813546746e81c3", size = 320884, upload-time = "2025-03-25T02:25:00.538Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl", hash = "sha256:5ddf76296dd8c44c26eb8f4b6f35488f3ccbf6fbbd7adee0b7262d43f0ec2f00", size = 509225, upload-time = "2025-03-25T02:24:58.468Z" }, +] + +[[package]] +name = "pyxdg" +version = "0.28" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b0/25/7998cd2dec731acbd438fbf91bc619603fc5188de0a9a17699a781840452/pyxdg-0.28.tar.gz", hash = "sha256:3267bb3074e934df202af2ee0868575484108581e6f3cb006af1da35395e88b4", size = 77776, upload-time = "2022-06-05T11:35:01Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e5/8d/cf41b66a8110670e3ad03dab9b759704eeed07fa96e90fdc0357b2ba70e2/pyxdg-0.28-py2.py3-none-any.whl", hash = "sha256:bdaf595999a0178ecea4052b7f4195569c1ff4d344567bccdc12dfdf02d545ab", size = 49520, upload-time = "2022-06-05T11:34:58.832Z" }, +] + +[[package]] +name = "pyyaml" +version = "5.3.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/64/c2/b80047c7ac2478f9501676c988a5411ed5572f35d1beff9cae07d321512c/PyYAML-5.3.1.tar.gz", hash = "sha256:b8eac752c5e14d3eca0e6dd9199cd627518cb5ec06add0de9d32baeee6fe645d", size = 269377, upload-time = "2020-03-18T21:41:21.618Z" } + +[[package]] +name = "redis" +version = "7.1.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "async-timeout" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/43/c8/983d5c6579a411d8a99bc5823cc5712768859b5ce2c8afe1a65b37832c81/redis-7.1.0.tar.gz", hash = "sha256:b1cc3cfa5a2cb9c2ab3ba700864fb0ad75617b41f01352ce5779dabf6d5f9c3c", size = 4796669, upload-time = "2025-11-19T15:54:39.961Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/89/f0/8956f8a86b20d7bb9d6ac0187cf4cd54d8065bc9a1a09eb8011d4d326596/redis-7.1.0-py3-none-any.whl", hash = "sha256:23c52b208f92b56103e17c5d06bdc1a6c2c0b3106583985a76a18f83b265de2b", size = 354159, upload-time = "2025-11-19T15:54:38.064Z" }, +] + +[[package]] +name = "referencing" +version = "0.37.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "rpds-py" }, + { name = "typing-extensions" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" }, +] + +[[package]] +name = "requests" +version = "2.32.2" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "certifi" }, + { name = "charset-normalizer" }, + { name = "idna" }, + { name = "urllib3" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/86/ec/535bf6f9bd280de6a4637526602a146a68fde757100ecf8c9333173392db/requests-2.32.2.tar.gz", hash = "sha256:dd951ff5ecf3e3b3aa26b40703ba77495dab41da839ae72ef3c8e5d8e2433289", size = 130327, upload-time = "2024-05-21T18:51:32.819Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c3/20/748e38b466e0819491f0ce6e90ebe4184966ee304fe483e2c414b0f4ef07/requests-2.32.2-py3-none-any.whl", hash = "sha256:fc06670dd0ed212426dfeb94fc1b983d917c4f9847c863f313c9dfaaffb7c23c", size = 63902, upload-time = "2024-05-21T18:51:29.562Z" }, +] + +[[package]] +name = "requests-oauthlib" +version = "2.0.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "oauthlib" }, + { name = "requests" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/42/f2/05f29bc3913aea15eb670be136045bf5c5bbf4b99ecb839da9b422bb2c85/requests-oauthlib-2.0.0.tar.gz", hash = "sha256:b3dffaebd884d8cd778494369603a9e7b58d29111bf6b41bdc2dcd87203af4e9", size = 55650, upload-time = "2024-03-22T20:32:29.939Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl", hash = "sha256:7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36", size = 24179, upload-time = "2024-03-22T20:32:28.055Z" }, +] + +[[package]] +name = "rfc3987" +version = "1.3.8" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/14/bb/f1395c4b62f251a1cb503ff884500ebd248eed593f41b469f89caa3547bd/rfc3987-1.3.8.tar.gz", hash = "sha256:d3c4d257a560d544e9826b38bc81db676890c79ab9d7ac92b39c7a253d5ca733", size = 20700, upload-time = "2018-07-29T17:23:47.954Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/65/d4/f7407c3d15d5ac779c3dd34fbbc6ea2090f77bd7dd12f207ccf881551208/rfc3987-1.3.8-py2.py3-none-any.whl", hash = "sha256:10702b1e51e5658843460b189b185c0366d2cf4cff716f13111b0ea9fd2dce53", size = 13377, upload-time = "2018-07-29T17:23:45.313Z" }, +] + +[[package]] +name = "rpds-py" +version = "0.30.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/20/af/3f2f423103f1113b36230496629986e0ef7e199d2aa8392452b484b38ced/rpds_py-0.30.0.tar.gz", hash = "sha256:dd8ff7cf90014af0c0f787eea34794ebf6415242ee1d6fa91eaba725cc441e84", size = 69469, upload-time = "2025-11-30T20:24:38.837Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/06/0c/0c411a0ec64ccb6d104dcabe0e713e05e153a9a2c3c2bd2b32ce412166fe/rpds_py-0.30.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:679ae98e00c0e8d68a7fda324e16b90fd5260945b45d3b824c892cec9eea3288", size = 370490, upload-time = "2025-11-30T20:21:33.256Z" }, + { url = "https://files.pythonhosted.org/packages/19/6a/4ba3d0fb7297ebae71171822554abe48d7cab29c28b8f9f2c04b79988c05/rpds_py-0.30.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4cc2206b76b4f576934f0ed374b10d7ca5f457858b157ca52064bdfc26b9fc00", size = 359751, upload-time = "2025-11-30T20:21:34.591Z" }, + { url = "https://files.pythonhosted.org/packages/cd/7c/e4933565ef7f7a0818985d87c15d9d273f1a649afa6a52ea35ad011195ea/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:389a2d49eded1896c3d48b0136ead37c48e221b391c052fba3f4055c367f60a6", size = 389696, upload-time = "2025-11-30T20:21:36.122Z" }, + { url = "https://files.pythonhosted.org/packages/5e/01/6271a2511ad0815f00f7ed4390cf2567bec1d4b1da39e2c27a41e6e3b4de/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:32c8528634e1bf7121f3de08fa85b138f4e0dc47657866630611b03967f041d7", size = 403136, upload-time = "2025-11-30T20:21:37.728Z" }, + { url = "https://files.pythonhosted.org/packages/55/64/c857eb7cd7541e9b4eee9d49c196e833128a55b89a9850a9c9ac33ccf897/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f207f69853edd6f6700b86efb84999651baf3789e78a466431df1331608e5324", size = 524699, upload-time = "2025-11-30T20:21:38.92Z" }, + { url = "https://files.pythonhosted.org/packages/9c/ed/94816543404078af9ab26159c44f9e98e20fe47e2126d5d32c9d9948d10a/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:67b02ec25ba7a9e8fa74c63b6ca44cf5707f2fbfadae3ee8e7494297d56aa9df", size = 412022, upload-time = "2025-11-30T20:21:40.407Z" }, + { url = "https://files.pythonhosted.org/packages/61/b5/707f6cf0066a6412aacc11d17920ea2e19e5b2f04081c64526eb35b5c6e7/rpds_py-0.30.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0e95f6819a19965ff420f65578bacb0b00f251fefe2c8b23347c37174271f3", size = 390522, upload-time = "2025-11-30T20:21:42.17Z" }, + { url = "https://files.pythonhosted.org/packages/13/4e/57a85fda37a229ff4226f8cbcf09f2a455d1ed20e802ce5b2b4a7f5ed053/rpds_py-0.30.0-cp310-cp310-manylinux_2_31_riscv64.whl", hash = "sha256:a452763cc5198f2f98898eb98f7569649fe5da666c2dc6b5ddb10fde5a574221", size = 404579, upload-time = "2025-11-30T20:21:43.769Z" }, + { url = "https://files.pythonhosted.org/packages/f9/da/c9339293513ec680a721e0e16bf2bac3db6e5d7e922488de471308349bba/rpds_py-0.30.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e0b65193a413ccc930671c55153a03ee57cecb49e6227204b04fae512eb657a7", size = 421305, upload-time = "2025-11-30T20:21:44.994Z" }, + { url = "https://files.pythonhosted.org/packages/f9/be/522cb84751114f4ad9d822ff5a1aa3c98006341895d5f084779b99596e5c/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:858738e9c32147f78b3ac24dc0edb6610000e56dc0f700fd5f651d0a0f0eb9ff", size = 572503, upload-time = "2025-11-30T20:21:46.91Z" }, + { url = "https://files.pythonhosted.org/packages/a2/9b/de879f7e7ceddc973ea6e4629e9b380213a6938a249e94b0cdbcc325bb66/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:da279aa314f00acbb803da1e76fa18666778e8a8f83484fba94526da5de2cba7", size = 598322, upload-time = "2025-11-30T20:21:48.709Z" }, + { url = "https://files.pythonhosted.org/packages/48/ac/f01fc22efec3f37d8a914fc1b2fb9bcafd56a299edbe96406f3053edea5a/rpds_py-0.30.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7c64d38fb49b6cdeda16ab49e35fe0da2e1e9b34bc38bd78386530f218b37139", size = 560792, upload-time = "2025-11-30T20:21:50.024Z" }, + { url = "https://files.pythonhosted.org/packages/e2/da/4e2b19d0f131f35b6146425f846563d0ce036763e38913d917187307a671/rpds_py-0.30.0-cp310-cp310-win32.whl", hash = "sha256:6de2a32a1665b93233cde140ff8b3467bdb9e2af2b91079f0333a0974d12d464", size = 221901, upload-time = "2025-11-30T20:21:51.32Z" }, + { url = "https://files.pythonhosted.org/packages/96/cb/156d7a5cf4f78a7cc571465d8aec7a3c447c94f6749c5123f08438bcf7bc/rpds_py-0.30.0-cp310-cp310-win_amd64.whl", hash = "sha256:1726859cd0de969f88dc8673bdd954185b9104e05806be64bcd87badbe313169", size = 235823, upload-time = "2025-11-30T20:21:52.505Z" }, +] + +[[package]] +name = "s3transfer" +version = "0.6.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "botocore" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/e1/eb/e57c93d5cd5edf8c1d124c831ef916601540db70acd96fa21fe60cef1365/s3transfer-0.6.0.tar.gz", hash = "sha256:2ed07d3866f523cc561bf4a00fc5535827981b117dd7876f036b0c1aca42c947", size = 134871, upload-time = "2022-05-31T19:44:53.132Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/c6/af903b5fab3f9b5b1e883f49a770066314c6dcceb589cf938d48c89556c1/s3transfer-0.6.0-py3-none-any.whl", hash = "sha256:06176b74f3a15f61f1b4f25a1fc29a4429040b7647133a463da8fa5bd28d5ecd", size = 79568, upload-time = "2022-05-31T19:44:50.831Z" }, +] + +[[package]] +name = "setuptools" +version = "80.10.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/76/95/faf61eb8363f26aa7e1d762267a8d602a1b26d4f3a1e758e92cb3cb8b054/setuptools-80.10.2.tar.gz", hash = "sha256:8b0e9d10c784bf7d262c4e5ec5d4ec94127ce206e8738f29a437945fbc219b70", size = 1200343, upload-time = "2026-01-25T22:38:17.252Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/94/b8/f1f62a5e3c0ad2ff1d189590bfa4c46b4f3b6e49cef6f26c6ee4e575394d/setuptools-80.10.2-py3-none-any.whl", hash = "sha256:95b30ddfb717250edb492926c92b5221f7ef3fbcc2b07579bcd4a27da21d0173", size = 1064234, upload-time = "2026-01-25T22:38:15.216Z" }, +] + +[[package]] +name = "six" +version = "1.16.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/71/39/171f1c67cd00715f190ba0b100d606d440a28c93c7714febeca8b79af85e/six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926", size = 34041, upload-time = "2021-05-05T14:18:18.379Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254", size = 11053, upload-time = "2021-05-05T14:18:17.237Z" }, +] + +[[package]] +name = "social-auth-app-django" +version = "5.4.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "django" }, + { name = "social-auth-core" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/2a/07/bb2465e4116d4761b028bd07b99087009caa81c1511c886d74c4ccece3a2/social_auth_app_django-5.4.3.tar.gz", hash = "sha256:d1f4286d5ca1e512c9b2f686e7ecb2a0128148f1a33d853b69dc07b58508362e", size = 24860, upload-time = "2025-02-13T13:07:34.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e0/cd/43a25dabdf7689109b01ac866848c984594769ec3cbc5ce4c261b4895237/social_auth_app_django-5.4.3-py3-none-any.whl", hash = "sha256:db70b972faeb10ee1ec83d0dc7dbd0558d5f5830417bba317b712b10ff58d031", size = 26241, upload-time = "2025-02-13T13:07:32.787Z" }, +] + +[[package]] +name = "social-auth-core" +version = "4.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "cryptography" }, + { name = "defusedxml" }, + { name = "oauthlib" }, + { name = "pyjwt" }, + { name = "python3-openid" }, + { name = "requests" }, + { name = "requests-oauthlib" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/87/c0/466383c22767604c573f15aff3ea2c37aacf3c10281f31199c02ac0017ef/social_auth_core-4.7.0.tar.gz", hash = "sha256:2bba127c7b7166a81085ddb0c248d93751b3bc3cdab8569f62d9f70c6bc4ed40", size = 230894, upload-time = "2025-06-27T06:34:27.15Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e3/3e/1b1ed868b840ecf5e7b02fc8ab20718ac24e184b90057815fee2ebbc107d/social_auth_core-4.7.0-py3-none-any.whl", hash = "sha256:9eef9b49c332d1a3265b37dcc698a7ace97c3fc59df2d874b51576d11d31f6a6", size = 427867, upload-time = "2025-06-27T06:34:25.715Z" }, +] + +[[package]] +name = "sqlparse" +version = "0.5.5" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/90/76/437d71068094df0726366574cf3432a4ed754217b436eb7429415cf2d480/sqlparse-0.5.5.tar.gz", hash = "sha256:e20d4a9b0b8585fdf63b10d30066c7c94c5d7a7ec47c889a2d83a3caa93ff28e", size = 120815, upload-time = "2025-12-19T07:17:45.073Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/4b/359f28a903c13438ef59ebeee215fb25da53066db67b305c125f1c6d2a25/sqlparse-0.5.5-py3-none-any.whl", hash = "sha256:12a08b3bf3eec877c519589833aed092e2444e68240a3577e8e26148acc7b1ba", size = 46138, upload-time = "2025-12-19T07:17:46.573Z" }, +] + +[[package]] +name = "stack-data" +version = "0.6.3" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "asttokens" }, + { name = "executing" }, + { name = "pure-eval" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/28/e3/55dcc2cfbc3ca9c29519eb6884dd1415ecb53b0e934862d3559ddcb7e20b/stack_data-0.6.3.tar.gz", hash = "sha256:836a778de4fec4dcd1dcd89ed8abff8a221f58308462e1c4aa2a3cf30148f0b9", size = 44707, upload-time = "2023-09-30T13:58:05.479Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f1/7b/ce1eafaf1a76852e2ec9b22edecf1daa58175c090266e9f6c64afcd81d91/stack_data-0.6.3-py3-none-any.whl", hash = "sha256:d5558e0c25a4cb0853cddad3d77da9891a08cb85dd9f9f91b9f8cd66e511e695", size = 24521, upload-time = "2023-09-30T13:58:03.53Z" }, +] + +[[package]] +name = "strict-rfc3339" +version = "0.7" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/56/e4/879ef1dbd6ddea1c77c0078cd59b503368b0456bcca7d063a870ca2119d3/strict-rfc3339-0.7.tar.gz", hash = "sha256:5cad17bedfc3af57b399db0fed32771f18fc54bbd917e85546088607ac5e1277", size = 17552, upload-time = "2016-04-24T04:24:04.403Z" } + +[[package]] +name = "tomli" +version = "2.4.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/82/30/31573e9457673ab10aa432461bee537ce6cef177667deca369efb79df071/tomli-2.4.0.tar.gz", hash = "sha256:aa89c3f6c277dd275d8e243ad24f3b5e701491a860d5121f2cdd399fbb31fc9c", size = 17477, upload-time = "2026-01-11T11:22:38.165Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/23/d1/136eb2cb77520a31e1f64cbae9d33ec6df0d78bdf4160398e86eec8a8754/tomli-2.4.0-py3-none-any.whl", hash = "sha256:1f776e7d669ebceb01dee46484485f43a4048746235e683bcdffacdf1fb4785a", size = 14477, upload-time = "2026-01-11T11:22:37.446Z" }, +] + +[[package]] +name = "traitlets" +version = "5.14.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/eb/79/72064e6a701c2183016abbbfedaba506d81e30e232a68c9f0d6f6fcd1574/traitlets-5.14.3.tar.gz", hash = "sha256:9ed0579d3502c94b4b3732ac120375cda96f923114522847de4b3bb98b96b6b7", size = 161621, upload-time = "2024-04-19T11:11:49.746Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/00/c0/8f5d070730d7836adc9c9b6408dec68c6ced86b304a9b26a14df072a6e8c/traitlets-5.14.3-py3-none-any.whl", hash = "sha256:b74e89e397b1ed28cc831db7aea759ba6640cb3de13090ca145426688ff1ac4f", size = 85359, upload-time = "2024-04-19T11:11:46.763Z" }, +] + +[[package]] +name = "twisted" +version = "24.7.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "attrs" }, + { name = "automat" }, + { name = "constantly" }, + { name = "hyperlink" }, + { name = "incremental" }, + { name = "typing-extensions" }, + { name = "zope-interface" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/8b/bf/f30eb89bcd14a21a36b4cd3d96658432d4c590af3c24bbe08ea77fa7bbbb/twisted-24.7.0.tar.gz", hash = "sha256:5a60147f044187a127ec7da96d170d49bcce50c6fd36f594e60f4587eff4d394", size = 3516844, upload-time = "2024-08-10T13:27:08.278Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/d2/7b3e869b983fbf29d770fc2893f8df7c1739c6ff03a2b926b4fc43e4263e/twisted-24.7.0-py3-none-any.whl", hash = "sha256:734832ef98108136e222b5230075b1079dad8a3fc5637319615619a7725b0c81", size = 3181556, upload-time = "2024-08-10T13:27:04.649Z" }, +] + +[[package]] +name = "typing-extensions" +version = "4.15.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/72/94/1a15dd82efb362ac84269196e94cf00f187f7ed21c242792a923cdb1c61f/typing_extensions-4.15.0.tar.gz", hash = "sha256:0cea48d173cc12fa28ecabc3b837ea3cf6f38c6d1136f85cbaaf598984861466", size = 109391, upload-time = "2025-08-25T13:49:26.313Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl", hash = "sha256:f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548", size = 44614, upload-time = "2025-08-25T13:49:24.86Z" }, +] + +[[package]] +name = "tzdata" +version = "2025.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5e/a7/c202b344c5ca7daf398f3b8a477eeb205cf3b6f32e7ec3a6bac0629ca975/tzdata-2025.3.tar.gz", hash = "sha256:de39c2ca5dc7b0344f2eba86f49d614019d29f060fc4ebc8a417896a620b56a7", size = 196772, upload-time = "2025-12-13T17:45:35.667Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/b0/003792df09decd6849a5e39c28b513c06e84436a54440380862b5aeff25d/tzdata-2025.3-py2.py3-none-any.whl", hash = "sha256:06a47e5700f3081aab02b2e513160914ff0694bce9947d6b76ebd6bf57cfc5d1", size = 348521, upload-time = "2025-12-13T17:45:33.889Z" }, +] + +[[package]] +name = "uritemplate" +version = "4.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/98/60/f174043244c5306c9988380d2cb10009f91563fc4b31293d27e17201af56/uritemplate-4.2.0.tar.gz", hash = "sha256:480c2ed180878955863323eea31b0ede668795de182617fef9c6ca09e6ec9d0e", size = 33267, upload-time = "2025-06-02T15:12:06.318Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl", hash = "sha256:962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686", size = 11488, upload-time = "2025-06-02T15:12:03.405Z" }, +] + +[[package]] +name = "urllib3" +version = "1.26.20" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/e4/e8/6ff5e6bc22095cfc59b6ea711b687e2b7ed4bdb373f7eeec370a97d7392f/urllib3-1.26.20.tar.gz", hash = "sha256:40c2dc0c681e47eb8f90e7e27bf6ff7df2e677421fd46756da1161c39ca70d32", size = 307380, upload-time = "2024-08-29T15:43:11.37Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/33/cf/8435d5a7159e2a9c83a95896ed596f68cf798005fe107cc655b5c5c14704/urllib3-1.26.20-py2.py3-none-any.whl", hash = "sha256:0ed14ccfbf1c30a9072c7ca157e4319b70d65f623e91e7b32fadb2853431016e", size = 144225, upload-time = "2024-08-29T15:43:08.921Z" }, +] + +[[package]] +name = "uvicorn" +version = "0.22.0" +source = { registry = "https://pypi.org/simple" } +dependencies = [ + { name = "click" }, + { name = "h11" }, +] +sdist = { url = "https://files.pythonhosted.org/packages/c6/dd/0d3bab50ab4ef8bec849f89fec2adc2fabcc397018c30e57d9f0d4009c5e/uvicorn-0.22.0.tar.gz", hash = "sha256:79277ae03db57ce7d9aa0567830bbb51d7a612f54d6e1e3e92da3ef24c2c8ed8", size = 37688, upload-time = "2023-04-28T00:53:40.158Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/ad/bd/d47ee02312640fcf26c7e1c807402d5c5eab468571153a94ec8f7ada0e46/uvicorn-0.22.0-py3-none-any.whl", hash = "sha256:e9434d3bbf05f310e762147f769c9f21235ee118ba2d2bf1155a7196448bd996", size = 58345, upload-time = "2023-04-28T00:53:38.517Z" }, +] + +[[package]] +name = "validate-email" +version = "1.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/84/a0/cb53fb64b52123513d04f9b913b905f3eb6fda7264e639b4573cc715c29f/validate_email-1.3.tar.gz", hash = "sha256:784719dc5f780be319cdd185dc85dd93afebdb6ebb943811bc4c7c5f9c72aeaf", size = 4694, upload-time = "2015-03-23T04:22:45.115Z" } + +[[package]] +name = "vine" +version = "1.3.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1c/e1/79fb8046e607dd6c2ad05c9b8ebac9d0bd31d086a08f02699e96fc5b3046/vine-1.3.0.tar.gz", hash = "sha256:133ee6d7a9016f177ddeaf191c1f58421a1dcc6ee9a42c58b34bed40e1d2cd87", size = 51953, upload-time = "2019-03-19T08:56:37.426Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/60/82c03047396126c8331ceb64da1dc52d4f1317209f32e8fe286d0c07365a/vine-1.3.0-py2.py3-none-any.whl", hash = "sha256:ea4947cc56d1fd6f2095c8d543ee25dad966f78692528e68b4fada11ba3f98af", size = 14174, upload-time = "2019-03-19T08:56:34.951Z" }, +] + +[[package]] +name = "watchdog" +version = "2.1.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/23/7c/82cafb290b818c331192e52609af8d41c34b55f468957ba5bd0a8d2cb776/watchdog-2.1.1.tar.gz", hash = "sha256:2894440b4ea95a6ef4c5d152deedbe270cae46092682710b7028a04d6a6980f6", size = 105882, upload-time = "2021-05-10T13:51:02.629Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/bc/27/6f250c6a534b8811dcd0efcd5f9574dd2b8c077571aa66544947b0b76d0c/watchdog-2.1.1-py3-none-manylinux2014_aarch64.whl", hash = "sha256:aa59afc87a892ed92d7d88d09f4b736f1336fc35540b403da7ee00c3be74bd07", size = 74713, upload-time = "2021-05-10T13:50:46.671Z" }, + { url = "https://files.pythonhosted.org/packages/ad/5f/3813b46bd10efa4870798850af2685cc3cce6e989d5a3397df0ee1cfe0e6/watchdog-2.1.1-py3-none-manylinux2014_armv7l.whl", hash = "sha256:a1b3f76e2a0713b406348dd5b9df2aa02bdd741a6ddf54f4c6410b395e077502", size = 74715, upload-time = "2021-05-10T13:50:48.086Z" }, + { url = "https://files.pythonhosted.org/packages/81/29/6abfafa77d6c6ead43ba92fd5537fd2fc33f7dc916460457d06cba45a398/watchdog-2.1.1-py3-none-manylinux2014_i686.whl", hash = "sha256:9f1b124fe2d4a1f37b7068f6289c2b1eba44859eb790bf6bd709adff224a5469", size = 74710, upload-time = "2021-05-10T13:50:49.983Z" }, + { url = "https://files.pythonhosted.org/packages/34/87/5298db4bf7bef093254bedd48fee54a3fc63f30185b0f2359d0bb8f213a4/watchdog-2.1.1-py3-none-manylinux2014_ppc64.whl", hash = "sha256:a9005f968220b715101d5fcdde5f5deda54f0d1873f618724f547797171f5e97", size = 74711, upload-time = "2021-05-10T13:50:51.297Z" }, + { url = "https://files.pythonhosted.org/packages/0d/5a/629a27cdb7c76744402598c76c0170d9298ecb61bb9238143811d1089897/watchdog-2.1.1-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:027c532e2fd3367d55fe235510fc304381a6cc88d0dcd619403e57ffbd83c1d2", size = 74714, upload-time = "2021-05-10T13:50:52.802Z" }, + { url = "https://files.pythonhosted.org/packages/fb/ef/5d2a010e6dea46260103a0615e7f433833a37dcee851e743cbf039a85b82/watchdog-2.1.1-py3-none-manylinux2014_s390x.whl", hash = "sha256:4d83c89ba24bd67b7a7d5752a4ef953ec40db69d4d30582bd1f27d3ecb6b61b0", size = 74714, upload-time = "2021-05-10T13:50:54.87Z" }, + { url = "https://files.pythonhosted.org/packages/58/f6/6b538562aaa62294ca0a1d18b59d9fcb1a43fe166fa5b3a258f445d64119/watchdog-2.1.1-py3-none-manylinux2014_x86_64.whl", hash = "sha256:67c645b1e500cc74d550e9aad4829309c5084dc55e8dc4e1c25d5da23e5be239", size = 74714, upload-time = "2021-05-10T13:50:56.916Z" }, + { url = "https://files.pythonhosted.org/packages/73/8f/cb225682a508d2c43f6a1f4cfe274a75a2e156ec2d73af055d5d47542f26/watchdog-2.1.1-py3-none-win32.whl", hash = "sha256:12645d41d7307601b318c48861e776ce7a9fdcad9f74961013ec39037050582c", size = 74698, upload-time = "2021-05-10T13:50:58.739Z" }, + { url = "https://files.pythonhosted.org/packages/85/64/592c43792c0f6b18b031d5944ba1c36d4a2775d72cb06c4088050ab4834a/watchdog-2.1.1-py3-none-win_amd64.whl", hash = "sha256:16078cd241a95124acd4d8d3efba2140faec9300674b12413cc08be11b825d56", size = 74701, upload-time = "2021-05-10T13:50:59.987Z" }, + { url = "https://files.pythonhosted.org/packages/49/5c/69074682ce2e5dbe701755d778cdf5480448462e901ea088cc7e6e2c8261/watchdog-2.1.1-py3-none-win_ia64.whl", hash = "sha256:20d4cabfa2ad7239995d81a0163bc0264a3e104a64f33c6f0a21ad75a0d915d9", size = 74701, upload-time = "2021-05-10T13:51:01.299Z" }, +] + +[[package]] +name = "wcwidth" +version = "0.5.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/c2/62/a7c072fbfefb2980a00f99ca994279cb9ecf310cb2e6b2a4d2a28fe192b3/wcwidth-0.5.3.tar.gz", hash = "sha256:53123b7af053c74e9fe2e92ac810301f6139e64379031f7124574212fb3b4091", size = 157587, upload-time = "2026-01-31T03:52:10.92Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/3c/c1/d73f12f8cdb1891334a2ccf7389eed244d3941e74d80dd220badb937f3fb/wcwidth-0.5.3-py3-none-any.whl", hash = "sha256:d584eff31cd4753e1e5ff6c12e1edfdb324c995713f75d26c29807bb84bf649e", size = 92981, upload-time = "2026-01-31T03:52:09.14Z" }, +] + +[[package]] +name = "webencodings" +version = "0.5.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/0b/02/ae6ceac1baeda530866a85075641cec12989bd8d31af6d5ab4a3e8c92f47/webencodings-0.5.1.tar.gz", hash = "sha256:b36a1c245f2d304965eb4e0a82848379241dc04b865afcc4aab16748587e1923", size = 9721, upload-time = "2017-04-05T20:21:34.189Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f4/24/2a3e3df732393fed8b3ebf2ec078f05546de641fe1b667ee316ec1dcf3b7/webencodings-0.5.1-py2.py3-none-any.whl", hash = "sha256:a0af1213f3c2226497a97e2b3aa01a7e4bee4f403f95be16fc9acd2947514a78", size = 11774, upload-time = "2017-04-05T20:21:32.581Z" }, +] + +[[package]] +name = "websockets" +version = "10.4" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/85/dc/549a807a53c13fd4a8dac286f117a7a71260defea9ec0c05d6027f2ae273/websockets-10.4.tar.gz", hash = "sha256:eef610b23933c54d5d921c92578ae5f89813438fded840c2e9809d378dc765d3", size = 84877, upload-time = "2022-10-25T20:12:37.712Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/14/88/81c08fb3418c5aedf3776333f29443599729509a4f673d6598dd769d3d6b/websockets-10.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d58804e996d7d2307173d56c297cf7bc132c52df27a3efaac5e8d43e36c21c48", size = 100633, upload-time = "2022-10-25T20:10:29.571Z" }, + { url = "https://files.pythonhosted.org/packages/68/bd/c8bd8354fc629863a2db39c9182d40297f47dfb2ed3e178bc83041ce044b/websockets-10.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc0b82d728fe21a0d03e65f81980abbbcb13b5387f733a1a870672c5be26edab", size = 97870, upload-time = "2022-10-25T20:10:33.577Z" }, + { url = "https://files.pythonhosted.org/packages/20/7a/bd0ce7ac1cfafc76c84d6e8051bcbd0f7def8e45207230833bd6ff77a41d/websockets-10.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ba089c499e1f4155d2a3c2a05d2878a3428cf321c848f2b5a45ce55f0d7d310c", size = 97945, upload-time = "2022-10-25T20:10:34.736Z" }, + { url = "https://files.pythonhosted.org/packages/25/a7/4e32f8edfc26339d8d170fe539e0b83a329c42d974dacfe07a0566390aef/websockets-10.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:33d69ca7612f0ddff3316b0c7b33ca180d464ecac2d115805c044bf0a3b0d032", size = 107446, upload-time = "2022-10-25T20:10:36.154Z" }, + { url = "https://files.pythonhosted.org/packages/1c/4b/cab8fed34c3a29d4594ff77234f6e6b45feb35331f1c12fccf92ca5486dd/websockets-10.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62e627f6b6d4aed919a2052efc408da7a545c606268d5ab5bfab4432734b82b4", size = 106455, upload-time = "2022-10-25T20:10:37.774Z" }, + { url = "https://files.pythonhosted.org/packages/4d/6f/2388f9304cdaa0215b6388f837c6dbfe6d63ac1bba8c196e3b14eea1831e/websockets-10.4-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:38ea7b82bfcae927eeffc55d2ffa31665dc7fec7b8dc654506b8e5a518eb4d50", size = 106763, upload-time = "2022-10-25T20:10:39.035Z" }, + { url = "https://files.pythonhosted.org/packages/0c/56/b2d373ed19b4e7b6c5c7630d598ba10473fa6131e67e69590214ab18bc09/websockets-10.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e0cb5cc6ece6ffa75baccfd5c02cffe776f3f5c8bf486811f9d3ea3453676ce8", size = 111489, upload-time = "2022-10-25T20:10:40.132Z" }, + { url = "https://files.pythonhosted.org/packages/a1/f6/83da14582fbb0496c47a4c039bd6e802886a0c300e9795c0f839fd1498e3/websockets-10.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:ae5e95cfb53ab1da62185e23b3130e11d64431179debac6dc3c6acf08760e9b1", size = 110721, upload-time = "2022-10-25T20:10:41.174Z" }, + { url = "https://files.pythonhosted.org/packages/37/02/ef21ca4698c2fd950250e5ac397fd07b0c9f16bbd073d0ea64c25baef9c1/websockets-10.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:7c584f366f46ba667cfa66020344886cf47088e79c9b9d39c84ce9ea98aaa331", size = 111343, upload-time = "2022-10-25T20:10:42.463Z" }, + { url = "https://files.pythonhosted.org/packages/a1/6f/60e5f6e114b6077683d74da5df0d4af647a9e6d2a18b4698f577b2cb7c14/websockets-10.4-cp310-cp310-win32.whl", hash = "sha256:b029fb2032ae4724d8ae8d4f6b363f2cc39e4c7b12454df8df7f0f563ed3e61a", size = 100918, upload-time = "2022-10-25T20:10:43.785Z" }, + { url = "https://files.pythonhosted.org/packages/1e/76/163a18626001465a309bf74b6aeb301d7092e304637fe00f89d7efc75c44/websockets-10.4-cp310-cp310-win_amd64.whl", hash = "sha256:8dc96f64ae43dde92530775e9cb169979f414dcf5cff670455d81a6823b42089", size = 101442, upload-time = "2022-10-25T20:10:45.003Z" }, +] + +[[package]] +name = "whitenoise" +version = "5.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/ac/8a/cd6346ffd78f5ff9aa9ce750f3e8d75cde7c60fbe197ac10bdea49d61cff/whitenoise-5.2.0.tar.gz", hash = "sha256:05ce0be39ad85740a78750c86a93485c40f08ad8c62a6006de0233765996e5c7", size = 45096, upload-time = "2020-08-04T09:33:38.557Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/50/83/5d91949e370e52578a99ef6391c3b3e19f9fd1f5b4f58d5cbd6e2862d4a8/whitenoise-5.2.0-py2.py3-none-any.whl", hash = "sha256:05d00198c777028d72d8b0bbd234db605ef6d60e9410125124002518a48e515d", size = 19775, upload-time = "2020-08-04T09:33:41.561Z" }, +] + +[[package]] +name = "win32-setctime" +version = "1.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b3/8f/705086c9d734d3b663af0e9bb3d4de6578d08f46b1b101c2442fd9aecaa2/win32_setctime-1.2.0.tar.gz", hash = "sha256:ae1fdf948f5640aae05c511ade119313fb6a30d7eabe25fef9764dca5873c4c0", size = 4867, upload-time = "2024-12-07T15:28:28.314Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/e1/07/c6fe3ad3e685340704d314d765b7912993bcb8dc198f0e7a89382d37974b/win32_setctime-1.2.0-py3-none-any.whl", hash = "sha256:95d644c4e708aba81dc3704a116d8cbc974d70b3bdb8be1d150e36be6e9d1390", size = 4083, upload-time = "2024-12-07T15:28:26.465Z" }, +] + +[[package]] +name = "zope-interface" +version = "8.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/86/a4/77daa5ba398996d16bb43fc721599d27d03eae68fe3c799de1963c72e228/zope_interface-8.2.tar.gz", hash = "sha256:afb20c371a601d261b4f6edb53c3c418c249db1a9717b0baafc9a9bb39ba1224", size = 254019, upload-time = "2026-01-09T07:51:07.253Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/b1/fa/6d9eb3a33998a3019d7eb4fa1802d01d6602fad90e0aea443e6e0fe8e49a/zope_interface-8.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:788c293f3165964ec6527b2d861072c68eef53425213f36d3893ebee89a89623", size = 207541, upload-time = "2026-01-09T08:04:55.378Z" }, + { url = "https://files.pythonhosted.org/packages/19/8c/ad23c96fdee84cb1f768f6695dac187cc26e9038e01c69713ba0f7dc46ab/zope_interface-8.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9a4e785097e741a1c953b3970ce28f2823bd63c00adc5d276f2981dd66c96c15", size = 208075, upload-time = "2026-01-09T08:04:57.118Z" }, + { url = "https://files.pythonhosted.org/packages/dd/35/1bfd5fec31a307f0cf4065ee74ade63858ded3e2a71e248f1508118fcc95/zope_interface-8.2-cp310-cp310-manylinux1_i686.manylinux2014_i686.manylinux_2_17_i686.manylinux_2_5_i686.whl", hash = "sha256:16c69da19a06566664ddd4785f37cad5693a51d48df1515d264c20d005d322e2", size = 249528, upload-time = "2026-01-09T08:04:59.074Z" }, + { url = "https://files.pythonhosted.org/packages/c6/3a/5d50b5fdb0f8226a2edff6adb7efdd3762ec95dff827dbab1761cb9a9e85/zope_interface-8.2-cp310-cp310-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:c31acfa3d7cde48bec45701b0e1f4698daffc378f559bfb296837d8c834732f6", size = 254646, upload-time = "2026-01-09T08:05:00.964Z" }, + { url = "https://files.pythonhosted.org/packages/2f/2a/ee7d675e151578eaf77828b8faac2b7ed9a69fead350bf5cf0e4afe7c73d/zope_interface-8.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0723507127f8269b8f3f22663168f717e9c9742107d1b6c9f419df561b71aa6d", size = 255083, upload-time = "2026-01-09T08:05:02.857Z" }, + { url = "https://files.pythonhosted.org/packages/5d/07/99e2342f976c3700e142eddc01524e375a9e9078869a6885d9c72f3a3659/zope_interface-8.2-cp310-cp310-win_amd64.whl", hash = "sha256:3bf73a910bb27344def2d301a03329c559a79b308e1e584686b74171d736be4e", size = 211924, upload-time = "2026-01-09T08:05:04.702Z" }, +]