django-cfg 1.3.1__tar.gz → 1.3.3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {django_cfg-1.3.1 → django_cfg-1.3.3}/PKG-INFO +1 -1
- {django_cfg-1.3.1 → django_cfg-1.3.3}/pyproject.toml +1 -1
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/__init__.py +1 -1
- django_cfg-1.3.3/src/django_cfg/apps/payments/management/commands/cleanup_expired_data.py +419 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/management/commands/currency_stats.py +376 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/management/commands/process_pending_payments.py +357 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/management/commands/test_providers.py +434 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/balance.py +5 -2
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/api_key_managers.py +2 -2
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/balance_managers.py +3 -3
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/subscription_managers.py +3 -3
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/__init__.py +143 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/api_key_cache.py +37 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/interfaces.py +32 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/keys.py +49 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/rate_limit_cache.py +47 -0
- django_cfg-1.3.3/src/django_cfg/apps/payments/services/cache_service/simple_cache.py +101 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/payment_service.py +49 -22
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/signals/api_key_signals.py +2 -2
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/signals/balance_signals.py +1 -1
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/utils/smart_defaults.py +10 -4
- django_cfg-1.3.1/src/django_cfg/apps/payments/services/cache/cache_service.py +0 -235
- {django_cfg-1.3.1 → django_cfg-1.3.3}/.gitignore +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/CHANGELOG.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/CONTRIBUTING.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/LICENSE +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/MANIFEST.in +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/requirements-dev.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/requirements-test.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/requirements.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/__models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/activity.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/group.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/inlines.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/otp.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/registration_source.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/resources.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/twilio_response.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/admin/user.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/management/commands/test_otp.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/managers/user_manager.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0003_twilioresponse.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0005_twilioresponse.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0006_remove_twilioresponse_otp_secret_and_more.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/0007_twilioresponse.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/activity.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/auth.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/choices.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/integrations.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/registration.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/models/user.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/serializers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/serializers/otp.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/serializers/profile.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/serializers/webhook.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/services/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/services/activity_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/services/otp_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/base_email.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/base_email.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/otp_email.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/otp_email.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/welcome_email.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/templates/emails/welcome_email.txt +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/utils/auth_email_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/utils/notifications.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/views/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/views/otp.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/views/profile.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/accounts/views/webhook.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/admin/execution_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/admin/registry_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/admin/toolsets_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/agent.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/dependencies.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/core/orchestrator.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/integration/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/integration/middleware.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/integration/registry.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/integration/signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/management/commands/create_agent.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/management/commands/orchestrator_status.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/managers/execution.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/managers/registry.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/managers/toolsets.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/models/execution.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/models/registry.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/models/toolsets.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/patterns/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/patterns/content_agents.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/toolsets/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/toolsets/cache_toolset.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/toolsets/django_toolset.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/toolsets/file_toolset.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/toolsets/orm_toolset.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/agents/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/commands/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/commands/views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/health/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/health/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/api/health/views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/admin/archive_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/admin/chat_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/admin/document_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/admin/external_data_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/config/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/config/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/config/constance_fields.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/config/constance_settings.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/config/settings.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/management/commands/knowbase_stats.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/management/commands/setup_knowbase.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/archive.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/chat.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/document.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/managers/external_data.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/mixins/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/mixins/config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/mixins/creator.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/mixins/external_data_mixin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/mixins/service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/archive.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/chat.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/document.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/models/external_data.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/archive_serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/chat_serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/document_serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/external_data_serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/serializers/public_serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/archive_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/chunking_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/extraction_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/archive/vectorization_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/chat_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/document_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/async_processor.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/batch_processor.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/batch_result.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/processors.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/embedding/utils.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/prompt_builder.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/services/search_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/signals/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/signals/archive_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/signals/chat_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/signals/document_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/signals/external_data_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/tasks/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/tasks/archive_tasks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/tasks/document_processing.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/tasks/external_data_tasks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/tasks/maintenance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/utils/chunk_settings.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/utils/text_processing.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/utils/validation.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/archive_views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/chat_views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/document_views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/knowbase/views/public_views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/admin/leads_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/admin/resources.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/tests.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/leads/views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/admin/api_key_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/admin/log_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/admin/scheduled_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/admin/site_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/management/commands/maintenance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/managers/maintenance_log_manager.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/migrations/0003_cloudflaresite_include_subdomains_and_more.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/models/cloudflare_api_key.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/models/cloudflare_site.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/models/maintenance_log.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/models/scheduled_maintenance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/services/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/services/bulk_operations_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/services/maintenance_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/services/site_sync_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/maintenance/utils/retry_utils.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin/filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin/resources.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/admin_filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/managers/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/services/email_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/campaigns.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/emails.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/newsletters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/subscriptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/newsletter/views/tracking.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/api_keys_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/balance_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/currencies_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/payments_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin/subscriptions_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/base.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/components/dev_tool_card.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/components/loading_spinner.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/components/notification.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/components/provider_card.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/components/status_card.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/currency_converter.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/payment_dashboard.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/payment_list.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/payment_status.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/templates/payments/webhook_dashboard.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/views/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/views/payment_views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/admin_interface/views/webhook_dashboard.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/constance/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/constance/config_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/constance/fields.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/constance/settings.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/django_cfg_integration.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/config/helpers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/management/commands/manage_currencies.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/management/commands/manage_providers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/middleware/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/middleware/api_access.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/middleware/rate_limiting.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/middleware/usage_tracking.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/api_keys.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/currencies.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/currency_managers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/managers/payment_managers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/payments.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/subscriptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/models/tariffs.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/cache/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/balance_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/currency_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/subscription_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/core/webhook_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/integrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/integrations/ngrok_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/integrations/providers_config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/providers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/providers/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/providers/nowpayments.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/providers/registry.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/types/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/types/data.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/types/requests.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/types/responses.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/services/types/webhooks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/signals/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/signals/payment_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/signals/subscription_signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/static/payments/css/components.css +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/static/payments/css/dashboard.css +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/static/payments/js/components.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/static/payments/js/utils.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/templatetags/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/templatetags/payment_tags.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/urls_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/api_keys.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/balances.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/currencies.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/payments.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/subscriptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/api/webhooks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/api_keys.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/balances.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/currencies.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/payments.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/subscriptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/payments/views/serializers/webhooks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin/filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin/resources.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin/support_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/admin_filters.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/managers/message_manager.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/managers/ticket_manager.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/migrations/0001_initial.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/migrations/0002_alter_message_ticket.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/migrations/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/signals.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/templates/support/chat/access_denied.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/templates/support/chat/ticket_chat.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/utils/support_email_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/views/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/views/admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/views/api.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/support/views/chat.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/serializers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/api.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/modals.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/static/tasks/js/theme.js +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/base.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/status_cards.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/urls_admin.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/tasks/views.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps/urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/apps.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/commands/create_project.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/commands/info.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/main.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/cli/utils.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/environment.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/generation.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/commands_collector.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/display/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/display/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/display/ngrok.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/display/startup.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/url_integration.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/integration/version_checker.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/core/validation.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/auto_generate.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/check_settings.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/clear_constance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/create_token.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/generate.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/list_urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/migrate_all.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/migrator.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/rundramatiq.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/runserver_ngrok.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/script.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/show_config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/show_urls.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/superuser.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/task_clear.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/task_status.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/test_email.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/test_telegram.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/test_twilio.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/tree.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/management/commands/validate_config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/middleware/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/middleware/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/middleware/pagination.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/middleware/public_endpoints.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/middleware/user_activity.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/api.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/cache.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/cfg.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/constance.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/cors.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/database.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/drf.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/email.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/environment.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/jwt.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/limits.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/logging.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/ngrok.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/payments.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/revolution.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/security.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/services.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/models/tasks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/clients/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/clients/coinpaprika_client.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/clients/yahoo_client.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/core/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/core/converter.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/core/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/core/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/database/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/database/database_loader.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_currency/utils/cache.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_email.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_health.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_import_export/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_import_export/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/example.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/cache.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/client.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/costs.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/extractor.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/models_cache.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/llm/tokenizer.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/translator/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/translator/cache.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_llm/translator/translator.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_logger.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_ngrok.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_tasks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_telegram.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/sendgrid_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/simple_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/templates/guide.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/templates/sendgrid_test_data.json +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_twilio/twilio_service.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/actions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/base.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/charts.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/commands.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/main.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/revolution.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/statistics.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/system.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/callbacks/users.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/dashboard.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/icons/README.md +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/icons/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/icons/constants.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/icons/generate_icons.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/config.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/dashboard.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/dropdown.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/navigation.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models/tabs.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/models.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/system_monitor.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/tailwind.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/django_unfold/utils.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/dramatiq_setup.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/modules/logger.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/core.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/exceptions.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/modules.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/services.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/registry/third_party.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/routing/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/routing/callbacks.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/routing/routers.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/template_archive/django_sample.zip +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/action_grid.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/card.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/data_table.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/metric_card.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/modal.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/progress_bar.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/section_header.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/stat_item.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/stats_grid.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/status_badge.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/components/user_avatar.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/change_list.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/includes/default_value.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/includes/fieldset_header.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/includes/results_list.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/includes/setting_row.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/constance/includes/table_headers.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/import_export/change_list_export.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/import_export/change_list_import.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/import_export/change_list_import_export.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/index.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/charts_section.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/django_commands.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/quick_actions.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/recent_activity.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/stats_cards.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/system_health.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/system_metrics.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/components/user_permissions.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/admin/snippets/zones/zones_table.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/emails/base_email.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templates/rest_framework/api.html +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templatetags/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/templatetags/django_cfg.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/utils/__init__.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/utils/path_resolution.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/utils/toolkit.py +0 -0
- {django_cfg-1.3.1 → django_cfg-1.3.3}/src/django_cfg/utils/version_check.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-cfg
|
3
|
-
Version: 1.3.
|
3
|
+
Version: 1.3.3
|
4
4
|
Summary: 🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one.
|
5
5
|
Project-URL: Homepage, https://djangocfg.com
|
6
6
|
Project-URL: Documentation, https://docs.djangocfg.com
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
4
4
|
|
5
5
|
[project]
|
6
6
|
name = "django-cfg"
|
7
|
-
version = "1.3.
|
7
|
+
version = "1.3.3"
|
8
8
|
description = "🚀 Next-gen Django configuration: type-safety, AI features, blazing-fast setup, and automated best practices — all in one."
|
9
9
|
readme = "README.md"
|
10
10
|
license = {text = "MIT"}
|
@@ -0,0 +1,419 @@
|
|
1
|
+
"""
|
2
|
+
Cleanup Expired Data Management Command for Universal Payment System v2.0.
|
3
|
+
|
4
|
+
Clean up expired payments, sessions, and other temporary data.
|
5
|
+
"""
|
6
|
+
|
7
|
+
from datetime import timedelta
|
8
|
+
from typing import List, Dict, Any, Optional
|
9
|
+
|
10
|
+
from django.core.management.base import BaseCommand, CommandError
|
11
|
+
from django.utils import timezone
|
12
|
+
from django.db import transaction
|
13
|
+
from django.db.models import Q, Count
|
14
|
+
from django.core.cache import cache
|
15
|
+
|
16
|
+
from django_cfg.modules.django_logger import get_logger
|
17
|
+
from django_cfg.apps.payments.models import UniversalPayment, APIKey, Transaction
|
18
|
+
from django_cfg.apps.payments.services.cache.cache_service import get_cache_service
|
19
|
+
|
20
|
+
logger = get_logger("cleanup_expired_data")
|
21
|
+
|
22
|
+
|
23
|
+
class Command(BaseCommand):
|
24
|
+
"""
|
25
|
+
Clean up expired data from the payment system.
|
26
|
+
|
27
|
+
Features:
|
28
|
+
- Remove expired payments
|
29
|
+
- Clean up expired API keys
|
30
|
+
- Remove old transaction logs
|
31
|
+
- Clear stale cache entries
|
32
|
+
- Comprehensive logging and statistics
|
33
|
+
"""
|
34
|
+
|
35
|
+
help = 'Clean up expired data from the payment system'
|
36
|
+
|
37
|
+
def add_arguments(self, parser):
|
38
|
+
"""Add command line arguments."""
|
39
|
+
parser.add_argument(
|
40
|
+
'--payments-age-days',
|
41
|
+
type=int,
|
42
|
+
default=30,
|
43
|
+
help='Remove failed/expired payments older than N days (default: 30)'
|
44
|
+
)
|
45
|
+
|
46
|
+
parser.add_argument(
|
47
|
+
'--transactions-age-days',
|
48
|
+
type=int,
|
49
|
+
default=90,
|
50
|
+
help='Remove old transaction logs older than N days (default: 90)'
|
51
|
+
)
|
52
|
+
|
53
|
+
parser.add_argument(
|
54
|
+
'--api-keys',
|
55
|
+
action='store_true',
|
56
|
+
help='Clean up expired API keys'
|
57
|
+
)
|
58
|
+
|
59
|
+
parser.add_argument(
|
60
|
+
'--cache',
|
61
|
+
action='store_true',
|
62
|
+
help='Clear stale cache entries'
|
63
|
+
)
|
64
|
+
|
65
|
+
parser.add_argument(
|
66
|
+
'--all',
|
67
|
+
action='store_true',
|
68
|
+
help='Clean up all types of expired data'
|
69
|
+
)
|
70
|
+
|
71
|
+
parser.add_argument(
|
72
|
+
'--dry-run',
|
73
|
+
action='store_true',
|
74
|
+
help='Show what would be cleaned without making changes'
|
75
|
+
)
|
76
|
+
|
77
|
+
parser.add_argument(
|
78
|
+
'--batch-size',
|
79
|
+
type=int,
|
80
|
+
default=1000,
|
81
|
+
help='Number of records to process in each batch (default: 1000)'
|
82
|
+
)
|
83
|
+
|
84
|
+
parser.add_argument(
|
85
|
+
'--verbose',
|
86
|
+
action='store_true',
|
87
|
+
help='Show detailed cleanup information'
|
88
|
+
)
|
89
|
+
|
90
|
+
def handle(self, *args, **options):
|
91
|
+
"""Execute the command."""
|
92
|
+
try:
|
93
|
+
self.options = options
|
94
|
+
self.dry_run = options['dry_run']
|
95
|
+
self.verbose = options['verbose']
|
96
|
+
|
97
|
+
self.show_header()
|
98
|
+
|
99
|
+
# Initialize statistics
|
100
|
+
self.stats = {
|
101
|
+
'payments_removed': 0,
|
102
|
+
'transactions_removed': 0,
|
103
|
+
'api_keys_removed': 0,
|
104
|
+
'cache_entries_cleared': 0,
|
105
|
+
'errors': 0
|
106
|
+
}
|
107
|
+
|
108
|
+
# Determine what to clean
|
109
|
+
clean_all = options['all']
|
110
|
+
|
111
|
+
if clean_all or not any([options['api_keys'], options['cache']]):
|
112
|
+
# Default: clean payments and transactions
|
113
|
+
self.cleanup_expired_payments()
|
114
|
+
self.cleanup_old_transactions()
|
115
|
+
|
116
|
+
if clean_all or options['api_keys']:
|
117
|
+
self.cleanup_expired_api_keys()
|
118
|
+
|
119
|
+
if clean_all or options['cache']:
|
120
|
+
self.cleanup_stale_cache()
|
121
|
+
|
122
|
+
self.show_summary()
|
123
|
+
|
124
|
+
except Exception as e:
|
125
|
+
logger.error(f"Cleanup expired data command failed: {e}")
|
126
|
+
raise CommandError(f"Failed to cleanup expired data: {e}")
|
127
|
+
|
128
|
+
def show_header(self):
|
129
|
+
"""Display command header."""
|
130
|
+
mode = "DRY RUN" if self.dry_run else "LIVE MODE"
|
131
|
+
self.stdout.write(
|
132
|
+
self.style.SUCCESS("=" * 60)
|
133
|
+
)
|
134
|
+
self.stdout.write(
|
135
|
+
self.style.SUCCESS(f"🧹 CLEANUP EXPIRED DATA - {mode}")
|
136
|
+
)
|
137
|
+
self.stdout.write(
|
138
|
+
self.style.SUCCESS("=" * 60)
|
139
|
+
)
|
140
|
+
self.stdout.write(f"Started: {timezone.now().strftime('%Y-%m-%d %H:%M:%S UTC')}")
|
141
|
+
self.stdout.write("")
|
142
|
+
|
143
|
+
def cleanup_expired_payments(self):
|
144
|
+
"""Clean up expired and failed payments."""
|
145
|
+
self.stdout.write(self.style.SUCCESS("🗑️ CLEANING UP EXPIRED PAYMENTS"))
|
146
|
+
self.stdout.write("-" * 40)
|
147
|
+
|
148
|
+
# Calculate cutoff date
|
149
|
+
cutoff_date = timezone.now() - timedelta(days=self.options['payments_age_days'])
|
150
|
+
|
151
|
+
# Find payments to remove
|
152
|
+
expired_payments = UniversalPayment.objects.filter(
|
153
|
+
Q(status__in=['failed', 'expired', 'cancelled']) &
|
154
|
+
Q(created_at__lt=cutoff_date)
|
155
|
+
)
|
156
|
+
|
157
|
+
total_count = expired_payments.count()
|
158
|
+
self.stdout.write(f"Found {total_count} expired payments to remove")
|
159
|
+
|
160
|
+
if total_count == 0:
|
161
|
+
self.stdout.write(self.style.WARNING("No expired payments to clean up"))
|
162
|
+
return
|
163
|
+
|
164
|
+
if self.dry_run:
|
165
|
+
self.stdout.write(f"[DRY RUN] Would remove {total_count} expired payments")
|
166
|
+
self.stats['payments_removed'] = total_count
|
167
|
+
return
|
168
|
+
|
169
|
+
# Remove in batches
|
170
|
+
batch_size = self.options['batch_size']
|
171
|
+
removed_count = 0
|
172
|
+
|
173
|
+
try:
|
174
|
+
while True:
|
175
|
+
# Get batch of payments to delete
|
176
|
+
batch_ids = list(
|
177
|
+
expired_payments.values_list('id', flat=True)[:batch_size]
|
178
|
+
)
|
179
|
+
|
180
|
+
if not batch_ids:
|
181
|
+
break
|
182
|
+
|
183
|
+
with transaction.atomic():
|
184
|
+
# Delete the batch
|
185
|
+
deleted_count = UniversalPayment.objects.filter(
|
186
|
+
id__in=batch_ids
|
187
|
+
).delete()[0]
|
188
|
+
|
189
|
+
removed_count += deleted_count
|
190
|
+
|
191
|
+
if self.verbose:
|
192
|
+
self.stdout.write(f" Removed batch: {deleted_count} payments")
|
193
|
+
|
194
|
+
# Update progress
|
195
|
+
progress = (removed_count / total_count) * 100
|
196
|
+
self.stdout.write(f"Progress: {removed_count}/{total_count} ({progress:.1f}%)")
|
197
|
+
|
198
|
+
self.stats['payments_removed'] = removed_count
|
199
|
+
logger.info(f"Removed {removed_count} expired payments")
|
200
|
+
|
201
|
+
except Exception as e:
|
202
|
+
logger.error(f"Error cleaning up payments: {e}")
|
203
|
+
self.stats['errors'] += 1
|
204
|
+
self.stdout.write(self.style.ERROR(f"Error: {e}"))
|
205
|
+
|
206
|
+
self.stdout.write("")
|
207
|
+
|
208
|
+
def cleanup_old_transactions(self):
|
209
|
+
"""Clean up old transaction logs."""
|
210
|
+
self.stdout.write(self.style.SUCCESS("📋 CLEANING UP OLD TRANSACTIONS"))
|
211
|
+
self.stdout.write("-" * 40)
|
212
|
+
|
213
|
+
# Calculate cutoff date
|
214
|
+
cutoff_date = timezone.now() - timedelta(days=self.options['transactions_age_days'])
|
215
|
+
|
216
|
+
# Find transactions to remove (keep important ones)
|
217
|
+
old_transactions = Transaction.objects.filter(
|
218
|
+
created_at__lt=cutoff_date
|
219
|
+
).exclude(
|
220
|
+
# Keep transactions for completed payments
|
221
|
+
payment__status='completed'
|
222
|
+
)
|
223
|
+
|
224
|
+
total_count = old_transactions.count()
|
225
|
+
self.stdout.write(f"Found {total_count} old transactions to remove")
|
226
|
+
|
227
|
+
if total_count == 0:
|
228
|
+
self.stdout.write(self.style.WARNING("No old transactions to clean up"))
|
229
|
+
return
|
230
|
+
|
231
|
+
if self.dry_run:
|
232
|
+
self.stdout.write(f"[DRY RUN] Would remove {total_count} old transactions")
|
233
|
+
self.stats['transactions_removed'] = total_count
|
234
|
+
return
|
235
|
+
|
236
|
+
# Remove in batches
|
237
|
+
batch_size = self.options['batch_size']
|
238
|
+
removed_count = 0
|
239
|
+
|
240
|
+
try:
|
241
|
+
while True:
|
242
|
+
# Get batch of transactions to delete
|
243
|
+
batch_ids = list(
|
244
|
+
old_transactions.values_list('id', flat=True)[:batch_size]
|
245
|
+
)
|
246
|
+
|
247
|
+
if not batch_ids:
|
248
|
+
break
|
249
|
+
|
250
|
+
with transaction.atomic():
|
251
|
+
# Delete the batch
|
252
|
+
deleted_count = Transaction.objects.filter(
|
253
|
+
id__in=batch_ids
|
254
|
+
).delete()[0]
|
255
|
+
|
256
|
+
removed_count += deleted_count
|
257
|
+
|
258
|
+
if self.verbose:
|
259
|
+
self.stdout.write(f" Removed batch: {deleted_count} transactions")
|
260
|
+
|
261
|
+
# Update progress
|
262
|
+
progress = (removed_count / total_count) * 100
|
263
|
+
self.stdout.write(f"Progress: {removed_count}/{total_count} ({progress:.1f}%)")
|
264
|
+
|
265
|
+
self.stats['transactions_removed'] = removed_count
|
266
|
+
logger.info(f"Removed {removed_count} old transactions")
|
267
|
+
|
268
|
+
except Exception as e:
|
269
|
+
logger.error(f"Error cleaning up transactions: {e}")
|
270
|
+
self.stats['errors'] += 1
|
271
|
+
self.stdout.write(self.style.ERROR(f"Error: {e}"))
|
272
|
+
|
273
|
+
self.stdout.write("")
|
274
|
+
|
275
|
+
def cleanup_expired_api_keys(self):
|
276
|
+
"""Clean up expired API keys."""
|
277
|
+
self.stdout.write(self.style.SUCCESS("🔑 CLEANING UP EXPIRED API KEYS"))
|
278
|
+
self.stdout.write("-" * 40)
|
279
|
+
|
280
|
+
# Find expired API keys
|
281
|
+
now = timezone.now()
|
282
|
+
expired_keys = APIKey.objects.filter(
|
283
|
+
Q(expires_at__lt=now) | Q(is_active=False)
|
284
|
+
).filter(
|
285
|
+
# Only remove keys that haven't been used recently
|
286
|
+
last_used_at__lt=now - timedelta(days=7)
|
287
|
+
)
|
288
|
+
|
289
|
+
total_count = expired_keys.count()
|
290
|
+
self.stdout.write(f"Found {total_count} expired API keys to remove")
|
291
|
+
|
292
|
+
if total_count == 0:
|
293
|
+
self.stdout.write(self.style.WARNING("No expired API keys to clean up"))
|
294
|
+
return
|
295
|
+
|
296
|
+
if self.dry_run:
|
297
|
+
self.stdout.write(f"[DRY RUN] Would remove {total_count} expired API keys")
|
298
|
+
self.stats['api_keys_removed'] = total_count
|
299
|
+
return
|
300
|
+
|
301
|
+
try:
|
302
|
+
# Remove expired keys
|
303
|
+
removed_count = expired_keys.delete()[0]
|
304
|
+
self.stats['api_keys_removed'] = removed_count
|
305
|
+
|
306
|
+
self.stdout.write(f"Removed {removed_count} expired API keys")
|
307
|
+
logger.info(f"Removed {removed_count} expired API keys")
|
308
|
+
|
309
|
+
except Exception as e:
|
310
|
+
logger.error(f"Error cleaning up API keys: {e}")
|
311
|
+
self.stats['errors'] += 1
|
312
|
+
self.stdout.write(self.style.ERROR(f"Error: {e}"))
|
313
|
+
|
314
|
+
self.stdout.write("")
|
315
|
+
|
316
|
+
def cleanup_stale_cache(self):
|
317
|
+
"""Clean up stale cache entries."""
|
318
|
+
self.stdout.write(self.style.SUCCESS("💾 CLEANING UP STALE CACHE"))
|
319
|
+
self.stdout.write("-" * 40)
|
320
|
+
|
321
|
+
if self.dry_run:
|
322
|
+
self.stdout.write("[DRY RUN] Would clear stale cache entries")
|
323
|
+
self.stats['cache_entries_cleared'] = 100 # Estimate
|
324
|
+
return
|
325
|
+
|
326
|
+
try:
|
327
|
+
# Get cache service
|
328
|
+
cache_service = get_cache_service()
|
329
|
+
|
330
|
+
# Clear payment-related caches
|
331
|
+
cache_patterns = [
|
332
|
+
'payment:*',
|
333
|
+
'balance:*',
|
334
|
+
'api_key:*',
|
335
|
+
'currency:*',
|
336
|
+
'provider:*',
|
337
|
+
'rate_limit:*'
|
338
|
+
]
|
339
|
+
|
340
|
+
cleared_count = 0
|
341
|
+
|
342
|
+
for pattern in cache_patterns:
|
343
|
+
try:
|
344
|
+
# Clear cache entries matching pattern
|
345
|
+
if hasattr(cache_service, 'clear_pattern'):
|
346
|
+
count = cache_service.clear_pattern(pattern)
|
347
|
+
cleared_count += count
|
348
|
+
if self.verbose:
|
349
|
+
self.stdout.write(f" Cleared {count} entries for pattern: {pattern}")
|
350
|
+
except Exception as e:
|
351
|
+
logger.warning(f"Failed to clear cache pattern {pattern}: {e}")
|
352
|
+
|
353
|
+
# Fallback: clear all cache if pattern clearing not available
|
354
|
+
if cleared_count == 0:
|
355
|
+
cache.clear()
|
356
|
+
cleared_count = 1 # At least one operation
|
357
|
+
self.stdout.write("Cleared all cache entries")
|
358
|
+
|
359
|
+
self.stats['cache_entries_cleared'] = cleared_count
|
360
|
+
logger.info(f"Cleared {cleared_count} cache entries")
|
361
|
+
|
362
|
+
except Exception as e:
|
363
|
+
logger.error(f"Error cleaning up cache: {e}")
|
364
|
+
self.stats['errors'] += 1
|
365
|
+
self.stdout.write(self.style.ERROR(f"Error: {e}"))
|
366
|
+
|
367
|
+
self.stdout.write("")
|
368
|
+
|
369
|
+
def show_summary(self):
|
370
|
+
"""Display cleanup summary."""
|
371
|
+
self.stdout.write(self.style.SUCCESS("📊 CLEANUP SUMMARY"))
|
372
|
+
self.stdout.write("-" * 40)
|
373
|
+
|
374
|
+
summary_items = [
|
375
|
+
("Payments Removed", self.stats['payments_removed']),
|
376
|
+
("Transactions Removed", self.stats['transactions_removed']),
|
377
|
+
("API Keys Removed", self.stats['api_keys_removed']),
|
378
|
+
("Cache Entries Cleared", self.stats['cache_entries_cleared']),
|
379
|
+
("Errors", self.stats['errors']),
|
380
|
+
]
|
381
|
+
|
382
|
+
for label, count in summary_items:
|
383
|
+
if count > 0:
|
384
|
+
style = self.style.SUCCESS if label != "Errors" else self.style.ERROR
|
385
|
+
self.stdout.write(f"{label:<22}: {style(count)}")
|
386
|
+
|
387
|
+
# Calculate total items processed
|
388
|
+
total_processed = (
|
389
|
+
self.stats['payments_removed'] +
|
390
|
+
self.stats['transactions_removed'] +
|
391
|
+
self.stats['api_keys_removed']
|
392
|
+
)
|
393
|
+
|
394
|
+
if total_processed > 0:
|
395
|
+
self.stdout.write("")
|
396
|
+
self.stdout.write(f"Total items processed: {self.style.SUCCESS(total_processed)}")
|
397
|
+
|
398
|
+
# Show completion time
|
399
|
+
self.stdout.write("")
|
400
|
+
self.stdout.write(f"Completed: {timezone.now().strftime('%Y-%m-%d %H:%M:%S UTC')}")
|
401
|
+
|
402
|
+
# Show recommendations
|
403
|
+
if self.stats['errors'] > 0:
|
404
|
+
self.stdout.write("")
|
405
|
+
self.stdout.write(
|
406
|
+
self.style.WARNING("⚠️ Some cleanup operations had errors. Check logs for details.")
|
407
|
+
)
|
408
|
+
|
409
|
+
if total_processed == 0 and self.stats['errors'] == 0:
|
410
|
+
self.stdout.write("")
|
411
|
+
self.stdout.write(
|
412
|
+
self.style.SUCCESS("✅ No expired data found. System is clean!")
|
413
|
+
)
|
414
|
+
|
415
|
+
if self.dry_run and total_processed > 0:
|
416
|
+
self.stdout.write("")
|
417
|
+
self.stdout.write(
|
418
|
+
self.style.SUCCESS("✅ Dry run completed. Run without --dry-run to apply changes.")
|
419
|
+
)
|