From c4702559fba47d8e2f9f4c541de62f490c760bee Mon Sep 17 00:00:00 2001 From: pacnpal <183241239+pacnpal@users.noreply.github.com> Date: Thu, 28 Aug 2025 11:37:24 -0400 Subject: [PATCH] Last with the old frontend --- backend/.gitattributes | 2 + backend/.gitignore | 3 + backend/apps/api/v1/parks/company_views.py | 362 +++ backend/apps/api/v1/parks/urls.py | 11 +- backend/apps/api/v1/rides/company_views.py | 352 +++ backend/apps/api/v1/rides/urls.py | 13 +- backend/apps/api/v1/views/health.py | 4 +- backend/config/django/local.py | 28 + backend/pixi.lock | 2652 ++++++++++++++++++++ backend/pyproject.toml | 13 + 10 files changed, 3434 insertions(+), 6 deletions(-) create mode 100644 backend/.gitattributes create mode 100644 backend/.gitignore create mode 100644 backend/apps/api/v1/parks/company_views.py create mode 100644 backend/apps/api/v1/rides/company_views.py create mode 100644 backend/pixi.lock diff --git a/backend/.gitattributes b/backend/.gitattributes new file mode 100644 index 00000000..887a2c18 --- /dev/null +++ b/backend/.gitattributes @@ -0,0 +1,2 @@ +# SCM syntax highlighting & preventing 3-way merges +pixi.lock merge=binary linguist-language=YAML linguist-generated=true diff --git a/backend/.gitignore b/backend/.gitignore new file mode 100644 index 00000000..ae849e65 --- /dev/null +++ b/backend/.gitignore @@ -0,0 +1,3 @@ +# pixi environments +.pixi/* +!.pixi/config.toml diff --git a/backend/apps/api/v1/parks/company_views.py b/backend/apps/api/v1/parks/company_views.py new file mode 100644 index 00000000..0f4d7747 --- /dev/null +++ b/backend/apps/api/v1/parks/company_views.py @@ -0,0 +1,362 @@ +""" +Parks Company API views for ThrillWiki API v1. + +This module implements comprehensive Company endpoints for the Parks domain, +handling companies with OPERATOR and PROPERTY_OWNER roles. + +Endpoints: +- List / Create: GET /parks/companies/ POST /parks/companies/ +- Retrieve / Update / Delete: GET /parks/companies/{pk}/ PATCH/PUT/DELETE +- Search: GET /parks/companies/search/?q=... +""" + +from typing import Any + +from rest_framework import status, permissions +from rest_framework.views import APIView +from rest_framework.request import Request +from rest_framework.response import Response +from rest_framework.pagination import PageNumberPagination +from rest_framework.exceptions import NotFound +from drf_spectacular.utils import extend_schema, OpenApiParameter +from drf_spectacular.types import OpenApiTypes + +# Import serializers +from apps.api.v1.serializers.companies import ( + CompanyDetailOutputSerializer, + CompanyCreateInputSerializer, + CompanyUpdateInputSerializer, +) + +# Attempt to import model-level helpers; fall back gracefully if not present. +try: + from apps.parks.models import Company as ParkCompany # type: ignore + + MODELS_AVAILABLE = True +except Exception: + ParkCompany = None # type: ignore + MODELS_AVAILABLE = False + + +class StandardResultsSetPagination(PageNumberPagination): + page_size = 20 + page_size_query_param = "page_size" + max_page_size = 1000 + + +# --- Company list & create ------------------------------------------------- +class ParkCompanyListCreateAPIView(APIView): + """ + Parks Company endpoints for OPERATOR and PROPERTY_OWNER companies. + """ + + permission_classes = [permissions.AllowAny] + + @extend_schema( + summary="List park companies (operators/property owners)", + description=( + "List companies with OPERATOR and PROPERTY_OWNER roles " + "with filtering and pagination." + ), + parameters=[ + OpenApiParameter( + name="page", location=OpenApiParameter.QUERY, type=OpenApiTypes.INT + ), + OpenApiParameter( + name="page_size", location=OpenApiParameter.QUERY, type=OpenApiTypes.INT + ), + OpenApiParameter( + name="search", location=OpenApiParameter.QUERY, type=OpenApiTypes.STR + ), + OpenApiParameter( + name="roles", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description=( + "Filter by roles: OPERATOR, PROPERTY_OWNER (comma-separated)" + ), + ), + ], + responses={200: CompanyDetailOutputSerializer(many=True)}, + tags=["Parks", "Companies"], + ) + def get(self, request: Request) -> Response: + """List park companies with filtering and pagination.""" + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Park company listing is not available because domain models " + "are not imported. Implement apps.parks.models.Company " + "to enable listing." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + + # Filter to only park-related roles + qs = ParkCompany.objects.filter( + roles__overlap=["OPERATOR", "PROPERTY_OWNER"] + ).distinct() # type: ignore + + # Basic filters + q = request.query_params.get("search") + if q: + qs = qs.filter(name__icontains=q) + + roles = request.query_params.get("roles") + if roles: + role_list = [role.strip().upper() for role in roles.split(",")] + # Filter to companies that have any of the specified roles + valid_roles = [r for r in role_list if r in ["OPERATOR", "PROPERTY_OWNER"]] + if valid_roles: + qs = qs.filter(roles__overlap=valid_roles) + + paginator = StandardResultsSetPagination() + page = paginator.paginate_queryset(qs, request) + serializer = CompanyDetailOutputSerializer( + page, many=True, context={"request": request} + ) + return paginator.get_paginated_response(serializer.data) + + @extend_schema( + summary="Create a new park company", + description="Create a new company with OPERATOR and/or PROPERTY_OWNER roles.", + request=CompanyCreateInputSerializer, + responses={201: CompanyDetailOutputSerializer()}, + tags=["Parks", "Companies"], + ) + def post(self, request: Request) -> Response: + """Create a new park company.""" + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Park company creation is not available because domain models " + "are not imported. Implement apps.parks.models.Company " + "and necessary create logic." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + + serializer_in = CompanyCreateInputSerializer(data=request.data) + serializer_in.is_valid(raise_exception=True) + validated = serializer_in.validated_data + + # Validate that roles are appropriate for parks domain + roles = validated.get("roles", []) + valid_park_roles = [r for r in roles if r in ["OPERATOR", "PROPERTY_OWNER"]] + if not valid_park_roles: + return Response( + { + "detail": ( + "Park companies must have at least one of: " + "OPERATOR, PROPERTY_OWNER" + ) + }, + status=status.HTTP_400_BAD_REQUEST, + ) + + # Create the company + company = ParkCompany.objects.create( # type: ignore + name=validated["name"], + roles=valid_park_roles, + description=validated.get("description", ""), + website=validated.get("website", ""), + founded_date=validated.get("founded_date"), + ) + + out_serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(out_serializer.data, status=status.HTTP_201_CREATED) + + +# --- Company retrieve / update / delete ------------------------------------ +@extend_schema( + summary="Retrieve, update or delete a park company", + responses={200: CompanyDetailOutputSerializer()}, + tags=["Parks", "Companies"], +) +class ParkCompanyDetailAPIView(APIView): + """ + Park Company detail endpoints for OPERATOR and PROPERTY_OWNER companies. + """ + + permission_classes = [permissions.AllowAny] + + def _get_company_or_404(self, pk: int) -> Any: + if not MODELS_AVAILABLE: + raise NotFound( + ( + "Park company detail is not available because domain models " + "are not imported. Implement apps.parks.models.Company " + "to enable detail endpoints." + ) + ) + try: + # Only allow access to companies with park-related roles + return ParkCompany.objects.filter( + roles__overlap=["OPERATOR", "PROPERTY_OWNER"] + ).get( + pk=pk + ) # type: ignore + except ParkCompany.DoesNotExist: # type: ignore + raise NotFound("Park company not found") + + def get(self, request: Request, pk: int) -> Response: + """Retrieve a park company.""" + company = self._get_company_or_404(pk) + serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(serializer.data) + + @extend_schema( + request=CompanyUpdateInputSerializer, + responses={200: CompanyDetailOutputSerializer()}, + ) + def patch(self, request: Request, pk: int) -> Response: + """Update a park company.""" + company = self._get_company_or_404(pk) + + serializer_in = CompanyUpdateInputSerializer(data=request.data, partial=True) + serializer_in.is_valid(raise_exception=True) + validated = serializer_in.validated_data + + # If roles are being updated, validate they're appropriate for parks domain + if "roles" in validated: + roles = validated["roles"] + valid_park_roles = [r for r in roles if r in ["OPERATOR", "PROPERTY_OWNER"]] + if not valid_park_roles: + return Response( + { + "detail": ( + "Park companies must have at least one of: " + "OPERATOR, PROPERTY_OWNER" + ) + }, + status=status.HTTP_400_BAD_REQUEST, + ) + validated["roles"] = valid_park_roles + + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Park company update is not available because domain models " + "are not imported." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + + for key, value in validated.items(): + setattr(company, key, value) + company.save() + + serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(serializer.data) + + def put(self, request: Request, pk: int) -> Response: + """Full replace - reuse patch behavior for simplicity.""" + return self.patch(request, pk) + + def delete(self, request: Request, pk: int) -> Response: + """Delete a park company.""" + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Park company delete is not available because domain models " + "are not imported." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + company = self._get_company_or_404(pk) + company.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + + +# --- Company search (enhanced) --------------------------------------------- +@extend_schema( + summary="Search park companies (operators/property owners) for autocomplete", + parameters=[ + OpenApiParameter( + name="q", location=OpenApiParameter.QUERY, type=OpenApiTypes.STR + ), + OpenApiParameter( + name="roles", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description="Filter by roles: OPERATOR, PROPERTY_OWNER (comma-separated)", + ), + ], + responses={200: OpenApiTypes.OBJECT}, + tags=["Parks", "Companies"], +) +class ParkCompanySearchAPIView(APIView): + """ + Enhanced park company search with role filtering. + """ + + permission_classes = [permissions.AllowAny] + + def get(self, request: Request) -> Response: + q = request.query_params.get("q", "") + if not q: + return Response([], status=status.HTTP_200_OK) + + if ParkCompany is None: + # Provide helpful placeholder structure + return Response( + [ + { + "id": 1, + "name": "Six Flags Entertainment", + "slug": "six-flags", + "roles": ["OPERATOR"], + }, + { + "id": 2, + "name": "Cedar Fair", + "slug": "cedar-fair", + "roles": ["OPERATOR", "PROPERTY_OWNER"], + }, + { + "id": 3, + "name": "Disney Parks", + "slug": "disney", + "roles": ["OPERATOR", "PROPERTY_OWNER"], + }, + ] + ) + + # Filter to only park-related roles + qs = ParkCompany.objects.filter( + name__icontains=q, roles__overlap=["OPERATOR", "PROPERTY_OWNER"] + ).distinct() # type: ignore + + # Additional role filtering + roles = request.query_params.get("roles") + if roles: + role_list = [role.strip().upper() for role in roles.split(",")] + valid_roles = [r for r in role_list if r in ["OPERATOR", "PROPERTY_OWNER"]] + if valid_roles: + qs = qs.filter(roles__overlap=valid_roles) + + qs = qs[:20] # Limit results + results = [ + { + "id": c.id, + "name": c.name, + "slug": getattr(c, "slug", ""), + "roles": c.roles if hasattr(c, "roles") else [], + } + for c in qs + ] + return Response(results) diff --git a/backend/apps/api/v1/parks/urls.py b/backend/apps/api/v1/parks/urls.py index b6c804cc..df72906b 100644 --- a/backend/apps/api/v1/parks/urls.py +++ b/backend/apps/api/v1/parks/urls.py @@ -13,9 +13,13 @@ from .park_views import ( ParkListCreateAPIView, ParkDetailAPIView, FilterOptionsAPIView, - CompanySearchAPIView, ParkSearchSuggestionsAPIView, ) +from .company_views import ( + ParkCompanyListCreateAPIView, + ParkCompanyDetailAPIView, + ParkCompanySearchAPIView, +) from .views import ParkPhotoViewSet # Create router for nested photo endpoints @@ -29,10 +33,13 @@ urlpatterns = [ path("", ParkListCreateAPIView.as_view(), name="park-list-create"), # Filter options path("filter-options/", FilterOptionsAPIView.as_view(), name="park-filter-options"), + # Company endpoints - domain-specific CRUD for OPERATOR/PROPERTY_OWNER companies + path("companies/", ParkCompanyListCreateAPIView.as_view(), name="park-companies-list-create"), + path("companies//", ParkCompanyDetailAPIView.as_view(), name="park-company-detail"), # Autocomplete / suggestion endpoints path( "search/companies/", - CompanySearchAPIView.as_view(), + ParkCompanySearchAPIView.as_view(), name="park-search-companies", ), path( diff --git a/backend/apps/api/v1/rides/company_views.py b/backend/apps/api/v1/rides/company_views.py new file mode 100644 index 00000000..dcee628e --- /dev/null +++ b/backend/apps/api/v1/rides/company_views.py @@ -0,0 +1,352 @@ +""" +Rides Company API views for ThrillWiki API v1. + +This module implements comprehensive Company CRUD endpoints specifically for the +Rides domain: +- Companies with MANUFACTURER and DESIGNER roles +- List / Create: GET /rides/companies/ POST /rides/companies/ +- Retrieve / Update / Delete: GET /rides/companies/{pk}/ PATCH/PUT/DELETE + /rides/companies/{pk}/ +- Enhanced search: GET /rides/search/companies/?q=...&role=... + +These views handle companies that manufacture or design rides, staying within the +Rides domain boundary. +""" + +from typing import Any + +from rest_framework import status, permissions +from rest_framework.views import APIView +from rest_framework.request import Request +from rest_framework.response import Response +from rest_framework.pagination import PageNumberPagination +from rest_framework.exceptions import NotFound, ValidationError +from drf_spectacular.utils import extend_schema, OpenApiParameter +from drf_spectacular.types import OpenApiTypes + +# Reuse existing Company serializers +from apps.api.v1.serializers.companies import ( + CompanyDetailOutputSerializer, + CompanyCreateInputSerializer, + CompanyUpdateInputSerializer, +) + +# Attempt to import Rides Company model; fall back gracefully if not present +try: + from apps.rides.models import Company as RideCompany # type: ignore + + MODELS_AVAILABLE = True +except Exception: + RideCompany = None # type: ignore + MODELS_AVAILABLE = False + + +class StandardResultsSetPagination(PageNumberPagination): + page_size = 20 + page_size_query_param = "page_size" + max_page_size = 1000 + + +# --- Company list & create for Rides domain -------------------------------- +class RideCompanyListCreateAPIView(APIView): + permission_classes = [permissions.AllowAny] + + @extend_schema( + summary="List ride companies with filtering and pagination", + description=( + "List companies with MANUFACTURER and DESIGNER roles for the rides domain." + ), + parameters=[ + OpenApiParameter( + name="page", location=OpenApiParameter.QUERY, type=OpenApiTypes.INT + ), + OpenApiParameter( + name="page_size", location=OpenApiParameter.QUERY, type=OpenApiTypes.INT + ), + OpenApiParameter( + name="search", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description="Search companies by name", + ), + OpenApiParameter( + name="role", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description="Filter by role: MANUFACTURER, DESIGNER", + ), + ], + responses={200: CompanyDetailOutputSerializer(many=True)}, + tags=["Rides"], + ) + def get(self, request: Request) -> Response: + """List ride companies with basic filtering and pagination.""" + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Ride company listing is not available because domain " + "models are not imported. Implement " + "apps.rides.models.Company to enable listing." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + + # Filter to only ride-related roles + qs = RideCompany.objects.filter( # type: ignore + roles__overlap=["MANUFACTURER", "DESIGNER"] + ).distinct() + + # Basic filters + search_query = request.query_params.get("search") + if search_query: + qs = qs.filter(name__icontains=search_query) + + role_filter = request.query_params.get("role") + if role_filter and role_filter in ["MANUFACTURER", "DESIGNER"]: + qs = qs.filter(roles__contains=[role_filter]) + + paginator = StandardResultsSetPagination() + page = paginator.paginate_queryset(qs, request) + serializer = CompanyDetailOutputSerializer( + page, many=True, context={"request": request} + ) + return paginator.get_paginated_response(serializer.data) + + @extend_schema( + summary="Create a new ride company", + description=( + "Create a new company with MANUFACTURER and/or DESIGNER roles " + "for the rides domain." + ), + request=CompanyCreateInputSerializer, + responses={201: CompanyDetailOutputSerializer()}, + tags=["Rides"], + ) + def post(self, request: Request) -> Response: + """Create a new ride company.""" + if not MODELS_AVAILABLE: + return Response( + { + "detail": ( + "Ride company creation is not available because domain " + "models are not imported. Implement " + "apps.rides.models.Company to enable creation." + ) + }, + status=status.HTTP_501_NOT_IMPLEMENTED, + ) + + serializer_in = CompanyCreateInputSerializer(data=request.data) + serializer_in.is_valid(raise_exception=True) + validated = serializer_in.validated_data + + # Validate roles for rides domain + roles = validated.get("roles", []) + valid_ride_roles = [ + role for role in roles if role in ["MANUFACTURER", "DESIGNER"] + ] + + if not valid_ride_roles: + raise ValidationError( + { + "roles": ( + "At least one role must be MANUFACTURER or DESIGNER " + "for ride companies." + ) + } + ) + + # Only keep valid ride roles + if len(valid_ride_roles) != len(roles): + validated["roles"] = valid_ride_roles + + # Create the company + company = RideCompany.objects.create( # type: ignore + name=validated["name"], + slug=validated.get("slug", ""), + roles=validated["roles"], + description=validated.get("description", ""), + website=validated.get("website", ""), + founded_date=validated.get("founded_date"), + ) + + out_serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(out_serializer.data, status=status.HTTP_201_CREATED) + + +# --- Company retrieve / update / delete ------------------------------------ +class RideCompanyDetailAPIView(APIView): + permission_classes = [permissions.AllowAny] + + def _get_company_or_404(self, pk: int) -> Any: + if not MODELS_AVAILABLE: + raise NotFound( + ( + "Ride company detail is not available because domain models " + "are not imported. Implement apps.rides.models.Company to " + "enable detail endpoints." + ) + ) + try: + return RideCompany.objects.filter( + roles__overlap=["MANUFACTURER", "DESIGNER"] + ).get(pk=pk) + except RideCompany.DoesNotExist: + raise NotFound("Ride company not found") + + @extend_schema( + summary="Retrieve a ride company", + responses={200: CompanyDetailOutputSerializer()}, + tags=["Rides"], + ) + def get(self, request: Request, pk: int) -> Response: + """Retrieve a ride company.""" + company = self._get_company_or_404(pk) + serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(serializer.data) + + @extend_schema( + request=CompanyUpdateInputSerializer, + responses={200: CompanyDetailOutputSerializer()}, + tags=["Rides"], + ) + def patch(self, request: Request, pk: int) -> Response: + """Update a ride company.""" + company = self._get_company_or_404(pk) + + serializer_in = CompanyUpdateInputSerializer(data=request.data, partial=True) + serializer_in.is_valid(raise_exception=True) + validated = serializer_in.validated_data + + # Validate roles for rides domain if being updated + if "roles" in validated: + roles = validated["roles"] + valid_ride_roles = [ + role for role in roles if role in ["MANUFACTURER", "DESIGNER"] + ] + + if not valid_ride_roles: + raise ValidationError( + { + "roles": ( + "At least one role must be MANUFACTURER or DESIGNER " + "for ride companies." + ) + } + ) + + # Only keep valid ride roles + validated["roles"] = valid_ride_roles + + # Update the company + for key, value in validated.items(): + setattr(company, key, value) + company.save() + + serializer = CompanyDetailOutputSerializer( + company, context={"request": request} + ) + return Response(serializer.data) + + def put(self, request: Request, pk: int) -> Response: + """Full replace - reuse patch behavior for simplicity.""" + return self.patch(request, pk) + + @extend_schema( + summary="Delete a ride company", + responses={204: None}, + tags=["Rides"], + ) + def delete(self, request: Request, pk: int) -> Response: + """Delete a ride company.""" + company = self._get_company_or_404(pk) + company.delete() + return Response(status=status.HTTP_204_NO_CONTENT) + + +# --- Enhanced Company search (autocomplete) for Rides domain --------------- +class RideCompanySearchAPIView(APIView): + permission_classes = [permissions.AllowAny] + + @extend_schema( + summary="Search ride companies (manufacturers/designers) for autocomplete", + description=( + "Enhanced search for companies with MANUFACTURER and DESIGNER roles." + ), + parameters=[ + OpenApiParameter( + name="q", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description="Search query for company names", + ), + OpenApiParameter( + name="role", + location=OpenApiParameter.QUERY, + type=OpenApiTypes.STR, + description="Filter by specific role: MANUFACTURER, DESIGNER", + ), + ], + responses={200: OpenApiTypes.OBJECT}, + tags=["Rides"], + ) + def get(self, request: Request) -> Response: + """Enhanced search for ride companies with role filtering.""" + q = request.query_params.get("q", "") + role_filter = request.query_params.get("role", "") + + if not q: + return Response([], status=status.HTTP_200_OK) + + if RideCompany is None: + # Provide helpful placeholder structure + return Response( + [ + { + "id": 1, + "name": "Rocky Mountain Construction", + "slug": "rmc", + "roles": ["MANUFACTURER"], + }, + { + "id": 2, + "name": "Bolliger & Mabillard", + "slug": "b&m", + "roles": ["MANUFACTURER"], + }, + { + "id": 3, + "name": "Alan Schilke", + "slug": "alan-schilke", + "roles": ["DESIGNER"], + }, + ] + ) + + # Filter to only ride-related roles + qs = RideCompany.objects.filter( + name__icontains=q, roles__overlap=["MANUFACTURER", "DESIGNER"] + ) + + # Apply role filter if specified + if role_filter and role_filter in ["MANUFACTURER", "DESIGNER"]: + qs = qs.filter(roles__contains=[role_filter]) + + qs = qs[:20] # Limit results + + results = [ + { + "id": c.id, + "name": c.name, + "slug": getattr(c, "slug", ""), + "roles": c.roles if hasattr(c, "roles") else [], + } + for c in qs + ] + return Response(results) diff --git a/backend/apps/api/v1/rides/urls.py b/backend/apps/api/v1/rides/urls.py index fa4cb767..838004d4 100644 --- a/backend/apps/api/v1/rides/urls.py +++ b/backend/apps/api/v1/rides/urls.py @@ -15,10 +15,14 @@ from .views import ( RideListCreateAPIView, RideDetailAPIView, FilterOptionsAPIView, - CompanySearchAPIView, RideModelSearchAPIView, RideSearchSuggestionsAPIView, ) +from .company_views import ( + RideCompanyListCreateAPIView, + RideCompanyDetailAPIView, + RideCompanySearchAPIView, +) from .photo_views import RidePhotoViewSet # Create router for nested photo endpoints @@ -32,10 +36,15 @@ urlpatterns = [ path("", RideListCreateAPIView.as_view(), name="ride-list-create"), # Filter options path("filter-options/", FilterOptionsAPIView.as_view(), name="ride-filter-options"), + # Company endpoints - domain-specific CRUD for MANUFACTURER/DESIGNER companies + path("companies/", RideCompanyListCreateAPIView.as_view(), + name="ride-companies-list-create"), + path("companies//", RideCompanyDetailAPIView.as_view(), + name="ride-company-detail"), # Autocomplete / suggestion endpoints path( "search/companies/", - CompanySearchAPIView.as_view(), + RideCompanySearchAPIView.as_view(), name="ride-search-companies", ), path( diff --git a/backend/apps/api/v1/views/health.py b/backend/apps/api/v1/views/health.py index 95c0ed48..4c844cfd 100644 --- a/backend/apps/api/v1/views/health.py +++ b/backend/apps/api/v1/views/health.py @@ -103,7 +103,7 @@ class HealthCheckAPIView(APIView): } # Process individual health checks - for plugin in plugins: + for plugin in plugins.values(): plugin_name = plugin.identifier() plugin_errors = ( errors.get(plugin.__class__.__name__, []) @@ -127,7 +127,7 @@ class HealthCheckAPIView(APIView): # Check if any critical services are failing critical_errors = any( getattr(plugin, "critical_service", False) - for plugin in plugins + for plugin in plugins.values() if isinstance(errors, dict) and errors.get(plugin.__class__.__name__) ) status_code = 503 if critical_errors else 200 diff --git a/backend/config/django/local.py b/backend/config/django/local.py index 3277186e..01c660fc 100644 --- a/backend/config/django/local.py +++ b/backend/config/django/local.py @@ -4,6 +4,9 @@ Local development settings for thrillwiki project. from ..settings import database import logging +import os +from decouple import config +import re from .base import ( BASE_DIR, INSTALLED_APPS, @@ -45,6 +48,31 @@ CSRF_TRUSTED_ORIGINS = [ "https://beta.thrillwiki.com", ] +CORS_ALLOWED_ORIGIN_REGEXES = [ + # Matches http://localhost:3000, http://localhost:3001, etc. + r"^http://localhost:\d+$", + # Matches http://127.0.0.1:3000, http://127.0.0.1:8080, etc. + r"^http://127\.0\.0\.1:\d+$", +] + +CORS_ALLOW_HEADERS = [ + 'accept', + 'accept-encoding', + 'authorization', + 'content-type', + 'dnt', + 'origin', + 'user-agent', + 'x-csrftoken', + 'x-requested-with', + 'x-nextjs-data', # Next.js specific header +] + +if DEBUG: + CORS_ALLOW_ALL_ORIGINS = True # ⚠️ Only for development! +else: + CORS_ALLOW_ALL_ORIGINS = False + GDAL_LIBRARY_PATH = "/opt/homebrew/lib/libgdal.dylib" GEOS_LIBRARY_PATH = "/opt/homebrew/lib/libgeos_c.dylib" diff --git a/backend/pixi.lock b/backend/pixi.lock new file mode 100644 index 00000000..cb33c79b --- /dev/null +++ b/backend/pixi.lock @@ -0,0 +1,2652 @@ +version: 6 +environments: + default: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.5-hf3f3da0_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/3c/0464dcada90d5da0e71018c04a140ad6349558afb30b3051b4264cc5b965/asgiref-3.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/ee/a6475f39ef6c6f41c33da6b193e0ffd2c6048f52e1698be6253c59301b72/autobahn-24.4.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/ff/1175b0b7371e46244032d43a56862d0af455823b5280a50c63d99cc50f18/automat-25.4.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/4c/800b0607b00b3fd20f1087f80ab53d6b4d005515b0f773e4831e37cfa83f/cachecontrol-0.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/89/1c/eae1c2a8c195760376e7f65d0bdcc3e966695d29cfbe5c54841ce5c71408/channels-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/fe/b7224a401ad227b263e5ba84753ffb5a88df048f3b15efd2797903543ce4/channels_redis-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/2d/f5/6bbead8b880620e5a99e0e4bb9e22e67cca16ff48d54105302a3e7821096/cleo-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/40/c199d095151addf69efdb4b9ca3a4f20f70e20508d6222bffb9b76f58573/constantly-23.10.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/d7/b71022408adbf040a680b8c64bf6ead3be37b553e5844f7465643979f7ca/coverage-7.10.5-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b0/5c/3ba7d12e7a79566f97b8f954400926d7b6eb33bcdccc1315a857f200f1f1/crashtest-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/01/34/6171ab34715ed210bcd6c2b38839cc792993cff4fe2493f50bc92b0086a0/daphne-4.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/19/00150c8bedf7b6d4c44ecf7c2be9e58ae2203b42741ca734152d34f549f1/dj-rest-auth-7.0.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/aa/5e/86a43c6fdaa41c12d58e4ff3ebbfd6b71a7cb0360a08614e3754ef2e9afb/dj_database_url-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/6e/98a1d23648e0085bb5825326af17612ecd8fc76be0ce96ea4dc35e17b926/django-5.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/82/e6f607b0bad524d227f6e5aaffdb5e2b286f6ab1b4b3151134ae2303c2d6/django_allauth-65.11.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/87/d7/a83dc87c2383e125da29948f7bccf5b30126c087a5a831316482407a960f/django_cleanup-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/08/f00887096f4867290eb16b9f21232f9a624beeb6a94fa16550187905613d/django_cloudflare_images-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a2/7bcfff86314bd9dd698180e31ba00604001606efb518a06cca6833a54285/django_cors_headers-4.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/b5/4724a8c18fcc5b09dca7b7a0e70c34208317bb110075ad12484d6588ae91/django_debug_toolbar-6.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/b3/0a3bec4ecbfee960f39b1842c2f91e4754251e0a6ed443db9fe3f666ba8f/django_environ-0.12.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/96/d967ca440d6a8e3861120f51985d8e5aec79b9a8bdda16041206adfe7adc/django_extensions-4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/a6/70dcd68537c434ba7cb9277d403c5c829caf04f35baf5eb9458be251e382/django_filter-25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/84/d5b29c102743abd61e1852b619263c8938b8516c71a138f4053114270743/django_htmx-1.23.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/1d/0fdb8429d12a2df117a552899e0faebb8dfc9ce901360de30dfbded4218a/django_htmx_autocomplete-1.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/40/e556bc19ba65356fe5f0e48ca01c50e81f7c630042fa7411b6ab428ecf68/django_oauth_toolkit-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/11/16ea1e6723c138f4c11d0f21cb86cc547b99df30ee6568da39778d28170a/django_pghistory-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/9c/deb7c7089ecef9912eff15a2cb1ac32a5ae695969473a84eee1f1fa7171d/django_pgtrigger-4.15.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/79/055dfcc508cfe9f439d9f453741188d633efa9eab90fc78a67b0ab50b137/django_redis-6.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/e8/b45d7b141afe735ee10244ec69b5d43e25755281ed02196126ad14ee2d71/django_silk-5.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/c3/d4ba265feb7b8bad3cf0730a3a8d82bb40d14551f8c53c88895ec06fa51c/django_simple_history-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/1a/1c15852b3002929ed08992aeaaea703c43a43345dc19a09fd457593f52a6/django_tailwind_cli-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/b6/6cdf17830ba65836e370158028163b0e826d5c744df8288db5e4b20b6afc/django_typer-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/dc/216df230d008495613b6fa3fe6f5f38c99c8516e81acda8cbe73a3c0f14c/django_webpack_loader-3.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/6a/6cb6deb5c38b785c77c3ba66f53051eada49205979c407323eb666930915/django_widget_tweaks-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/ce/bf8b9d3f415be4ac5588545b5fcdbbb841977db1c1d923f7568eeabe1689/djangorestframework-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/66/c2929871393b1515c3767a670ff7d980a6882964a31a4ca2680b30d7212a/drf_spectacular-0.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/b7/78116bfe8860edca277d00ac243749c8b94714dc3b4608f0c23fa7f4b78e/dulwich-0.22.8-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/2bc5f5546ff2ccb3f7de06742853483ab75bf74f36a92254702f8baecc79/factory_boy-3.3.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/7d/8b50e4ac772719777be33661f4bde320793400a706f5eb214e4de46f093c/faker-37.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/cc/10e4ec45585eba7784a6e86f21990e97b828b8d8927d28ae639b06d50c59/findpython-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/ed/89d760cb25279109b89eb52975a7b5479700d3114a2421ce735bfb2e7513/gprof2dot-2025.4.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/38/221e5b2ae676a3938c2c1919131410c342b6efc2baffeda395dd66eeca8f/incremental-24.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/09/726f168acad366b11e420df31bf1c702a54d373a83f968d94141a8c3fde0/jaraco_functools-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/6b/9721ba7c68036316bd8aeb596b397253590c87d7045c9d6fc82b7364eff4/nplusone-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/0b/a286029828fe6ddf0fa0a4a8a46b7d90c7d6ac26a3237f4c211df9143e92/pbs_installer-2025.8.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/d8/6f63147dd73373d051c5eb049ecd841207f898f50a5a1d4378594178f6cf/piexif-1.1.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fa/3d/f4f2ba829efb54b6cd2d91349c7463316a9cc55a43fc980447416c88540f/pkginfo-1.12.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/7b/51882dc584f7aa59f446f2bb34e33c0e5f015de4e31949e5b7c2c10e54f0/playwright-1.54.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/37/578fe593a07daa5e4417a7965d46093a255ebd7fbb797df6959c0f378f43/poetry-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/f1/fb218aebd29bca5c506230201c346881ae9b43de7bbb21a68dc648e972b3/poetry_core-2.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/0e/bdc8274dc0585090b4e3432267d7be4dfbfd8971c0fa59167c711105a6bf/psycopg2-binary-2.9.10.tar.gz + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/28/2659c02301b9500751f8d42f9a6632e1508aa5120de5e43042b8b30f8d5d/pyopenssl-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/30/89aa7f7d7a875bbb9a577d4b1dc5a3e404e3d2ae2657354808e905e358e0/pyright-1.1.404-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/1c/b00940ab9eb8ede7897443b771987f2f4a76f06be02f1b3f01eb7567e24a/pytest_base_url-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/96/5f8a4545d783674f3de33f0ebc4db16cc76ce77a4c404d284f43f09125e3/pytest_playwright-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/d4/9193206c4563ec771faf2ccf54815ca7918529fe81f6adb22ee6d0e06622/python_decouple-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl + - pypi: direct+https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/c7/702472c4f3c4e5f9985bb5143405a5c4aadf3b439193f4174944880c50a3/rapidfuzz-3.14.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/02/89e2ed7e85db6c93dfa9e8f691c5087df4e3551ab39081a4d7c6d1f90e05/redis-6.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2c/0d/15b72c5fe6b1e402a543aa9d8960e0a7e19dfb079f5b0b424db48b7febab/ruff-0.12.11-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/1f/5feb6c42cc30126e9574eabc28139f8c626b483a47c537f648d133628df0/sentry_sdk-2.35.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/2c/ca6dd598b384bc1ce581e24aaae0f2bed4ccac57749d5c3befbb5e742081/service_identity-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/40/d54944eeb5646fb4b1c98d4601fe5e0812dd2e7c0aa94d53fc46457effc8/trove_classifiers-2025.8.26.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/66/ab7efd8941f0bc7b2bd555b0f0471bff77df4c88e0cc31120c82737fec77/twisted-25.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/56/aff5af8caa210321d0c206eb19897a4e0b29b4e24c4e24226325950efe0b/txaio-25.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/08/fd4e6de24f677703c7295e836dc168041793d5a943a32e8840dd852da02b/typer_slim-0.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/c6/f8f28009920a736d0df434b52e9feebfb4d702ba942f15338cb4a83eafc1/virtualenv-20.32.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b2/2ce9263149fbde9701d352bda24ea1362c154e196d2fda2201f18fc585d7/whitenoise-6.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/40/93f2dd033544028e7b9512b8b9fb6872ec74a804fbb686e62b83fdf72e21/xattr-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/49/65/78e7cebca6be07c8fc4032bfbb123e500d60efdf7b86727bb8a071992108/zope.interface-7.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/99/56/fc04395d6f5eabd2fe6d86c0800d198969f3038385cb918bfbe94f2b0c62/zstandard-0.24.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: ./ + dev: + channels: + - url: https://conda.anaconda.org/conda-forge/ + indexes: + - https://pypi.org/simple + packages: + osx-arm64: + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.5-hf3f3da0_102_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + - conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + - pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7c/3c/0464dcada90d5da0e71018c04a140ad6349558afb30b3051b4264cc5b965/asgiref-3.9.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/ee/a6475f39ef6c6f41c33da6b193e0ffd2c6048f52e1698be6253c59301b72/autobahn-24.4.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/ee/3fd29bf416eb4f1c5579cf12bf393ae954099258abd7bde03c4f9716ef6b/autoflake-2.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/02/ff/1175b0b7371e46244032d43a56862d0af455823b5280a50c63d99cc50f18/automat-25.4.16-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/81/4c/800b0607b00b3fd20f1087f80ab53d6b4d005515b0f773e4831e37cfa83f/cachecontrol-0.14.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/89/1c/eae1c2a8c195760376e7f65d0bdcc3e966695d29cfbe5c54841ce5c71408/channels-4.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/df/fe/b7224a401ad227b263e5ba84753ffb5a88df048f3b15efd2797903543ce4/channels_redis-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl + - pypi: https://files.pythonhosted.org/packages/2d/f5/6bbead8b880620e5a99e0e4bb9e22e67cca16ff48d54105302a3e7821096/cleo-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b8/40/c199d095151addf69efdb4b9ca3a4f20f70e20508d6222bffb9b76f58573/constantly-23.10.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/25/d7/b71022408adbf040a680b8c64bf6ead3be37b553e5844f7465643979f7ca/coverage-7.10.5-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/b0/5c/3ba7d12e7a79566f97b8f954400926d7b6eb33bcdccc1315a857f200f1f1/crashtest-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl + - pypi: https://files.pythonhosted.org/packages/01/34/6171ab34715ed210bcd6c2b38839cc792993cff4fe2493f50bc92b0086a0/daphne-4.2.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/19/00150c8bedf7b6d4c44ecf7c2be9e58ae2203b42741ca734152d34f549f1/dj-rest-auth-7.0.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/aa/5e/86a43c6fdaa41c12d58e4ff3ebbfd6b71a7cb0360a08614e3754ef2e9afb/dj_database_url-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9d/6e/98a1d23648e0085bb5825326af17612ecd8fc76be0ce96ea4dc35e17b926/django-5.2.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ac/82/e6f607b0bad524d227f6e5aaffdb5e2b286f6ab1b4b3151134ae2303c2d6/django_allauth-65.11.1.tar.gz + - pypi: https://files.pythonhosted.org/packages/87/d7/a83dc87c2383e125da29948f7bccf5b30126c087a5a831316482407a960f/django_cleanup-9.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d6/08/f00887096f4867290eb16b9f21232f9a624beeb6a94fa16550187905613d/django_cloudflare_images-0.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/a2/7bcfff86314bd9dd698180e31ba00604001606efb518a06cca6833a54285/django_cors_headers-4.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/05/b5/4724a8c18fcc5b09dca7b7a0e70c34208317bb110075ad12484d6588ae91/django_debug_toolbar-6.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/83/b3/0a3bec4ecbfee960f39b1842c2f91e4754251e0a6ed443db9fe3f666ba8f/django_environ-0.12.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/96/d967ca440d6a8e3861120f51985d8e5aec79b9a8bdda16041206adfe7adc/django_extensions-4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/07/a6/70dcd68537c434ba7cb9277d403c5c829caf04f35baf5eb9458be251e382/django_filter-25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3c/84/d5b29c102743abd61e1852b619263c8938b8516c71a138f4053114270743/django_htmx-1.23.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/1d/0fdb8429d12a2df117a552899e0faebb8dfc9ce901360de30dfbded4218a/django_htmx_autocomplete-1.0.12-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7d/40/e556bc19ba65356fe5f0e48ca01c50e81f7c630042fa7411b6ab428ecf68/django_oauth_toolkit-3.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e8/11/16ea1e6723c138f4c11d0f21cb86cc547b99df30ee6568da39778d28170a/django_pghistory-3.8.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dd/9c/deb7c7089ecef9912eff15a2cb1ac32a5ae695969473a84eee1f1fa7171d/django_pgtrigger-4.15.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/79/055dfcc508cfe9f439d9f453741188d633efa9eab90fc78a67b0ab50b137/django_redis-6.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/e8/b45d7b141afe735ee10244ec69b5d43e25755281ed02196126ad14ee2d71/django_silk-5.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/c3/d4ba265feb7b8bad3cf0730a3a8d82bb40d14551f8c53c88895ec06fa51c/django_simple_history-3.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/55/cb/bb387a1d40691ad54fec2be9e5093becebd63cca0ccb9348cbb27602e1d1/django_stubs-5.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4e/38/2903676f97f7902ee31984a06756b0e8836e897f4b617e1a03be4a43eb4f/django_stubs_ext-5.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/12/1a/1c15852b3002929ed08992aeaaea703c43a43345dc19a09fd457593f52a6/django_tailwind_cli-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/b6/6cdf17830ba65836e370158028163b0e826d5c744df8288db5e4b20b6afc/django_typer-3.2.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/79/dc/216df230d008495613b6fa3fe6f5f38c99c8516e81acda8cbe73a3c0f14c/django_webpack_loader-3.2.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/46/6a/6cb6deb5c38b785c77c3ba66f53051eada49205979c407323eb666930915/django_widget_tweaks-1.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b0/ce/bf8b9d3f415be4ac5588545b5fcdbbb841977db1c1d923f7568eeabe1689/djangorestframework-3.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/fb/66/c2929871393b1515c3767a670ff7d980a6882964a31a4ca2680b30d7212a/drf_spectacular-0.28.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/dc/b7/78116bfe8860edca277d00ac243749c8b94714dc3b4608f0c23fa7f4b78e/dulwich-0.22.8-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/8d/2bc5f5546ff2ccb3f7de06742853483ab75bf74f36a92254702f8baecc79/factory_boy-3.3.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/7d/8b50e4ac772719777be33661f4bde320793400a706f5eb214e4de46f093c/faker-37.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/68/cc/10e4ec45585eba7784a6e86f21990e97b828b8d8927d28ae639b06d50c59/findpython-0.6.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/71/ed/89d760cb25279109b89eb52975a7b5479700d3114a2421ce735bfb2e7513/gprof2dot-2025.4.14-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl + - pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/0d/38/221e5b2ae676a3938c2c1919131410c342b6efc2baffeda395dd66eeca8f/incremental-24.7.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b4/09/726f168acad366b11e420df31bf1c702a54d373a83f968d94141a8c3fde0/jaraco_functools-4.3.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/6b/9721ba7c68036316bd8aeb596b397253590c87d7045c9d6fc82b7364eff4/nplusone-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d3/0b/a286029828fe6ddf0fa0a4a8a46b7d90c7d6ac26a3237f4c211df9143e92/pbs_installer-2025.8.27-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/2c/d8/6f63147dd73373d051c5eb049ecd841207f898f50a5a1d4378594178f6cf/piexif-1.1.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/fa/3d/f4f2ba829efb54b6cd2d91349c7463316a9cc55a43fc980447416c88540f/pkginfo-1.12.1.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e1/7b/51882dc584f7aa59f446f2bb34e33c0e5f015de4e31949e5b7c2c10e54f0/playwright-1.54.0-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/6d/37/578fe593a07daa5e4417a7965d46093a255ebd7fbb797df6959c0f378f43/poetry-2.1.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d2/f1/fb218aebd29bca5c506230201c346881ae9b43de7bbb21a68dc648e972b3/poetry_core-2.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/cb/0e/bdc8274dc0585090b4e3432267d7be4dfbfd8971c0fa59167c711105a6bf/psycopg2-binary-2.9.10.tar.gz + - pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/80/28/2659c02301b9500751f8d42f9a6632e1508aa5120de5e43042b8b30f8d5d/pyopenssl-25.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/84/30/89aa7f7d7a875bbb9a577d4b1dc5a3e404e3d2ae2657354808e905e358e0/pyright-1.1.404-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/98/1c/b00940ab9eb8ede7897443b771987f2f4a76f06be02f1b3f01eb7567e24a/pytest_base_url-2.1.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/d8/96/5f8a4545d783674f3de33f0ebc4db16cc76ce77a4c404d284f43f09125e3/pytest_playwright-0.7.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a2/d4/9193206c4563ec771faf2ccf54815ca7918529fe81f6adb22ee6d0e06622/python_decouple-3.8-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl + - pypi: direct+https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/92/44/da239917f5711ca7105f7d7f9e2765716dd883b241529beafc0f28504725/pytoolconfig-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/f1/c7/702472c4f3c4e5f9985bb5143405a5c4aadf3b439193f4174944880c50a3/rapidfuzz-3.14.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/e8/02/89e2ed7e85db6c93dfa9e8f691c5087df4e3551ab39081a4d7c6d1f90e05/redis-6.4.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/75/35/130469d1901da2b3a5a377539b4ffcd8a5c983f1c9e3ba5ffdd8d71ae314/rope-1.14.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/2c/0d/15b72c5fe6b1e402a543aa9d8960e0a7e19dfb079f5b0b424db48b7febab/ruff-0.12.11-py3-none-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/62/1f/5feb6c42cc30126e9574eabc28139f8c626b483a47c537f648d133628df0/sentry_sdk-2.35.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/08/2c/ca6dd598b384bc1ce581e24aaae0f2bed4ccac57749d5c3befbb5e742081/service_identity-24.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/4a/40/d54944eeb5646fb4b1c98d4601fe5e0812dd2e7c0aa94d53fc46457effc8/trove_classifiers-2025.8.26.11-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/eb/66/ab7efd8941f0bc7b2bd555b0f0471bff77df4c88e0cc31120c82737fec77/twisted-25.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/56/aff5af8caa210321d0c206eb19897a4e0b29b4e24c4e24226325950efe0b/txaio-25.6.1-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/06/08/fd4e6de24f677703c7295e836dc168041793d5a943a32e8840dd852da02b/typer_slim-0.16.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/32/8e/8f0aca667c97c0d76024b37cffa39e76e2ce39ca54a38f285a64e6ae33ba/types_pyyaml-6.0.12.20250822-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/5c/c6/f8f28009920a736d0df434b52e9feebfb4d702ba942f15338cb4a83eafc1/virtualenv-20.32.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/64/b2/2ce9263149fbde9701d352bda24ea1362c154e196d2fda2201f18fc585d7/whitenoise-6.9.0-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/3d/40/93f2dd033544028e7b9512b8b9fb6872ec74a804fbb686e62b83fdf72e21/xattr-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/49/65/78e7cebca6be07c8fc4032bfbb123e500d60efdf7b86727bb8a071992108/zope.interface-7.2-cp313-cp313-macosx_11_0_arm64.whl + - pypi: https://files.pythonhosted.org/packages/99/56/fc04395d6f5eabd2fe6d86c0800d198969f3038385cb918bfbe94f2b0c62/zstandard-0.24.0-cp313-cp313-macosx_11_0_arm64.whl + - pypi: ./ +packages: +- pypi: https://files.pythonhosted.org/packages/6f/12/e5e0282d673bb9746bacfb6e2dba8719989d3660cdb2ea79aee9a9651afb/anyio-4.10.0-py3-none-any.whl + name: anyio + version: 4.10.0 + sha256: 60e474ac86736bbfd6f210f7a61218939c318f43f9972497381f1c5e930ed3d1 + requires_dist: + - exceptiongroup>=1.0.2 ; python_full_version < '3.11' + - idna>=2.8 + - sniffio>=1.1 + - typing-extensions>=4.5 ; python_full_version < '3.13' + - trio>=0.26.1 ; extra == 'trio' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7c/3c/0464dcada90d5da0e71018c04a140ad6349558afb30b3051b4264cc5b965/asgiref-3.9.1-py3-none-any.whl + name: asgiref + version: 3.9.1 + sha256: f3bba7092a48005b5f5bacd747d36ee4a5a61f4a269a6df590b43144355ebd2c + requires_dist: + - typing-extensions>=4 ; python_full_version < '3.11' + - pytest ; extra == 'tests' + - pytest-asyncio ; extra == 'tests' + - mypy>=1.14.0 ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/77/06/bb80f5f86020c4551da315d78b3ab75e8228f89f0162f2c3a819e407941a/attrs-25.3.0-py3-none-any.whl + name: attrs + version: 25.3.0 + sha256: 427318ce031701fea540783410126f03899a97ffc6f61596ad581ac2e40e3bc3 + requires_dist: + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'benchmark' + - hypothesis ; extra == 'benchmark' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pympler ; extra == 'benchmark' + - pytest-codspeed ; extra == 'benchmark' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'benchmark' + - pytest-xdist[psutil] ; extra == 'benchmark' + - pytest>=4.3.0 ; extra == 'benchmark' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'cov' + - coverage[toml]>=5.3 ; extra == 'cov' + - hypothesis ; extra == 'cov' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' + - pympler ; extra == 'cov' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'cov' + - pytest-xdist[psutil] ; extra == 'cov' + - pytest>=4.3.0 ; extra == 'cov' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'dev' + - hypothesis ; extra == 'dev' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' + - pre-commit-uv ; extra == 'dev' + - pympler ; extra == 'dev' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'dev' + - pytest-xdist[psutil] ; extra == 'dev' + - pytest>=4.3.0 ; extra == 'dev' + - cogapp ; extra == 'docs' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - sphinxcontrib-towncrier ; extra == 'docs' + - towncrier ; extra == 'docs' + - cloudpickle ; platform_python_implementation == 'CPython' and extra == 'tests' + - hypothesis ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' + - pympler ; extra == 'tests' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests' + - pytest-xdist[psutil] ; extra == 'tests' + - pytest>=4.3.0 ; extra == 'tests' + - mypy>=1.11.1 ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + - pytest-mypy-plugins ; python_full_version >= '3.10' and platform_python_implementation == 'CPython' and extra == 'tests-mypy' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/13/ee/a6475f39ef6c6f41c33da6b193e0ffd2c6048f52e1698be6253c59301b72/autobahn-24.4.2-py2.py3-none-any.whl + name: autobahn + version: 24.4.2 + sha256: c56a2abe7ac78abbfb778c02892d673a4de58fd004d088cd7ab297db25918e81 + requires_dist: + - txaio>=21.2.1 + - cryptography>=3.4.6 + - hyperlink>=21.0.0 + - setuptools + - zope-interface>=5.2.0 ; extra == 'all' + - twisted>=24.3.0 ; extra == 'all' + - attrs>=20.3.0 ; extra == 'all' + - python-snappy>=0.6.0 ; extra == 'all' + - cbor2>=5.2.0 ; extra == 'all' + - py-ubjson>=0.16.1 ; extra == 'all' + - flatbuffers>=22.12.6 ; extra == 'all' + - pyopenssl>=20.0.1 ; extra == 'all' + - service-identity>=18.1.0 ; extra == 'all' + - pynacl>=1.4.0 ; extra == 'all' + - pytrie>=0.4.0 ; extra == 'all' + - qrcode>=7.3.1 ; extra == 'all' + - cffi>=1.14.5 ; extra == 'all' + - argon2-cffi>=20.1.0 ; extra == 'all' + - passlib>=1.7.4 ; extra == 'all' + - bitarray>=2.7.5 ; extra == 'all' + - xbr>=21.2.1 ; extra == 'all' + - click>=8.1.2 ; extra == 'all' + - zlmdb>=21.2.1 ; extra == 'all' + - twisted>=20.3.0 ; extra == 'all' + - web3[ipfs]>=6.0.0 ; extra == 'all' + - rlp>=2.0.1 ; extra == 'all' + - py-eth-sig-utils>=0.4.0 ; extra == 'all' + - py-ecc>=5.1.0 ; extra == 'all' + - eth-abi>=4.0.0 ; extra == 'all' + - mnemonic>=0.19 ; extra == 'all' + - base58>=2.1.0 ; extra == 'all' + - ecdsa>=0.16.1 ; extra == 'all' + - py-multihash>=2.0.1 ; extra == 'all' + - jinja2>=2.11.3 ; extra == 'all' + - yapf==0.29.0 ; extra == 'all' + - spake2>=0.8 ; extra == 'all' + - hkdf>=0.0.3 ; extra == 'all' + - pygobject>=3.40.0 ; extra == 'all' + - u-msgpack-python>=2.1 ; platform_python_implementation != 'CPython' and extra == 'all' + - msgpack>=1.0.2 ; platform_python_implementation == 'CPython' and extra == 'all' + - ujson>=4.0.2 ; platform_python_implementation == 'CPython' and extra == 'all' + - python-snappy>=0.6.0 ; extra == 'compress' + - backports-tempfile>=1.0 ; extra == 'dev' + - build>=1.2.1 ; extra == 'dev' + - bumpversion>=0.5.3 ; extra == 'dev' + - codecov>=2.0.15 ; extra == 'dev' + - flake8<5 ; extra == 'dev' + - humanize>=0.5.1 ; extra == 'dev' + - passlib ; extra == 'dev' + - pep8-naming>=0.3.3 ; extra == 'dev' + - pip>=9.0.1 ; extra == 'dev' + - pyenchant>=1.6.6 ; extra == 'dev' + - pyflakes>=1.0.0 ; extra == 'dev' + - pyinstaller>=4.2 ; extra == 'dev' + - pylint>=1.9.2 ; extra == 'dev' + - pytest-aiohttp ; extra == 'dev' + - pytest-asyncio>=0.14.0 ; extra == 'dev' + - pytest-runner>=2.11.1 ; extra == 'dev' + - pytest>=3.4.2 ; extra == 'dev' + - pyyaml>=4.2b4 ; extra == 'dev' + - qualname ; extra == 'dev' + - sphinx-autoapi>=1.7.0 ; extra == 'dev' + - sphinx>=1.7.1 ; extra == 'dev' + - sphinx-rtd-theme>=0.1.9 ; extra == 'dev' + - sphinxcontrib-images>=0.9.1 ; extra == 'dev' + - tox-gh-actions>=2.2.0 ; extra == 'dev' + - tox>=4.2.8 ; extra == 'dev' + - twine>=3.3.0 ; extra == 'dev' + - twisted>=22.10.0 ; extra == 'dev' + - txaio>=20.4.1 ; extra == 'dev' + - watchdog>=0.8.3 ; extra == 'dev' + - wheel>=0.36.2 ; extra == 'dev' + - yapf==0.29.0 ; extra == 'dev' + - mypy>=0.610 ; python_full_version >= '3.4' and platform_python_implementation != 'PyPy' and extra == 'dev' + - pyopenssl>=20.0.1 ; extra == 'encryption' + - service-identity>=18.1.0 ; extra == 'encryption' + - pynacl>=1.4.0 ; extra == 'encryption' + - pytrie>=0.4.0 ; extra == 'encryption' + - qrcode>=7.3.1 ; extra == 'encryption' + - cffi>=1.14.5 ; extra == 'nvx' + - cffi>=1.14.5 ; extra == 'scram' + - argon2-cffi>=20.1.0 ; extra == 'scram' + - passlib>=1.7.4 ; extra == 'scram' + - cbor2>=5.2.0 ; extra == 'serialization' + - py-ubjson>=0.16.1 ; extra == 'serialization' + - flatbuffers>=22.12.6 ; extra == 'serialization' + - u-msgpack-python>=2.1 ; platform_python_implementation != 'CPython' and extra == 'serialization' + - msgpack>=1.0.2 ; platform_python_implementation == 'CPython' and extra == 'serialization' + - ujson>=4.0.2 ; platform_python_implementation == 'CPython' and extra == 'serialization' + - zope-interface>=5.2.0 ; extra == 'twisted' + - twisted>=24.3.0 ; extra == 'twisted' + - attrs>=20.3.0 ; extra == 'twisted' + - pygobject>=3.40.0 ; extra == 'ui' + - bitarray>=2.7.5 ; extra == 'xbr' + - xbr>=21.2.1 ; extra == 'xbr' + - click>=8.1.2 ; extra == 'xbr' + - cbor2>=5.2.0 ; extra == 'xbr' + - zlmdb>=21.2.1 ; extra == 'xbr' + - twisted>=20.3.0 ; extra == 'xbr' + - web3[ipfs]>=6.0.0 ; extra == 'xbr' + - rlp>=2.0.1 ; extra == 'xbr' + - py-eth-sig-utils>=0.4.0 ; extra == 'xbr' + - py-ecc>=5.1.0 ; extra == 'xbr' + - eth-abi>=4.0.0 ; extra == 'xbr' + - mnemonic>=0.19 ; extra == 'xbr' + - base58>=2.1.0 ; extra == 'xbr' + - ecdsa>=0.16.1 ; extra == 'xbr' + - py-multihash>=2.0.1 ; extra == 'xbr' + - jinja2>=2.11.3 ; extra == 'xbr' + - yapf==0.29.0 ; extra == 'xbr' + - spake2>=0.8 ; extra == 'xbr' + - hkdf>=0.0.3 ; extra == 'xbr' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a2/ee/3fd29bf416eb4f1c5579cf12bf393ae954099258abd7bde03c4f9716ef6b/autoflake-2.3.1-py3-none-any.whl + name: autoflake + version: 2.3.1 + sha256: 3ae7495db9084b7b32818b4140e6dc4fc280b712fb414f5b8fe57b0a8e85a840 + requires_dist: + - pyflakes>=3.0.0 + - tomli>=2.0.1 ; python_full_version < '3.11' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/02/ff/1175b0b7371e46244032d43a56862d0af455823b5280a50c63d99cc50f18/automat-25.4.16-py3-none-any.whl + name: automat + version: 25.4.16 + sha256: 04e9bce696a8d5671ee698005af6e5a9fa15354140a87f4870744604dcdd3ba1 + requires_dist: + - typing-extensions ; python_full_version < '3.10' + - graphviz>0.5.1 ; extra == 'visualize' + - twisted>=16.1.1 ; extra == 'visualize' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/9e/43/53afb8ba17218f19b77c7834128566c5bbb100a0ad9ba2e8e89d089d7079/autopep8-2.3.2-py2.py3-none-any.whl + name: autopep8 + version: 2.3.2 + sha256: ce8ad498672c845a0c3de2629c15b635ec2b05ef8177a6e7c91c74f3e9b51128 + requires_dist: + - pycodestyle>=2.12.0 + - tomli ; python_full_version < '3.11' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/52/e5/f7bf17207cf87fa6e9b676576749c6b6ed0d70f179a3d812c997870291c3/black-25.1.0-cp313-cp313-macosx_11_0_arm64.whl + name: black + version: 25.1.0 + sha256: afebb7098bfbc70037a053b91ae8437c3857482d3a690fefc03e9ff7aa9a5fd3 + requires_dist: + - click>=8.0.0 + - mypy-extensions>=0.4.3 + - packaging>=22.0 + - pathspec>=0.9.0 + - platformdirs>=2 + - tomli>=1.1.0 ; python_full_version < '3.11' + - typing-extensions>=4.0.1 ; python_full_version < '3.11' + - colorama>=0.4.3 ; extra == 'colorama' + - aiohttp>=3.10 ; extra == 'd' + - ipython>=7.8.0 ; extra == 'jupyter' + - tokenize-rt>=3.2.0 ; extra == 'jupyter' + - uvloop>=0.15.2 ; extra == 'uvloop' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl + name: blinker + version: 1.9.0 + sha256: ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/8c/2b30c12155ad8de0cf641d76a8b396a16d2c36bc6d50b621a62b7c4567c1/build-1.3.0-py3-none-any.whl + name: build + version: 1.3.0 + sha256: 7145f0b5061ba90a1500d60bd1b13ca0a8a4cebdd0cc16ed8adf1c0e739f43b4 + requires_dist: + - packaging>=19.1 + - pyproject-hooks + - colorama ; os_name == 'nt' + - importlib-metadata>=4.6 ; python_full_version < '3.10.2' + - tomli>=1.1.0 ; python_full_version < '3.11' + - uv>=0.1.18 ; extra == 'uv' + - virtualenv>=20.11 ; python_full_version < '3.10' and extra == 'virtualenv' + - virtualenv>=20.17 ; python_full_version >= '3.10' and python_full_version < '3.14' and extra == 'virtualenv' + - virtualenv>=20.31 ; python_full_version >= '3.14' and extra == 'virtualenv' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/bzip2-1.0.8-h99b78c6_7.conda + sha256: adfa71f158cbd872a36394c56c3568e6034aa55c623634b37a4836bd036e6b91 + md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab + depends: + - __osx >=11.0 + license: bzip2-1.0.6 + license_family: BSD + purls: [] + size: 122909 + timestamp: 1720974522888 +- conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2025.8.3-hbd8a1cb_0.conda + sha256: 837b795a2bb39b75694ba910c13c15fa4998d4bb2a622c214a6a5174b2ae53d1 + md5: 74784ee3d225fc3dca89edb635b4e5cc + depends: + - __unix + license: ISC + purls: [] + size: 154402 + timestamp: 1754210968730 +- pypi: https://files.pythonhosted.org/packages/81/4c/800b0607b00b3fd20f1087f80ab53d6b4d005515b0f773e4831e37cfa83f/cachecontrol-0.14.3-py3-none-any.whl + name: cachecontrol + version: 0.14.3 + sha256: b35e44a3113f17d2a31c1e6b27b9de6d4405f84ae51baa8c1d3cc5b633010cae + requires_dist: + - requests>=2.16.0 + - msgpack>=0.5.2,<2.0.0 + - cachecontrol[filecache,redis] ; extra == 'dev' + - build ; extra == 'dev' + - cherrypy ; extra == 'dev' + - codespell[tomli] ; extra == 'dev' + - furo ; extra == 'dev' + - mypy ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-copybutton ; extra == 'dev' + - tox ; extra == 'dev' + - types-redis ; extra == 'dev' + - types-requests ; extra == 'dev' + - filelock>=3.8.0 ; extra == 'filecache' + - redis>=2.10.5 ; extra == 'redis' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e5/48/1549795ba7742c948d2ad169c1c8cdbae65bc450d6cd753d124b17c8cd32/certifi-2025.8.3-py3-none-any.whl + name: certifi + version: 2025.8.3 + sha256: f6c12493cfb1b06ba2ff328595af9350c65d6644968e5d3a2ffd78699af217a5 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/8b/f1/672d303ddf17c24fc83afd712316fda78dc6fce1cd53011b839483e1ecc8/cffi-1.17.1-cp313-cp313-macosx_11_0_arm64.whl + name: cffi + version: 1.17.1 + sha256: 0984a4925a435b1da406122d4d7968dd861c1385afe3b45ba82b750f229811e2 + requires_dist: + - pycparser + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/89/1c/eae1c2a8c195760376e7f65d0bdcc3e966695d29cfbe5c54841ce5c71408/channels-4.3.1-py3-none-any.whl + name: channels + version: 4.3.1 + sha256: b091d4b26f91d807de3e84aead7ba785314f27eaf5bac31dd51b1c956b883859 + requires_dist: + - django>=4.2 + - asgiref>=3.9.0,<4 + - async-timeout ; extra == 'tests' + - coverage~=4.5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-django ; extra == 'tests' + - pytest-asyncio ; extra == 'tests' + - selenium ; extra == 'tests' + - daphne>=4.0.0 ; extra == 'daphne' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/df/fe/b7224a401ad227b263e5ba84753ffb5a88df048f3b15efd2797903543ce4/channels_redis-4.3.0-py3-none-any.whl + name: channels-redis + version: 4.3.0 + sha256: 48f3e902ae2d5fef7080215524f3b4a1d3cea4e304150678f867a1a822c0d9f5 + requires_dist: + - redis>=4.6 + - msgpack~=1.0 + - asgiref>=3.9.1,<4 + - channels>=4.2.2 + - cryptography>=1.3.0 ; extra == 'cryptography' + - cryptography>=1.3.0 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-asyncio ; extra == 'tests' + - async-timeout ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/65/ca/2135ac97709b400c7654b4b764daf5c5567c2da45a30cdd20f9eefe2d658/charset_normalizer-3.4.3-cp313-cp313-macosx_10_13_universal2.whl + name: charset-normalizer + version: 3.4.3 + sha256: 14c2a87c65b351109f6abfc424cab3927b3bdece6f706e4d12faaf3d52ee5efe + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/2d/f5/6bbead8b880620e5a99e0e4bb9e22e67cca16ff48d54105302a3e7821096/cleo-2.1.0-py3-none-any.whl + name: cleo + version: 2.1.0 + sha256: 4a31bd4dd45695a64ee3c4758f583f134267c2bc518d8ae9a29cf237d009b07e + requires_dist: + - crashtest>=0.4.1,<0.5.0 + - rapidfuzz>=3.0.0,<4.0.0 + requires_python: '>=3.7,<4.0' +- pypi: https://files.pythonhosted.org/packages/85/32/10bb5764d90a8eee674e9dc6f4db6a0ab47c8c4d0d83c27f7c39ac415a4d/click-8.2.1-py3-none-any.whl + name: click + version: 8.2.1 + sha256: 61a3265b914e850b85317d0b3109c7f8cd35a670f963866005d6ef1d5175a12b + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b8/40/c199d095151addf69efdb4b9ca3a4f20f70e20508d6222bffb9b76f58573/constantly-23.10.4-py3-none-any.whl + name: constantly + version: 23.10.4 + sha256: 3fd9b4d1c3dc1ec9757f3c52aef7e53ad9323dbe39f51dfd4c43853b68dfa3f9 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/25/d7/b71022408adbf040a680b8c64bf6ead3be37b553e5844f7465643979f7ca/coverage-7.10.5-cp313-cp313-macosx_11_0_arm64.whl + name: coverage + version: 7.10.5 + sha256: 2b96bfdf7c0ea9faebce088a3ecb2382819da4fbc05c7b80040dbc428df6af44 + requires_dist: + - tomli ; python_full_version <= '3.11' and extra == 'toml' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b0/5c/3ba7d12e7a79566f97b8f954400926d7b6eb33bcdccc1315a857f200f1f1/crashtest-0.4.1-py3-none-any.whl + name: crashtest + version: 0.4.1 + sha256: 8d23eac5fa660409f57472e3851dab7ac18aba459a8d19cbbba86d3d5aecd2a5 + requires_python: '>=3.7,<4.0' +- pypi: https://files.pythonhosted.org/packages/8c/29/2793d178d0eda1ca4a09a7c4e09a5185e75738cc6d526433e8663b460ea6/cryptography-45.0.6-cp311-abi3-macosx_10_9_universal2.whl + name: cryptography + version: 45.0.6 + sha256: 048e7ad9e08cf4c0ab07ff7f36cc3115924e22e2266e034450a890d9e312dd74 + requires_dist: + - cffi>=1.14 ; platform_python_implementation != 'PyPy' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox>=2024.4.15 ; extra == 'nox' + - nox[uv]>=2024.3.2 ; python_full_version >= '3.8' and extra == 'nox' + - cryptography-vectors==45.0.6 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; python_full_version >= '3.8' and extra == 'docs' + - sphinx-inline-tabs ; python_full_version >= '3.8' and extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.3.6 ; extra == 'pep8test' + - mypy>=1.4 ; extra == 'pep8test' + - check-sdist ; python_full_version >= '3.8' and extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.7,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/01/34/6171ab34715ed210bcd6c2b38839cc792993cff4fe2493f50bc92b0086a0/daphne-4.2.1-py3-none-any.whl + name: daphne + version: 4.2.1 + sha256: 881e96b387b95b35ad85acd855f229d7f5b79073d6649089c8a33f661885e055 + requires_dist: + - asgiref>=3.5.2,<4 + - autobahn>=22.4.2 + - twisted[tls]>=22.4 + - django ; extra == 'tests' + - hypothesis ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-asyncio ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - black ; extra == 'tests' + - tox ; extra == 'tests' + - flake8 ; extra == 'tests' + - flake8-bugbear ; extra == 'tests' + - mypy ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl + name: distlib + version: 0.4.0 + sha256: 9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16 +- pypi: https://files.pythonhosted.org/packages/aa/5e/86a43c6fdaa41c12d58e4ff3ebbfd6b71a7cb0360a08614e3754ef2e9afb/dj_database_url-3.0.1-py3-none-any.whl + name: dj-database-url + version: 3.0.1 + sha256: 43950018e1eeea486bf11136384aec0fe55b29fe6fd8a44553231b85661d9383 + requires_dist: + - django>=4.2 +- pypi: https://files.pythonhosted.org/packages/b7/19/00150c8bedf7b6d4c44ecf7c2be9e58ae2203b42741ca734152d34f549f1/dj-rest-auth-7.0.1.tar.gz + name: dj-rest-auth + version: 7.0.1 + sha256: 3f8c744cbcf05355ff4bcbef0c8a63645da38e29a0fdef3c3332d4aced52fb90 + requires_dist: + - django>=4.2,<6.0 + - djangorestframework>=3.13.0 + - django-allauth[socialaccount]>=64.0.0 ; extra == 'with-social' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/9d/6e/98a1d23648e0085bb5825326af17612ecd8fc76be0ce96ea4dc35e17b926/django-5.2.5-py3-none-any.whl + name: django + version: 5.2.5 + sha256: 2b2ada0ee8a5ff743a40e2b9820d1f8e24c11bac9ae6469cd548f0057ea6ddcd + requires_dist: + - asgiref>=3.8.1 + - sqlparse>=0.3.1 + - tzdata ; sys_platform == 'win32' + - argon2-cffi>=19.1.0 ; extra == 'argon2' + - bcrypt ; extra == 'bcrypt' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/ac/82/e6f607b0bad524d227f6e5aaffdb5e2b286f6ab1b4b3151134ae2303c2d6/django_allauth-65.11.1.tar.gz + name: django-allauth + version: 65.11.1 + sha256: e95d5234cccaf92273d315e1393cc4626cb88a19d66a1bf0e81f89f7958cfa06 + requires_dist: + - django>=4.2.16 + - asgiref>=3.8.1 + - pyyaml>=6,<7 ; extra == 'headless-spec' + - oauthlib>=3.3.0,<4 ; extra == 'idp-oidc' + - pyjwt[crypto]>=2.0,<3 ; extra == 'idp-oidc' + - qrcode>=7.0.0,<9 ; extra == 'mfa' + - fido2>=1.1.2,<3 ; extra == 'mfa' + - python3-openid>=3.0.8,<4 ; extra == 'openid' + - python3-saml>=1.15.0,<2.0.0 ; extra == 'saml' + - python3-openid>=3.0.8,<4 ; extra == 'steam' + - oauthlib>=3.3.0,<4 ; extra == 'socialaccount' + - requests>=2.0.0,<3 ; extra == 'socialaccount' + - pyjwt[crypto]>=2.0,<3 ; extra == 'socialaccount' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/87/d7/a83dc87c2383e125da29948f7bccf5b30126c087a5a831316482407a960f/django_cleanup-9.0.0-py3-none-any.whl + name: django-cleanup + version: 9.0.0 + sha256: 19f8b0e830233f9f0f683b17181f414672a0f48afe3ea3cc80ba47ae40ad880c + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d6/08/f00887096f4867290eb16b9f21232f9a624beeb6a94fa16550187905613d/django_cloudflare_images-0.6.0-py3-none-any.whl + name: django-cloudflare-images + version: 0.6.0 + sha256: cd7ae17a29784b7f570f8a82cf64fc6ce6539e0193baafdd5532885dc319d18e + requires_dist: + - django>=3 + - requests>=2.20.0 + - build==1.2.1 ; extra == 'dev' + - ruff==0.4.5 ; extra == 'dev' + - tox==4.15.0 ; extra == 'dev' + requires_python: '>=3' +- pypi: https://files.pythonhosted.org/packages/7e/a2/7bcfff86314bd9dd698180e31ba00604001606efb518a06cca6833a54285/django_cors_headers-4.7.0-py3-none-any.whl + name: django-cors-headers + version: 4.7.0 + sha256: f1c125dcd58479fe7a67fe2499c16ee38b81b397463cf025f0e2c42937421070 + requires_dist: + - asgiref>=3.6 + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/05/b5/4724a8c18fcc5b09dca7b7a0e70c34208317bb110075ad12484d6588ae91/django_debug_toolbar-6.0.0-py3-none-any.whl + name: django-debug-toolbar + version: 6.0.0 + sha256: 0cf2cac5c307b77d6e143c914e5c6592df53ffe34642d93929e5ef095ae56841 + requires_dist: + - django>=4.2.9 + - sqlparse>=0.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/83/b3/0a3bec4ecbfee960f39b1842c2f91e4754251e0a6ed443db9fe3f666ba8f/django_environ-0.12.0-py2.py3-none-any.whl + name: django-environ + version: 0.12.0 + sha256: 92fb346a158abda07ffe6eb23135ce92843af06ecf8753f43adf9d2366dcc0ca + requires_dist: + - coverage[toml]>=5.0a4 ; extra == 'testing' + - pytest>=4.6.11 ; extra == 'testing' + - setuptools>=71.0.0 ; extra == 'testing' + - furo>=2024.8.6 ; extra == 'docs' + - sphinx>=5.0 ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - coverage[toml]>=5.0a4 ; extra == 'develop' + - pytest>=4.6.11 ; extra == 'develop' + - setuptools>=71.0.0 ; extra == 'develop' + - furo>=2024.8.6 ; extra == 'develop' + - sphinx>=5.0 ; extra == 'develop' + - sphinx-notfound-page ; extra == 'develop' + requires_python: '>=3.9,<4' +- pypi: https://files.pythonhosted.org/packages/64/96/d967ca440d6a8e3861120f51985d8e5aec79b9a8bdda16041206adfe7adc/django_extensions-4.1-py3-none-any.whl + name: django-extensions + version: '4.1' + sha256: 0699a7af28f2523bf8db309a80278519362cd4b6e1fd0a8cd4bf063e1e023336 + requires_dist: + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/07/a6/70dcd68537c434ba7cb9277d403c5c829caf04f35baf5eb9458be251e382/django_filter-25.1-py3-none-any.whl + name: django-filter + version: '25.1' + sha256: 4fa48677cf5857b9b1347fed23e355ea792464e0fe07244d1fdfb8a806215b80 + requires_dist: + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e1/7f/49ba63f078015b0a52e09651b94ba16b41154ac7079c83153edd14e15ca0/django_health_check-3.20.0-py3-none-any.whl + name: django-health-check + version: 3.20.0 + sha256: bcb2b8f36f463cead0564a028345c5b17e2a2d18e9cc88ecd611b13a26521926 + requires_dist: + - django>=4.2 + - sphinx ; extra == 'docs' + - ruff==0.11.13 ; extra == 'lint' + - pytest ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-django ; extra == 'test' + - celery ; extra == 'test' + - redis ; extra == 'test' + - django-storages ; extra == 'test' + - boto3 ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3c/84/d5b29c102743abd61e1852b619263c8938b8516c71a138f4053114270743/django_htmx-1.23.2-py3-none-any.whl + name: django-htmx + version: 1.23.2 + sha256: c288fe92bdcfa7c2ed9665d6d23cc55c6693a7cc8d22cf0a01e1e38318874030 + requires_dist: + - asgiref>=3.6 + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/eb/1d/0fdb8429d12a2df117a552899e0faebb8dfc9ce901360de30dfbded4218a/django_htmx_autocomplete-1.0.12-py3-none-any.whl + name: django-htmx-autocomplete + version: 1.0.12 + sha256: 2c256b566244863235e4a7b7106da803711df505d415636c97c3c1a848788fc1 + requires_dist: + - django>=4.1 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7d/40/e556bc19ba65356fe5f0e48ca01c50e81f7c630042fa7411b6ab428ecf68/django_oauth_toolkit-3.0.1-py3-none-any.whl + name: django-oauth-toolkit + version: 3.0.1 + sha256: 3ef00b062a284f2031b0732b32dc899e3bbf0eac221bbb1cffcb50b8932e55ed + requires_dist: + - django>=4.2 + - requests>=2.13.0 + - oauthlib>=3.2.2 + - jwcrypto>=1.5.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e8/11/16ea1e6723c138f4c11d0f21cb86cc547b99df30ee6568da39778d28170a/django_pghistory-3.8.0-py3-none-any.whl + name: django-pghistory + version: 3.8.0 + sha256: 32cd4e4c84a6fba035ade904ebc75d07bd3c5837909e59be929325a4783aa1ee + requires_dist: + - django>=4 + - django-pgtrigger>=4.15.0 + requires_python: '>=3.9.0,<4' +- pypi: https://files.pythonhosted.org/packages/dd/9c/deb7c7089ecef9912eff15a2cb1ac32a5ae695969473a84eee1f1fa7171d/django_pgtrigger-4.15.4-py3-none-any.whl + name: django-pgtrigger + version: 4.15.4 + sha256: 6e1732c85bccbf22b183ca13b410d6908f3eaaeaf6103a3c62c236b0ae6a9072 + requires_dist: + - django>=4 + requires_python: '>=3.9.0,<4' +- pypi: https://files.pythonhosted.org/packages/7e/79/055dfcc508cfe9f439d9f453741188d633efa9eab90fc78a67b0ab50b137/django_redis-6.0.0-py3-none-any.whl + name: django-redis + version: 6.0.0 + sha256: 20bf0063a8abee567eb5f77f375143c32810c8700c0674ced34737f8de4e36c0 + requires_dist: + - django>=4.2 + - redis>=4.0.2 + - redis[hiredis]>=4.0.2 ; extra == 'hiredis' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a3/e8/b45d7b141afe735ee10244ec69b5d43e25755281ed02196126ad14ee2d71/django_silk-5.4.2-py3-none-any.whl + name: django-silk + version: 5.4.2 + sha256: 8154203fae904dc66e99ede75a2bad9410abd672dbba6cb5b07b22f8b5577253 + requires_dist: + - django>=4.2 + - sqlparse + - gprof2dot>=2017.9.19 + - autopep8 ; extra == 'formatting' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/01/c3/d4ba265feb7b8bad3cf0730a3a8d82bb40d14551f8c53c88895ec06fa51c/django_simple_history-3.10.1-py3-none-any.whl + name: django-simple-history + version: 3.10.1 + sha256: e12c27abfcd7e801a9d274d94542549ce8c617b0b384ae69afb161b56cd02ba4 + requires_dist: + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/55/cb/bb387a1d40691ad54fec2be9e5093becebd63cca0ccb9348cbb27602e1d1/django_stubs-5.2.2-py3-none-any.whl + name: django-stubs + version: 5.2.2 + sha256: 79bd0fdbc78958a8f63e0b062bd9d03f1de539664476c0be62ade5f063c9e41e + requires_dist: + - django + - django-stubs-ext>=5.2.2 + - tomli ; python_full_version < '3.11' + - types-pyyaml + - typing-extensions>=4.11.0 + - mypy>=1.13,<1.18 ; extra == 'compatible-mypy' + - oracledb ; extra == 'oracle' + - redis ; extra == 'redis' + - types-redis ; extra == 'redis' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/4e/38/2903676f97f7902ee31984a06756b0e8836e897f4b617e1a03be4a43eb4f/django_stubs_ext-5.2.2-py3-none-any.whl + name: django-stubs-ext + version: 5.2.2 + sha256: 8833bbe32405a2a0ce168d3f75a87168f61bd16939caf0e8bf173bccbd8a44c5 + requires_dist: + - django + - typing-extensions + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/12/1a/1c15852b3002929ed08992aeaaea703c43a43345dc19a09fd457593f52a6/django_tailwind_cli-4.3.0-py3-none-any.whl + name: django-tailwind-cli + version: 4.3.0 + sha256: 0ff7d7374a390e63cba77894a13de2bf8721320a5bad97361cb14e160cc824b5 + requires_dist: + - django-typer>=2.1.2 + - django>=4.0 + - requests>=2.32.3 + - semver>=3.0.4 + - django-extensions>=3.2 ; extra == 'django-extensions' + - werkzeug>=3.0 ; extra == 'django-extensions' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/18/b6/6cdf17830ba65836e370158028163b0e826d5c744df8288db5e4b20b6afc/django_typer-3.2.2-py3-none-any.whl + name: django-typer + version: 3.2.2 + sha256: a97d0e5e5582d4648f372c688c2aec132540caa04e2578329b13a55588477e11 + requires_dist: + - click>=8.1.8,<8.3 + - django>=3.2,<6.0 + - shellingham>=1.5.4,<2.0 + - typer-slim>=0.14.0,<0.17.0 + - typing-extensions>=3.7.4.3 ; python_full_version < '3.10' + - rich>=10.11.0,<15.0.0 ; extra == 'rich' + requires_python: '>=3.9,<4.0' +- pypi: https://files.pythonhosted.org/packages/79/dc/216df230d008495613b6fa3fe6f5f38c99c8516e81acda8cbe73a3c0f14c/django_webpack_loader-3.2.1-py2.py3-none-any.whl + name: django-webpack-loader + version: 3.2.1 + sha256: b7e505bcdf7af8f75433f13d54010e0a95c61a8b80890a700a598602656e09bf +- pypi: https://files.pythonhosted.org/packages/46/6a/6cb6deb5c38b785c77c3ba66f53051eada49205979c407323eb666930915/django_widget_tweaks-1.5.0-py3-none-any.whl + name: django-widget-tweaks + version: 1.5.0 + sha256: a41b7b2f05bd44d673d11ebd6c09a96f1d013ee98121cb98c384fe84e33b881e + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b0/ce/bf8b9d3f415be4ac5588545b5fcdbbb841977db1c1d923f7568eeabe1689/djangorestframework-3.16.1-py3-none-any.whl + name: djangorestframework + version: 3.16.1 + sha256: 33a59f47fb9c85ede792cbf88bde71893bcda0667bc573f784649521f1102cec + requires_dist: + - django>=4.2 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fb/66/c2929871393b1515c3767a670ff7d980a6882964a31a4ca2680b30d7212a/drf_spectacular-0.28.0-py3-none-any.whl + name: drf-spectacular + version: 0.28.0 + sha256: 856e7edf1056e49a4245e87a61e8da4baff46c83dbc25be1da2df77f354c7cb4 + requires_dist: + - django>=2.2 + - djangorestframework>=3.10.3 + - uritemplate>=2.0.0 + - pyyaml>=5.1 + - jsonschema>=2.6.0 + - inflection>=0.3.1 + - typing-extensions ; python_full_version < '3.10' + - drf-spectacular-sidecar ; extra == 'offline' + - drf-spectacular-sidecar ; extra == 'sidecar' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/dc/b7/78116bfe8860edca277d00ac243749c8b94714dc3b4608f0c23fa7f4b78e/dulwich-0.22.8-cp313-cp313-macosx_11_0_arm64.whl + name: dulwich + version: 0.22.8 + sha256: dbade3342376be1cd2409539fe1b901d2d57a531106bbae204da921ef4456a74 + requires_dist: + - urllib3>=1.25 + - fastimport ; extra == 'fastimport' + - urllib3>=1.24.1 ; extra == 'https' + - gpg ; extra == 'pgp' + - paramiko ; extra == 'paramiko' + - ruff==0.9.7 ; extra == 'dev' + - mypy==1.15.0 ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/27/8d/2bc5f5546ff2ccb3f7de06742853483ab75bf74f36a92254702f8baecc79/factory_boy-3.3.3-py2.py3-none-any.whl + name: factory-boy + version: 3.3.3 + sha256: 1c39e3289f7e667c4285433f305f8d506efc2fe9c73aaea4151ebd5cdea394fc + requires_dist: + - faker>=0.7.0 + - coverage ; extra == 'dev' + - django ; extra == 'dev' + - flake8 ; extra == 'dev' + - isort ; extra == 'dev' + - mypy ; extra == 'dev' + - pillow ; extra == 'dev' + - sqlalchemy ; extra == 'dev' + - mongoengine ; extra == 'dev' + - mongomock ; extra == 'dev' + - wheel>=0.32.0 ; extra == 'dev' + - tox ; extra == 'dev' + - zest-releaser[recommended] ; extra == 'dev' + - sphinx ; extra == 'doc' + - sphinx-rtd-theme ; extra == 'doc' + - sphinxcontrib-spelling ; extra == 'doc' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/61/7d/8b50e4ac772719777be33661f4bde320793400a706f5eb214e4de46f093c/faker-37.6.0-py3-none-any.whl + name: faker + version: 37.6.0 + sha256: 3c5209b23d7049d596a51db5d76403a0ccfea6fc294ffa2ecfef6a8843b1e6a7 + requires_dist: + - tzdata + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl + name: fastjsonschema + version: 2.21.2 + sha256: 1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463 + requires_dist: + - colorama ; extra == 'devel' + - jsonschema ; extra == 'devel' + - json-spec ; extra == 'devel' + - pylint ; extra == 'devel' + - pytest ; extra == 'devel' + - pytest-benchmark ; extra == 'devel' + - pytest-cache ; extra == 'devel' + - validictory ; extra == 'devel' +- pypi: https://files.pythonhosted.org/packages/42/14/42b2651a2f46b022ccd948bca9f2d5af0fd8929c4eec235b8d6d844fbe67/filelock-3.19.1-py3-none-any.whl + name: filelock + version: 3.19.1 + sha256: d38e30481def20772f5baf097c122c3babc4fcdb7e14e57049eb9d88c6dc017d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/68/cc/10e4ec45585eba7784a6e86f21990e97b828b8d8927d28ae639b06d50c59/findpython-0.6.3-py3-none-any.whl + name: findpython + version: 0.6.3 + sha256: a85bb589b559cdf1b87227cc233736eb7cad894b9e68021ee498850611939ebc + requires_dist: + - packaging>=20 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/9f/56/13ab06b4f93ca7cac71078fbe37fcea175d3216f31f85c3168a6bbd0bb9a/flake8-7.3.0-py2.py3-none-any.whl + name: flake8 + version: 7.3.0 + sha256: b9696257b9ce8beb888cdbe31cf885c90d31928fe202be0889a7cdafad32f01e + requires_dist: + - mccabe>=0.7.0,<0.8.0 + - pycodestyle>=2.14.0,<2.15.0 + - pyflakes>=3.4.0,<3.5.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/71/ed/89d760cb25279109b89eb52975a7b5479700d3114a2421ce735bfb2e7513/gprof2dot-2025.4.14-py3-none-any.whl + name: gprof2dot + version: 2025.4.14 + sha256: 0742e4c0b4409a5e8777e739388a11e1ed3750be86895655312ea7c20bd0090e + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl + name: greenlet + version: 3.2.4 + sha256: 1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31 + requires_dist: + - sphinx ; extra == 'docs' + - furo ; extra == 'docs' + - objgraph ; extra == 'test' + - psutil ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/04/4b/29cac41a4d98d144bf5f6d33995617b185d14b22401f75ca86f384e87ff1/h11-0.16.0-py3-none-any.whl + name: h11 + version: 0.16.0 + sha256: 63cf8bbe7522de3bf65932fda1d9c2772064ffb3dae62d55932da54b31cb6c86 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/7e/f5/f66802a942d491edb555dd61e3a9961140fd64c90bce1eafd741609d334d/httpcore-1.0.9-py3-none-any.whl + name: httpcore + version: 1.0.9 + sha256: 2d400746a40668fc9dec9810239072b40b4484b640a8c38fd654a024c7a1bf55 + requires_dist: + - certifi + - h11>=0.16 + - anyio>=4.0,<5.0 ; extra == 'asyncio' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - trio>=0.22.0,<1.0 ; extra == 'trio' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl + name: httpx + version: 0.28.1 + sha256: d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad + requires_dist: + - anyio + - certifi + - httpcore==1.* + - idna + - brotli ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi ; platform_python_implementation != 'CPython' and extra == 'brotli' + - click==8.* ; extra == 'cli' + - pygments==2.* ; extra == 'cli' + - rich>=10,<14 ; extra == 'cli' + - h2>=3,<5 ; extra == 'http2' + - socksio==1.* ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/6e/aa/8caf6a0a3e62863cbb9dab27135660acba46903b703e224f14f447e57934/hyperlink-21.0.0-py2.py3-none-any.whl + name: hyperlink + version: 21.0.0 + sha256: e6b14c37ecb73e89c77d78cdb4c2cc8f3fb59a885c5b3f819ff4ed80f25af1b4 + requires_dist: + - idna>=2.5 + - typing ; python_full_version < '3.5' + requires_python: '>=2.6,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/icu-75.1-hfee45f7_0.conda + sha256: 9ba12c93406f3df5ab0a43db8a4b4ef67a5871dfd401010fbe29b218b2cbe620 + md5: 5eb22c1d7b3fc4abb50d92d621583137 + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 11857802 + timestamp: 1720853997952 +- pypi: https://files.pythonhosted.org/packages/76/c6/c88e154df9c4e1a2a66ccf0005a88dfb2650c1dffb6f5ce603dfbd452ce3/idna-3.10-py3-none-any.whl + name: idna + version: '3.10' + sha256: 946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3 + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/0d/38/221e5b2ae676a3938c2c1919131410c342b6efc2baffeda395dd66eeca8f/incremental-24.7.2-py3-none-any.whl + name: incremental + version: 24.7.2 + sha256: 8cb2c3431530bec48ad70513931a760f446ad6c25e8333ca5d95e24b0ed7b8fe + requires_dist: + - setuptools>=61.0 + - tomli ; python_full_version < '3.11' + - click>=6.0 ; extra == 'scripts' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/59/91/aa6bde563e0085a02a435aa99b49ef75b0a4b062635e606dab23ce18d720/inflection-0.5.1-py2.py3-none-any.whl + name: inflection + version: 0.5.1 + sha256: f38b2b640938a4f35ade69ac3d053042959b62a0f1076a5bbaa1b9526605a8a2 + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/2c/e1/e6716421ea10d38022b952c159d5161ca1193197fb744506875fbb87ea7b/iniconfig-2.1.0-py3-none-any.whl + name: iniconfig + version: 2.1.0 + sha256: 9deba5723312380e77435581c6bf4935c94cbfab9b1ed33ef8d238ea168eb760 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/e5/ca/1172b6638d52f2d6caa2dd262ec4c811ba59eee96d54a7701930726bce18/installer-0.7.0-py3-none-any.whl + name: installer + version: 0.7.0 + sha256: 05d1933f0a5ba7d8d6296bb6d5018e7c94fa473ceb10cf198a92ccea19c27b53 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/7f/66/b15ce62552d84bbfcec9a4873ab79d993a1dd4edb922cbfccae192bd5b5f/jaraco.classes-3.4.0-py3-none-any.whl + name: jaraco-classes + version: 3.4.0 + sha256: f662826b6bed8cace05e7ff873ce0f9283b5c924470fe664fff1c2f00f581790 + requires_dist: + - more-itertools + - sphinx>=3.5 ; extra == 'docs' + - jaraco-packaging>=9.3 ; extra == 'docs' + - rst-linker>=1.9 ; extra == 'docs' + - furo ; extra == 'docs' + - sphinx-lint ; extra == 'docs' + - jaraco-tidelift>=1.4 ; extra == 'docs' + - pytest>=6 ; extra == 'testing' + - pytest-checkdocs>=2.4 ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-mypy ; extra == 'testing' + - pytest-enabler>=2.2 ; extra == 'testing' + - pytest-ruff>=0.2.1 ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/ff/db/0c52c4cf5e4bd9f5d7135ec7669a3a767af21b3a308e1ed3674881e52b62/jaraco.context-6.0.1-py3-none-any.whl + name: jaraco-context + version: 6.0.1 + sha256: f797fc481b490edb305122c9181830a3a5b76d84ef6d1aef2fb9b47ab956f9e4 + requires_dist: + - backports-tarfile ; python_full_version < '3.12' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest>=6,!=8.1.* ; extra == 'test' + - pytest-checkdocs>=2.4 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-mypy ; extra == 'test' + - pytest-enabler>=2.2 ; extra == 'test' + - portend ; extra == 'test' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/b4/09/726f168acad366b11e420df31bf1c702a54d373a83f968d94141a8c3fde0/jaraco_functools-4.3.0-py3-none-any.whl + name: jaraco-functools + version: 4.3.0 + sha256: 227ff8ed6f7b8f62c56deff101545fa7543cf2c8e7b82a7c2116e672f29c26e8 + requires_dist: + - more-itertools + - pytest>=6,!=8.1.* ; extra == 'test' + - jaraco-classes ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/bf/9c/8c95d856233c1f82500c2450b8c68576b4cf1c871db3afac5c34ff84e6fd/jsonschema-4.25.1-py3-none-any.whl + name: jsonschema + version: 4.25.1 + sha256: 3fba0169e345c7175110351d456342c364814cfcf3b964ba4587f22915230a63 + requires_dist: + - attrs>=22.2.0 + - jsonschema-specifications>=2023.3.6 + - referencing>=0.28.4 + - rpds-py>=0.7.1 + - fqdn ; extra == 'format' + - idna ; extra == 'format' + - isoduration ; extra == 'format' + - jsonpointer>1.13 ; extra == 'format' + - rfc3339-validator ; extra == 'format' + - rfc3987 ; extra == 'format' + - uri-template ; extra == 'format' + - webcolors>=1.11 ; extra == 'format' + - fqdn ; extra == 'format-nongpl' + - idna ; extra == 'format-nongpl' + - isoduration ; extra == 'format-nongpl' + - jsonpointer>1.13 ; extra == 'format-nongpl' + - rfc3339-validator ; extra == 'format-nongpl' + - rfc3986-validator>0.1.0 ; extra == 'format-nongpl' + - rfc3987-syntax>=1.1.0 ; extra == 'format-nongpl' + - uri-template ; extra == 'format-nongpl' + - webcolors>=24.6.0 ; extra == 'format-nongpl' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/01/0e/b27cdbaccf30b890c40ed1da9fd4a3593a5cf94dae54fb34f8a4b74fcd3f/jsonschema_specifications-2025.4.1-py3-none-any.whl + name: jsonschema-specifications + version: 2025.4.1 + sha256: 4653bffbd6584f7de83a67e0d620ef16900b390ddc7939d56684d6c81e33f1af + requires_dist: + - referencing>=0.31.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/cd/58/4a1880ea64032185e9ae9f63940c9327c6952d5584ea544a8f66972f2fda/jwcrypto-1.5.6-py3-none-any.whl + name: jwcrypto + version: 1.5.6 + sha256: 150d2b0ebbdb8f40b77f543fb44ffd2baeff48788be71f67f03566692fd55789 + requires_dist: + - cryptography>=3.4 + - typing-extensions>=4.5.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d3/32/da7f44bcb1105d3e88a0b74ebdca50c59121d2ddf71c9e34ba47df7f3a56/keyring-25.6.0-py3-none-any.whl + name: keyring + version: 25.6.0 + sha256: 552a3f7af126ece7ed5c89753650eec89c7eaae8617d0aa4d9ad2b75111266bd + requires_dist: + - pywin32-ctypes>=0.2.0 ; sys_platform == 'win32' + - secretstorage>=3.2 ; sys_platform == 'linux' + - jeepney>=0.4.2 ; sys_platform == 'linux' + - importlib-metadata>=4.11.4 ; python_full_version < '3.12' + - jaraco-classes + - importlib-resources ; python_full_version < '3.9' + - jaraco-functools + - jaraco-context + - pytest>=6,!=8.1.* ; extra == 'test' + - pyfakefs ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - pygobject-stubs ; extra == 'type' + - shtab ; extra == 'type' + - types-pywin32 ; extra == 'type' + - shtab>=1.1.0 ; extra == 'completion' + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libexpat-2.7.1-hec049ff_0.conda + sha256: 8fbb17a56f51e7113ed511c5787e0dec0d4b10ef9df921c4fd1cccca0458f648 + md5: b1ca5f21335782f71a8bd69bdc093f67 + depends: + - __osx >=11.0 + constrains: + - expat 2.7.1.* + license: MIT + license_family: MIT + purls: [] + size: 65971 + timestamp: 1752719657566 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libffi-3.4.6-h1da3d7d_1.conda + sha256: c6a530924a9b14e193ea9adfe92843de2a806d1b7dbfd341546ece9653129e60 + md5: c215a60c2935b517dcda8cad4705734d + depends: + - __osx >=11.0 + license: MIT + license_family: MIT + purls: [] + size: 39839 + timestamp: 1743434670405 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/liblzma-5.8.1-h39f12f2_2.conda + sha256: 0cb92a9e026e7bd4842f410a5c5c665c89b2eb97794ffddba519a626b8ce7285 + md5: d6df911d4564d77c4374b02552cb17d1 + depends: + - __osx >=11.0 + constrains: + - xz 5.8.1.* + license: 0BSD + purls: [] + size: 92286 + timestamp: 1749230283517 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libmpdec-4.0.0-h5505292_0.conda + sha256: 0a1875fc1642324ebd6c4ac864604f3f18f57fbcf558a8264f6ced028a3c75b2 + md5: 85ccccb47823dd9f7a99d2c7f530342f + depends: + - __osx >=11.0 + license: BSD-2-Clause + license_family: BSD + purls: [] + size: 71829 + timestamp: 1748393749336 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libsqlite-3.50.4-h4237e3c_0.conda + sha256: 802ebe62e6bc59fc26b26276b793e0542cfff2d03c086440aeaf72fb8bbcec44 + md5: 1dcb0468f5146e38fae99aef9656034b + depends: + - __osx >=11.0 + - icu >=75.1,<76.0a0 + - libzlib >=1.3.1,<2.0a0 + license: blessing + purls: [] + size: 902645 + timestamp: 1753948599139 +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/libzlib-1.3.1-h8359307_2.conda + sha256: ce34669eadaba351cd54910743e6a2261b67009624dbc7daeeafdef93616711b + md5: 369964e85dc26bfe78f41399b366c435 + depends: + - __osx >=11.0 + constrains: + - zlib 1.3.1 *_2 + license: Zlib + license_family: Other + purls: [] + size: 46438 + timestamp: 1727963202283 +- pypi: https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl + name: markupsafe + version: 3.0.2 + sha256: f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/27/1a/1f68f9ba0c207934b35b86a8ca3aad8395a3d6dd7921c0686e23853ff5a9/mccabe-0.7.0-py2.py3-none-any.whl + name: mccabe + version: 0.7.0 + sha256: 6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/2b/9f/7ba6f94fc1e9ac3d2b853fdff3035fb2fa5afbed898c4a72b8a020610594/more_itertools-10.7.0-py3-none-any.whl + name: more-itertools + version: 10.7.0 + sha256: d43980384673cb07d2f7d2d918c616b30c659c089ee23953f601d6609c67510e + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/09/48/54a89579ea36b6ae0ee001cba8c61f776451fad3c9306cd80f5b5c55be87/msgpack-1.1.1-cp313-cp313-macosx_11_0_arm64.whl + name: msgpack + version: 1.1.1 + sha256: 8ddb2bcfd1a8b9e431c8d6f4f7db0773084e107730ecf3472f1dfe9ad583f3d9 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/79/7b/2c79738432f5c924bef5071f933bcc9efd0473bac3b4aa584a6f7c1c8df8/mypy_extensions-1.1.0-py3-none-any.whl + name: mypy-extensions + version: 1.1.0 + sha256: 1be4cccdb0f2482337c4743e60421de3a356cd97508abadd57d47403e94f5505 + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/ncurses-6.5-h5e97a16_3.conda + sha256: 2827ada40e8d9ca69a153a45f7fd14f32b2ead7045d3bbb5d10964898fe65733 + md5: 068d497125e4bf8a66bf707254fff5ae + depends: + - __osx >=11.0 + license: X11 AND BSD-3-Clause + purls: [] + size: 797030 + timestamp: 1738196177597 +- pypi: https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl + name: nodeenv + version: 1.9.1 + sha256: ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*' +- pypi: https://files.pythonhosted.org/packages/13/6b/9721ba7c68036316bd8aeb596b397253590c87d7045c9d6fc82b7364eff4/nplusone-1.0.0-py2.py3-none-any.whl + name: nplusone + version: 1.0.0 + sha256: 96b1e6e29e6af3e71b67d0cc012a5ec8c97c6a2f5399f4ba41a2bbe0e253a9ac + requires_dist: + - six>=1.9.0 + - blinker>=1.3 +- pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + name: oauthlib + version: 3.3.1 + sha256: 88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 + requires_dist: + - cryptography>=3.0.0 ; extra == 'rsa' + - cryptography>=3.0.0 ; extra == 'signedtoken' + - pyjwt>=2.0.0,<3 ; extra == 'signedtoken' + - blinker>=1.4.0 ; extra == 'signals' + requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/openssl-3.5.2-he92f556_0.conda + sha256: f6d1c87dbcf7b39fad24347570166dade1c533ae2d53c60a70fa4dc874ef0056 + md5: bcb0d87dfbc199d0a461d2c7ca30b3d8 + depends: + - __osx >=11.0 + - ca-certificates + license: Apache-2.0 + license_family: Apache + purls: [] + size: 3074848 + timestamp: 1754465710470 +- pypi: https://files.pythonhosted.org/packages/20/12/38679034af332785aac8774540895e234f4d07f7545804097de4b666afd8/packaging-25.0-py3-none-any.whl + name: packaging + version: '25.0' + sha256: 29572ef2b1f17581046b3a2227d5c611fb25ec70ca1ba8554b24b0e69331a484 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/cc/20/ff623b09d963f88bfde16306a54e12ee5ea43e9b597108672ff3a408aad6/pathspec-0.12.1-py3-none-any.whl + name: pathspec + version: 0.12.1 + sha256: a0d503e138a4c123b27490a4f7beda6a01c6f288df0e4a8b79c7eb0dc7b4cc08 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d3/0b/a286029828fe6ddf0fa0a4a8a46b7d90c7d6ac26a3237f4c211df9143e92/pbs_installer-2025.8.27-py3-none-any.whl + name: pbs-installer + version: 2025.8.27 + sha256: 145ed15f222af5157f5d4512a75041bc3c32784d4939d678231d41b15c0f16be + requires_dist: + - httpx>=0.27.0,<1 ; extra == 'download' + - zstandard>=0.21.0 ; extra == 'install' + - pbs-installer[download,install] ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/2c/d8/6f63147dd73373d051c5eb049ecd841207f898f50a5a1d4378594178f6cf/piexif-1.1.3-py2.py3-none-any.whl + name: piexif + version: 1.1.3 + sha256: 3bc435d171720150b81b15d27e05e54b8abbde7b4242cddd81ef160d283108b6 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*' +- pypi: https://files.pythonhosted.org/packages/f9/0e/37d7d3eca6c879fbd9dba21268427dffda1ab00d4eb05b32923d4fbe3b12/pillow-11.3.0-cp313-cp313-macosx_11_0_arm64.whl + name: pillow + version: 11.3.0 + sha256: 7db51d222548ccfd274e4572fdbf3e810a5e66b00608862f947b163e613b67dd + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - typing-extensions ; python_full_version < '3.10' and extra == 'typing' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fa/3d/f4f2ba829efb54b6cd2d91349c7463316a9cc55a43fc980447416c88540f/pkginfo-1.12.1.2-py3-none-any.whl + name: pkginfo + version: 1.12.1.2 + sha256: c783ac885519cab2c34927ccfa6bf64b5a704d7c69afaea583dd9b7afe969343 + requires_dist: + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - wheel ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/40/4b/2028861e724d3bd36227adfa20d3fd24c3fc6d52032f4a93c133be5d17ce/platformdirs-4.4.0-py3-none-any.whl + name: platformdirs + version: 4.4.0 + sha256: abd01743f24e5287cd7a5db3752faf1a2d65353f38ec26d98e25a6db65958c85 + requires_dist: + - furo>=2024.8.6 ; extra == 'docs' + - proselint>=0.14 ; extra == 'docs' + - sphinx-autodoc-typehints>=3 ; extra == 'docs' + - sphinx>=8.1.3 ; extra == 'docs' + - appdirs==1.4.4 ; extra == 'test' + - covdefaults>=2.3 ; extra == 'test' + - pytest-cov>=6 ; extra == 'test' + - pytest-mock>=3.14 ; extra == 'test' + - pytest>=8.3.4 ; extra == 'test' + - mypy>=1.14.1 ; extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e1/7b/51882dc584f7aa59f446f2bb34e33c0e5f015de4e31949e5b7c2c10e54f0/playwright-1.54.0-py3-none-macosx_11_0_arm64.whl + name: playwright + version: 1.54.0 + sha256: 780928b3ca2077aea90414b37e54edd0c4bbb57d1aafc42f7aa0b3fd2c2fac02 + requires_dist: + - pyee>=13,<14 + - greenlet>=3.1.1,<4.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl + name: pluggy + version: 1.6.0 + sha256: e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746 + requires_dist: + - pre-commit ; extra == 'dev' + - tox ; extra == 'dev' + - pytest ; extra == 'testing' + - pytest-benchmark ; extra == 'testing' + - coverage ; extra == 'testing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/6d/37/578fe593a07daa5e4417a7965d46093a255ebd7fbb797df6959c0f378f43/poetry-2.1.4-py3-none-any.whl + name: poetry + version: 2.1.4 + sha256: 0019b64d33fed9184a332f7fad60ca47aace4d6a0e9c635cdea21b76e96f32ce + requires_dist: + - build>=1.2.1,<2.0.0 + - cachecontrol[filecache]>=0.14.0,<0.15.0 + - cleo>=2.1.0,<3.0.0 + - dulwich>=0.22.6,<0.23.0 + - fastjsonschema>=2.18.0,<3.0.0 + - findpython>=0.6.2,<0.7.0 + - importlib-metadata>=4.4,<8.7 ; python_full_version < '3.10' + - installer>=0.7.0,<0.8.0 + - keyring>=25.1.0,<26.0.0 + - packaging>=24.0 + - pbs-installer[download,install]>=2025.1.6,<2026.0.0 + - pkginfo>=1.12,<2.0 + - platformdirs>=3.0.0,<5 + - poetry-core==2.1.3 + - pyproject-hooks>=1.0.0,<2.0.0 + - requests>=2.26,<3.0 + - requests-toolbelt>=1.0.0,<2.0.0 + - shellingham>=1.5,<2.0 + - tomli>=2.0.1,<3.0.0 ; python_full_version < '3.11' + - tomlkit>=0.11.4,<1.0.0 + - trove-classifiers>=2022.5.19 + - virtualenv>=20.26.6,<20.33.0 + - xattr>=1.0.0,<2.0.0 ; sys_platform == 'darwin' + requires_python: '>=3.9,<4.0' +- pypi: https://files.pythonhosted.org/packages/d2/f1/fb218aebd29bca5c506230201c346881ae9b43de7bbb21a68dc648e972b3/poetry_core-2.1.3-py3-none-any.whl + name: poetry-core + version: 2.1.3 + sha256: 2c704f05016698a54ca1d327f46ce2426d72eaca6ff614132c8477c292266771 + requires_python: '>=3.9,<4.0' +- pypi: https://files.pythonhosted.org/packages/04/8b/30f930733afe425e3cbfc0e1468a30a18942350c1a8816acfade80c005c4/psutil-7.0.0-cp36-abi3-macosx_11_0_arm64.whl + name: psutil + version: 7.0.0 + sha256: 39db632f6bb862eeccf56660871433e111b6ea58f2caea825571951d4b6aa3da + requires_dist: + - pytest ; extra == 'dev' + - pytest-xdist ; extra == 'dev' + - setuptools ; extra == 'dev' + - abi3audit ; extra == 'dev' + - black==24.10.0 ; extra == 'dev' + - check-manifest ; extra == 'dev' + - coverage ; extra == 'dev' + - packaging ; extra == 'dev' + - pylint ; extra == 'dev' + - pyperf ; extra == 'dev' + - pypinfo ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - requests ; extra == 'dev' + - rstcheck ; extra == 'dev' + - ruff ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - toml-sort ; extra == 'dev' + - twine ; extra == 'dev' + - virtualenv ; extra == 'dev' + - vulture ; extra == 'dev' + - wheel ; extra == 'dev' + - pytest ; extra == 'test' + - pytest-xdist ; extra == 'test' + - setuptools ; extra == 'test' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/cb/0e/bdc8274dc0585090b4e3432267d7be4dfbfd8971c0fa59167c711105a6bf/psycopg2-binary-2.9.10.tar.gz + name: psycopg2-binary + version: 2.9.10 + sha256: 4b3df0e6990aa98acda57d983942eff13d824135fe2250e6522edaa782a06de2 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c8/f1/d6a797abb14f6283c0ddff96bbdd46937f64122b8c925cab503dd37f8214/pyasn1-0.6.1-py3-none-any.whl + name: pyasn1 + version: 0.6.1 + sha256: 0d632f46f2ba09143da3a8afe9e33fb6f92fa2320ab7e886e2d0f7672af84629 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + name: pyasn1-modules + version: 0.4.2 + sha256: 29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a + requires_dist: + - pyasn1>=0.6.1,<0.7.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d7/27/a58ddaf8c588a3ef080db9d0b7e0b97215cee3a45df74f3a94dbbf5c893a/pycodestyle-2.14.0-py2.py3-none-any.whl + name: pycodestyle + version: 2.14.0 + sha256: dd6bf7cb4ee77f8e016f9c8e74a35ddd9f67e1d5fd4184d86c3b98e07099f42d + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b1/ec/1fb891d8a2660716aadb2143235481d15ed1cbfe3ad669194690b0604492/pycountry-24.6.1-py3-none-any.whl + name: pycountry + version: 24.6.1 + sha256: f1a4fb391cd7214f8eefd39556d740adcc233c778a27f8942c8dca351d6ce06f + requires_dist: + - importlib-resources>5.12.0 ; python_full_version < '3.9' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/13/a3/a812df4e2dd5696d1f351d58b8fe16a405b234ad2886a0dab9183fb78109/pycparser-2.22-py3-none-any.whl + name: pycparser + version: '2.22' + sha256: c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/9b/4d/b9add7c84060d4c1906abe9a7e5359f2a60f7a9a4f67268b2766673427d8/pyee-13.0.0-py3-none-any.whl + name: pyee + version: 13.0.0 + sha256: 48195a3cddb3b1515ce0695ed76036b5ccc2ef3a9f963ff9f77aec0139845498 + requires_dist: + - typing-extensions + - build ; extra == 'dev' + - flake8 ; extra == 'dev' + - flake8-black ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-asyncio ; python_full_version >= '3.4' and extra == 'dev' + - pytest-trio ; python_full_version >= '3.7' and extra == 'dev' + - black ; extra == 'dev' + - isort ; extra == 'dev' + - jupyter-console ; extra == 'dev' + - mkdocs ; extra == 'dev' + - mkdocs-include-markdown-plugin ; extra == 'dev' + - mkdocstrings[python] ; extra == 'dev' + - mypy ; extra == 'dev' + - sphinx ; extra == 'dev' + - toml ; extra == 'dev' + - tox ; extra == 'dev' + - trio ; extra == 'dev' + - trio ; python_full_version >= '3.7' and extra == 'dev' + - trio-typing ; python_full_version >= '3.7' and extra == 'dev' + - twine ; extra == 'dev' + - twisted ; extra == 'dev' + - validate-pyproject[all] ; extra == 'dev' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/c2/2f/81d580a0fb83baeb066698975cb14a618bdbed7720678566f1b046a95fe8/pyflakes-3.4.0-py2.py3-none-any.whl + name: pyflakes + version: 3.4.0 + sha256: f742a7dbd0d9cb9ea41e9a24a918996e8170c799fa528688d40dd582c8265f4f + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c7/21/705964c7812476f378728bdf590ca4b771ec72385c533964653c68e86bdc/pygments-2.19.2-py3-none-any.whl + name: pygments + version: 2.19.2 + sha256: 86540386c03d588bb81d44bc3928634ff26449851e99741617ecb9037ee5ec0b + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/61/ad/689f02752eeec26aed679477e80e632ef1b682313be70793d798c1d5fc8f/PyJWT-2.10.1-py3-none-any.whl + name: pyjwt + version: 2.10.1 + sha256: dcdd193e30abefd5debf142f9adfcdd2b58004e644f25406ffaebd50bd98dacb + requires_dist: + - cryptography>=3.4.0 ; extra == 'crypto' + - coverage[toml]==5.0.4 ; extra == 'dev' + - cryptography>=3.4.0 ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest>=6.0.0,<7.0.0 ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - zope-interface ; extra == 'dev' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - zope-interface ; extra == 'docs' + - coverage[toml]==5.0.4 ; extra == 'tests' + - pytest>=6.0.0,<7.0.0 ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/80/28/2659c02301b9500751f8d42f9a6632e1508aa5120de5e43042b8b30f8d5d/pyopenssl-25.1.0-py3-none-any.whl + name: pyopenssl + version: 25.1.0 + sha256: 2b11f239acc47ac2e5aca04fd7fa829800aeee22a2eb30d744572a157bd8a1ab + requires_dist: + - cryptography>=41.0.5,<46 + - typing-extensions>=4.9 ; python_full_version >= '3.8' and python_full_version < '3.13' + - pytest-rerunfailures ; extra == 'test' + - pretend ; extra == 'test' + - pytest>=3.0.1 ; extra == 'test' + - sphinx!=5.2.0,!=5.2.0.post0,!=7.2.5 ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/bd/24/12818598c362d7f300f18e74db45963dbcb85150324092410c8b49405e42/pyproject_hooks-1.2.0-py3-none-any.whl + name: pyproject-hooks + version: 1.2.0 + sha256: 9e5c6bfa8dcc30091c74b0cf803c81fdd29d94f01992a7707bc97babb1141913 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/84/30/89aa7f7d7a875bbb9a577d4b1dc5a3e404e3d2ae2657354808e905e358e0/pyright-1.1.404-py3-none-any.whl + name: pyright + version: 1.1.404 + sha256: c7b7ff1fdb7219c643079e4c3e7d4125f0dafcc19d253b47e898d130ea426419 + requires_dist: + - nodeenv>=1.6.0 + - typing-extensions>=4.1 + - twine>=3.4.1 ; extra == 'all' + - nodejs-wheel-binaries ; extra == 'all' + - twine>=3.4.1 ; extra == 'dev' + - nodejs-wheel-binaries ; extra == 'nodejs' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/29/16/c8a903f4c4dffe7a12843191437d7cd8e32751d5de349d45d3fe69544e87/pytest-8.4.1-py3-none-any.whl + name: pytest + version: 8.4.1 + sha256: 539c70ba6fcead8e78eebbf1115e8b589e7565830d7d006a8723f19ac8a0afb7 + requires_dist: + - colorama>=0.4 ; sys_platform == 'win32' + - exceptiongroup>=1 ; python_full_version < '3.11' + - iniconfig>=1 + - packaging>=20 + - pluggy>=1.5,<2 + - pygments>=2.7.2 + - tomli>=1 ; python_full_version < '3.11' + - argcomplete ; extra == 'dev' + - attrs>=19.2 ; extra == 'dev' + - hypothesis>=3.56 ; extra == 'dev' + - mock ; extra == 'dev' + - requests ; extra == 'dev' + - setuptools ; extra == 'dev' + - xmlschema ; extra == 'dev' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/98/1c/b00940ab9eb8ede7897443b771987f2f4a76f06be02f1b3f01eb7567e24a/pytest_base_url-2.1.0-py3-none-any.whl + name: pytest-base-url + version: 2.1.0 + sha256: 3ad15611778764d451927b2a53240c1a7a591b521ea44cebfe45849d2d2812e6 + requires_dist: + - pytest>=7.0.0 + - requests>=2.9 + - black>=22.1.0 ; extra == 'test' + - flake8>=4.0.1 ; extra == 'test' + - pre-commit>=2.17.0 ; extra == 'test' + - pytest-localserver>=0.7.1 ; extra == 'test' + - tox>=3.24.5 ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/be/ac/bd0608d229ec808e51a21044f3f2f27b9a37e7a0ebaca7247882e67876af/pytest_django-4.11.1-py3-none-any.whl + name: pytest-django + version: 4.11.1 + sha256: 1b63773f648aa3d8541000c26929c1ea63934be1cfa674c76436966d73fe6a10 + requires_dist: + - pytest>=7.0.0 + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - django ; extra == 'testing' + - django-configurations>=2.0 ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/d8/96/5f8a4545d783674f3de33f0ebc4db16cc76ce77a4c404d284f43f09125e3/pytest_playwright-0.7.0-py3-none-any.whl + name: pytest-playwright + version: 0.7.0 + sha256: 2516d0871fa606634bfe32afbcc0342d68da2dbff97fe3459849e9c428486da2 + requires_dist: + - playwright>=1.18 + - pytest>=6.2.4,<9.0.0 + - pytest-base-url>=1.0.0,<3.0.0 + - python-slugify>=6.0.0,<9.0.0 + requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/python-3.13.5-hf3f3da0_102_cp313.conda + build_number: 102 + sha256: ee1b09fb5563be8509bb9b29b2b436a0af75488b5f1fa6bcd93fe0fba597d13f + md5: 123b7f04e7b8d6fc206cf2d3466f8a4b + depends: + - __osx >=11.0 + - bzip2 >=1.0.8,<2.0a0 + - libexpat >=2.7.0,<3.0a0 + - libffi >=3.4.6,<3.5.0a0 + - liblzma >=5.8.1,<6.0a0 + - libmpdec >=4.0.0,<5.0a0 + - libsqlite >=3.50.1,<4.0a0 + - libzlib >=1.3.1,<2.0a0 + - ncurses >=6.5,<7.0a0 + - openssl >=3.5.0,<4.0a0 + - python_abi 3.13.* *_cp313 + - readline >=8.2,<9.0a0 + - tk >=8.6.13,<8.7.0a0 + - tzdata + license: Python-2.0 + purls: [] + size: 12931515 + timestamp: 1750062475020 + python_site_packages_path: lib/python3.13/site-packages +- pypi: https://files.pythonhosted.org/packages/a2/d4/9193206c4563ec771faf2ccf54815ca7918529fe81f6adb22ee6d0e06622/python_decouple-3.8-py3-none-any.whl + name: python-decouple + version: '3.8' + sha256: d0d45340815b25f4de59c974b855bb38d03151d81b037d9e3f463b0c9f8cbd66 +- pypi: https://files.pythonhosted.org/packages/5f/ed/539768cf28c661b5b068d66d96a2f155c4971a5d55684a514c1a0e0dec2f/python_dotenv-1.1.1-py3-none-any.whl + name: python-dotenv + version: 1.1.1 + sha256: 31f23644fe2602f88ff55e1f5c79ba497e01224ee7737937930c448e4d0e24dc + requires_dist: + - click>=5.0 ; extra == 'cli' + requires_python: '>=3.9' +- pypi: direct+https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl + name: python-json-logger + version: 3.0.0 + requires_dist: + - validate-pyproject[all] ; extra == 'lint' + - black ; extra == 'lint' + - pylint ; extra == 'lint' + - mypy ; extra == 'lint' + - pytest ; extra == 'test' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a4/62/02da182e544a51a5c3ccf4b03ab79df279f9c60c5e82d5e8bec7ca26ac11/python_slugify-8.0.4-py2.py3-none-any.whl + name: python-slugify + version: 8.0.4 + sha256: 276540b79961052b66b7d116620b36518847f52d5fd9e3a70164fc8c50faa6b8 + requires_dist: + - text-unidecode>=1.3 + - unidecode>=1.1.1 ; extra == 'unidecode' + requires_python: '>=3.7' +- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.13-8_cp313.conda + build_number: 8 + sha256: 210bffe7b121e651419cb196a2a63687b087497595c9be9d20ebe97dd06060a7 + md5: 94305520c52a4aa3f6c2b1ff6008d9f8 + constrains: + - python 3.13.* *_cp313 + license: BSD-3-Clause + license_family: BSD + purls: [] + size: 7002 + timestamp: 1752805902938 +- pypi: https://files.pythonhosted.org/packages/92/44/da239917f5711ca7105f7d7f9e2765716dd883b241529beafc0f28504725/pytoolconfig-1.3.1-py3-none-any.whl + name: pytoolconfig + version: 1.3.1 + sha256: 5d8cea8ae1996938ec3eaf44567bbc5ef1bc900742190c439a44a704d6e1b62b + requires_dist: + - tomli>=2.0.1 ; python_full_version < '3.11' + - packaging>=23.2 + - pydantic>=2.5.3 ; extra == 'validation' + - platformdirs>=3.11.0 ; extra == 'global' + - tabulate>=0.9.0 ; extra == 'doc' + - sphinx>=7.1.2 ; extra == 'doc' + - sphinx>=7.1.2 ; extra == 'gendocs' + - sphinx-autodoc-typehints>=1.25.2 ; extra == 'gendocs' + - sphinx-rtd-theme>=2.0.0 ; extra == 'gendocs' + - pytoolconfig[doc] ; extra == 'gendocs' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/45/9f/3b1c20a0b7a3200524eb0076cc027a970d320bd3a6592873c85c92a08731/PyYAML-6.0.2-cp313-cp313-macosx_11_0_arm64.whl + name: pyyaml + version: 6.0.2 + sha256: 50187695423ffe49e2deacb8cd10510bc361faac997de9efef88badc3bb9e2d1 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/f1/c7/702472c4f3c4e5f9985bb5143405a5c4aadf3b439193f4174944880c50a3/rapidfuzz-3.14.0-cp313-cp313-macosx_11_0_arm64.whl + name: rapidfuzz + version: 3.14.0 + sha256: 68c3931c19c51c11654cf75f663f34c0c7ea04c456c84ccebfd52b2047121dba + requires_dist: + - numpy ; extra == 'all' + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/readline-8.2-h1d1bf99_2.conda + sha256: 7db04684d3904f6151eff8673270922d31da1eea7fa73254d01c437f49702e34 + md5: 63ef3f6e6d6d5c589e64f11263dc5676 + depends: + - ncurses >=6.5,<7.0a0 + license: GPL-3.0-only + license_family: GPL + purls: [] + size: 252359 + timestamp: 1740379663071 +- pypi: https://files.pythonhosted.org/packages/e8/02/89e2ed7e85db6c93dfa9e8f691c5087df4e3551ab39081a4d7c6d1f90e05/redis-6.4.0-py3-none-any.whl + name: redis + version: 6.4.0 + sha256: f0544fa9604264e9464cdf4814e7d4830f74b165d52f2a330a760a88dd248b7f + requires_dist: + - async-timeout>=4.0.3 ; python_full_version < '3.11.3' + - hiredis>=3.2.0 ; extra == 'hiredis' + - pyjwt>=2.9.0 ; extra == 'jwt' + - cryptography>=36.0.1 ; extra == 'ocsp' + - pyopenssl>=20.0.1 ; extra == 'ocsp' + - requests>=2.31.0 ; extra == 'ocsp' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/c1/b1/3baf80dc6d2b7bc27a95a67752d0208e410351e3feb4eb78de5f77454d8d/referencing-0.36.2-py3-none-any.whl + name: referencing + version: 0.36.2 + sha256: e8699adbbf8b5c7de96d8ffa0eb5c158b3beafce084968e2ea8bb08c6794dcd0 + requires_dist: + - attrs>=22.2.0 + - rpds-py>=0.7.0 + - typing-extensions>=4.4.0 ; python_full_version < '3.13' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/1e/db/4254e3eabe8020b458f1a747140d32277ec7a271daf1d235b70dc0b4e6e3/requests-2.32.5-py3-none-any.whl + name: requests + version: 2.32.5 + sha256: 2462f94637a34fd532264295e186976db0f5d453d1cdd31473c85a6a161affb6 + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.21.1,<3 + - certifi>=2017.4.17 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<6 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl + name: requests-toolbelt + version: 1.0.0 + sha256: cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06 + requires_dist: + - requests>=2.0.1,<3.0.0 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/75/35/130469d1901da2b3a5a377539b4ffcd8a5c983f1c9e3ba5ffdd8d71ae314/rope-1.14.0-py3-none-any.whl + name: rope + version: 1.14.0 + sha256: 00a7ea8c0c376fc0b053b2f2f8ef3bfb8b50fecf1ebf3eb80e4f8bd7f1941918 + requires_dist: + - pytoolconfig[global]>=1.2.2 + - pytoolconfig[doc] ; extra == 'doc' + - sphinx>=4.5.0 ; extra == 'doc' + - sphinx-autodoc-typehints>=1.18.1 ; extra == 'doc' + - sphinx-rtd-theme>=1.0.0 ; extra == 'doc' + - pytest>=7.0.1 ; extra == 'dev' + - pytest-cov>=4.1.0 ; extra == 'dev' + - pytest-timeout>=2.1.0 ; extra == 'dev' + - build>=0.7.0 ; extra == 'dev' + - pre-commit>=2.20.0 ; extra == 'dev' + - toml>=0.10.2 ; extra == 'release' + - twine>=4.0.2 ; extra == 'release' + - pip-tools>=6.12.1 ; extra == 'release' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/3a/fc/c43765f201c6a1c60be2043cbdb664013def52460a4c7adace89d6682bf4/rpds_py-0.27.1-cp313-cp313-macosx_11_0_arm64.whl + name: rpds-py + version: 0.27.1 + sha256: 1441811a96eadca93c517d08df75de45e5ffe68aa3089924f963c782c4b898cf + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/2c/0d/15b72c5fe6b1e402a543aa9d8960e0a7e19dfb079f5b0b424db48b7febab/ruff-0.12.11-py3-none-macosx_11_0_arm64.whl + name: ruff + version: 0.12.11 + sha256: d69fb9d4937aa19adb2e9f058bc4fbfe986c2040acb1a4a9747734834eaa0bfd + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a6/24/4d91e05817e92e3a61c8a21e08fd0f390f5301f1c448b137c57c4bc6e543/semver-3.0.4-py3-none-any.whl + name: semver + version: 3.0.4 + sha256: 9c824d87ba7f7ab4a1890799cec8596f15c1241cb473404ea1cb0c55e4b04746 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/62/1f/5feb6c42cc30126e9574eabc28139f8c626b483a47c537f648d133628df0/sentry_sdk-2.35.1-py2.py3-none-any.whl + name: sentry-sdk + version: 2.35.1 + sha256: 13b6d6cfdae65d61fe1396a061cf9113b20f0ec1bcb257f3826b88f01bb55720 + requires_dist: + - urllib3>=1.26.11 + - certifi + - aiohttp>=3.5 ; extra == 'aiohttp' + - anthropic>=0.16 ; extra == 'anthropic' + - arq>=0.23 ; extra == 'arq' + - asyncpg>=0.23 ; extra == 'asyncpg' + - apache-beam>=2.12 ; extra == 'beam' + - bottle>=0.12.13 ; extra == 'bottle' + - celery>=3 ; extra == 'celery' + - celery-redbeat>=2 ; extra == 'celery-redbeat' + - chalice>=1.16.0 ; extra == 'chalice' + - clickhouse-driver>=0.2.0 ; extra == 'clickhouse-driver' + - django>=1.8 ; extra == 'django' + - falcon>=1.4 ; extra == 'falcon' + - fastapi>=0.79.0 ; extra == 'fastapi' + - flask>=0.11 ; extra == 'flask' + - blinker>=1.1 ; extra == 'flask' + - markupsafe ; extra == 'flask' + - grpcio>=1.21.1 ; extra == 'grpcio' + - protobuf>=3.8.0 ; extra == 'grpcio' + - httpcore[http2]==1.* ; extra == 'http2' + - httpx>=0.16.0 ; extra == 'httpx' + - huey>=2 ; extra == 'huey' + - huggingface-hub>=0.22 ; extra == 'huggingface-hub' + - langchain>=0.0.210 ; extra == 'langchain' + - launchdarkly-server-sdk>=9.8.0 ; extra == 'launchdarkly' + - litestar>=2.0.0 ; extra == 'litestar' + - loguru>=0.5 ; extra == 'loguru' + - openai>=1.0.0 ; extra == 'openai' + - tiktoken>=0.3.0 ; extra == 'openai' + - openfeature-sdk>=0.7.1 ; extra == 'openfeature' + - opentelemetry-distro>=0.35b0 ; extra == 'opentelemetry' + - opentelemetry-distro ; extra == 'opentelemetry-experimental' + - pure-eval ; extra == 'pure-eval' + - executing ; extra == 'pure-eval' + - asttokens ; extra == 'pure-eval' + - pymongo>=3.1 ; extra == 'pymongo' + - pyspark>=2.4.4 ; extra == 'pyspark' + - quart>=0.16.1 ; extra == 'quart' + - blinker>=1.1 ; extra == 'quart' + - rq>=0.6 ; extra == 'rq' + - sanic>=0.8 ; extra == 'sanic' + - sqlalchemy>=1.2 ; extra == 'sqlalchemy' + - starlette>=0.19.1 ; extra == 'starlette' + - starlite>=1.48 ; extra == 'starlite' + - statsig>=0.55.3 ; extra == 'statsig' + - tornado>=6 ; extra == 'tornado' + - unleashclient>=6.0.1 ; extra == 'unleash' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/08/2c/ca6dd598b384bc1ce581e24aaae0f2bed4ccac57749d5c3befbb5e742081/service_identity-24.2.0-py3-none-any.whl + name: service-identity + version: 24.2.0 + sha256: 6b047fbd8a84fd0bb0d55ebce4031e400562b9196e1e0d3e0fe2b8a59f6d4a85 + requires_dist: + - attrs>=19.1.0 + - cryptography + - pyasn1 + - pyasn1-modules + - coverage[toml]>=5.0.2 ; extra == 'dev' + - idna ; extra == 'dev' + - mypy ; extra == 'dev' + - pyopenssl ; extra == 'dev' + - pytest ; extra == 'dev' + - types-pyopenssl ; extra == 'dev' + - furo ; extra == 'docs' + - myst-parser ; extra == 'docs' + - pyopenssl ; extra == 'docs' + - sphinx ; extra == 'docs' + - sphinx-notfound-page ; extra == 'docs' + - idna ; extra == 'idna' + - idna ; extra == 'mypy' + - mypy ; extra == 'mypy' + - types-pyopenssl ; extra == 'mypy' + - coverage[toml]>=5.0.2 ; extra == 'tests' + - pytest ; extra == 'tests' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a3/dc/17031897dae0efacfea57dfd3a82fdd2a2aeb58e0ff71b77b87e44edc772/setuptools-80.9.0-py3-none-any.whl + name: setuptools + version: 80.9.0 + sha256: 062d34222ad13e0cc312a4c02d73f059e86a4acbfbdea8f8f76b28c99f306922 + requires_dist: + - pytest>=6,!=8.1.* ; extra == 'test' + - virtualenv>=13.0.0 ; extra == 'test' + - wheel>=0.44.0 ; extra == 'test' + - pip>=19.1 ; extra == 'test' + - packaging>=24.2 ; extra == 'test' + - jaraco-envs>=2.2 ; extra == 'test' + - pytest-xdist>=3 ; extra == 'test' + - jaraco-path>=3.7.2 ; extra == 'test' + - build[virtualenv]>=1.0.3 ; extra == 'test' + - filelock>=3.4.0 ; extra == 'test' + - ini2toml[lite]>=0.14 ; extra == 'test' + - tomli-w>=1.0.0 ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-perf ; sys_platform != 'cygwin' and extra == 'test' + - jaraco-develop>=7.21 ; python_full_version >= '3.9' and sys_platform != 'cygwin' and extra == 'test' + - pytest-home>=0.5 ; extra == 'test' + - pytest-subprocess ; extra == 'test' + - pyproject-hooks!=1.1 ; extra == 'test' + - jaraco-test>=5.5 ; extra == 'test' + - sphinx>=3.5 ; extra == 'doc' + - jaraco-packaging>=9.3 ; extra == 'doc' + - rst-linker>=1.9 ; extra == 'doc' + - furo ; extra == 'doc' + - sphinx-lint ; extra == 'doc' + - jaraco-tidelift>=1.4 ; extra == 'doc' + - pygments-github-lexers==0.0.5 ; extra == 'doc' + - sphinx-favicon ; extra == 'doc' + - sphinx-inline-tabs ; extra == 'doc' + - sphinx-reredirects ; extra == 'doc' + - sphinxcontrib-towncrier ; extra == 'doc' + - sphinx-notfound-page>=1,<2 ; extra == 'doc' + - pyproject-hooks!=1.1 ; extra == 'doc' + - towncrier<24.7 ; extra == 'doc' + - packaging>=24.2 ; extra == 'core' + - more-itertools>=8.8 ; extra == 'core' + - jaraco-text>=3.7 ; extra == 'core' + - importlib-metadata>=6 ; python_full_version < '3.10' and extra == 'core' + - tomli>=2.0.1 ; python_full_version < '3.11' and extra == 'core' + - wheel>=0.43.0 ; extra == 'core' + - platformdirs>=4.2.2 ; extra == 'core' + - jaraco-functools>=4 ; extra == 'core' + - more-itertools ; extra == 'core' + - pytest-checkdocs>=2.4 ; extra == 'check' + - pytest-ruff>=0.2.1 ; sys_platform != 'cygwin' and extra == 'check' + - ruff>=0.8.0 ; sys_platform != 'cygwin' and extra == 'check' + - pytest-cov ; extra == 'cover' + - pytest-enabler>=2.2 ; extra == 'enabler' + - pytest-mypy ; extra == 'type' + - mypy==1.14.* ; extra == 'type' + - importlib-metadata>=7.0.2 ; python_full_version < '3.10' and extra == 'type' + - jaraco-develop>=7.21 ; sys_platform != 'cygwin' and extra == 'type' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + name: shellingham + version: 1.5.4 + sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl + name: sniffio + version: 1.3.1 + sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/a9/5c/bfd6bd0bf979426d405cc6e71eceb8701b148b16c21d2dc3c261efc61c7b/sqlparse-0.5.3-py3-none-any.whl + name: sqlparse + version: 0.5.3 + sha256: cf2196ed3418f3ba5de6af7e82c694a9fbdbfecccdfc72e281548517081f16ca + requires_dist: + - build ; extra == 'dev' + - hatch ; extra == 'dev' + - sphinx ; extra == 'doc' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/a6/a5/c0b6468d3824fe3fde30dbb5e1f687b291608f9473681bbf7dabbf5a87d7/text_unidecode-1.3-py2.py3-none-any.whl + name: text-unidecode + version: '1.3' + sha256: 1311f10e8b895935241623731c2ba64f4c455287888b18189350b67134a822e8 +- pypi: ./ + name: thrillwiki + version: 0.1.0 + sha256: a67e8e2deba3d7d0fd83e3c32228c4853a7bf070ac1aa824b7d47f4c95d1ae1f + requires_dist: + - django>=5.0 + - djangorestframework>=3.14.0 + - django-cors-headers>=4.3.1 + - django-allauth>=0.60.1 + - django-oauth-toolkit>=3.0.1 + - dj-rest-auth>=7.0.0 + - pyjwt>=2.10.1 + - psycopg2-binary>=2.9.9 + - dj-database-url>=2.3.0 + - requests>=2.32.3 + - django-webpack-loader>=3.1.1 + - python-dotenv>=1.0.1 + - pillow>=10.2.0 + - django-cleanup>=8.0.0 + - django-filter>=23.5 + - django-htmx>=1.17.2 + - whitenoise>=6.6.0 + - pycountry>=24.6.1 + - black>=24.1.0 + - flake8>=7.1.1 + - pytest>=8.3.4 + - pytest-django>=4.9.0 + - channels>=4.2.0 + - channels-redis>=4.2.1 + - daphne>=4.1.2 + - django-simple-history>=3.5.0 + - django-tailwind-cli>=2.21.1 + - playwright>=1.41.0 + - pytest-playwright>=0.4.3 + - django-pghistory>=3.5.2 + - django-htmx-autocomplete>=1.0.5 + - coverage>=7.9.1 + - poetry>=2.1.3 + - piexif>=1.1.3 + - django-environ>=0.12.0 + - factory-boy>=3.3.3 + - drf-spectacular>=0.27.0 + - django-silk>=5.0.0 + - django-debug-toolbar>=4.0.0 + - nplusone>=1.0.0 + - django-health-check>=3.17.0 + - django-redis>=5.4.0 + - sentry-sdk>=1.40.0 + - python-json-logger @ https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl + - django-cloudflare-images>=0.6.0 + - psutil>=7.0.0 + - django-extensions>=4.1 + - werkzeug>=3.1.3 + - django-widget-tweaks>=1.5.0 + - redis>=6.4.0 + - ruff>=0.12.10 + - python-decouple>=3.8 + - pyright>=1.1.404 + requires_python: '>=3.13' + editable: true +- conda: https://conda.anaconda.org/conda-forge/osx-arm64/tk-8.6.13-h892fb3f_2.conda + sha256: cb86c522576fa95c6db4c878849af0bccfd3264daf0cc40dd18e7f4a7bfced0e + md5: 7362396c170252e7b7b0c8fb37fe9c78 + depends: + - __osx >=11.0 + - libzlib >=1.3.1,<2.0a0 + license: TCL + license_family: BSD + purls: [] + size: 3125538 + timestamp: 1748388189063 +- pypi: https://files.pythonhosted.org/packages/bd/75/8539d011f6be8e29f339c42e633aae3cb73bffa95dd0f9adec09b9c58e85/tomlkit-0.13.3-py3-none-any.whl + name: tomlkit + version: 0.13.3 + sha256: c89c649d79ee40629a9fda55f8ace8c6a1b42deb912b2a8fd8d942ddadb606b0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/4a/40/d54944eeb5646fb4b1c98d4601fe5e0812dd2e7c0aa94d53fc46457effc8/trove_classifiers-2025.8.26.11-py3-none-any.whl + name: trove-classifiers + version: 2025.8.26.11 + sha256: 887fb0a402bdbecd4415a52c06e6728f8bdaa506a7143372d2b893e2c5e2d859 +- pypi: https://files.pythonhosted.org/packages/eb/66/ab7efd8941f0bc7b2bd555b0f0471bff77df4c88e0cc31120c82737fec77/twisted-25.5.0-py3-none-any.whl + name: twisted + version: 25.5.0 + sha256: 8559f654d01a54a8c3efe66d533d43f383531ebf8d81d9f9ab4769d91ca15df7 + requires_dist: + - attrs>=22.2.0 + - automat>=24.8.0 + - constantly>=15.1 + - hyperlink>=17.1.1 + - incremental>=24.7.0 + - typing-extensions>=4.2.0 + - zope-interface>=5 + - appdirs>=1.4.0 ; extra == 'all-non-platform' + - bcrypt>=3.1.3 ; extra == 'all-non-platform' + - cryptography>=3.3 ; extra == 'all-non-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'all-non-platform' + - h2>=3.2,<5.0 ; extra == 'all-non-platform' + - httpx[http2]>=0.27 ; extra == 'all-non-platform' + - hypothesis>=6.56 ; extra == 'all-non-platform' + - idna>=2.4 ; extra == 'all-non-platform' + - priority>=1.1.0,<2.0 ; extra == 'all-non-platform' + - pyhamcrest>=2 ; extra == 'all-non-platform' + - pyopenssl>=21.0.0 ; extra == 'all-non-platform' + - pyserial>=3.0 ; extra == 'all-non-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'all-non-platform' + - service-identity>=18.1.0 ; extra == 'all-non-platform' + - wsproto ; extra == 'all-non-platform' + - appdirs>=1.4.0 ; extra == 'all-non-platform' + - bcrypt>=3.1.3 ; extra == 'all-non-platform' + - cryptography>=3.3 ; extra == 'all-non-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'all-non-platform' + - h2>=3.2,<5.0 ; extra == 'all-non-platform' + - httpx[http2]>=0.27 ; extra == 'all-non-platform' + - hypothesis>=6.56 ; extra == 'all-non-platform' + - idna>=2.4 ; extra == 'all-non-platform' + - priority>=1.1.0,<2.0 ; extra == 'all-non-platform' + - pyhamcrest>=2 ; extra == 'all-non-platform' + - pyopenssl>=21.0.0 ; extra == 'all-non-platform' + - pyserial>=3.0 ; extra == 'all-non-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'all-non-platform' + - service-identity>=18.1.0 ; extra == 'all-non-platform' + - wsproto ; extra == 'all-non-platform' + - appdirs>=1.4.0 ; extra == 'conch' + - bcrypt>=3.1.3 ; extra == 'conch' + - cryptography>=3.3 ; extra == 'conch' + - coverage~=7.5 ; extra == 'dev' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'dev' + - httpx[http2]>=0.27 ; extra == 'dev' + - hypothesis>=6.56 ; extra == 'dev' + - pydoctor~=24.11.1 ; extra == 'dev' + - pyflakes~=2.2 ; extra == 'dev' + - pyhamcrest>=2 ; extra == 'dev' + - python-subunit~=1.4 ; extra == 'dev' + - sphinx-rtd-theme~=1.3 ; extra == 'dev' + - sphinx>=6,<7 ; extra == 'dev' + - towncrier~=23.6 ; extra == 'dev' + - twistedchecker~=0.7 ; extra == 'dev' + - pydoctor~=24.11.1 ; extra == 'dev-release' + - sphinx-rtd-theme~=1.3 ; extra == 'dev-release' + - sphinx>=6,<7 ; extra == 'dev-release' + - towncrier~=23.6 ; extra == 'dev-release' + - pydoctor~=24.11.1 ; extra == 'dev-release' + - sphinx-rtd-theme~=1.3 ; extra == 'dev-release' + - sphinx>=6,<7 ; extra == 'dev-release' + - towncrier~=23.6 ; extra == 'dev-release' + - appdirs>=1.4.0 ; extra == 'gtk-platform' + - bcrypt>=3.1.3 ; extra == 'gtk-platform' + - cryptography>=3.3 ; extra == 'gtk-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'gtk-platform' + - h2>=3.2,<5.0 ; extra == 'gtk-platform' + - httpx[http2]>=0.27 ; extra == 'gtk-platform' + - hypothesis>=6.56 ; extra == 'gtk-platform' + - idna>=2.4 ; extra == 'gtk-platform' + - priority>=1.1.0,<2.0 ; extra == 'gtk-platform' + - pygobject ; extra == 'gtk-platform' + - pyhamcrest>=2 ; extra == 'gtk-platform' + - pyopenssl>=21.0.0 ; extra == 'gtk-platform' + - pyserial>=3.0 ; extra == 'gtk-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'gtk-platform' + - service-identity>=18.1.0 ; extra == 'gtk-platform' + - wsproto ; extra == 'gtk-platform' + - appdirs>=1.4.0 ; extra == 'gtk-platform' + - bcrypt>=3.1.3 ; extra == 'gtk-platform' + - cryptography>=3.3 ; extra == 'gtk-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'gtk-platform' + - h2>=3.2,<5.0 ; extra == 'gtk-platform' + - httpx[http2]>=0.27 ; extra == 'gtk-platform' + - hypothesis>=6.56 ; extra == 'gtk-platform' + - idna>=2.4 ; extra == 'gtk-platform' + - priority>=1.1.0,<2.0 ; extra == 'gtk-platform' + - pygobject ; extra == 'gtk-platform' + - pyhamcrest>=2 ; extra == 'gtk-platform' + - pyopenssl>=21.0.0 ; extra == 'gtk-platform' + - pyserial>=3.0 ; extra == 'gtk-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'gtk-platform' + - service-identity>=18.1.0 ; extra == 'gtk-platform' + - wsproto ; extra == 'gtk-platform' + - h2>=3.2,<5.0 ; extra == 'http2' + - priority>=1.1.0,<2.0 ; extra == 'http2' + - appdirs>=1.4.0 ; extra == 'macos-platform' + - bcrypt>=3.1.3 ; extra == 'macos-platform' + - cryptography>=3.3 ; extra == 'macos-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'macos-platform' + - h2>=3.2,<5.0 ; extra == 'macos-platform' + - httpx[http2]>=0.27 ; extra == 'macos-platform' + - hypothesis>=6.56 ; extra == 'macos-platform' + - idna>=2.4 ; extra == 'macos-platform' + - priority>=1.1.0,<2.0 ; extra == 'macos-platform' + - pyhamcrest>=2 ; extra == 'macos-platform' + - pyobjc-core ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-core<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyobjc-framework-cfnetwork ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-framework-cfnetwork<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyobjc-framework-cocoa ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-framework-cocoa<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyopenssl>=21.0.0 ; extra == 'macos-platform' + - pyserial>=3.0 ; extra == 'macos-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'macos-platform' + - service-identity>=18.1.0 ; extra == 'macos-platform' + - wsproto ; extra == 'macos-platform' + - appdirs>=1.4.0 ; extra == 'macos-platform' + - bcrypt>=3.1.3 ; extra == 'macos-platform' + - cryptography>=3.3 ; extra == 'macos-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'macos-platform' + - h2>=3.2,<5.0 ; extra == 'macos-platform' + - httpx[http2]>=0.27 ; extra == 'macos-platform' + - hypothesis>=6.56 ; extra == 'macos-platform' + - idna>=2.4 ; extra == 'macos-platform' + - priority>=1.1.0,<2.0 ; extra == 'macos-platform' + - pyhamcrest>=2 ; extra == 'macos-platform' + - pyobjc-core ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-core<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyobjc-framework-cfnetwork ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-framework-cfnetwork<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyobjc-framework-cocoa ; python_full_version >= '3.9' and extra == 'macos-platform' + - pyobjc-framework-cocoa<11 ; python_full_version < '3.9' and extra == 'macos-platform' + - pyopenssl>=21.0.0 ; extra == 'macos-platform' + - pyserial>=3.0 ; extra == 'macos-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'macos-platform' + - service-identity>=18.1.0 ; extra == 'macos-platform' + - wsproto ; extra == 'macos-platform' + - appdirs>=1.4.0 ; extra == 'mypy' + - bcrypt>=3.1.3 ; extra == 'mypy' + - coverage~=7.5 ; extra == 'mypy' + - cryptography>=3.3 ; extra == 'mypy' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'mypy' + - h2>=3.2,<5.0 ; extra == 'mypy' + - httpx[http2]>=0.27 ; extra == 'mypy' + - hypothesis>=6.56 ; extra == 'mypy' + - idna>=2.4 ; extra == 'mypy' + - mypy-zope==1.0.6 ; extra == 'mypy' + - mypy==1.10.1 ; extra == 'mypy' + - priority>=1.1.0,<2.0 ; extra == 'mypy' + - pydoctor~=24.11.1 ; extra == 'mypy' + - pyflakes~=2.2 ; extra == 'mypy' + - pyhamcrest>=2 ; extra == 'mypy' + - pyopenssl>=21.0.0 ; extra == 'mypy' + - pyserial>=3.0 ; extra == 'mypy' + - python-subunit~=1.4 ; extra == 'mypy' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'mypy' + - service-identity>=18.1.0 ; extra == 'mypy' + - sphinx-rtd-theme~=1.3 ; extra == 'mypy' + - sphinx>=6,<7 ; extra == 'mypy' + - towncrier~=23.6 ; extra == 'mypy' + - twistedchecker~=0.7 ; extra == 'mypy' + - types-pyopenssl ; extra == 'mypy' + - types-setuptools ; extra == 'mypy' + - wsproto ; extra == 'mypy' + - appdirs>=1.4.0 ; extra == 'osx-platform' + - bcrypt>=3.1.3 ; extra == 'osx-platform' + - cryptography>=3.3 ; extra == 'osx-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'osx-platform' + - h2>=3.2,<5.0 ; extra == 'osx-platform' + - httpx[http2]>=0.27 ; extra == 'osx-platform' + - hypothesis>=6.56 ; extra == 'osx-platform' + - idna>=2.4 ; extra == 'osx-platform' + - priority>=1.1.0,<2.0 ; extra == 'osx-platform' + - pyhamcrest>=2 ; extra == 'osx-platform' + - pyobjc-core ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-core<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyobjc-framework-cfnetwork ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-framework-cfnetwork<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyobjc-framework-cocoa ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-framework-cocoa<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyopenssl>=21.0.0 ; extra == 'osx-platform' + - pyserial>=3.0 ; extra == 'osx-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'osx-platform' + - service-identity>=18.1.0 ; extra == 'osx-platform' + - wsproto ; extra == 'osx-platform' + - appdirs>=1.4.0 ; extra == 'osx-platform' + - bcrypt>=3.1.3 ; extra == 'osx-platform' + - cryptography>=3.3 ; extra == 'osx-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'osx-platform' + - h2>=3.2,<5.0 ; extra == 'osx-platform' + - httpx[http2]>=0.27 ; extra == 'osx-platform' + - hypothesis>=6.56 ; extra == 'osx-platform' + - idna>=2.4 ; extra == 'osx-platform' + - priority>=1.1.0,<2.0 ; extra == 'osx-platform' + - pyhamcrest>=2 ; extra == 'osx-platform' + - pyobjc-core ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-core<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyobjc-framework-cfnetwork ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-framework-cfnetwork<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyobjc-framework-cocoa ; python_full_version >= '3.9' and extra == 'osx-platform' + - pyobjc-framework-cocoa<11 ; python_full_version < '3.9' and extra == 'osx-platform' + - pyopenssl>=21.0.0 ; extra == 'osx-platform' + - pyserial>=3.0 ; extra == 'osx-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'osx-platform' + - service-identity>=18.1.0 ; extra == 'osx-platform' + - wsproto ; extra == 'osx-platform' + - pyserial>=3.0 ; extra == 'serial' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'serial' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'test' + - httpx[http2]>=0.27 ; extra == 'test' + - hypothesis>=6.56 ; extra == 'test' + - pyhamcrest>=2 ; extra == 'test' + - idna>=2.4 ; extra == 'tls' + - pyopenssl>=21.0.0 ; extra == 'tls' + - service-identity>=18.1.0 ; extra == 'tls' + - wsproto ; extra == 'websocket' + - appdirs>=1.4.0 ; extra == 'windows-platform' + - bcrypt>=3.1.3 ; extra == 'windows-platform' + - cryptography>=3.3 ; extra == 'windows-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'windows-platform' + - h2>=3.2,<5.0 ; extra == 'windows-platform' + - httpx[http2]>=0.27 ; extra == 'windows-platform' + - hypothesis>=6.56 ; extra == 'windows-platform' + - idna>=2.4 ; extra == 'windows-platform' + - priority>=1.1.0,<2.0 ; extra == 'windows-platform' + - pyhamcrest>=2 ; extra == 'windows-platform' + - pyopenssl>=21.0.0 ; extra == 'windows-platform' + - pyserial>=3.0 ; extra == 'windows-platform' + - pywin32!=226 ; extra == 'windows-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'windows-platform' + - service-identity>=18.1.0 ; extra == 'windows-platform' + - twisted-iocpsupport>=1.0.2 ; extra == 'windows-platform' + - wsproto ; extra == 'windows-platform' + - appdirs>=1.4.0 ; extra == 'windows-platform' + - bcrypt>=3.1.3 ; extra == 'windows-platform' + - cryptography>=3.3 ; extra == 'windows-platform' + - cython-test-exception-raiser>=1.0.2,<2 ; extra == 'windows-platform' + - h2>=3.2,<5.0 ; extra == 'windows-platform' + - httpx[http2]>=0.27 ; extra == 'windows-platform' + - hypothesis>=6.56 ; extra == 'windows-platform' + - idna>=2.4 ; extra == 'windows-platform' + - priority>=1.1.0,<2.0 ; extra == 'windows-platform' + - pyhamcrest>=2 ; extra == 'windows-platform' + - pyopenssl>=21.0.0 ; extra == 'windows-platform' + - pyserial>=3.0 ; extra == 'windows-platform' + - pywin32!=226 ; extra == 'windows-platform' + - pywin32!=226 ; sys_platform == 'win32' and extra == 'windows-platform' + - service-identity>=18.1.0 ; extra == 'windows-platform' + - twisted-iocpsupport>=1.0.2 ; extra == 'windows-platform' + - wsproto ; extra == 'windows-platform' + requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/52/56/aff5af8caa210321d0c206eb19897a4e0b29b4e24c4e24226325950efe0b/txaio-25.6.1-py2.py3-none-any.whl + name: txaio + version: 25.6.1 + sha256: f461b917a14d46077fb1668d0bea4998695d93c9c569cd05fd7f193abdd22414 + requires_dist: + - zope-interface>=5.2.0 ; extra == 'twisted' + - twisted>=22.10.0 ; extra == 'twisted' + - wheel ; extra == 'dev' + - flake8>=7.3.0 ; extra == 'dev' + - pytest>=2.6.4 ; extra == 'dev' + - pytest-cov>=1.8.1 ; extra == 'dev' + - black>=25.1.0 ; extra == 'dev' + - pyenchant>=1.6.6 ; extra == 'dev' + - sphinx>=7.2.6 ; extra == 'dev' + - sphinxcontrib-spelling>=2.1.2 ; extra == 'dev' + - sphinxcontrib-images>=0.9.4 ; extra == 'dev' + - sphinxcontrib-bibtex>=2.6.1 ; extra == 'dev' + - sphinx-autoapi>=3.0.0 ; extra == 'dev' + - sphinx-rtd-theme>=2.0.0 ; extra == 'dev' + - tox>=2.1.1 ; extra == 'dev' + - twine>=1.6.5 ; extra == 'dev' + - tox-gh-actions>=2.2.0 ; extra == 'dev' + - zope-interface>=5.2.0 ; extra == 'all' + - twisted>=22.10.0 ; extra == 'all' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/06/08/fd4e6de24f677703c7295e836dc168041793d5a943a32e8840dd852da02b/typer_slim-0.16.1-py3-none-any.whl + name: typer-slim + version: 0.16.1 + sha256: ccb608f2d802ce6dc0521b11adef61d88562065a036c81ac6aa5ef71ed0f614d + requires_dist: + - click>=8.0.0 + - typing-extensions>=3.7.4.3 + - shellingham>=1.3.0 ; extra == 'standard' + - rich>=10.11.0 ; extra == 'standard' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/32/8e/8f0aca667c97c0d76024b37cffa39e76e2ce39ca54a38f285a64e6ae33ba/types_pyyaml-6.0.12.20250822-py3-none-any.whl + name: types-pyyaml + version: 6.0.12.20250822 + sha256: 1fe1a5e146aa315483592d292b72a172b65b946a6d98aa6ddd8e4aa838ab7098 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + name: typing-extensions + version: 4.15.0 + sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5c/23/c7abc0ca0a1526a0774eca151daeb8de62ec457e77262b66b359c3c7679e/tzdata-2025.2-py2.py3-none-any.whl + name: tzdata + version: '2025.2' + sha256: 1a403fada01ff9221ca8044d701868fa132215d84beb92242d9acd2147f667a8 + requires_python: '>=2' +- conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025b-h78e105d_0.conda + sha256: 5aaa366385d716557e365f0a4e9c3fca43ba196872abbbe3d56bb610d131e192 + md5: 4222072737ccff51314b5ece9c7d6f5a + license: LicenseRef-Public-Domain + purls: [] + size: 122968 + timestamp: 1742727099393 +- pypi: https://files.pythonhosted.org/packages/a9/99/3ae339466c9183ea5b8ae87b34c0b897eda475d2aec2307cae60e5cd4f29/uritemplate-4.2.0-py3-none-any.whl + name: uritemplate + version: 4.2.0 + sha256: 962201ba1c4edcab02e60f9a0d3821e82dfc5d2d6662a21abd533879bdb8a686 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl + name: urllib3 + version: 2.5.0 + sha256: e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc + requires_dist: + - brotli>=1.0.9 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=0.8.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - zstandard>=0.18.0 ; extra == 'zstd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/5c/c6/f8f28009920a736d0df434b52e9feebfb4d702ba942f15338cb4a83eafc1/virtualenv-20.32.0-py3-none-any.whl + name: virtualenv + version: 20.32.0 + sha256: 2c310aecb62e5aa1b06103ed7c2977b81e042695de2697d01017ff0f1034af56 + requires_dist: + - distlib>=0.3.7,<1 + - filelock>=3.12.2,<4 + - importlib-metadata>=6.6 ; python_full_version < '3.8' + - platformdirs>=3.9.1,<5 + - furo>=2023.7.26 ; extra == 'docs' + - proselint>=0.13 ; extra == 'docs' + - sphinx>=7.1.2,!=7.3 ; extra == 'docs' + - sphinx-argparse>=0.4 ; extra == 'docs' + - sphinxcontrib-towncrier>=0.2.1a0 ; extra == 'docs' + - towncrier>=23.6 ; extra == 'docs' + - covdefaults>=2.3 ; extra == 'test' + - coverage-enable-subprocess>=1 ; extra == 'test' + - coverage>=7.2.7 ; extra == 'test' + - flaky>=3.7 ; extra == 'test' + - packaging>=23.1 ; extra == 'test' + - pytest-env>=0.8.2 ; extra == 'test' + - pytest-freezer>=0.4.8 ; (python_full_version >= '3.13' and platform_python_implementation == 'CPython' and sys_platform == 'win32' and extra == 'test') or (platform_python_implementation == 'GraalVM' and extra == 'test') or (platform_python_implementation == 'PyPy' and extra == 'test') + - pytest-mock>=3.11.1 ; extra == 'test' + - pytest-randomly>=3.12 ; extra == 'test' + - pytest-timeout>=2.1 ; extra == 'test' + - pytest>=7.4 ; extra == 'test' + - setuptools>=68 ; extra == 'test' + - time-machine>=2.10 ; platform_python_implementation == 'CPython' and extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/52/24/ab44c871b0f07f491e5d2ad12c9bd7358e527510618cb1b803a88e986db1/werkzeug-3.1.3-py3-none-any.whl + name: werkzeug + version: 3.1.3 + sha256: 54b78bf3716d19a65be4fceccc0d1d7b89e608834989dfae50ea87564639213e + requires_dist: + - markupsafe>=2.1.1 + - watchdog>=2.3 ; extra == 'watchdog' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/64/b2/2ce9263149fbde9701d352bda24ea1362c154e196d2fda2201f18fc585d7/whitenoise-6.9.0-py3-none-any.whl + name: whitenoise + version: 6.9.0 + sha256: c8a489049b7ee9889617bb4c274a153f3d979e8f51d2efd0f5b403caf41c57df + requires_dist: + - brotli ; extra == 'brotli' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/3d/40/93f2dd033544028e7b9512b8b9fb6872ec74a804fbb686e62b83fdf72e21/xattr-1.2.0-cp313-cp313-macosx_11_0_arm64.whl + name: xattr + version: 1.2.0 + sha256: 320ef856bb817f4c40213b6de956dc440d0f23cdc62da3ea02239eb5147093f8 + requires_dist: + - cffi>=1.16.0 + - pytest ; extra == 'test' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/49/65/78e7cebca6be07c8fc4032bfbb123e500d60efdf7b86727bb8a071992108/zope.interface-7.2-cp313-cp313-macosx_11_0_arm64.whl + name: zope-interface + version: '7.2' + sha256: 15398c000c094b8855d7d74f4fdc9e73aa02d4d0d5c775acdef98cdb1119768d + requires_dist: + - setuptools + - sphinx ; extra == 'docs' + - repoze-sphinx-autointerface ; extra == 'docs' + - furo ; extra == 'docs' + - coverage[toml] ; extra == 'test' + - zope-event ; extra == 'test' + - zope-testing ; extra == 'test' + - coverage[toml] ; extra == 'testing' + - zope-event ; extra == 'testing' + - zope-testing ; extra == 'testing' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/99/56/fc04395d6f5eabd2fe6d86c0800d198969f3038385cb918bfbe94f2b0c62/zstandard-0.24.0-cp313-cp313-macosx_11_0_arm64.whl + name: zstandard + version: 0.24.0 + sha256: 498f88f5109666c19531f0243a90d2fdd2252839cd6c8cc6e9213a3446670fa8 + requires_dist: + - cffi>=1.17 ; python_full_version >= '3.13' and platform_python_implementation != 'PyPy' and extra == 'cffi' + requires_python: '>=3.9' diff --git a/backend/pyproject.toml b/backend/pyproject.toml index 03642d9d..267fb2b3 100644 --- a/backend/pyproject.toml +++ b/backend/pyproject.toml @@ -77,3 +77,16 @@ stubPath = "stubs" [tool.uv.sources] python-json-logger = { url = "https://github.com/nhairs/python-json-logger/releases/download/v3.0.0/python_json_logger-3.0.0-py3-none-any.whl" } + +[tool.pixi.workspace] +channels = ["conda-forge"] +platforms = ["osx-arm64"] + +[tool.pixi.pypi-dependencies] +thrillwiki = { path = ".", editable = true } + +[tool.pixi.environments] +default = { solve-group = "default" } +dev = { features = ["dev"], solve-group = "default" } + +[tool.pixi.tasks]