django-cfg 1.4.116__py3-none-any.whl → 1.5.14__py3-none-any.whl
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.
Potentially problematic release.
This version of django-cfg might be problematic. Click here for more details.
- django_cfg/__init__.py +6 -1
- django_cfg/apps/api/commands/serializers.py +152 -0
- django_cfg/apps/api/commands/views.py +32 -0
- django_cfg/apps/{accounts → business/accounts}/admin/inlines.py +2 -2
- django_cfg/apps/{accounts → business/accounts}/admin/user_admin.py +2 -2
- django_cfg/apps/{accounts → business/accounts}/apps.py +2 -2
- django_cfg/apps/{accounts → business/accounts}/management/commands/otp_test.py +5 -2
- django_cfg/apps/{accounts → business/accounts}/managers/user_manager.py +2 -2
- django_cfg/apps/{accounts → business/accounts}/migrations/0001_initial.py +4 -4
- django_cfg/apps/{agents → business/agents}/__init__.py +1 -1
- django_cfg/apps/{agents → business/agents}/apps.py +1 -1
- django_cfg/apps/business/agents/management/commands/create_agent.py +177 -0
- django_cfg/apps/{agents/management/commands/create_agent.py → business/agents/management/commands/load_agent_templates.py} +6 -167
- django_cfg/apps/{agents → business/agents}/management/commands/orchestrator_status.py +7 -5
- django_cfg/apps/{knowbase → business/knowbase}/__init__.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/apps.py +3 -3
- django_cfg/apps/business/knowbase/examples/__init__.py +3 -0
- django_cfg/apps/{knowbase → business/knowbase}/examples/external_data_usage.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/management/commands/knowbase_stats.py +4 -2
- django_cfg/apps/{knowbase → business/knowbase}/management/commands/setup_knowbase.py +4 -2
- django_cfg/apps/{knowbase → business/knowbase}/mixins/examples/vehicle_model_example.py +2 -2
- django_cfg/apps/{knowbase → business/knowbase}/mixins/service.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/models/external_data.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/services/archive/vectorization_service.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/services/embedding/async_processor.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/services/embedding/batch_processor.py +2 -2
- django_cfg/apps/{knowbase → business/knowbase}/services/embedding/processors.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/services/embedding/utils.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/tasks/document_processing.py +1 -1
- django_cfg/apps/{knowbase → business/knowbase}/utils/chunk_settings.py +6 -5
- django_cfg/apps/{knowbase → business/knowbase}/views/archive_views.py +2 -2
- django_cfg/apps/{leads → business/leads}/apps.py +2 -2
- django_cfg/apps/{newsletter → business/newsletter}/admin/newsletter_admin.py +12 -11
- django_cfg/apps/{newsletter → business/newsletter}/apps.py +2 -2
- django_cfg/apps/{newsletter → business/newsletter}/management/commands/test_newsletter.py +7 -4
- django_cfg/apps/{payments → business/payments}/__init__.py +2 -2
- django_cfg/apps/{payments → business/payments}/admin/balance_admin.py +26 -36
- django_cfg/apps/{payments → business/payments}/admin/payment_admin.py +65 -85
- django_cfg/apps/{payments → business/payments}/admin/withdrawal_admin.py +65 -100
- django_cfg/apps/{payments → business/payments}/apps.py +1 -1
- django_cfg/apps/{payments → business/payments}/management/commands/check_payment_status.py +8 -6
- django_cfg/apps/{payments → business/payments}/management/commands/create_payment.py +7 -5
- django_cfg/apps/{payments → business/payments}/management/commands/sync_currencies.py +6 -4
- django_cfg/apps/{payments → business/payments}/urls.py +1 -1
- django_cfg/apps/{support → business/support}/apps.py +1 -1
- django_cfg/apps/{support → business/support}/managers/message_manager.py +1 -1
- django_cfg/apps/{support → business/support}/managers/ticket_manager.py +1 -1
- django_cfg/apps/{centrifugo → integrations/centrifugo}/__init__.py +2 -2
- django_cfg/apps/integrations/centrifugo/_cfg/README_DEPENDENCIES.md +260 -0
- django_cfg/apps/integrations/centrifugo/_cfg/__init__.py +25 -0
- django_cfg/apps/integrations/centrifugo/_cfg/check_deps.py +34 -0
- django_cfg/apps/integrations/centrifugo/_cfg/dependencies.py +309 -0
- django_cfg/apps/{centrifugo → integrations/centrifugo}/admin/centrifugo_log.py +33 -71
- django_cfg/apps/integrations/centrifugo/apps.py +100 -0
- django_cfg/apps/{centrifugo → integrations/centrifugo}/management/commands/generate_centrifugo_clients.py +9 -9
- django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/__init__.py +4 -3
- django_cfg/apps/integrations/centrifugo/serializers/publishes.py +38 -0
- django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/stats.py +2 -2
- django_cfg/apps/{centrifugo → integrations/centrifugo}/services/client/client.py +2 -2
- django_cfg/apps/{centrifugo → integrations/centrifugo}/services/client/config.py +1 -1
- django_cfg/apps/{centrifugo → integrations/centrifugo}/views/monitoring.py +28 -43
- django_cfg/apps/integrations/grpc/__init__.py +9 -0
- django_cfg/apps/integrations/grpc/_cfg/README_DEPENDENCIES.md +307 -0
- django_cfg/apps/integrations/grpc/_cfg/__init__.py +25 -0
- django_cfg/apps/integrations/grpc/_cfg/check_deps.py +34 -0
- django_cfg/apps/integrations/grpc/_cfg/dependencies.py +484 -0
- django_cfg/apps/integrations/grpc/admin/__init__.py +17 -0
- django_cfg/apps/integrations/grpc/admin/config.py +261 -0
- django_cfg/apps/integrations/grpc/admin/grpc_api_key.py +129 -0
- django_cfg/apps/integrations/grpc/admin/grpc_request_log.py +261 -0
- django_cfg/apps/integrations/grpc/admin/grpc_server_status.py +236 -0
- django_cfg/apps/integrations/grpc/apps.py +108 -0
- django_cfg/apps/integrations/grpc/auth/__init__.py +17 -0
- django_cfg/apps/integrations/grpc/auth/api_key_auth.py +320 -0
- django_cfg/apps/integrations/grpc/interceptors/__init__.py +19 -0
- django_cfg/apps/integrations/grpc/interceptors/errors.py +241 -0
- django_cfg/apps/integrations/grpc/interceptors/logging.py +267 -0
- django_cfg/apps/integrations/grpc/interceptors/metrics.py +307 -0
- django_cfg/apps/integrations/grpc/interceptors/request_logger.py +535 -0
- django_cfg/apps/integrations/grpc/management/__init__.py +1 -0
- django_cfg/apps/integrations/grpc/management/commands/generate_protos.py +130 -0
- django_cfg/apps/integrations/grpc/management/commands/rungrpc.py +518 -0
- django_cfg/apps/integrations/grpc/management/commands/test_grpc_integration.py +75 -0
- django_cfg/apps/integrations/grpc/managers/__init__.py +14 -0
- django_cfg/apps/integrations/grpc/managers/grpc_api_key.py +192 -0
- django_cfg/apps/integrations/grpc/managers/grpc_request_log.py +310 -0
- django_cfg/apps/integrations/grpc/managers/grpc_server_status.py +296 -0
- django_cfg/apps/integrations/grpc/migrations/0001_initial.py +69 -0
- django_cfg/apps/integrations/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py +38 -0
- django_cfg/apps/integrations/grpc/migrations/0003_grpcserverstatus.py +119 -0
- django_cfg/apps/integrations/grpc/migrations/0004_grpcserverstatus_registered_services.py +22 -0
- django_cfg/apps/integrations/grpc/migrations/0005_grpcapikey.py +143 -0
- django_cfg/apps/integrations/grpc/migrations/0006_grpcrequestlog_api_key_and_more.py +34 -0
- django_cfg/apps/integrations/grpc/models/__init__.py +13 -0
- django_cfg/apps/integrations/grpc/models/grpc_api_key.py +198 -0
- django_cfg/apps/integrations/grpc/models/grpc_request_log.py +230 -0
- django_cfg/apps/integrations/grpc/models/grpc_server_status.py +305 -0
- django_cfg/apps/integrations/grpc/serializers/__init__.py +83 -0
- django_cfg/apps/integrations/grpc/serializers/api_keys.py +63 -0
- django_cfg/apps/integrations/grpc/serializers/charts.py +216 -0
- django_cfg/apps/integrations/grpc/serializers/config.py +120 -0
- django_cfg/apps/integrations/grpc/serializers/health.py +18 -0
- django_cfg/apps/integrations/grpc/serializers/proto_files.py +74 -0
- django_cfg/apps/integrations/grpc/serializers/requests.py +24 -0
- django_cfg/apps/integrations/grpc/serializers/service_registry.py +260 -0
- django_cfg/apps/integrations/grpc/serializers/services.py +32 -0
- django_cfg/apps/integrations/grpc/serializers/stats.py +60 -0
- django_cfg/apps/integrations/grpc/serializers/testing.py +113 -0
- django_cfg/apps/integrations/grpc/services/__init__.py +41 -0
- django_cfg/apps/integrations/grpc/services/base.py +375 -0
- django_cfg/apps/integrations/grpc/services/chart_generator.py +475 -0
- django_cfg/apps/integrations/grpc/services/config_helper.py +146 -0
- django_cfg/apps/integrations/grpc/services/discovery.py +571 -0
- django_cfg/apps/integrations/grpc/services/grpc_client.py +590 -0
- django_cfg/apps/integrations/grpc/services/monitoring_service.py +397 -0
- django_cfg/apps/integrations/grpc/services/proto_files_manager.py +268 -0
- django_cfg/apps/integrations/grpc/services/service_registry.py +330 -0
- django_cfg/apps/integrations/grpc/services/testing_service.py +321 -0
- django_cfg/apps/integrations/grpc/testing/__init__.py +12 -0
- django_cfg/apps/integrations/grpc/testing/examples.py +263 -0
- django_cfg/apps/integrations/grpc/urls.py +47 -0
- django_cfg/apps/integrations/grpc/utils/__init__.py +9 -0
- django_cfg/apps/integrations/grpc/utils/integration_test.py +334 -0
- django_cfg/apps/integrations/grpc/utils/proto_gen.py +463 -0
- django_cfg/apps/integrations/grpc/utils/streaming_logger.py +177 -0
- django_cfg/apps/integrations/grpc/views/__init__.py +19 -0
- django_cfg/apps/integrations/grpc/views/api_keys.py +255 -0
- django_cfg/apps/integrations/grpc/views/charts.py +224 -0
- django_cfg/apps/integrations/grpc/views/config.py +193 -0
- django_cfg/apps/integrations/grpc/views/monitoring.py +360 -0
- django_cfg/apps/integrations/grpc/views/proto_files.py +214 -0
- django_cfg/apps/integrations/grpc/views/services.py +298 -0
- django_cfg/apps/integrations/grpc/views/testing.py +308 -0
- django_cfg/apps/integrations/rq/__init__.py +9 -0
- django_cfg/apps/integrations/rq/_cfg/__init__.py +28 -0
- django_cfg/apps/integrations/rq/_cfg/dependencies.py +313 -0
- django_cfg/apps/integrations/rq/apps.py +157 -0
- django_cfg/apps/integrations/rq/management/__init__.py +1 -0
- django_cfg/apps/integrations/rq/management/commands/__init__.py +1 -0
- django_cfg/apps/integrations/rq/management/commands/rqscheduler.py +31 -0
- django_cfg/apps/integrations/rq/management/commands/rqstats.py +33 -0
- django_cfg/apps/integrations/rq/management/commands/rqworker.py +31 -0
- django_cfg/apps/integrations/rq/management/commands/rqworker_pool.py +27 -0
- django_cfg/apps/integrations/rq/serializers/__init__.py +40 -0
- django_cfg/apps/integrations/rq/serializers/health.py +60 -0
- django_cfg/apps/integrations/rq/serializers/job.py +100 -0
- django_cfg/apps/integrations/rq/serializers/queue.py +80 -0
- django_cfg/apps/integrations/rq/serializers/schedule.py +178 -0
- django_cfg/apps/integrations/rq/serializers/testing.py +139 -0
- django_cfg/apps/integrations/rq/serializers/worker.py +58 -0
- django_cfg/apps/integrations/rq/services/__init__.py +25 -0
- django_cfg/apps/integrations/rq/services/config_helper.py +233 -0
- django_cfg/apps/integrations/rq/services/models/README.md +417 -0
- django_cfg/apps/integrations/rq/services/models/__init__.py +30 -0
- django_cfg/apps/integrations/rq/services/models/event.py +123 -0
- django_cfg/apps/integrations/rq/services/models/job.py +99 -0
- django_cfg/apps/integrations/rq/services/models/queue.py +92 -0
- django_cfg/apps/integrations/rq/services/models/worker.py +104 -0
- django_cfg/apps/integrations/rq/services/rq_converters.py +183 -0
- django_cfg/apps/integrations/rq/tasks/__init__.py +23 -0
- django_cfg/apps/integrations/rq/tasks/demo_tasks.py +284 -0
- django_cfg/apps/integrations/rq/urls.py +54 -0
- django_cfg/apps/integrations/rq/views/__init__.py +19 -0
- django_cfg/apps/integrations/rq/views/jobs.py +892 -0
- django_cfg/apps/integrations/rq/views/monitoring.py +248 -0
- django_cfg/apps/integrations/rq/views/queues.py +261 -0
- django_cfg/apps/integrations/rq/views/schedule.py +404 -0
- django_cfg/apps/integrations/rq/views/testing.py +761 -0
- django_cfg/apps/integrations/rq/views/workers.py +195 -0
- django_cfg/apps/system/__init__.py +0 -0
- django_cfg/apps/system/dashboard/TRANSACTION_FIX.md +73 -0
- django_cfg/apps/{dashboard → system/dashboard}/__init__.py +1 -1
- django_cfg/apps/{dashboard → system/dashboard}/apps.py +1 -1
- django_cfg/apps/{dashboard → system/dashboard}/serializers/__init__.py +4 -11
- django_cfg/apps/{dashboard → system/dashboard}/serializers/activity.py +1 -1
- django_cfg/apps/{dashboard → system/dashboard}/serializers/commands.py +25 -1
- django_cfg/apps/system/dashboard/serializers/config.py +245 -0
- django_cfg/apps/{dashboard → system/dashboard}/services/__init__.py +2 -2
- django_cfg/apps/{dashboard → system/dashboard}/services/charts_service.py +4 -3
- django_cfg/apps/{dashboard → system/dashboard}/services/commands_service.py +12 -1
- django_cfg/apps/system/dashboard/services/config_service.py +393 -0
- django_cfg/apps/{dashboard → system/dashboard}/services/statistics_service.py +11 -2
- django_cfg/apps/{dashboard → system/dashboard}/services/system_health_service.py +64 -106
- django_cfg/apps/{dashboard → system/dashboard}/urls.py +3 -2
- django_cfg/apps/{dashboard → system/dashboard}/views/__init__.py +2 -2
- django_cfg/apps/{dashboard → system/dashboard}/views/commands_views.py +3 -6
- django_cfg/apps/system/dashboard/views/config_views.py +69 -0
- django_cfg/apps/{dashboard → system/dashboard}/views/overview_views.py +14 -13
- django_cfg/apps/{frontend → system/frontend}/__init__.py +1 -1
- django_cfg/apps/{frontend → system/frontend}/apps.py +1 -1
- django_cfg/apps/{frontend → system/frontend}/setup.py +5 -5
- django_cfg/apps/{frontend → system/frontend}/views.py +18 -3
- django_cfg/apps/system/maintenance/__init__.py +56 -0
- django_cfg/apps/{maintenance → system/maintenance}/admin/api_key_admin.py +10 -12
- django_cfg/apps/{maintenance → system/maintenance}/admin/scheduled_admin.py +3 -3
- django_cfg/apps/{maintenance → system/maintenance}/admin/site_admin.py +10 -9
- django_cfg/apps/{maintenance → system/maintenance}/apps.py +1 -1
- django_cfg/apps/system/maintenance/management/__init__.py +0 -0
- django_cfg/apps/system/maintenance/management/commands/__init__.py +0 -0
- django_cfg/apps/{maintenance → system/maintenance}/management/commands/maintenance.py +5 -2
- django_cfg/apps/{maintenance → system/maintenance}/management/commands/process_scheduled_maintenance.py +4 -2
- django_cfg/apps/{maintenance → system/maintenance}/management/commands/sync_cloudflare.py +5 -2
- django_cfg/apps/system/maintenance/migrations/__init__.py +0 -0
- django_cfg/apps/{maintenance → system/maintenance}/models/__init__.py +4 -4
- django_cfg/apps/system/maintenance/services/__init__.py +42 -0
- django_cfg/apps/urls.py +54 -115
- django_cfg/config.py +36 -0
- django_cfg/core/base/config_model.py +27 -28
- django_cfg/core/builders/apps_builder.py +19 -21
- django_cfg/core/constants.py +1 -0
- django_cfg/core/debug/README.md +116 -0
- django_cfg/core/debug/__init__.py +7 -0
- django_cfg/core/debug/example_config.py +63 -0
- django_cfg/core/debug/warnings_helper.py +121 -0
- django_cfg/core/generation/integration_generators/__init__.py +3 -6
- django_cfg/core/generation/integration_generators/django_rq.py +80 -0
- django_cfg/core/generation/integration_generators/grpc_generator.py +316 -0
- django_cfg/core/generation/orchestrator.py +15 -15
- django_cfg/core/integration/display/__init__.py +2 -0
- django_cfg/core/integration/display/base.py +51 -0
- django_cfg/core/integration/display/grpc_display.py +144 -0
- django_cfg/core/integration/display/startup.py +24 -58
- django_cfg/management/commands/check_endpoints.py +2 -2
- django_cfg/management/commands/check_settings.py +3 -10
- django_cfg/management/commands/clear_constance.py +3 -10
- django_cfg/management/commands/create_token.py +4 -11
- django_cfg/management/commands/list_urls.py +4 -10
- django_cfg/management/commands/migrate_all.py +18 -12
- django_cfg/management/commands/migrator.py +4 -11
- django_cfg/management/commands/script.py +4 -10
- django_cfg/management/commands/show_config.py +8 -16
- django_cfg/management/commands/show_urls.py +5 -11
- django_cfg/management/commands/superuser.py +4 -11
- django_cfg/management/commands/tree.py +5 -10
- django_cfg/management/utils/README.md +402 -0
- django_cfg/management/utils/__init__.py +29 -0
- django_cfg/management/utils/mixins.py +176 -0
- django_cfg/middleware/authentication.py +1 -1
- django_cfg/middleware/pagination.py +53 -54
- django_cfg/mixins/__init__.py +2 -0
- django_cfg/mixins/superadmin_api.py +59 -0
- django_cfg/models/__init__.py +3 -3
- django_cfg/models/api/grpc/__init__.py +53 -0
- django_cfg/models/api/grpc/config.py +446 -0
- django_cfg/models/django/__init__.py +3 -3
- django_cfg/models/django/constance.py +1 -1
- django_cfg/models/django/django_rq.py +632 -0
- django_cfg/models/django/revolution_legacy.py +8 -8
- django_cfg/models/ngrok/config.py +7 -6
- django_cfg/modules/base.py +19 -6
- django_cfg/modules/django_admin/__init__.py +2 -0
- django_cfg/modules/django_admin/apps.py +19 -0
- django_cfg/modules/django_admin/base/pydantic_admin.py +23 -12
- django_cfg/modules/django_admin/config/__init__.py +2 -0
- django_cfg/modules/django_admin/config/admin_config.py +7 -0
- django_cfg/modules/django_admin/config/background_task_config.py +4 -4
- django_cfg/modules/django_admin/config/field_config.py +24 -0
- django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_field.html +80 -0
- django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_password.html +62 -0
- django_cfg/modules/django_admin/utils/__init__.py +41 -3
- django_cfg/modules/django_admin/utils/badges/__init__.py +13 -0
- django_cfg/modules/django_admin/utils/{badges.py → badges/status_badges.py} +3 -3
- django_cfg/modules/django_admin/utils/displays/__init__.py +13 -0
- django_cfg/modules/django_admin/utils/{displays.py → displays/data_displays.py} +2 -2
- django_cfg/modules/django_admin/utils/html/__init__.py +26 -0
- django_cfg/modules/django_admin/utils/html/badges.py +55 -0
- django_cfg/modules/django_admin/utils/html/base.py +167 -0
- django_cfg/modules/django_admin/utils/html/code.py +87 -0
- django_cfg/modules/django_admin/utils/html/composition.py +205 -0
- django_cfg/modules/django_admin/utils/html/formatting.py +231 -0
- django_cfg/modules/django_admin/utils/html/keyvalue.py +219 -0
- django_cfg/modules/django_admin/utils/html/markdown_integration.py +108 -0
- django_cfg/modules/django_admin/utils/html/progress.py +127 -0
- django_cfg/modules/django_admin/utils/html_builder.py +55 -408
- django_cfg/modules/django_admin/utils/markdown/__init__.py +21 -0
- django_cfg/modules/django_admin/widgets/__init__.py +3 -0
- django_cfg/modules/django_admin/widgets/encrypted_field_widget.py +66 -0
- django_cfg/modules/django_admin/widgets/registry.py +42 -0
- django_cfg/modules/django_client/core/generator/python/files_generator.py +5 -13
- django_cfg/modules/django_client/core/generator/python/templates/api_wrapper.py.jinja +16 -4
- django_cfg/modules/django_client/core/generator/python/templates/main_init.py.jinja +2 -3
- django_cfg/modules/django_client/core/generator/typescript/files_generator.py +6 -5
- django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +13 -4
- django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +12 -8
- django_cfg/modules/django_client/core/parser/base.py +135 -2
- django_cfg/modules/django_client/management/commands/generate_client.py +5 -2
- django_cfg/modules/django_client/management/commands/validate_openapi.py +5 -2
- django_cfg/modules/django_currency/examples/example_database_usage.py +1 -1
- django_cfg/modules/django_email/management/commands/test_email.py +4 -10
- django_cfg/modules/django_logging/__init__.py +2 -0
- django_cfg/modules/django_logging/django_logger.py +78 -8
- django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py +16 -13
- django_cfg/modules/django_telegram/management/commands/test_telegram.py +4 -11
- django_cfg/modules/django_twilio/management/commands/test_twilio.py +4 -11
- django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
- django_cfg/modules/django_unfold/navigation.py +15 -24
- django_cfg/modules/nextjs_admin/views.py +1 -1
- django_cfg/pyproject.toml +10 -10
- django_cfg/registry/core.py +4 -7
- django_cfg/registry/modules.py +4 -1
- django_cfg/requirements.txt +52 -0
- django_cfg/static/frontend/admin.zip +0 -0
- django_cfg/templates/admin/constance/includes/results_list.html +73 -0
- django_cfg/templates/admin/index.html +187 -62
- django_cfg/templatetags/django_cfg.py +61 -1
- {django_cfg-1.4.116.dist-info → django_cfg-1.5.14.dist-info}/METADATA +106 -60
- django_cfg-1.5.14.dist-info/RECORD +1182 -0
- django_cfg/apps/centrifugo/apps.py +0 -31
- django_cfg/apps/centrifugo/serializers/publishes.py +0 -18
- django_cfg/apps/dashboard/permissions.py +0 -48
- django_cfg/apps/dashboard/serializers/django_q2.py +0 -50
- django_cfg/apps/dashboard/services/django_q2_service.py +0 -159
- django_cfg/apps/dashboard/views/django_q2_views.py +0 -79
- django_cfg/apps/knowbase/examples/__init__.py +0 -3
- django_cfg/apps/maintenance/__init__.py +0 -56
- django_cfg/apps/maintenance/services/__init__.py +0 -42
- django_cfg/apps/tasks/__init__.py +0 -64
- django_cfg/apps/tasks/admin/__init__.py +0 -4
- django_cfg/apps/tasks/admin/config.py +0 -98
- django_cfg/apps/tasks/admin/task_log.py +0 -265
- django_cfg/apps/tasks/apps.py +0 -15
- django_cfg/apps/tasks/filters/__init__.py +0 -10
- django_cfg/apps/tasks/filters/task_log.py +0 -121
- django_cfg/apps/tasks/migrations/0001_initial.py +0 -196
- django_cfg/apps/tasks/migrations/0002_delete_tasklog.py +0 -16
- django_cfg/apps/tasks/models/__init__.py +0 -4
- django_cfg/apps/tasks/models/task_log.py +0 -246
- django_cfg/apps/tasks/serializers/__init__.py +0 -28
- django_cfg/apps/tasks/serializers/task_log.py +0 -249
- django_cfg/apps/tasks/services/__init__.py +0 -10
- django_cfg/apps/tasks/services/client/__init__.py +0 -7
- django_cfg/apps/tasks/services/client/client.py +0 -234
- django_cfg/apps/tasks/services/config_helper.py +0 -63
- django_cfg/apps/tasks/services/sync.py +0 -204
- django_cfg/apps/tasks/urls.py +0 -16
- django_cfg/apps/tasks/views/__init__.py +0 -10
- django_cfg/apps/tasks/views/task_log.py +0 -41
- django_cfg/apps/tasks/views/task_log_base.py +0 -41
- django_cfg/apps/tasks/views/task_log_overview.py +0 -100
- django_cfg/apps/tasks/views/task_log_related.py +0 -41
- django_cfg/apps/tasks/views/task_log_stats.py +0 -91
- django_cfg/apps/tasks/views/task_log_timeline.py +0 -81
- django_cfg/core/generation/integration_generators/django_q2.py +0 -133
- django_cfg/core/generation/integration_generators/tasks.py +0 -88
- django_cfg/models/django/django_q2.py +0 -496
- django_cfg/models/tasks/__init__.py +0 -49
- django_cfg/models/tasks/backends.py +0 -122
- django_cfg/models/tasks/config.py +0 -209
- django_cfg/models/tasks/utils.py +0 -162
- django_cfg/modules/django_admin/utils/CODE_BLOCK_DOCS.md +0 -396
- django_cfg/modules/django_logging/FIXES_SUMMARY.md +0 -276
- django_cfg/modules/django_logging/LOGGING_GUIDE.md +0 -504
- django_cfg-1.4.116.dist-info/RECORD +0 -1068
- /django_cfg/apps/{accounts/migrations → business}/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/README.md +0 -0
- /django_cfg/apps/{accounts → business/accounts}/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/__models.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/activity_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/filters.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/group_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/otp_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/registration_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/resources.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/admin/twilio_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/managers/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0002_add_phone_otp_clean.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0003_twilioresponse.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0004_delete_twilioresponse.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0005_twilioresponse.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0006_remove_twilioresponse_otp_secret_and_more.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/migrations/0007_twilioresponse.py +0 -0
- /django_cfg/apps/{knowbase/management → business/accounts/migrations}/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/activity.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/auth.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/base.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/choices.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/integrations.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/registration.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/models/user.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/serializers/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/serializers/otp.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/serializers/profile.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/serializers/webhook.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/services/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/services/activity_service.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/services/otp_service.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/signals.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/base_email.html +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/base_email.txt +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/otp_email.html +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/otp_email.txt +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/welcome_email.html +0 -0
- /django_cfg/apps/{accounts → business/accounts}/templates/emails/welcome_email.txt +0 -0
- /django_cfg/apps/{accounts → business/accounts}/urls.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/urls_admin.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/utils/notifications.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/views/__init__.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/views/otp.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/views/profile.py +0 -0
- /django_cfg/apps/{accounts → business/accounts}/views/webhook.py +0 -0
- /django_cfg/apps/{agents → business/agents}/README.md +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/execution_actions.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/execution_admin.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/registry_actions.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/registry_admin.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/toolsets_actions.py +0 -0
- /django_cfg/apps/{agents → business/agents}/admin/toolsets_admin.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/dependencies.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/django_agent.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/exceptions.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/models.py +0 -0
- /django_cfg/apps/{agents → business/agents}/core/orchestrator.py +0 -0
- /django_cfg/apps/{agents → business/agents}/examples/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/examples/simple_example.py +0 -0
- /django_cfg/apps/{agents → business/agents}/integration/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/integration/middleware.py +0 -0
- /django_cfg/apps/{agents → business/agents}/integration/registry.py +0 -0
- /django_cfg/apps/{agents → business/agents}/integration/signals.py +0 -0
- /django_cfg/apps/{agents → business/agents}/management/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/management/commands/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/managers/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/managers/execution.py +0 -0
- /django_cfg/apps/{agents → business/agents}/managers/registry.py +0 -0
- /django_cfg/apps/{agents → business/agents}/managers/toolsets.py +0 -0
- /django_cfg/apps/{agents → business/agents}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{agents → business/agents}/migrations/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/models/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/models/execution.py +0 -0
- /django_cfg/apps/{agents → business/agents}/models/registry.py +0 -0
- /django_cfg/apps/{agents → business/agents}/models/toolsets.py +0 -0
- /django_cfg/apps/{agents → business/agents}/patterns/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/patterns/content_agents.py +0 -0
- /django_cfg/apps/{agents → business/agents}/toolsets/__init__.py +0 -0
- /django_cfg/apps/{agents → business/agents}/toolsets/cache_toolset.py +0 -0
- /django_cfg/apps/{agents → business/agents}/toolsets/django_toolset.py +0 -0
- /django_cfg/apps/{agents → business/agents}/toolsets/file_toolset.py +0 -0
- /django_cfg/apps/{agents → business/agents}/toolsets/orm_toolset.py +0 -0
- /django_cfg/apps/{agents → business/agents}/urls.py +0 -0
- /django_cfg/apps/{agents → business/agents}/urls_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/README.md +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/archive_actions.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/archive_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/chat_actions.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/chat_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/document_actions.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/document_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/external_data_actions.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/admin/external_data_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/config/README.md +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/config/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/config/constance_fields.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/config/constance_settings.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/config/settings.py +0 -0
- /django_cfg/apps/{knowbase/management/commands → business/knowbase/management}/__init__.py +0 -0
- /django_cfg/apps/{leads → business/knowbase/management/commands}/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/archive.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/base.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/chat.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/document.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/managers/external_data.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/migrations/0003_alter_documentarchive_archive_type.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/migrations/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/defaults.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/meta_config.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/config.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/creator.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/external_data_mixin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/content_generator.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/field_analyzer.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/metadata_generator.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/models/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/models/archive.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/models/base.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/models/chat.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/models/document.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/archive_serializers.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/chat_serializers.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/document_serializers.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/external_data_serializers.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/serializers/public_serializers.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/complexity_analyzer.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/purpose_detector.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/quality_analyzer.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/tag_generator.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/archive_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/base.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/json_chunker.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/markdown_chunker.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/python_chunker.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/text_chunker.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/builders.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/models.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/exceptions.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/archive/extraction_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/base.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/chat_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/document_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/batch_result.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/models.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/prompt_builder.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/services/search_service.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/signals/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/signals/archive_signals.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/signals/chat_signals.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/signals/document_signals.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/signals/external_data_signals.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/tasks/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/tasks/archive_tasks.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/tasks/external_data_tasks.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/tasks/maintenance.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/urls.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/urls_admin.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/urls_system.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/utils/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/utils/text_processing.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/utils/validation.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/views/__init__.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/views/base.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/views/chat_views.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/views/document_views.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/views/public_views.py +0 -0
- /django_cfg/apps/{leads → business/leads}/README.md +0 -0
- /django_cfg/apps/{leads/migrations → business/leads}/__init__.py +0 -0
- /django_cfg/apps/{leads → business/leads}/admin/__init__.py +0 -0
- /django_cfg/apps/{leads → business/leads}/admin/actions.py +0 -0
- /django_cfg/apps/{leads → business/leads}/admin/leads_admin.py +0 -0
- /django_cfg/apps/{leads → business/leads}/admin/resources.py +0 -0
- /django_cfg/apps/{leads → business/leads}/admin.py +0 -0
- /django_cfg/apps/{leads → business/leads}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{maintenance/management → business/leads/migrations}/__init__.py +0 -0
- /django_cfg/apps/{leads → business/leads}/models.py +0 -0
- /django_cfg/apps/{leads → business/leads}/serializers.py +0 -0
- /django_cfg/apps/{leads → business/leads}/signals.py +0 -0
- /django_cfg/apps/{leads → business/leads}/tests.py +0 -0
- /django_cfg/apps/{leads → business/leads}/urls.py +0 -0
- /django_cfg/apps/{leads → business/leads}/urls_admin.py +0 -0
- /django_cfg/apps/{leads → business/leads}/views.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/README.md +0 -0
- /django_cfg/apps/{maintenance/management/commands → business/newsletter}/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin/actions.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin/filters.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin/resources.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/admin_filters.py +0 -0
- /django_cfg/apps/{maintenance/migrations → business/newsletter/management}/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter/management/commands}/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/managers/README.md +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/managers/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{newsletter/management → business/newsletter/migrations}/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/models.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/serializers.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/services/email_service.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/signals.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/urls.py +0 -0
- /django_cfg/apps/{maintenance → business/newsletter}/urls_admin.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/utils/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/__init__.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/campaigns.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/emails.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/newsletters.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/subscriptions.py +0 -0
- /django_cfg/apps/{newsletter → business/newsletter}/views/tracking.py +0 -0
- /django_cfg/apps/{payments → business/payments}/CONFIGURATION.md +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/actions.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/balance_actions.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/currency_admin.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/filters.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/payment_actions.py +0 -0
- /django_cfg/apps/{payments → business/payments}/admin/withdrawal_actions.py +0 -0
- /django_cfg/apps/{payments → business/payments}/api/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/api/serializers.py +0 -0
- /django_cfg/apps/{payments → business/payments}/api/urls.py +0 -0
- /django_cfg/apps/{payments → business/payments}/api/views.py +0 -0
- /django_cfg/apps/{payments → business/payments}/config.py +0 -0
- /django_cfg/apps/{payments → business/payments}/management/README.md +0 -0
- /django_cfg/apps/{newsletter/management/commands → business/payments/management}/__init__.py +0 -0
- /django_cfg/apps/{newsletter/migrations → business/payments/management/commands}/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{payments/management → business/payments/migrations}/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/balance.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/base.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/currency.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/managers/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/managers/balance_managers.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/managers/payment_managers.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/payment.py +0 -0
- /django_cfg/apps/{payments → business/payments}/models/withdrawal.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/balance_service.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/payment_service.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/models.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/__init__.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/config.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/parser.py +0 -0
- /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/provider.py +0 -0
- /django_cfg/apps/{payments/management/commands → business/support}/__init__.py +0 -0
- /django_cfg/apps/{support → business/support}/admin/__init__.py +0 -0
- /django_cfg/apps/{support → business/support}/admin/actions.py +0 -0
- /django_cfg/apps/{support → business/support}/admin/filters.py +0 -0
- /django_cfg/apps/{support → business/support}/admin/resources.py +0 -0
- /django_cfg/apps/{support → business/support}/admin/support_admin.py +0 -0
- /django_cfg/apps/{support → business/support}/admin.py +0 -0
- /django_cfg/apps/{support → business/support}/admin_filters.py +0 -0
- /django_cfg/apps/{support → business/support}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{support → business/support}/migrations/0002_alter_message_ticket.py +0 -0
- /django_cfg/apps/{payments → business/support}/migrations/__init__.py +0 -0
- /django_cfg/apps/{support → business/support}/models.py +0 -0
- /django_cfg/apps/{support → business/support}/serializers.py +0 -0
- /django_cfg/apps/{support → business/support}/signals.py +0 -0
- /django_cfg/apps/{support → business/support}/templates/support/chat/access_denied.html +0 -0
- /django_cfg/apps/{support → business/support}/templates/support/chat/ticket_chat.html +0 -0
- /django_cfg/apps/{support → business/support}/urls.py +0 -0
- /django_cfg/apps/{newsletter → business/support}/urls_admin.py +0 -0
- /django_cfg/apps/{support → business/support/utils}/__init__.py +0 -0
- /django_cfg/apps/{support → business/support}/utils/support_email_service.py +0 -0
- /django_cfg/apps/{support → business/support}/views/__init__.py +0 -0
- /django_cfg/apps/{support → business/support}/views/admin.py +0 -0
- /django_cfg/apps/{support → business/support}/views/api.py +0 -0
- /django_cfg/apps/{support → business/support}/views/chat.py +0 -0
- /django_cfg/apps/{support/migrations → integrations}/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/admin/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/admin/config.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/IMPLEMENTATION_SUMMARY.md +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/README.md +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/USAGE.md +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/discovery.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/generator.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/README.md.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/client.go.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/go.mod.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/rpc_client.go.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/rpc_client.go.j2.old +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/go_thin/templates/types.go.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/generator.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/README.md.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/__init__.py.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/client.py.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/models.py.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/requirements.txt.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/python_thin/templates/rpc_client.py.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/generator.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/README.md.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/client.ts.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/index.ts.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/package.json.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/rpc-client.ts.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/tsconfig.json.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/generators/typescript_thin/templates/types.ts.j2 +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/utils/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/utils/naming.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/codegen/utils/type_converter.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/decorators.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/management/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/management/commands/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/managers/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/managers/centrifugo_log.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/migrations/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/models/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/models/centrifugo_log.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/registry.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/router.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/admin_api.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/channels.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/health.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/client/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/client/exceptions.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/config_helper.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/dashboard_notifier.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/services/logging.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/urls.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/views/__init__.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/views/admin_api.py +0 -0
- /django_cfg/apps/{centrifugo → integrations/centrifugo}/views/testing_api.py +0 -0
- /django_cfg/apps/{support/utils → integrations/grpc/management/commands}/__init__.py +0 -0
- /django_cfg/apps/{tasks → integrations/grpc}/migrations/__init__.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/apizones.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/base.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/charts.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/overview.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/statistics.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/serializers/system.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/services/apizones_service.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/services/commands_security.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/services/overview_service.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/views/activity_views.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/views/apizones_views.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/views/charts_views.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/views/statistics_views.py +0 -0
- /django_cfg/apps/{dashboard → system/dashboard}/views/system_views.py +0 -0
- /django_cfg/apps/{frontend → system/frontend}/JWT_AUTO_INJECTION.md +0 -0
- /django_cfg/apps/{frontend → system/frontend}/templates/frontend/404.html +0 -0
- /django_cfg/apps/{frontend → system/frontend}/test_routing.py +0 -0
- /django_cfg/apps/{frontend → system/frontend}/urls.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/admin/__init__.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/admin/actions.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/admin/log_admin.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/managers/__init__.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/managers/cloudflare_site_manager.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/managers/maintenance_log_manager.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/migrations/0001_initial.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/migrations/0002_cloudflaresite_maintenance_url.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/migrations/0003_cloudflaresite_include_subdomains_and_more.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/models/cloudflare_api_key.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/models/cloudflare_site.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/models/maintenance_log.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/models/scheduled_maintenance.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/services/bulk_operations_service.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/services/maintenance_service.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/services/scheduled_maintenance_service.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/services/site_sync_service.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/urls.py +0 -0
- /django_cfg/apps/{support → system/maintenance}/urls_admin.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/utils/__init__.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/utils/retry_utils.py +0 -0
- /django_cfg/modules/django_admin/utils/{mermaid_plugin.py → markdown/mermaid_plugin.py} +0 -0
- /django_cfg/modules/django_admin/utils/{markdown_renderer.py → markdown/renderer.py} +0 -0
- {django_cfg-1.4.116.dist-info → django_cfg-1.5.14.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.116.dist-info → django_cfg-1.5.14.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.116.dist-info → django_cfg-1.5.14.dist-info}/licenses/LICENSE +0 -0
|
@@ -18,8 +18,8 @@ Usage:
|
|
|
18
18
|
>>> if api.is_authenticated():
|
|
19
19
|
... # ...
|
|
20
20
|
>>>
|
|
21
|
-
>>> # Get OpenAPI schema
|
|
22
|
-
>>>
|
|
21
|
+
>>> # Get OpenAPI schema path
|
|
22
|
+
>>> schema_path = api.get_schema_path()
|
|
23
23
|
"""
|
|
24
24
|
|
|
25
25
|
from __future__ import annotations
|
|
@@ -30,7 +30,6 @@ from typing import Any
|
|
|
30
30
|
import httpx
|
|
31
31
|
|
|
32
32
|
from .client import APIClient
|
|
33
|
-
from .schema import OPENAPI_SCHEMA
|
|
34
33
|
from .logger import LoggerConfig
|
|
35
34
|
from .retry import RetryConfig
|
|
36
35
|
{% for tag in tags %}
|
|
@@ -196,13 +196,14 @@ class FilesGenerator:
|
|
|
196
196
|
)
|
|
197
197
|
|
|
198
198
|
def generate_schema_file(self):
|
|
199
|
-
"""Generate schema.
|
|
199
|
+
"""Generate schema.json with OpenAPI schema."""
|
|
200
|
+
import json
|
|
200
201
|
|
|
201
|
-
|
|
202
|
-
content =
|
|
202
|
+
# Generate JSON file with proper formatting
|
|
203
|
+
content = json.dumps(self.openapi_schema, indent=2, ensure_ascii=False)
|
|
203
204
|
|
|
204
205
|
return GeneratedFile(
|
|
205
|
-
path="schema.
|
|
206
|
+
path="schema.json",
|
|
206
207
|
content=content,
|
|
207
|
-
description="OpenAPI Schema",
|
|
208
|
+
description="OpenAPI Schema (JSON format)",
|
|
208
209
|
)
|
|
@@ -251,13 +251,22 @@ class OperationsGenerator:
|
|
|
251
251
|
# Handle response
|
|
252
252
|
if operation.is_list_operation and primary_response:
|
|
253
253
|
# Check if response is paginated
|
|
254
|
-
is_paginated = primary_response.schema_name.startswith('Paginated')
|
|
254
|
+
is_paginated = primary_response.schema_name and primary_response.schema_name.startswith('Paginated')
|
|
255
|
+
|
|
256
|
+
# List of custom list response schemas that return objects with array fields (not DRF pagination)
|
|
257
|
+
# These return {items: [], total: N} instead of {results: [], count: N, ...}
|
|
258
|
+
custom_list_schemas = ['ServiceList', 'MethodList', 'TimelineData']
|
|
259
|
+
is_custom_list = primary_response.schema_name in custom_list_schemas if primary_response.schema_name else False
|
|
260
|
+
|
|
255
261
|
if is_paginated:
|
|
256
|
-
# Return full paginated response object
|
|
262
|
+
# Return full DRF paginated response object {count, results, next, previous, ...}
|
|
263
|
+
body_lines.append("return response;")
|
|
264
|
+
elif is_custom_list:
|
|
265
|
+
# Return full custom list response object {services: [], total_services: N}
|
|
257
266
|
body_lines.append("return response;")
|
|
258
267
|
else:
|
|
259
|
-
#
|
|
260
|
-
body_lines.append("return (response as any).results ||
|
|
268
|
+
# Fallback: try to extract results field (for unknown list responses)
|
|
269
|
+
body_lines.append("return (response as any).results || response;")
|
|
261
270
|
elif return_type == "void":
|
|
262
271
|
# No content response (204 No Content or truly void)
|
|
263
272
|
body_lines.append("return;")
|
|
@@ -33,7 +33,6 @@
|
|
|
33
33
|
*/
|
|
34
34
|
|
|
35
35
|
import { APIClient } from "./client";
|
|
36
|
-
import { OPENAPI_SCHEMA } from "./schema";
|
|
37
36
|
import {
|
|
38
37
|
StorageAdapter,
|
|
39
38
|
LocalStorageAdapter,
|
|
@@ -82,9 +81,6 @@ export * as Hooks from "./_utils/hooks";
|
|
|
82
81
|
// Re-export core client
|
|
83
82
|
export { APIClient };
|
|
84
83
|
|
|
85
|
-
// Re-export OpenAPI schema
|
|
86
|
-
export { OPENAPI_SCHEMA };
|
|
87
|
-
|
|
88
84
|
// Re-export storage adapters for convenience
|
|
89
85
|
export type { StorageAdapter };
|
|
90
86
|
export { LocalStorageAdapter, CookieStorageAdapter, MemoryStorageAdapter };
|
|
@@ -267,11 +263,19 @@ export class API {
|
|
|
267
263
|
}
|
|
268
264
|
|
|
269
265
|
/**
|
|
270
|
-
* Get OpenAPI schema
|
|
271
|
-
* @returns
|
|
266
|
+
* Get OpenAPI schema path
|
|
267
|
+
* @returns Path to the OpenAPI schema JSON file
|
|
268
|
+
*
|
|
269
|
+
* Note: The OpenAPI schema is available in the schema.json file.
|
|
270
|
+
* You can load it dynamically using:
|
|
271
|
+
* ```typescript
|
|
272
|
+
* const schema = await fetch('./schema.json').then(r => r.json());
|
|
273
|
+
* // or using fs in Node.js:
|
|
274
|
+
* // const schema = JSON.parse(fs.readFileSync('./schema.json', 'utf-8'));
|
|
275
|
+
* ```
|
|
272
276
|
*/
|
|
273
|
-
|
|
274
|
-
return
|
|
277
|
+
getSchemaPath(): string {
|
|
278
|
+
return './schema.json';
|
|
275
279
|
}
|
|
276
280
|
}
|
|
277
281
|
|
|
@@ -62,8 +62,12 @@ class BaseParser(ABC):
|
|
|
62
62
|
IRContext with all schemas and operations
|
|
63
63
|
|
|
64
64
|
Raises:
|
|
65
|
-
ValueError: If COMPONENT_SPLIT_REQUEST is not detected
|
|
65
|
+
ValueError: If COMPONENT_SPLIT_REQUEST is not detected or schema name conflicts found
|
|
66
66
|
"""
|
|
67
|
+
# CRITICAL: Validate schema names BEFORE parsing
|
|
68
|
+
# This prevents generation from starting with invalid schemas
|
|
69
|
+
self._validate_schema_names()
|
|
70
|
+
|
|
67
71
|
# Parse metadata
|
|
68
72
|
openapi_info = self._parse_openapi_info()
|
|
69
73
|
django_metadata = self._parse_django_metadata()
|
|
@@ -237,13 +241,134 @@ class BaseParser(ABC):
|
|
|
237
241
|
|
|
238
242
|
return False
|
|
239
243
|
|
|
244
|
+
# ===== Schema Validation =====
|
|
245
|
+
|
|
246
|
+
def _validate_schema_names(self) -> None:
|
|
247
|
+
"""
|
|
248
|
+
Validate schema names for conflicts BEFORE parsing.
|
|
249
|
+
|
|
250
|
+
This method checks for:
|
|
251
|
+
1. Case-insensitive duplicates (e.g., "User" and "user")
|
|
252
|
+
2. Exact duplicates (e.g., "GRPCServerInfo" from two different serializers)
|
|
253
|
+
|
|
254
|
+
Raises:
|
|
255
|
+
ValueError: If schema name conflicts are detected (hard exit with traceback)
|
|
256
|
+
|
|
257
|
+
Example conflicts:
|
|
258
|
+
- Case-insensitive: "Profile" and "profile" → filesystem conflict
|
|
259
|
+
- Exact duplicate: "HealthCheck" from multiple serializers → schema conflict
|
|
260
|
+
"""
|
|
261
|
+
import traceback
|
|
262
|
+
import sys
|
|
263
|
+
|
|
264
|
+
if not self.spec.components or not self.spec.components.schemas:
|
|
265
|
+
return # No schemas to validate
|
|
266
|
+
|
|
267
|
+
schema_names = list(self.spec.components.schemas.keys())
|
|
268
|
+
lowercase_map = {}
|
|
269
|
+
exact_duplicate_sources = {}
|
|
270
|
+
|
|
271
|
+
for name in schema_names:
|
|
272
|
+
lowercase = name.lower()
|
|
273
|
+
|
|
274
|
+
# Check case-insensitive duplicates
|
|
275
|
+
if lowercase in lowercase_map:
|
|
276
|
+
existing_name = lowercase_map[lowercase]
|
|
277
|
+
error_msg = (
|
|
278
|
+
f"\n{'=' * 80}\n"
|
|
279
|
+
f"❌ SCHEMA NAME CONFLICT DETECTED\n"
|
|
280
|
+
f"{'=' * 80}\n\n"
|
|
281
|
+
f"Conflict Type: Case-insensitive duplicate\n"
|
|
282
|
+
f"Schema Names:\n"
|
|
283
|
+
f" 1. '{existing_name}'\n"
|
|
284
|
+
f" 2. '{name}'\n\n"
|
|
285
|
+
f"Problem:\n"
|
|
286
|
+
f" These names differ only in casing and will cause conflicts on\n"
|
|
287
|
+
f" case-insensitive filesystems (macOS, Windows).\n\n"
|
|
288
|
+
f"Solution:\n"
|
|
289
|
+
f" Rename one of the Django serializers to make them distinct.\n"
|
|
290
|
+
f" Example: {name}Serializer → {name}DetailSerializer\n\n"
|
|
291
|
+
f"{'=' * 80}\n"
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
# Print full error with traceback
|
|
295
|
+
print(error_msg, file=sys.stderr)
|
|
296
|
+
print("\n🔍 Traceback (schema validation):", file=sys.stderr)
|
|
297
|
+
traceback.print_stack(file=sys.stderr)
|
|
298
|
+
|
|
299
|
+
# Hard exit - stop generation immediately
|
|
300
|
+
raise ValueError(
|
|
301
|
+
f"Case-insensitive schema name conflict: '{existing_name}' vs '{name}'. "
|
|
302
|
+
f"Cannot generate client with conflicting schema names."
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
lowercase_map[lowercase] = name
|
|
306
|
+
|
|
307
|
+
# Track schema sources for exact duplicate detection
|
|
308
|
+
schema = self.spec.components.schemas.get(name)
|
|
309
|
+
if schema and not isinstance(schema, ReferenceObject):
|
|
310
|
+
# Get source information from schema
|
|
311
|
+
title = getattr(schema, 'title', name)
|
|
312
|
+
description = getattr(schema, 'description', '')
|
|
313
|
+
|
|
314
|
+
# Create signature for duplicate detection
|
|
315
|
+
if name in exact_duplicate_sources:
|
|
316
|
+
# Found exact duplicate!
|
|
317
|
+
existing = exact_duplicate_sources[name]
|
|
318
|
+
error_msg = (
|
|
319
|
+
f"\n{'=' * 80}\n"
|
|
320
|
+
f"❌ SCHEMA NAME CONFLICT DETECTED\n"
|
|
321
|
+
f"{'=' * 80}\n\n"
|
|
322
|
+
f"Conflict Type: Exact duplicate schema name\n"
|
|
323
|
+
f"Schema Name: '{name}'\n\n"
|
|
324
|
+
f"Sources:\n"
|
|
325
|
+
f" 1. {existing['title']}\n"
|
|
326
|
+
f" Description: {existing['description'][:100]}\n"
|
|
327
|
+
f" 2. {title}\n"
|
|
328
|
+
f" Description: {description[:100]}\n\n"
|
|
329
|
+
f"Problem:\n"
|
|
330
|
+
f" Multiple serializers are generating the same schema name '{name}'.\n"
|
|
331
|
+
f" This causes schema conflicts in the generated API client and\n"
|
|
332
|
+
f" OpenAPI documentation.\n\n"
|
|
333
|
+
f"Solution:\n"
|
|
334
|
+
f" Rename one of the serializers to make them unique.\n"
|
|
335
|
+
f" Examples:\n"
|
|
336
|
+
f" - HealthCheckSerializer → GRPCHealthCheckSerializer\n"
|
|
337
|
+
f" - ServerInfoSerializer → GRPCServerStatusSerializer\n\n"
|
|
338
|
+
f"{'=' * 80}\n"
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
# Print full error with traceback
|
|
342
|
+
print(error_msg, file=sys.stderr)
|
|
343
|
+
print("\n🔍 Traceback (schema validation):", file=sys.stderr)
|
|
344
|
+
traceback.print_stack(file=sys.stderr)
|
|
345
|
+
|
|
346
|
+
# Hard exit - stop generation immediately
|
|
347
|
+
raise ValueError(
|
|
348
|
+
f"Duplicate schema name detected: '{name}'. "
|
|
349
|
+
f"Multiple serializers are generating this schema. "
|
|
350
|
+
f"Cannot generate client with conflicting schemas."
|
|
351
|
+
)
|
|
352
|
+
|
|
353
|
+
# Store for duplicate detection
|
|
354
|
+
exact_duplicate_sources[name] = {
|
|
355
|
+
'title': title,
|
|
356
|
+
'description': description,
|
|
357
|
+
}
|
|
358
|
+
|
|
240
359
|
# ===== Schema Parsing =====
|
|
241
360
|
|
|
242
361
|
def _parse_all_schemas(self) -> dict[str, IRSchemaObject]:
|
|
243
|
-
"""
|
|
362
|
+
"""
|
|
363
|
+
Parse all schemas from components.
|
|
364
|
+
|
|
365
|
+
Note: Schema name validation is done in _validate_schema_names()
|
|
366
|
+
which is called BEFORE this method in parse().
|
|
367
|
+
"""
|
|
244
368
|
if not self.spec.components or not self.spec.components.schemas:
|
|
245
369
|
return {}
|
|
246
370
|
|
|
371
|
+
# Parse schemas (validation already done in _validate_schema_names)
|
|
247
372
|
schemas = {}
|
|
248
373
|
for name, schema_or_ref in self.spec.components.schemas.items():
|
|
249
374
|
# Skip references for now
|
|
@@ -468,6 +593,14 @@ class BaseParser(ABC):
|
|
|
468
593
|
if schema.base_type:
|
|
469
594
|
return schema.base_type
|
|
470
595
|
|
|
596
|
+
# Check anyOf: [{"type": "X"}, {"type": "null"}] pattern (Pydantic style)
|
|
597
|
+
# Extract the actual type from anyOf if it's a simple nullable pattern
|
|
598
|
+
if schema.anyOf and len(schema.anyOf) == 2:
|
|
599
|
+
for item in schema.anyOf:
|
|
600
|
+
if isinstance(item, SchemaObject) and item.base_type and item.base_type != 'null':
|
|
601
|
+
# Found the actual type (not null)
|
|
602
|
+
return item.base_type
|
|
603
|
+
|
|
471
604
|
# Fallback: infer from other properties
|
|
472
605
|
if schema.properties is not None:
|
|
473
606
|
return "object"
|
|
@@ -8,12 +8,15 @@ Usage:
|
|
|
8
8
|
"""
|
|
9
9
|
|
|
10
10
|
|
|
11
|
-
from django.core.management.base import
|
|
11
|
+
from django.core.management.base import CommandError
|
|
12
12
|
|
|
13
|
+
from django_cfg.management.utils import AdminCommand
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
|
|
16
|
+
class Command(AdminCommand):
|
|
15
17
|
"""Generate OpenAPI clients for configured application groups."""
|
|
16
18
|
|
|
19
|
+
command_name = 'generate_client'
|
|
17
20
|
help = "Generate Python, TypeScript, and Go API clients from OpenAPI schemas"
|
|
18
21
|
|
|
19
22
|
def add_arguments(self, parser):
|
|
@@ -12,12 +12,15 @@ Usage:
|
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
from typing import List
|
|
14
14
|
|
|
15
|
-
from django.core.management.base import
|
|
15
|
+
from django.core.management.base import CommandError
|
|
16
16
|
|
|
17
|
+
from django_cfg.management.utils import AdminCommand
|
|
17
18
|
|
|
18
|
-
|
|
19
|
+
|
|
20
|
+
class Command(AdminCommand):
|
|
19
21
|
"""Validate and fix OpenAPI schema quality issues in DRF serializers."""
|
|
20
22
|
|
|
23
|
+
command_name = 'validate_openapi'
|
|
21
24
|
help = "Validate and auto-fix OpenAPI schema quality issues"
|
|
22
25
|
|
|
23
26
|
def add_arguments(self, parser):
|
|
@@ -63,7 +63,7 @@ def example_django_integration():
|
|
|
63
63
|
print("""
|
|
64
64
|
# In your Django management command or view:
|
|
65
65
|
from django_cfg.modules.django_currency.database_loader import load_currencies_to_database_format
|
|
66
|
-
from django_cfg.apps.payments.models import Currency
|
|
66
|
+
from django_cfg.apps.business.payments.models import Currency
|
|
67
67
|
|
|
68
68
|
# Load currency data
|
|
69
69
|
currency_data = load_currencies_to_database_format()
|
|
@@ -5,22 +5,16 @@ Tests email sending functionality using django_cfg configuration.
|
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
7
|
from django.contrib.auth import get_user_model
|
|
8
|
-
from django.core.management.base import BaseCommand
|
|
9
8
|
|
|
10
|
-
from django_cfg.
|
|
9
|
+
from django_cfg.management.utils import SafeCommand
|
|
11
10
|
|
|
12
11
|
User = get_user_model()
|
|
13
|
-
logger = get_logger('test_email')
|
|
14
12
|
|
|
15
13
|
|
|
16
|
-
class Command(
|
|
14
|
+
class Command(SafeCommand):
|
|
17
15
|
"""Command to test email functionality."""
|
|
18
16
|
|
|
19
|
-
|
|
20
|
-
web_executable = True
|
|
21
|
-
requires_input = False
|
|
22
|
-
is_destructive = False
|
|
23
|
-
|
|
17
|
+
command_name = 'test_email'
|
|
24
18
|
help = "Test email sending functionality"
|
|
25
19
|
|
|
26
20
|
def add_arguments(self, parser):
|
|
@@ -48,7 +42,7 @@ class Command(BaseCommand):
|
|
|
48
42
|
subject = options["subject"]
|
|
49
43
|
message = options["message"]
|
|
50
44
|
|
|
51
|
-
logger.info(f"Starting email test for {email}")
|
|
45
|
+
self.logger.info(f"Starting email test for {email}")
|
|
52
46
|
self.stdout.write(f"🚀 Testing email service for {email}")
|
|
53
47
|
|
|
54
48
|
# Create test user if not exists
|
|
@@ -7,6 +7,7 @@ Auto-configuring logging utilities.
|
|
|
7
7
|
from .django_logger import (
|
|
8
8
|
RESERVED_LOG_ATTRS,
|
|
9
9
|
DjangoLogger,
|
|
10
|
+
clean_old_logs,
|
|
10
11
|
get_logger,
|
|
11
12
|
sanitize_extra,
|
|
12
13
|
)
|
|
@@ -17,5 +18,6 @@ __all__ = [
|
|
|
17
18
|
"DjangoLogger",
|
|
18
19
|
"get_logger",
|
|
19
20
|
"sanitize_extra",
|
|
21
|
+
"clean_old_logs",
|
|
20
22
|
"RESERVED_LOG_ATTRS",
|
|
21
23
|
]
|
|
@@ -2,9 +2,16 @@
|
|
|
2
2
|
Simple auto-configuring Django Logger for django_cfg.
|
|
3
3
|
|
|
4
4
|
KISS principle: simple, unified logging configuration.
|
|
5
|
+
|
|
6
|
+
Features:
|
|
7
|
+
- Modular logging with separate files per module
|
|
8
|
+
- Automatic log rotation (daily, keeps 30 days)
|
|
9
|
+
- INFO+ to files, WARNING+ to console
|
|
10
|
+
- Auto-cleanup of old logs
|
|
5
11
|
"""
|
|
6
12
|
|
|
7
13
|
import logging
|
|
14
|
+
from logging.handlers import TimedRotatingFileHandler
|
|
8
15
|
from pathlib import Path
|
|
9
16
|
from typing import Any, Dict, Optional
|
|
10
17
|
|
|
@@ -95,12 +102,18 @@ class DjangoLogger(BaseCfgModule):
|
|
|
95
102
|
|
|
96
103
|
# Create handlers
|
|
97
104
|
try:
|
|
98
|
-
# Handler for general Django logs
|
|
105
|
+
# Handler for general Django logs with rotation
|
|
99
106
|
django_log_path = logs_dir / 'django.log'
|
|
100
|
-
django_handler =
|
|
101
|
-
|
|
107
|
+
django_handler = TimedRotatingFileHandler(
|
|
108
|
+
django_log_path,
|
|
109
|
+
when='midnight', # Rotate at midnight
|
|
110
|
+
interval=1, # Every 1 day
|
|
111
|
+
backupCount=30, # Keep 30 days of logs
|
|
112
|
+
encoding='utf-8',
|
|
113
|
+
)
|
|
114
|
+
django_handler.setLevel(logging.DEBUG if debug else logging.INFO) # INFO+ in production, DEBUG in dev
|
|
102
115
|
|
|
103
|
-
# Console handler
|
|
116
|
+
# Console handler - WARNING+ always (less noise)
|
|
104
117
|
console_handler = logging.StreamHandler()
|
|
105
118
|
console_handler.setLevel(logging.DEBUG if debug else logging.WARNING)
|
|
106
119
|
|
|
@@ -111,7 +124,7 @@ class DjangoLogger(BaseCfgModule):
|
|
|
111
124
|
|
|
112
125
|
# Configure root logger
|
|
113
126
|
root_logger = logging.getLogger()
|
|
114
|
-
root_logger.setLevel(logging.DEBUG if debug else logging.
|
|
127
|
+
root_logger.setLevel(logging.DEBUG if debug else logging.INFO) # INFO+ in production, DEBUG in dev
|
|
115
128
|
|
|
116
129
|
# Clear existing handlers
|
|
117
130
|
root_logger.handlers.clear()
|
|
@@ -159,8 +172,14 @@ class DjangoLogger(BaseCfgModule):
|
|
|
159
172
|
|
|
160
173
|
log_file_path = djangocfg_logs_dir / f'{module_name}.log'
|
|
161
174
|
|
|
162
|
-
# Create file handler for this specific module
|
|
163
|
-
file_handler =
|
|
175
|
+
# Create rotating file handler for this specific module
|
|
176
|
+
file_handler = TimedRotatingFileHandler(
|
|
177
|
+
log_file_path,
|
|
178
|
+
when='midnight', # Rotate at midnight
|
|
179
|
+
interval=1, # Every 1 day
|
|
180
|
+
backupCount=30, # Keep 30 days of logs
|
|
181
|
+
encoding='utf-8',
|
|
182
|
+
)
|
|
164
183
|
|
|
165
184
|
# Get debug mode
|
|
166
185
|
try:
|
|
@@ -170,7 +189,7 @@ class DjangoLogger(BaseCfgModule):
|
|
|
170
189
|
except Exception:
|
|
171
190
|
debug = os.getenv('DEBUG', 'false').lower() in ('true', '1', 'yes')
|
|
172
191
|
|
|
173
|
-
file_handler.setLevel(logging.DEBUG if debug else logging.
|
|
192
|
+
file_handler.setLevel(logging.DEBUG if debug else logging.INFO) # INFO+ in production, DEBUG in dev
|
|
174
193
|
|
|
175
194
|
# Set format
|
|
176
195
|
formatter = logging.Formatter('[%(asctime)s] %(levelname)s in %(name)s [%(filename)s:%(lineno)d]: %(message)s')
|
|
@@ -188,6 +207,57 @@ class DjangoLogger(BaseCfgModule):
|
|
|
188
207
|
return logger
|
|
189
208
|
|
|
190
209
|
|
|
210
|
+
def clean_old_logs(days: int = 30, logs_dir: Optional[Path] = None) -> Dict[str, int]:
|
|
211
|
+
"""
|
|
212
|
+
Clean up log files older than specified days.
|
|
213
|
+
|
|
214
|
+
Args:
|
|
215
|
+
days: Number of days to keep (default: 30)
|
|
216
|
+
logs_dir: Optional custom logs directory (default: ./logs)
|
|
217
|
+
|
|
218
|
+
Returns:
|
|
219
|
+
Dictionary with cleanup statistics
|
|
220
|
+
|
|
221
|
+
Example:
|
|
222
|
+
>>> from django_cfg.modules.django_logging import clean_old_logs
|
|
223
|
+
>>> stats = clean_old_logs(days=7) # Keep only last 7 days
|
|
224
|
+
>>> print(f"Deleted {stats['deleted']} files, freed {stats['bytes']} bytes")
|
|
225
|
+
"""
|
|
226
|
+
import os
|
|
227
|
+
from datetime import datetime, timedelta
|
|
228
|
+
|
|
229
|
+
if logs_dir is None:
|
|
230
|
+
current_dir = Path(os.getcwd())
|
|
231
|
+
logs_dir = current_dir / 'logs'
|
|
232
|
+
|
|
233
|
+
if not logs_dir.exists():
|
|
234
|
+
return {'deleted': 0, 'bytes': 0, 'error': 'Logs directory not found'}
|
|
235
|
+
|
|
236
|
+
cutoff_date = datetime.now() - timedelta(days=days)
|
|
237
|
+
deleted_count = 0
|
|
238
|
+
deleted_bytes = 0
|
|
239
|
+
|
|
240
|
+
# Recursively find all .log files (including rotated ones like .log.2024-11-01)
|
|
241
|
+
for log_file in logs_dir.rglob('*.log*'):
|
|
242
|
+
if log_file.is_file():
|
|
243
|
+
try:
|
|
244
|
+
# Check file modification time
|
|
245
|
+
mtime = datetime.fromtimestamp(log_file.stat().st_mtime)
|
|
246
|
+
if mtime < cutoff_date:
|
|
247
|
+
file_size = log_file.stat().st_size
|
|
248
|
+
log_file.unlink()
|
|
249
|
+
deleted_count += 1
|
|
250
|
+
deleted_bytes += file_size
|
|
251
|
+
except Exception as e:
|
|
252
|
+
print(f"[django-cfg] Error deleting {log_file}: {e}")
|
|
253
|
+
|
|
254
|
+
return {
|
|
255
|
+
'deleted': deleted_count,
|
|
256
|
+
'bytes': deleted_bytes,
|
|
257
|
+
'human_readable': f"{deleted_bytes / 1024 / 1024:.2f} MB" if deleted_bytes > 0 else "0 MB",
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
|
|
191
261
|
# Convenience function for quick access
|
|
192
262
|
def get_logger(name: str = "django_cfg") -> logging.Logger:
|
|
193
263
|
"""
|
|
@@ -12,8 +12,6 @@ from django.core.management.commands.runserver import Command as RunServerComman
|
|
|
12
12
|
from django_cfg.modules.django_logging import get_logger
|
|
13
13
|
from django_cfg.modules.django_ngrok import get_ngrok_service
|
|
14
14
|
|
|
15
|
-
logger = get_logger('runserver_ngrok')
|
|
16
|
-
|
|
17
15
|
|
|
18
16
|
class Command(RunServerCommand):
|
|
19
17
|
"""Enhanced runserver command with ngrok tunnel support."""
|
|
@@ -25,6 +23,11 @@ class Command(RunServerCommand):
|
|
|
25
23
|
|
|
26
24
|
help = f'{RunServerCommand.help.rstrip(".")} with ngrok tunnel.'
|
|
27
25
|
|
|
26
|
+
def __init__(self, *args, **kwargs):
|
|
27
|
+
"""Initialize with logger."""
|
|
28
|
+
super().__init__(*args, **kwargs)
|
|
29
|
+
self.logger = get_logger('runserver_ngrok')
|
|
30
|
+
|
|
28
31
|
def add_arguments(self, parser):
|
|
29
32
|
super().add_arguments(parser)
|
|
30
33
|
parser.add_argument(
|
|
@@ -76,14 +79,14 @@ class Command(RunServerCommand):
|
|
|
76
79
|
ngrok_service = get_ngrok_service()
|
|
77
80
|
|
|
78
81
|
self.stdout.write("🚇 Starting ngrok tunnel...")
|
|
79
|
-
logger.info(f"Starting ngrok tunnel for port {server_port}")
|
|
82
|
+
self.logger.info(f"Starting ngrok tunnel for port {server_port}")
|
|
80
83
|
|
|
81
84
|
tunnel_url = ngrok_service.start_tunnel(server_port)
|
|
82
85
|
|
|
83
86
|
if tunnel_url:
|
|
84
87
|
# Wait for tunnel to be fully established
|
|
85
88
|
self.stdout.write("⏳ Waiting for tunnel to be established...")
|
|
86
|
-
logger.info("Waiting for ngrok tunnel to be fully established")
|
|
89
|
+
self.logger.info("Waiting for ngrok tunnel to be fully established")
|
|
87
90
|
|
|
88
91
|
max_retries = 10
|
|
89
92
|
retry_count = 0
|
|
@@ -98,10 +101,10 @@ class Command(RunServerCommand):
|
|
|
98
101
|
current_url = ngrok_service.get_tunnel_url()
|
|
99
102
|
if current_url and current_url == tunnel_url:
|
|
100
103
|
tunnel_ready = True
|
|
101
|
-
logger.info(f"Ngrok tunnel established successfully: {tunnel_url}")
|
|
104
|
+
self.logger.info(f"Ngrok tunnel established successfully: {tunnel_url}")
|
|
102
105
|
break
|
|
103
106
|
except Exception as e:
|
|
104
|
-
logger.warning(f"Tunnel check attempt {retry_count} failed: {e}")
|
|
107
|
+
self.logger.warning(f"Tunnel check attempt {retry_count} failed: {e}")
|
|
105
108
|
|
|
106
109
|
self.stdout.write(f"⏳ Tunnel check {retry_count}/{max_retries}...")
|
|
107
110
|
|
|
@@ -116,16 +119,16 @@ class Command(RunServerCommand):
|
|
|
116
119
|
self.stdout.write(
|
|
117
120
|
self.style.SUCCESS(f"✅ Ngrok tunnel ready: {tunnel_url}")
|
|
118
121
|
)
|
|
119
|
-
logger.info(f"Ngrok tunnel fully ready: {tunnel_url}")
|
|
122
|
+
self.logger.info(f"Ngrok tunnel fully ready: {tunnel_url}")
|
|
120
123
|
else:
|
|
121
124
|
self.stdout.write(
|
|
122
125
|
self.style.WARNING("⚠️ Ngrok tunnel started but may not be fully ready")
|
|
123
126
|
)
|
|
124
|
-
logger.warning("Ngrok tunnel started but readiness check failed")
|
|
127
|
+
self.logger.warning("Ngrok tunnel started but readiness check failed")
|
|
125
128
|
else:
|
|
126
129
|
error_msg = "Failed to start ngrok tunnel"
|
|
127
130
|
self.stdout.write(self.style.ERROR(f"❌ {error_msg}"))
|
|
128
|
-
logger.error(error_msg)
|
|
131
|
+
self.logger.error(error_msg)
|
|
129
132
|
|
|
130
133
|
def _set_ngrok_env_vars(self, tunnel_url: str):
|
|
131
134
|
"""Set environment variables with ngrok URL for easy access."""
|
|
@@ -145,10 +148,10 @@ class Command(RunServerCommand):
|
|
|
145
148
|
os.environ['NGROK_API_URL'] = tunnel_url
|
|
146
149
|
|
|
147
150
|
# Environment variables set - no need for verbose output
|
|
148
|
-
logger.info(f"Set ngrok environment variables: {tunnel_url}")
|
|
151
|
+
self.logger.info(f"Set ngrok environment variables: {tunnel_url}")
|
|
149
152
|
|
|
150
153
|
except Exception as e:
|
|
151
|
-
logger.warning(f"Could not set ngrok environment variables: {e}")
|
|
154
|
+
self.logger.warning(f"Could not set ngrok environment variables: {e}")
|
|
152
155
|
|
|
153
156
|
def _update_allowed_hosts(self, tunnel_url: str):
|
|
154
157
|
"""Update ALLOWED_HOSTS with ngrok domain."""
|
|
@@ -164,7 +167,7 @@ class Command(RunServerCommand):
|
|
|
164
167
|
if hasattr(settings, 'ALLOWED_HOSTS'):
|
|
165
168
|
if ngrok_host not in settings.ALLOWED_HOSTS:
|
|
166
169
|
settings.ALLOWED_HOSTS.append(ngrok_host)
|
|
167
|
-
logger.info(f"Added {ngrok_host} to ALLOWED_HOSTS")
|
|
170
|
+
self.logger.info(f"Added {ngrok_host} to ALLOWED_HOSTS")
|
|
168
171
|
|
|
169
172
|
except Exception as e:
|
|
170
|
-
logger.warning(f"Could not update ALLOWED_HOSTS: {e}")
|
|
173
|
+
self.logger.warning(f"Could not update ALLOWED_HOSTS: {e}")
|
|
@@ -4,20 +4,13 @@ Test Telegram Command
|
|
|
4
4
|
Tests Telegram notification functionality using django_cfg configuration.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from django_cfg.management.utils import SafeCommand
|
|
8
8
|
|
|
9
|
-
from django_cfg.modules.django_logging import get_logger
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class Command(BaseCommand):
|
|
10
|
+
class Command(SafeCommand):
|
|
14
11
|
"""Command to test Telegram functionality."""
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
web_executable = True
|
|
18
|
-
requires_input = False
|
|
19
|
-
is_destructive = False
|
|
20
|
-
|
|
13
|
+
command_name = 'test_telegram'
|
|
21
14
|
help = "Test Telegram notification functionality"
|
|
22
15
|
|
|
23
16
|
def add_arguments(self, parser):
|
|
@@ -29,7 +22,7 @@ class Command(BaseCommand):
|
|
|
29
22
|
)
|
|
30
23
|
|
|
31
24
|
def handle(self, *args, **options):
|
|
32
|
-
logger.info("Starting test_telegram command")
|
|
25
|
+
self.logger.info("Starting test_telegram command")
|
|
33
26
|
message = options["message"]
|
|
34
27
|
|
|
35
28
|
self.stdout.write("🚀 Testing Telegram notification service")
|
|
@@ -4,20 +4,13 @@ Test Twilio Command
|
|
|
4
4
|
Tests Twilio messaging functionality using django_cfg configuration.
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
from
|
|
7
|
+
from django_cfg.management.utils import SafeCommand
|
|
8
8
|
|
|
9
|
-
from django_cfg.modules.django_logging import get_logger
|
|
10
9
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
class Command(BaseCommand):
|
|
10
|
+
class Command(SafeCommand):
|
|
14
11
|
"""Command to test Twilio functionality."""
|
|
15
12
|
|
|
16
|
-
|
|
17
|
-
web_executable = True
|
|
18
|
-
requires_input = False
|
|
19
|
-
is_destructive = False
|
|
20
|
-
|
|
13
|
+
command_name = 'test_twilio'
|
|
21
14
|
help = "Test Twilio messaging functionality"
|
|
22
15
|
|
|
23
16
|
def add_arguments(self, parser):
|
|
@@ -45,7 +38,7 @@ class Command(BaseCommand):
|
|
|
45
38
|
)
|
|
46
39
|
|
|
47
40
|
def handle(self, *args, **options):
|
|
48
|
-
logger.info("Starting test_twilio command")
|
|
41
|
+
self.logger.info("Starting test_twilio command")
|
|
49
42
|
to_number = options["to"]
|
|
50
43
|
message = options["message"]
|
|
51
44
|
is_whatsapp = options["whatsapp"]
|