django-cfg 1.4.114__py3-none-any.whl → 1.5.8__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/{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}/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/{agents → business/agents}/management/commands/create_agent.py +1 -1
- django_cfg/apps/{agents → business/agents}/management/commands/orchestrator_status.py +3 -3
- 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}/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 +2 -2
- 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 +4 -4
- django_cfg/apps/{payments → business/payments}/management/commands/create_payment.py +3 -3
- django_cfg/apps/{payments → business/payments}/management/commands/sync_currencies.py +2 -2
- 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 +5 -5
- django_cfg/apps/{centrifugo → integrations/centrifugo}/serializers/__init__.py +2 -2
- 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 +3 -3
- 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 +11 -0
- django_cfg/apps/integrations/grpc/admin/config.py +157 -0
- django_cfg/apps/integrations/grpc/admin/grpc_request_log.py +252 -0
- django_cfg/apps/integrations/grpc/apps.py +108 -0
- django_cfg/apps/integrations/grpc/auth/__init__.py +9 -0
- django_cfg/apps/integrations/grpc/auth/jwt_auth.py +295 -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 +270 -0
- django_cfg/apps/integrations/grpc/interceptors/metrics.py +306 -0
- django_cfg/apps/integrations/grpc/interceptors/request_logger.py +515 -0
- django_cfg/apps/integrations/grpc/management/__init__.py +1 -0
- django_cfg/apps/integrations/grpc/management/commands/rungrpc.py +443 -0
- django_cfg/apps/integrations/grpc/managers/__init__.py +12 -0
- django_cfg/apps/integrations/grpc/managers/grpc_request_log.py +310 -0
- django_cfg/apps/integrations/grpc/managers/grpc_server_status.py +288 -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/models/__init__.py +11 -0
- django_cfg/apps/integrations/grpc/models/grpc_request_log.py +219 -0
- django_cfg/apps/integrations/grpc/models/grpc_server_status.py +270 -0
- django_cfg/apps/integrations/grpc/serializers/__init__.py +67 -0
- django_cfg/apps/integrations/grpc/serializers/charts.py +218 -0
- django_cfg/apps/integrations/grpc/serializers/config.py +106 -0
- django_cfg/apps/integrations/grpc/serializers/health.py +18 -0
- django_cfg/apps/integrations/grpc/serializers/requests.py +18 -0
- django_cfg/apps/integrations/grpc/serializers/service_registry.py +191 -0
- django_cfg/apps/integrations/grpc/serializers/services.py +50 -0
- django_cfg/apps/integrations/grpc/serializers/stats.py +22 -0
- django_cfg/apps/integrations/grpc/serializers/testing.py +105 -0
- django_cfg/apps/integrations/grpc/services/__init__.py +39 -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 +291 -0
- django_cfg/apps/integrations/grpc/services/service_registry.py +328 -0
- django_cfg/apps/integrations/grpc/services/testing_service.py +326 -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 +39 -0
- django_cfg/apps/integrations/grpc/utils/__init__.py +18 -0
- django_cfg/apps/integrations/grpc/utils/proto_gen.py +423 -0
- django_cfg/apps/integrations/grpc/views/__init__.py +15 -0
- django_cfg/apps/integrations/grpc/views/charts.py +217 -0
- django_cfg/apps/integrations/grpc/views/config.py +191 -0
- django_cfg/apps/integrations/grpc/views/monitoring.py +388 -0
- django_cfg/apps/integrations/grpc/views/services.py +289 -0
- django_cfg/apps/integrations/grpc/views/testing.py +306 -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 +882 -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 +400 -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/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/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/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 +3 -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 +318 -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/middleware/authentication.py +1 -1
- 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 +59 -0
- django_cfg/models/api/grpc/config.py +364 -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/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/typescript/operations_generator.py +13 -4
- django_cfg/modules/django_client/core/parser/base.py +49 -0
- django_cfg/modules/django_currency/examples/example_database_usage.py +1 -1
- django_cfg/modules/django_logging/__init__.py +2 -0
- django_cfg/modules/django_logging/django_logger.py +78 -8
- django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
- django_cfg/modules/django_unfold/navigation.py +21 -18
- 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 +7 -1
- 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.114.dist-info → django_cfg-1.5.8.dist-info}/METADATA +106 -60
- django_cfg-1.5.8.dist-info/RECORD +1161 -0
- django_cfg/apps/centrifugo/apps.py +0 -31
- 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 -491
- 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.114.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}/management/commands/otp_test.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}/management/commands/knowbase_stats.py +0 -0
- /django_cfg/apps/{knowbase → business/knowbase}/management/commands/setup_knowbase.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}/serializers/publishes.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/commands.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/commands_service.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}/management/commands/maintenance.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/management/commands/process_scheduled_maintenance.py +0 -0
- /django_cfg/apps/{maintenance → system/maintenance}/management/commands/sync_cloudflare.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.114.dist-info → django_cfg-1.5.8.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.114.dist-info → django_cfg-1.5.8.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.114.dist-info → django_cfg-1.5.8.dist-info}/licenses/LICENSE +0 -0
django_cfg/modules/base.py
CHANGED
|
@@ -156,16 +156,14 @@ class BaseCfgModule(ABC):
|
|
|
156
156
|
"""
|
|
157
157
|
return self._get_config_key('enable_knowbase', False)
|
|
158
158
|
|
|
159
|
-
def
|
|
159
|
+
def should_enable_rq(self) -> bool:
|
|
160
160
|
"""
|
|
161
|
-
Check if django-cfg
|
|
162
|
-
Auto-enables if knowbase or agents are enabled.
|
|
161
|
+
Check if django-cfg RQ is enabled.
|
|
163
162
|
|
|
164
163
|
Returns:
|
|
165
|
-
True if
|
|
164
|
+
True if RQ is enabled, False otherwise
|
|
166
165
|
"""
|
|
167
|
-
|
|
168
|
-
return self.get_config().should_enable_tasks()
|
|
166
|
+
return self.get_config().should_enable_rq()
|
|
169
167
|
|
|
170
168
|
def is_maintenance_enabled(self) -> bool:
|
|
171
169
|
"""
|
|
@@ -206,6 +204,21 @@ class BaseCfgModule(ABC):
|
|
|
206
204
|
|
|
207
205
|
return False
|
|
208
206
|
|
|
207
|
+
def is_grpc_enabled(self) -> bool:
|
|
208
|
+
"""
|
|
209
|
+
Check if django-cfg gRPC is enabled.
|
|
210
|
+
|
|
211
|
+
Returns:
|
|
212
|
+
True if gRPC is enabled, False otherwise
|
|
213
|
+
"""
|
|
214
|
+
grpc_config = self._get_config_key('grpc', None)
|
|
215
|
+
|
|
216
|
+
# Check if grpc config exists and is enabled
|
|
217
|
+
if grpc_config and hasattr(grpc_config, 'enabled'):
|
|
218
|
+
return grpc_config.enabled
|
|
219
|
+
|
|
220
|
+
return False
|
|
221
|
+
|
|
209
222
|
|
|
210
223
|
# Export the base class
|
|
211
224
|
__all__ = [
|
|
@@ -57,6 +57,7 @@ from .config import (
|
|
|
57
57
|
ImageField,
|
|
58
58
|
MarkdownField,
|
|
59
59
|
ResourceConfig,
|
|
60
|
+
ShortUUIDField,
|
|
60
61
|
TextField,
|
|
61
62
|
UserField,
|
|
62
63
|
)
|
|
@@ -116,6 +117,7 @@ __all__ = [
|
|
|
116
117
|
"DateTimeField",
|
|
117
118
|
"ImageField",
|
|
118
119
|
"MarkdownField",
|
|
120
|
+
"ShortUUIDField",
|
|
119
121
|
"TextField",
|
|
120
122
|
"UserField",
|
|
121
123
|
# Advanced
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Django app configuration for django_admin module.
|
|
3
|
+
|
|
4
|
+
This makes django_admin a proper Django app so templates are automatically discovered.
|
|
5
|
+
"""
|
|
6
|
+
from django.apps import AppConfig
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
class DjangoAdminConfig(AppConfig):
|
|
10
|
+
"""Configuration for django_admin module."""
|
|
11
|
+
|
|
12
|
+
default_auto_field = "django.db.models.BigAutoField"
|
|
13
|
+
name = "django_cfg.modules.django_admin"
|
|
14
|
+
label = "django_cfg_admin"
|
|
15
|
+
verbose_name = "Django Admin (django-cfg)"
|
|
16
|
+
|
|
17
|
+
def ready(self):
|
|
18
|
+
"""Called when Django is ready."""
|
|
19
|
+
pass
|
|
@@ -523,7 +523,7 @@ class PydanticAdminMixin:
|
|
|
523
523
|
|
|
524
524
|
# Add Mermaid resources if plugins enabled
|
|
525
525
|
if doc_config.enable_plugins:
|
|
526
|
-
from django_cfg.modules.django_admin.utils.mermaid_plugin import get_mermaid_resources
|
|
526
|
+
from django_cfg.modules.django_admin.utils.markdown.mermaid_plugin import get_mermaid_resources
|
|
527
527
|
extra_context['mermaid_resources'] = get_mermaid_resources()
|
|
528
528
|
|
|
529
529
|
return super().changelist_view(request, extra_context)
|
|
@@ -548,7 +548,7 @@ class PydanticAdminMixin:
|
|
|
548
548
|
|
|
549
549
|
# Add Mermaid resources if plugins enabled
|
|
550
550
|
if doc_config.enable_plugins:
|
|
551
|
-
from django_cfg.modules.django_admin.utils.mermaid_plugin import get_mermaid_resources
|
|
551
|
+
from django_cfg.modules.django_admin.utils.markdown.mermaid_plugin import get_mermaid_resources
|
|
552
552
|
extra_context['mermaid_resources'] = get_mermaid_resources()
|
|
553
553
|
|
|
554
554
|
return super().changeform_view(request, object_id, form_url, extra_context)
|
|
@@ -558,12 +558,14 @@ class PydanticAdminMixin:
|
|
|
558
558
|
Override form field for specific database field types.
|
|
559
559
|
|
|
560
560
|
Automatically detects and customizes encrypted fields from django-crypto-fields.
|
|
561
|
+
Respects the show_encrypted_fields_as_plain_text setting from AdminConfig.
|
|
562
|
+
Uses custom widgets with copy-to-clipboard functionality.
|
|
561
563
|
"""
|
|
562
564
|
# Check if this is an EncryptedTextField or EncryptedCharField
|
|
563
565
|
field_class_name = db_field.__class__.__name__
|
|
564
566
|
if 'Encrypted' in field_class_name and ('TextField' in field_class_name or 'CharField' in field_class_name):
|
|
565
567
|
from django import forms
|
|
566
|
-
from
|
|
568
|
+
from ..widgets import EncryptedFieldWidget, EncryptedPasswordWidget
|
|
567
569
|
|
|
568
570
|
# Determine placeholder based on field name
|
|
569
571
|
placeholder = "Enter value"
|
|
@@ -574,16 +576,25 @@ class PydanticAdminMixin:
|
|
|
574
576
|
elif 'passphrase' in db_field.name.lower():
|
|
575
577
|
placeholder = "Enter Passphrase (if required)"
|
|
576
578
|
|
|
577
|
-
#
|
|
578
|
-
|
|
579
|
+
# Widget attributes
|
|
580
|
+
widget_attrs = {
|
|
581
|
+
'placeholder': placeholder,
|
|
582
|
+
}
|
|
583
|
+
|
|
584
|
+
# Decide widget based on config
|
|
585
|
+
show_plain_text = getattr(self.config, 'show_encrypted_fields_as_plain_text', False)
|
|
586
|
+
|
|
587
|
+
if show_plain_text:
|
|
588
|
+
# Show as plain text with copy button
|
|
589
|
+
widget = EncryptedFieldWidget(attrs=widget_attrs, show_copy_button=True)
|
|
590
|
+
else:
|
|
591
|
+
# Show as password (masked) with copy button
|
|
592
|
+
# render_value=True shows masked value (••••••) after save
|
|
593
|
+
widget = EncryptedPasswordWidget(attrs=widget_attrs, render_value=True, show_copy_button=True)
|
|
594
|
+
|
|
595
|
+
# Return CharField with appropriate widget
|
|
579
596
|
return forms.CharField(
|
|
580
|
-
widget=
|
|
581
|
-
attrs={
|
|
582
|
-
'placeholder': placeholder,
|
|
583
|
-
'class': 'appearance-none block w-full bg-gray-200 text-gray-700 border border-gray-200 rounded py-3 px-4 leading-tight focus:outline-none focus:bg-white focus:border-gray-500'
|
|
584
|
-
},
|
|
585
|
-
render_value=True # Show masked value after save
|
|
586
|
-
),
|
|
597
|
+
widget=widget,
|
|
587
598
|
required=not db_field.blank and not db_field.null,
|
|
588
599
|
help_text=db_field.help_text or "This field is encrypted at rest",
|
|
589
600
|
label=db_field.verbose_name if hasattr(db_field, 'verbose_name') else db_field.name.replace('_', ' ').title()
|
|
@@ -14,6 +14,7 @@ from .field_config import (
|
|
|
14
14
|
DateTimeField,
|
|
15
15
|
ImageField,
|
|
16
16
|
MarkdownField,
|
|
17
|
+
ShortUUIDField,
|
|
17
18
|
TextField,
|
|
18
19
|
UserField,
|
|
19
20
|
)
|
|
@@ -36,6 +37,7 @@ __all__ = [
|
|
|
36
37
|
"DateTimeField",
|
|
37
38
|
"ImageField",
|
|
38
39
|
"MarkdownField",
|
|
40
|
+
"ShortUUIDField",
|
|
39
41
|
"TextField",
|
|
40
42
|
"UserField",
|
|
41
43
|
]
|
|
@@ -148,6 +148,13 @@ class AdminConfig(BaseModel):
|
|
|
148
148
|
description="Markdown documentation configuration"
|
|
149
149
|
)
|
|
150
150
|
|
|
151
|
+
# Encrypted fields options
|
|
152
|
+
show_encrypted_fields_as_plain_text: bool = Field(
|
|
153
|
+
False,
|
|
154
|
+
description="Show encrypted fields (django-crypto-fields) as plain text instead of password masked. "
|
|
155
|
+
"WARNING: This exposes sensitive data in the admin interface. Use only in trusted environments."
|
|
156
|
+
)
|
|
157
|
+
|
|
151
158
|
def get_display_field_config(self, field_name: str) -> Optional[FieldConfig]:
|
|
152
159
|
"""Get FieldConfig for a specific field."""
|
|
153
160
|
for field_config in self.display_fields:
|
|
@@ -18,7 +18,7 @@ class BackgroundTaskConfig(BaseModel):
|
|
|
18
18
|
```python
|
|
19
19
|
background_config = BackgroundTaskConfig(
|
|
20
20
|
enabled=True,
|
|
21
|
-
task_runner='
|
|
21
|
+
task_runner='django_rq',
|
|
22
22
|
batch_size=100,
|
|
23
23
|
timeout=300,
|
|
24
24
|
)
|
|
@@ -35,9 +35,9 @@ class BackgroundTaskConfig(BaseModel):
|
|
|
35
35
|
description="Enable background task processing"
|
|
36
36
|
)
|
|
37
37
|
|
|
38
|
-
task_runner: Literal['
|
|
39
|
-
'
|
|
40
|
-
description="Task runner to use for background operations"
|
|
38
|
+
task_runner: Literal['django_rq', 'sync'] = Field(
|
|
39
|
+
'sync',
|
|
40
|
+
description="Task runner to use for background operations (django_rq or sync)"
|
|
41
41
|
)
|
|
42
42
|
|
|
43
43
|
batch_size: int = Field(
|
|
@@ -341,3 +341,27 @@ class MarkdownField(FieldConfig):
|
|
|
341
341
|
config['header_icon'] = self.header_icon
|
|
342
342
|
|
|
343
343
|
return config
|
|
344
|
+
|
|
345
|
+
|
|
346
|
+
class ShortUUIDField(FieldConfig):
|
|
347
|
+
"""
|
|
348
|
+
Short UUID widget configuration for displaying shortened UUIDs.
|
|
349
|
+
|
|
350
|
+
Examples:
|
|
351
|
+
ShortUUIDField(name="id", length=8)
|
|
352
|
+
ShortUUIDField(name="uuid", length=12, copy_on_click=True)
|
|
353
|
+
"""
|
|
354
|
+
|
|
355
|
+
ui_widget: Literal["short_uuid"] = "short_uuid"
|
|
356
|
+
|
|
357
|
+
length: int = Field(8, description="Number of characters to display from UUID")
|
|
358
|
+
copy_on_click: bool = Field(True, description="Enable click-to-copy functionality")
|
|
359
|
+
show_full_on_hover: bool = Field(True, description="Show full UUID in tooltip on hover")
|
|
360
|
+
|
|
361
|
+
def get_widget_config(self) -> Dict[str, Any]:
|
|
362
|
+
"""Extract short UUID widget configuration."""
|
|
363
|
+
config = super().get_widget_config()
|
|
364
|
+
config['length'] = self.length
|
|
365
|
+
config['copy_on_click'] = self.copy_on_click
|
|
366
|
+
config['show_full_on_hover'] = self.show_full_on_hover
|
|
367
|
+
return config
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Template for encrypted text field with copy button.
|
|
3
|
+
Based on unfold/widgets/text.html with added copy functionality.
|
|
4
|
+
{% endcomment %}
|
|
5
|
+
|
|
6
|
+
<div class="max-w-2xl relative w-full">
|
|
7
|
+
{% if widget.prefix %}
|
|
8
|
+
<span class="absolute left-3 top-0 bottom-0 flex items-center justify-center">
|
|
9
|
+
{{ widget.prefix }}
|
|
10
|
+
</span>
|
|
11
|
+
{% endif %}
|
|
12
|
+
|
|
13
|
+
{% if widget.prefix_icon %}
|
|
14
|
+
<span class="material-symbols-outlined absolute left-3 top-0 bottom-0 flex items-center justify-center text-base-400 dark:text-base-500">
|
|
15
|
+
{{ widget.prefix_icon }}
|
|
16
|
+
</span>
|
|
17
|
+
{% endif %}
|
|
18
|
+
|
|
19
|
+
{% include "django/forms/widgets/input.html" %}
|
|
20
|
+
|
|
21
|
+
{% if widget.suffix %}
|
|
22
|
+
<span class="absolute right-3 top-0 bottom-0 flex items-center justify-center">
|
|
23
|
+
{{ widget.suffix }}
|
|
24
|
+
</span>
|
|
25
|
+
{% endif %}
|
|
26
|
+
|
|
27
|
+
{% if widget.suffix_icon %}
|
|
28
|
+
<span class="material-symbols-outlined absolute right-3 top-0 bottom-0 flex items-center justify-center text-base-400 dark:text-base-500">
|
|
29
|
+
{{ widget.suffix_icon }}
|
|
30
|
+
</span>
|
|
31
|
+
{% endif %}
|
|
32
|
+
|
|
33
|
+
{% if widget.show_copy_button %}
|
|
34
|
+
<button
|
|
35
|
+
type="button"
|
|
36
|
+
onclick="copyEncryptedField(this)"
|
|
37
|
+
class="material-symbols-outlined absolute right-3 top-0 bottom-0 flex items-center justify-center text-base-400 hover:text-primary-600 dark:text-base-500 dark:hover:text-primary-500 cursor-pointer transition-colors"
|
|
38
|
+
title="Copy to clipboard"
|
|
39
|
+
>
|
|
40
|
+
content_copy
|
|
41
|
+
</button>
|
|
42
|
+
{% endif %}
|
|
43
|
+
</div>
|
|
44
|
+
|
|
45
|
+
<script>
|
|
46
|
+
function copyEncryptedField(button) {
|
|
47
|
+
// Get the input field (previous sibling of button's parent)
|
|
48
|
+
const container = button.parentElement;
|
|
49
|
+
const input = container.querySelector('input');
|
|
50
|
+
|
|
51
|
+
if (!input || !input.value) {
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
// Copy to clipboard
|
|
56
|
+
navigator.clipboard.writeText(input.value).then(() => {
|
|
57
|
+
// Visual feedback - change icon temporarily
|
|
58
|
+
const originalIcon = button.textContent;
|
|
59
|
+
button.textContent = 'check';
|
|
60
|
+
button.classList.add('text-green-600', 'dark:text-green-500');
|
|
61
|
+
|
|
62
|
+
// Reset after 2 seconds
|
|
63
|
+
setTimeout(() => {
|
|
64
|
+
button.textContent = originalIcon;
|
|
65
|
+
button.classList.remove('text-green-600', 'dark:text-green-500');
|
|
66
|
+
}, 2000);
|
|
67
|
+
}).catch(err => {
|
|
68
|
+
console.error('Failed to copy:', err);
|
|
69
|
+
// Show error feedback
|
|
70
|
+
const originalIcon = button.textContent;
|
|
71
|
+
button.textContent = 'error';
|
|
72
|
+
button.classList.add('text-red-600', 'dark:text-red-500');
|
|
73
|
+
|
|
74
|
+
setTimeout(() => {
|
|
75
|
+
button.textContent = originalIcon;
|
|
76
|
+
button.classList.remove('text-red-600', 'dark:text-red-500');
|
|
77
|
+
}, 2000);
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
</script>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{% comment %}
|
|
2
|
+
Template for encrypted password field with copy button.
|
|
3
|
+
Based on Django's default password widget with Unfold styling and copy button.
|
|
4
|
+
{% endcomment %}
|
|
5
|
+
|
|
6
|
+
<div class="max-w-2xl relative w-full">
|
|
7
|
+
{% include "django/forms/widgets/input.html" %}
|
|
8
|
+
|
|
9
|
+
{% if widget.show_copy_button %}
|
|
10
|
+
<button
|
|
11
|
+
type="button"
|
|
12
|
+
onclick="copyEncryptedPassword(this)"
|
|
13
|
+
class="material-symbols-outlined absolute right-3 top-0 bottom-0 flex items-center justify-center text-base-400 hover:text-primary-600 dark:text-base-500 dark:hover:text-primary-500 cursor-pointer transition-colors"
|
|
14
|
+
title="Copy to clipboard"
|
|
15
|
+
>
|
|
16
|
+
content_copy
|
|
17
|
+
</button>
|
|
18
|
+
{% endif %}
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<script>
|
|
22
|
+
function copyEncryptedPassword(button) {
|
|
23
|
+
// Get the input field (previous sibling of button's parent)
|
|
24
|
+
const container = button.parentElement;
|
|
25
|
+
const input = container.querySelector('input');
|
|
26
|
+
|
|
27
|
+
if (!input || !input.value) {
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// For password fields, we need to temporarily change type to text to get the real value
|
|
32
|
+
const originalType = input.type;
|
|
33
|
+
input.type = 'text';
|
|
34
|
+
const value = input.value;
|
|
35
|
+
input.type = originalType;
|
|
36
|
+
|
|
37
|
+
// Copy to clipboard
|
|
38
|
+
navigator.clipboard.writeText(value).then(() => {
|
|
39
|
+
// Visual feedback - change icon temporarily
|
|
40
|
+
const originalIcon = button.textContent;
|
|
41
|
+
button.textContent = 'check';
|
|
42
|
+
button.classList.add('text-green-600', 'dark:text-green-500');
|
|
43
|
+
|
|
44
|
+
// Reset after 2 seconds
|
|
45
|
+
setTimeout(() => {
|
|
46
|
+
button.textContent = originalIcon;
|
|
47
|
+
button.classList.remove('text-green-600', 'dark:text-green-500');
|
|
48
|
+
}, 2000);
|
|
49
|
+
}).catch(err => {
|
|
50
|
+
console.error('Failed to copy:', err);
|
|
51
|
+
// Show error feedback
|
|
52
|
+
const originalIcon = button.textContent;
|
|
53
|
+
button.textContent = 'error';
|
|
54
|
+
button.classList.add('text-red-600', 'dark:text-red-500');
|
|
55
|
+
|
|
56
|
+
setTimeout(() => {
|
|
57
|
+
button.textContent = originalIcon;
|
|
58
|
+
button.classList.remove('text-red-600', 'dark:text-red-500');
|
|
59
|
+
}, 2000);
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
</script>
|
|
@@ -1,17 +1,46 @@
|
|
|
1
1
|
"""
|
|
2
|
-
Display and
|
|
2
|
+
Display and utility modules for Django Admin.
|
|
3
|
+
|
|
4
|
+
Refactored structure with logical organization:
|
|
5
|
+
- badges/ - Status badges, progress badges, counter badges
|
|
6
|
+
- displays/ - User displays, money displays, datetime displays
|
|
7
|
+
- html/ - HTML building utilities (organized by functionality)
|
|
8
|
+
- markdown/ - Markdown rendering with Mermaid support
|
|
9
|
+
- decorators.py - Admin field decorators
|
|
10
|
+
- html_builder.py - Backward-compatible facade for self.html.* API
|
|
3
11
|
"""
|
|
4
12
|
|
|
13
|
+
# Badges
|
|
5
14
|
from .badges import CounterBadge, ProgressBadge, StatusBadge
|
|
15
|
+
|
|
16
|
+
# Decorators
|
|
6
17
|
from .decorators import (
|
|
7
18
|
annotated_field,
|
|
8
19
|
badge_field,
|
|
9
20
|
computed_field,
|
|
10
21
|
currency_field,
|
|
11
22
|
)
|
|
23
|
+
|
|
24
|
+
# Displays
|
|
12
25
|
from .displays import DateTimeDisplay, MoneyDisplay, UserDisplay
|
|
26
|
+
|
|
27
|
+
# HTML Builders (organized by functionality)
|
|
28
|
+
from .html import (
|
|
29
|
+
BadgeElements,
|
|
30
|
+
BaseElements,
|
|
31
|
+
CodeElements,
|
|
32
|
+
CompositionElements,
|
|
33
|
+
FormattingElements,
|
|
34
|
+
KeyValueElements,
|
|
35
|
+
MarkdownIntegration,
|
|
36
|
+
ProgressElements,
|
|
37
|
+
)
|
|
38
|
+
|
|
39
|
+
# HtmlBuilder - Backward-compatible facade
|
|
13
40
|
from .html_builder import HtmlBuilder
|
|
14
|
-
|
|
41
|
+
|
|
42
|
+
# Markdown
|
|
43
|
+
from .markdown import MarkdownRenderer
|
|
15
44
|
|
|
16
45
|
__all__ = [
|
|
17
46
|
# Display utilities
|
|
@@ -22,7 +51,16 @@ __all__ = [
|
|
|
22
51
|
"StatusBadge",
|
|
23
52
|
"ProgressBadge",
|
|
24
53
|
"CounterBadge",
|
|
25
|
-
# HTML
|
|
54
|
+
# HTML Builders (modular)
|
|
55
|
+
"BaseElements",
|
|
56
|
+
"CodeElements",
|
|
57
|
+
"BadgeElements",
|
|
58
|
+
"CompositionElements",
|
|
59
|
+
"FormattingElements",
|
|
60
|
+
"KeyValueElements",
|
|
61
|
+
"ProgressElements",
|
|
62
|
+
"MarkdownIntegration",
|
|
63
|
+
# HTML Builder (backward-compatible facade)
|
|
26
64
|
"HtmlBuilder",
|
|
27
65
|
# Markdown Renderer
|
|
28
66
|
"MarkdownRenderer",
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Badge utilities for Django Admin.
|
|
3
|
+
|
|
4
|
+
Provides StatusBadge, ProgressBadge, and CounterBadge classes.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .status_badges import CounterBadge, ProgressBadge, StatusBadge
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"StatusBadge",
|
|
11
|
+
"ProgressBadge",
|
|
12
|
+
"CounterBadge",
|
|
13
|
+
]
|
|
@@ -9,9 +9,9 @@ from django.contrib.humanize.templatetags.humanize import intcomma
|
|
|
9
9
|
from django.utils.html import escape, format_html
|
|
10
10
|
from django.utils.safestring import SafeString
|
|
11
11
|
|
|
12
|
-
from
|
|
13
|
-
from
|
|
14
|
-
from
|
|
12
|
+
from ...icons import Icons
|
|
13
|
+
from ...models.badge_models import StatusBadgeConfig
|
|
14
|
+
from ...models.base import BadgeVariant
|
|
15
15
|
|
|
16
16
|
logger = logging.getLogger(__name__)
|
|
17
17
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Display utilities for Django Admin.
|
|
3
|
+
|
|
4
|
+
Provides UserDisplay, MoneyDisplay, and DateTimeDisplay classes.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .data_displays import DateTimeDisplay, MoneyDisplay, UserDisplay
|
|
8
|
+
|
|
9
|
+
__all__ = [
|
|
10
|
+
"UserDisplay",
|
|
11
|
+
"MoneyDisplay",
|
|
12
|
+
"DateTimeDisplay",
|
|
13
|
+
]
|
|
@@ -12,8 +12,8 @@ from django.utils import timezone
|
|
|
12
12
|
from django.utils.html import escape, format_html
|
|
13
13
|
from django.utils.safestring import SafeString
|
|
14
14
|
|
|
15
|
-
from
|
|
16
|
-
from
|
|
15
|
+
from ...icons import Icons
|
|
16
|
+
from ...models.display_models import DateTimeDisplayConfig, MoneyDisplayConfig, UserDisplayConfig
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
19
|
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"""
|
|
2
|
+
HTML builder module - organized and modular.
|
|
3
|
+
|
|
4
|
+
Exports all HTML building classes for easy access.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from .badges import BadgeElements
|
|
8
|
+
from .base import BaseElements
|
|
9
|
+
from .code import CodeElements
|
|
10
|
+
from .composition import CompositionElements
|
|
11
|
+
from .formatting import FormattingElements
|
|
12
|
+
from .keyvalue import KeyValueElements
|
|
13
|
+
from .markdown_integration import MarkdownIntegration
|
|
14
|
+
from .progress import ProgressElements
|
|
15
|
+
|
|
16
|
+
__all__ = [
|
|
17
|
+
# Core elements
|
|
18
|
+
"BaseElements",
|
|
19
|
+
"CodeElements",
|
|
20
|
+
"BadgeElements",
|
|
21
|
+
"CompositionElements",
|
|
22
|
+
"FormattingElements",
|
|
23
|
+
"KeyValueElements",
|
|
24
|
+
"ProgressElements",
|
|
25
|
+
"MarkdownIntegration",
|
|
26
|
+
]
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Badge elements for Django Admin.
|
|
3
|
+
|
|
4
|
+
Provides badge rendering with variants and icons.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from typing import Optional
|
|
8
|
+
|
|
9
|
+
from django.utils.html import escape, format_html
|
|
10
|
+
from django.utils.safestring import SafeString
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class BadgeElements:
|
|
14
|
+
"""Badge display elements."""
|
|
15
|
+
|
|
16
|
+
@staticmethod
|
|
17
|
+
def badge(text: any, variant: str = "primary", icon: Optional[str] = None) -> SafeString:
|
|
18
|
+
"""
|
|
19
|
+
Render badge with optional icon.
|
|
20
|
+
|
|
21
|
+
Args:
|
|
22
|
+
text: Badge text
|
|
23
|
+
variant: primary, success, warning, danger, info, secondary
|
|
24
|
+
icon: Optional Material Icon
|
|
25
|
+
|
|
26
|
+
Usage:
|
|
27
|
+
html.badge("Active", variant="success", icon=Icons.CHECK_CIRCLE)
|
|
28
|
+
"""
|
|
29
|
+
variant_classes = {
|
|
30
|
+
'success': 'bg-success-100 text-success-800 dark:bg-success-900 dark:text-success-200',
|
|
31
|
+
'warning': 'bg-warning-100 text-warning-800 dark:bg-warning-900 dark:text-warning-200',
|
|
32
|
+
'danger': 'bg-danger-100 text-danger-800 dark:bg-danger-900 dark:text-danger-200',
|
|
33
|
+
'info': 'bg-info-100 text-info-800 dark:bg-info-900 dark:text-info-200',
|
|
34
|
+
'primary': 'bg-primary-100 text-primary-800 dark:bg-primary-900 dark:text-primary-200',
|
|
35
|
+
'secondary': 'bg-base-100 text-font-default-light dark:bg-base-800 dark:text-font-default-dark',
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
css_classes = variant_classes.get(variant, variant_classes['primary'])
|
|
39
|
+
|
|
40
|
+
icon_html = ""
|
|
41
|
+
if icon:
|
|
42
|
+
icon_html = format_html('<span class="material-symbols-outlined text-xs mr-1">{}</span>', icon)
|
|
43
|
+
|
|
44
|
+
# Check if text is already safe HTML (e.g., from self.html.number() or self.html.inline())
|
|
45
|
+
if isinstance(text, SafeString):
|
|
46
|
+
# Already safe, don't escape
|
|
47
|
+
text_html = text
|
|
48
|
+
else:
|
|
49
|
+
# Regular text, escape for safety
|
|
50
|
+
text_html = escape(str(text))
|
|
51
|
+
|
|
52
|
+
return format_html(
|
|
53
|
+
'<span class="inline-flex items-center rounded-full px-2.5 py-0.5 text-xs font-medium {}">{}{}</span>',
|
|
54
|
+
css_classes, icon_html, text_html
|
|
55
|
+
)
|