django-cfg 1.4.48__py3-none-any.whl → 1.5.7__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.

Files changed (1022) hide show
  1. django_cfg/__init__.py +6 -1
  2. django_cfg/apps/api/endpoints/README.md +144 -0
  3. django_cfg/apps/api/endpoints/endpoints_status/__init__.py +13 -0
  4. django_cfg/apps/api/endpoints/urls.py +13 -6
  5. django_cfg/apps/api/endpoints/urls_list/__init__.py +10 -0
  6. django_cfg/apps/api/endpoints/urls_list/serializers.py +74 -0
  7. django_cfg/apps/api/endpoints/urls_list/views.py +231 -0
  8. django_cfg/apps/api/health/drf_views.py +36 -0
  9. django_cfg/apps/api/health/serializers.py +4 -0
  10. django_cfg/apps/business/accounts/admin/inlines.py +177 -0
  11. django_cfg/apps/business/accounts/admin/user_admin.py +318 -0
  12. django_cfg/apps/business/accounts/apps.py +19 -0
  13. django_cfg/apps/business/accounts/managers/user_manager.py +299 -0
  14. django_cfg/apps/business/accounts/migrations/0001_initial.py +119 -0
  15. django_cfg/apps/business/accounts/services/otp_service.py +194 -0
  16. django_cfg/apps/business/accounts/views/profile.py +175 -0
  17. django_cfg/apps/business/agents/__init__.py +68 -0
  18. django_cfg/apps/business/agents/apps.py +31 -0
  19. django_cfg/apps/business/agents/integration/registry.py +348 -0
  20. django_cfg/apps/business/agents/management/commands/create_agent.py +366 -0
  21. django_cfg/apps/business/agents/management/commands/orchestrator_status.py +192 -0
  22. django_cfg/apps/business/agents/patterns/content_agents.py +235 -0
  23. django_cfg/apps/business/knowbase/__init__.py +27 -0
  24. django_cfg/apps/business/knowbase/apps.py +75 -0
  25. django_cfg/apps/business/knowbase/examples/__init__.py +3 -0
  26. django_cfg/apps/business/knowbase/examples/external_data_usage.py +194 -0
  27. django_cfg/apps/business/knowbase/mixins/examples/vehicle_model_example.py +200 -0
  28. django_cfg/apps/business/knowbase/mixins/service.py +364 -0
  29. django_cfg/apps/business/knowbase/models/external_data.py +370 -0
  30. django_cfg/apps/business/knowbase/services/archive/vectorization_service.py +365 -0
  31. django_cfg/apps/business/knowbase/services/embedding/async_processor.py +242 -0
  32. django_cfg/apps/business/knowbase/services/embedding/batch_processor.py +253 -0
  33. django_cfg/apps/business/knowbase/services/embedding/processors.py +152 -0
  34. django_cfg/apps/business/knowbase/services/embedding/utils.py +176 -0
  35. django_cfg/apps/business/knowbase/tasks/document_processing.py +354 -0
  36. django_cfg/apps/business/knowbase/utils/chunk_settings.py +264 -0
  37. django_cfg/apps/business/knowbase/views/archive_views.py +472 -0
  38. django_cfg/apps/business/knowbase/views/base.py +51 -0
  39. django_cfg/apps/business/leads/apps.py +16 -0
  40. django_cfg/apps/business/newsletter/admin/newsletter_admin.py +798 -0
  41. django_cfg/apps/business/newsletter/apps.py +22 -0
  42. django_cfg/apps/business/newsletter/management/commands/test_newsletter.py +139 -0
  43. django_cfg/apps/business/payments/__init__.py +14 -0
  44. django_cfg/apps/business/payments/admin/balance_admin.py +375 -0
  45. django_cfg/apps/business/payments/admin/payment_admin.py +293 -0
  46. django_cfg/apps/business/payments/admin/withdrawal_admin.py +320 -0
  47. django_cfg/apps/business/payments/apps.py +23 -0
  48. django_cfg/apps/business/payments/management/commands/check_payment_status.py +290 -0
  49. django_cfg/apps/business/payments/management/commands/create_payment.py +346 -0
  50. django_cfg/apps/business/payments/management/commands/sync_currencies.py +254 -0
  51. django_cfg/apps/business/payments/urls.py +14 -0
  52. django_cfg/apps/business/support/apps.py +11 -0
  53. django_cfg/apps/business/support/managers/message_manager.py +34 -0
  54. django_cfg/apps/business/support/managers/ticket_manager.py +68 -0
  55. django_cfg/apps/business/support/utils/support_email_service.py +111 -0
  56. django_cfg/apps/business/support/views/api.py +178 -0
  57. django_cfg/apps/integrations/centrifugo/__init__.py +57 -0
  58. django_cfg/apps/integrations/centrifugo/_cfg/README_DEPENDENCIES.md +260 -0
  59. django_cfg/apps/integrations/centrifugo/_cfg/__init__.py +25 -0
  60. django_cfg/apps/integrations/centrifugo/_cfg/check_deps.py +34 -0
  61. django_cfg/apps/integrations/centrifugo/_cfg/dependencies.py +309 -0
  62. django_cfg/apps/integrations/centrifugo/admin/__init__.py +13 -0
  63. django_cfg/apps/integrations/centrifugo/admin/centrifugo_log.py +211 -0
  64. django_cfg/apps/integrations/centrifugo/admin/config.py +82 -0
  65. django_cfg/apps/integrations/centrifugo/apps.py +100 -0
  66. django_cfg/apps/integrations/centrifugo/codegen/IMPLEMENTATION_SUMMARY.md +475 -0
  67. django_cfg/apps/integrations/centrifugo/codegen/README.md +242 -0
  68. django_cfg/apps/integrations/centrifugo/codegen/USAGE.md +616 -0
  69. django_cfg/apps/integrations/centrifugo/codegen/__init__.py +19 -0
  70. django_cfg/apps/integrations/centrifugo/codegen/discovery.py +246 -0
  71. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/__init__.py +5 -0
  72. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/generator.py +174 -0
  73. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/README.md.j2 +182 -0
  74. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/client.go.j2 +64 -0
  75. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/go.mod.j2 +10 -0
  76. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/rpc_client.go.j2 +300 -0
  77. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/rpc_client.go.j2.old +267 -0
  78. django_cfg/apps/integrations/centrifugo/codegen/generators/go_thin/templates/types.go.j2 +16 -0
  79. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/__init__.py +7 -0
  80. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/generator.py +241 -0
  81. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/README.md.j2 +128 -0
  82. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/__init__.py.j2 +22 -0
  83. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/client.py.j2 +73 -0
  84. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/models.py.j2 +19 -0
  85. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/requirements.txt.j2 +8 -0
  86. django_cfg/apps/integrations/centrifugo/codegen/generators/python_thin/templates/rpc_client.py.j2 +193 -0
  87. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/__init__.py +5 -0
  88. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/generator.py +124 -0
  89. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/README.md.j2 +38 -0
  90. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/client.ts.j2 +25 -0
  91. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/index.ts.j2 +12 -0
  92. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/package.json.j2 +13 -0
  93. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/rpc-client.ts.j2 +137 -0
  94. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/tsconfig.json.j2 +14 -0
  95. django_cfg/apps/integrations/centrifugo/codegen/generators/typescript_thin/templates/types.ts.j2 +9 -0
  96. django_cfg/apps/integrations/centrifugo/codegen/utils/__init__.py +37 -0
  97. django_cfg/apps/integrations/centrifugo/codegen/utils/naming.py +155 -0
  98. django_cfg/apps/integrations/centrifugo/codegen/utils/type_converter.py +349 -0
  99. django_cfg/apps/integrations/centrifugo/decorators.py +137 -0
  100. django_cfg/apps/integrations/centrifugo/management/__init__.py +1 -0
  101. django_cfg/apps/integrations/centrifugo/management/commands/__init__.py +1 -0
  102. django_cfg/apps/integrations/centrifugo/management/commands/generate_centrifugo_clients.py +254 -0
  103. django_cfg/apps/integrations/centrifugo/managers/__init__.py +12 -0
  104. django_cfg/apps/integrations/centrifugo/managers/centrifugo_log.py +264 -0
  105. django_cfg/apps/integrations/centrifugo/migrations/0001_initial.py +164 -0
  106. django_cfg/apps/integrations/centrifugo/migrations/__init__.py +3 -0
  107. django_cfg/apps/integrations/centrifugo/models/__init__.py +11 -0
  108. django_cfg/apps/integrations/centrifugo/models/centrifugo_log.py +210 -0
  109. django_cfg/apps/integrations/centrifugo/registry.py +106 -0
  110. django_cfg/apps/integrations/centrifugo/router.py +125 -0
  111. django_cfg/apps/integrations/centrifugo/serializers/__init__.py +40 -0
  112. django_cfg/apps/integrations/centrifugo/serializers/admin_api.py +264 -0
  113. django_cfg/apps/integrations/centrifugo/serializers/channels.py +29 -0
  114. django_cfg/apps/integrations/centrifugo/serializers/health.py +17 -0
  115. django_cfg/apps/integrations/centrifugo/serializers/publishes.py +18 -0
  116. django_cfg/apps/integrations/centrifugo/serializers/stats.py +21 -0
  117. django_cfg/apps/integrations/centrifugo/services/__init__.py +12 -0
  118. django_cfg/apps/integrations/centrifugo/services/client/__init__.py +29 -0
  119. django_cfg/apps/integrations/centrifugo/services/client/client.py +582 -0
  120. django_cfg/apps/integrations/centrifugo/services/client/config.py +236 -0
  121. django_cfg/apps/integrations/centrifugo/services/client/exceptions.py +212 -0
  122. django_cfg/apps/integrations/centrifugo/services/config_helper.py +63 -0
  123. django_cfg/apps/integrations/centrifugo/services/dashboard_notifier.py +157 -0
  124. django_cfg/apps/integrations/centrifugo/services/logging.py +677 -0
  125. django_cfg/apps/integrations/centrifugo/urls.py +31 -0
  126. django_cfg/apps/integrations/centrifugo/views/__init__.py +13 -0
  127. django_cfg/apps/integrations/centrifugo/views/admin_api.py +377 -0
  128. django_cfg/apps/integrations/centrifugo/views/monitoring.py +393 -0
  129. django_cfg/apps/integrations/centrifugo/views/testing_api.py +481 -0
  130. django_cfg/apps/integrations/grpc/__init__.py +9 -0
  131. django_cfg/apps/integrations/grpc/_cfg/README_DEPENDENCIES.md +307 -0
  132. django_cfg/apps/integrations/grpc/_cfg/__init__.py +25 -0
  133. django_cfg/apps/integrations/grpc/_cfg/check_deps.py +34 -0
  134. django_cfg/apps/integrations/grpc/_cfg/dependencies.py +484 -0
  135. django_cfg/apps/integrations/grpc/admin/__init__.py +11 -0
  136. django_cfg/apps/integrations/grpc/admin/config.py +157 -0
  137. django_cfg/apps/integrations/grpc/admin/grpc_request_log.py +252 -0
  138. django_cfg/apps/integrations/grpc/apps.py +108 -0
  139. django_cfg/apps/integrations/grpc/auth/__init__.py +9 -0
  140. django_cfg/apps/integrations/grpc/auth/jwt_auth.py +295 -0
  141. django_cfg/apps/integrations/grpc/interceptors/__init__.py +19 -0
  142. django_cfg/apps/integrations/grpc/interceptors/errors.py +241 -0
  143. django_cfg/apps/integrations/grpc/interceptors/logging.py +270 -0
  144. django_cfg/apps/integrations/grpc/interceptors/metrics.py +306 -0
  145. django_cfg/apps/integrations/grpc/interceptors/request_logger.py +515 -0
  146. django_cfg/apps/integrations/grpc/management/__init__.py +1 -0
  147. django_cfg/apps/integrations/grpc/management/commands/rungrpc.py +443 -0
  148. django_cfg/apps/integrations/grpc/managers/__init__.py +12 -0
  149. django_cfg/apps/integrations/grpc/managers/grpc_request_log.py +310 -0
  150. django_cfg/apps/integrations/grpc/managers/grpc_server_status.py +288 -0
  151. django_cfg/apps/integrations/grpc/migrations/0001_initial.py +69 -0
  152. django_cfg/apps/integrations/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py +38 -0
  153. django_cfg/apps/integrations/grpc/migrations/0003_grpcserverstatus.py +119 -0
  154. django_cfg/apps/integrations/grpc/migrations/0004_grpcserverstatus_registered_services.py +22 -0
  155. django_cfg/apps/integrations/grpc/models/__init__.py +11 -0
  156. django_cfg/apps/integrations/grpc/models/grpc_request_log.py +219 -0
  157. django_cfg/apps/integrations/grpc/models/grpc_server_status.py +270 -0
  158. django_cfg/apps/integrations/grpc/serializers/__init__.py +67 -0
  159. django_cfg/apps/integrations/grpc/serializers/charts.py +218 -0
  160. django_cfg/apps/integrations/grpc/serializers/config.py +106 -0
  161. django_cfg/apps/integrations/grpc/serializers/health.py +18 -0
  162. django_cfg/apps/integrations/grpc/serializers/requests.py +18 -0
  163. django_cfg/apps/integrations/grpc/serializers/service_registry.py +191 -0
  164. django_cfg/apps/integrations/grpc/serializers/services.py +50 -0
  165. django_cfg/apps/integrations/grpc/serializers/stats.py +22 -0
  166. django_cfg/apps/integrations/grpc/serializers/testing.py +105 -0
  167. django_cfg/apps/integrations/grpc/services/__init__.py +39 -0
  168. django_cfg/apps/integrations/grpc/services/base.py +375 -0
  169. django_cfg/apps/integrations/grpc/services/chart_generator.py +475 -0
  170. django_cfg/apps/integrations/grpc/services/config_helper.py +146 -0
  171. django_cfg/apps/integrations/grpc/services/discovery.py +571 -0
  172. django_cfg/apps/integrations/grpc/services/grpc_client.py +590 -0
  173. django_cfg/apps/integrations/grpc/services/monitoring_service.py +291 -0
  174. django_cfg/apps/integrations/grpc/services/service_registry.py +328 -0
  175. django_cfg/apps/integrations/grpc/services/testing_service.py +326 -0
  176. django_cfg/apps/integrations/grpc/testing/__init__.py +12 -0
  177. django_cfg/apps/integrations/grpc/testing/examples.py +263 -0
  178. django_cfg/apps/integrations/grpc/urls.py +39 -0
  179. django_cfg/apps/integrations/grpc/utils/__init__.py +18 -0
  180. django_cfg/apps/integrations/grpc/utils/proto_gen.py +423 -0
  181. django_cfg/apps/integrations/grpc/views/__init__.py +15 -0
  182. django_cfg/apps/integrations/grpc/views/charts.py +217 -0
  183. django_cfg/apps/integrations/grpc/views/config.py +191 -0
  184. django_cfg/apps/integrations/grpc/views/monitoring.py +388 -0
  185. django_cfg/apps/integrations/grpc/views/services.py +289 -0
  186. django_cfg/apps/integrations/grpc/views/testing.py +306 -0
  187. django_cfg/apps/integrations/rq/__init__.py +9 -0
  188. django_cfg/apps/integrations/rq/_cfg/__init__.py +28 -0
  189. django_cfg/apps/integrations/rq/_cfg/dependencies.py +313 -0
  190. django_cfg/apps/integrations/rq/apps.py +157 -0
  191. django_cfg/apps/integrations/rq/management/__init__.py +1 -0
  192. django_cfg/apps/integrations/rq/management/commands/__init__.py +1 -0
  193. django_cfg/apps/integrations/rq/management/commands/rqscheduler.py +31 -0
  194. django_cfg/apps/integrations/rq/management/commands/rqstats.py +33 -0
  195. django_cfg/apps/integrations/rq/management/commands/rqworker.py +31 -0
  196. django_cfg/apps/integrations/rq/management/commands/rqworker_pool.py +27 -0
  197. django_cfg/apps/integrations/rq/serializers/__init__.py +40 -0
  198. django_cfg/apps/integrations/rq/serializers/health.py +60 -0
  199. django_cfg/apps/integrations/rq/serializers/job.py +100 -0
  200. django_cfg/apps/integrations/rq/serializers/queue.py +80 -0
  201. django_cfg/apps/integrations/rq/serializers/schedule.py +178 -0
  202. django_cfg/apps/integrations/rq/serializers/testing.py +139 -0
  203. django_cfg/apps/integrations/rq/serializers/worker.py +58 -0
  204. django_cfg/apps/integrations/rq/services/__init__.py +25 -0
  205. django_cfg/apps/integrations/rq/services/config_helper.py +233 -0
  206. django_cfg/apps/integrations/rq/services/models/README.md +417 -0
  207. django_cfg/apps/integrations/rq/services/models/__init__.py +30 -0
  208. django_cfg/apps/integrations/rq/services/models/event.py +123 -0
  209. django_cfg/apps/integrations/rq/services/models/job.py +99 -0
  210. django_cfg/apps/integrations/rq/services/models/queue.py +92 -0
  211. django_cfg/apps/integrations/rq/services/models/worker.py +104 -0
  212. django_cfg/apps/integrations/rq/services/rq_converters.py +183 -0
  213. django_cfg/apps/integrations/rq/tasks/__init__.py +23 -0
  214. django_cfg/apps/integrations/rq/tasks/demo_tasks.py +284 -0
  215. django_cfg/apps/integrations/rq/urls.py +54 -0
  216. django_cfg/apps/integrations/rq/views/__init__.py +19 -0
  217. django_cfg/apps/integrations/rq/views/jobs.py +882 -0
  218. django_cfg/apps/integrations/rq/views/monitoring.py +248 -0
  219. django_cfg/apps/integrations/rq/views/queues.py +261 -0
  220. django_cfg/apps/integrations/rq/views/schedule.py +400 -0
  221. django_cfg/apps/integrations/rq/views/testing.py +761 -0
  222. django_cfg/apps/integrations/rq/views/workers.py +195 -0
  223. django_cfg/apps/system/dashboard/TRANSACTION_FIX.md +73 -0
  224. django_cfg/apps/system/dashboard/__init__.py +8 -0
  225. django_cfg/apps/system/dashboard/apps.py +23 -0
  226. django_cfg/apps/system/dashboard/serializers/__init__.py +67 -0
  227. django_cfg/apps/system/dashboard/serializers/activity.py +38 -0
  228. django_cfg/apps/system/dashboard/serializers/apizones.py +26 -0
  229. django_cfg/apps/system/dashboard/serializers/base.py +16 -0
  230. django_cfg/apps/system/dashboard/serializers/charts.py +44 -0
  231. django_cfg/apps/system/dashboard/serializers/commands.py +55 -0
  232. django_cfg/apps/system/dashboard/serializers/config.py +245 -0
  233. django_cfg/apps/system/dashboard/serializers/overview.py +45 -0
  234. django_cfg/apps/system/dashboard/serializers/statistics.py +46 -0
  235. django_cfg/apps/system/dashboard/serializers/system.py +58 -0
  236. django_cfg/apps/system/dashboard/services/__init__.py +24 -0
  237. django_cfg/apps/system/dashboard/services/apizones_service.py +119 -0
  238. django_cfg/apps/system/dashboard/services/charts_service.py +267 -0
  239. django_cfg/apps/system/dashboard/services/commands_security.py +228 -0
  240. django_cfg/apps/system/dashboard/services/commands_service.py +341 -0
  241. django_cfg/apps/system/dashboard/services/config_service.py +393 -0
  242. django_cfg/apps/system/dashboard/services/overview_service.py +205 -0
  243. django_cfg/apps/system/dashboard/services/statistics_service.py +402 -0
  244. django_cfg/apps/system/dashboard/services/system_health_service.py +328 -0
  245. django_cfg/apps/system/dashboard/urls.py +45 -0
  246. django_cfg/apps/system/dashboard/views/__init__.py +25 -0
  247. django_cfg/apps/system/dashboard/views/activity_views.py +81 -0
  248. django_cfg/apps/system/dashboard/views/apizones_views.py +72 -0
  249. django_cfg/apps/system/dashboard/views/charts_views.py +158 -0
  250. django_cfg/apps/system/dashboard/views/commands_views.py +158 -0
  251. django_cfg/apps/system/dashboard/views/config_views.py +69 -0
  252. django_cfg/apps/system/dashboard/views/overview_views.py +106 -0
  253. django_cfg/apps/system/dashboard/views/statistics_views.py +104 -0
  254. django_cfg/apps/system/dashboard/views/system_views.py +72 -0
  255. django_cfg/apps/system/frontend/JWT_AUTO_INJECTION.md +224 -0
  256. django_cfg/apps/system/frontend/__init__.py +18 -0
  257. django_cfg/apps/system/frontend/apps.py +15 -0
  258. django_cfg/apps/system/frontend/setup.py +105 -0
  259. django_cfg/apps/system/frontend/templates/frontend/404.html +87 -0
  260. django_cfg/apps/system/frontend/test_routing.py +134 -0
  261. django_cfg/apps/system/frontend/urls.py +12 -0
  262. django_cfg/apps/system/frontend/views.py +376 -0
  263. django_cfg/apps/system/maintenance/__init__.py +56 -0
  264. django_cfg/apps/system/maintenance/admin/api_key_admin.py +209 -0
  265. django_cfg/apps/system/maintenance/admin/scheduled_admin.py +226 -0
  266. django_cfg/apps/system/maintenance/admin/site_admin.py +287 -0
  267. django_cfg/apps/system/maintenance/apps.py +18 -0
  268. django_cfg/apps/system/maintenance/migrations/__init__.py +0 -0
  269. django_cfg/apps/system/maintenance/models/__init__.py +29 -0
  270. django_cfg/apps/system/maintenance/services/__init__.py +42 -0
  271. django_cfg/apps/urls.py +63 -111
  272. django_cfg/cli/commands/info.py +1 -1
  273. django_cfg/cli/utils.py +1 -1
  274. django_cfg/config.py +6 -4
  275. django_cfg/core/backends/__init__.py +1 -0
  276. django_cfg/core/backends/smtp.py +69 -0
  277. django_cfg/core/base/config_model.py +69 -65
  278. django_cfg/core/builders/apps_builder.py +29 -74
  279. django_cfg/core/builders/security_builder.py +271 -3
  280. django_cfg/core/constants.py +5 -0
  281. django_cfg/core/debug/README.md +116 -0
  282. django_cfg/core/debug/__init__.py +7 -0
  283. django_cfg/core/debug/example_config.py +63 -0
  284. django_cfg/core/debug/warnings_helper.py +121 -0
  285. django_cfg/core/generation/core_generators/static.py +5 -0
  286. django_cfg/core/generation/core_generators/templates.py +38 -23
  287. django_cfg/core/generation/data_generators/cache.py +28 -2
  288. django_cfg/core/generation/integration_generators/__init__.py +4 -3
  289. django_cfg/core/generation/integration_generators/api.py +9 -0
  290. django_cfg/core/generation/integration_generators/django_rq.py +80 -0
  291. django_cfg/core/generation/integration_generators/grpc_generator.py +318 -0
  292. django_cfg/core/generation/integration_generators/third_party.py +8 -8
  293. django_cfg/core/generation/orchestrator.py +29 -6
  294. django_cfg/core/generation/security_generators/crypto_fields.py +72 -0
  295. django_cfg/core/integration/display/__init__.py +2 -0
  296. django_cfg/core/integration/display/base.py +51 -0
  297. django_cfg/core/integration/display/grpc_display.py +144 -0
  298. django_cfg/core/integration/display/startup.py +49 -75
  299. django_cfg/core/integration/url_integration.py +88 -3
  300. django_cfg/core/utils/__init__.py +5 -0
  301. django_cfg/core/utils/url_helpers.py +73 -0
  302. django_cfg/management/commands/check_endpoints.py +1 -1
  303. django_cfg/management/commands/superuser.py +0 -32
  304. django_cfg/middleware/README.md +372 -0
  305. django_cfg/middleware/__init__.py +6 -0
  306. django_cfg/middleware/admin_notifications.py +206 -0
  307. django_cfg/middleware/authentication.py +184 -0
  308. django_cfg/mixins/__init__.py +14 -0
  309. django_cfg/mixins/admin_api.py +37 -0
  310. django_cfg/mixins/client_api.py +39 -0
  311. django_cfg/mixins/superadmin_api.py +59 -0
  312. django_cfg/models/__init__.py +8 -1
  313. django_cfg/models/api/config.py +2 -2
  314. django_cfg/models/api/drf/config.py +4 -2
  315. django_cfg/models/api/grpc/__init__.py +59 -0
  316. django_cfg/models/api/grpc/config.py +364 -0
  317. django_cfg/models/django/__init__.py +5 -0
  318. django_cfg/models/django/axes.py +187 -0
  319. django_cfg/models/django/constance.py +3 -9
  320. django_cfg/models/django/crypto_fields.py +135 -0
  321. django_cfg/models/django/django_rq.py +632 -0
  322. django_cfg/models/django/revolution_legacy.py +8 -8
  323. django_cfg/models/services/email.py +11 -1
  324. django_cfg/modules/base.py +26 -13
  325. django_cfg/modules/django_admin/__init__.py +12 -0
  326. django_cfg/modules/django_admin/apps.py +19 -0
  327. django_cfg/modules/django_admin/base/pydantic_admin.py +277 -7
  328. django_cfg/modules/django_admin/config/__init__.py +11 -0
  329. django_cfg/modules/django_admin/config/admin_config.py +35 -1
  330. django_cfg/modules/django_admin/config/background_task_config.py +76 -0
  331. django_cfg/modules/django_admin/config/documentation_config.py +406 -0
  332. django_cfg/modules/django_admin/config/field_config.py +111 -0
  333. django_cfg/modules/django_admin/config/resource_config.py +129 -0
  334. django_cfg/modules/django_admin/templates/django_admin/change_form_docs.html +23 -0
  335. django_cfg/modules/django_admin/templates/django_admin/change_list_docs.html +23 -0
  336. django_cfg/modules/django_admin/templates/django_admin/documentation_block.html +303 -0
  337. django_cfg/modules/django_admin/templates/django_admin/markdown_docs_block.html +37 -0
  338. django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_field.html +80 -0
  339. django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_password.html +62 -0
  340. django_cfg/modules/django_admin/utils/__init__.py +43 -2
  341. django_cfg/modules/django_admin/utils/badges/__init__.py +13 -0
  342. django_cfg/modules/django_admin/utils/badges/status_badges.py +171 -0
  343. django_cfg/modules/django_admin/utils/displays/__init__.py +13 -0
  344. django_cfg/modules/django_admin/utils/displays/data_displays.py +203 -0
  345. django_cfg/modules/django_admin/utils/html/__init__.py +26 -0
  346. django_cfg/modules/django_admin/utils/html/badges.py +55 -0
  347. django_cfg/modules/django_admin/utils/html/base.py +167 -0
  348. django_cfg/modules/django_admin/utils/html/code.py +87 -0
  349. django_cfg/modules/django_admin/utils/html/composition.py +205 -0
  350. django_cfg/modules/django_admin/utils/html/formatting.py +231 -0
  351. django_cfg/modules/django_admin/utils/html/keyvalue.py +219 -0
  352. django_cfg/modules/django_admin/utils/html/markdown_integration.py +108 -0
  353. django_cfg/modules/django_admin/utils/html/progress.py +127 -0
  354. django_cfg/modules/django_admin/utils/html_builder.py +55 -194
  355. django_cfg/modules/django_admin/utils/markdown/__init__.py +21 -0
  356. django_cfg/modules/django_admin/utils/markdown/mermaid_plugin.py +288 -0
  357. django_cfg/modules/django_admin/utils/markdown/renderer.py +360 -0
  358. django_cfg/modules/django_admin/widgets/__init__.py +3 -0
  359. django_cfg/modules/django_admin/widgets/encrypted_field_widget.py +66 -0
  360. django_cfg/modules/django_admin/widgets/registry.py +42 -0
  361. django_cfg/modules/django_client/core/__init__.py +3 -1
  362. django_cfg/modules/django_client/core/archive/manager.py +14 -0
  363. django_cfg/modules/django_client/core/config/config.py +8 -0
  364. django_cfg/modules/django_client/core/generator/__init__.py +80 -2
  365. django_cfg/modules/django_client/core/generator/go/__init__.py +14 -0
  366. django_cfg/modules/django_client/core/generator/go/client_generator.py +124 -0
  367. django_cfg/modules/django_client/core/generator/go/files_generator.py +133 -0
  368. django_cfg/modules/django_client/core/generator/go/generator.py +203 -0
  369. django_cfg/modules/django_client/core/generator/go/models_generator.py +304 -0
  370. django_cfg/modules/django_client/core/generator/go/naming.py +193 -0
  371. django_cfg/modules/django_client/core/generator/go/operations_generator.py +134 -0
  372. django_cfg/modules/django_client/core/generator/go/templates/Makefile.j2 +38 -0
  373. django_cfg/modules/django_client/core/generator/go/templates/README.md.j2 +55 -0
  374. django_cfg/modules/django_client/core/generator/go/templates/client.go.j2 +122 -0
  375. django_cfg/modules/django_client/core/generator/go/templates/enums.go.j2 +49 -0
  376. django_cfg/modules/django_client/core/generator/go/templates/errors.go.j2 +182 -0
  377. django_cfg/modules/django_client/core/generator/go/templates/go.mod.j2 +6 -0
  378. django_cfg/modules/django_client/core/generator/go/templates/main_client.go.j2 +60 -0
  379. django_cfg/modules/django_client/core/generator/go/templates/middleware.go.j2 +388 -0
  380. django_cfg/modules/django_client/core/generator/go/templates/models.go.j2 +28 -0
  381. django_cfg/modules/django_client/core/generator/go/templates/operations_client.go.j2 +142 -0
  382. django_cfg/modules/django_client/core/generator/go/templates/validation.go.j2 +217 -0
  383. django_cfg/modules/django_client/core/generator/go/type_mapper.py +380 -0
  384. django_cfg/modules/django_client/core/generator/proto/__init__.py +17 -0
  385. django_cfg/modules/django_client/core/generator/proto/generator.py +461 -0
  386. django_cfg/modules/django_client/core/generator/proto/messages_generator.py +260 -0
  387. django_cfg/modules/django_client/core/generator/proto/services_generator.py +295 -0
  388. django_cfg/modules/django_client/core/generator/proto/test_proto_generator.py +262 -0
  389. django_cfg/modules/django_client/core/generator/proto/type_mapper.py +153 -0
  390. django_cfg/modules/django_client/core/generator/python/models_generator.py +14 -9
  391. django_cfg/modules/django_client/core/generator/python/operations_generator.py +4 -6
  392. django_cfg/modules/django_client/core/generator/python/templates/client/main_client.py.jinja +0 -2
  393. django_cfg/modules/django_client/core/generator/python/templates/client/sync_main_client.py.jinja +0 -1
  394. django_cfg/modules/django_client/core/generator/python/templates/main_init.py.jinja +2 -1
  395. django_cfg/modules/django_client/core/generator/python/templates/models/enums.py.jinja +7 -1
  396. django_cfg/modules/django_client/core/generator/python/templates/models/schema_class.py.jinja +1 -1
  397. django_cfg/modules/django_client/core/generator/typescript/client_generator.py +3 -1
  398. django_cfg/modules/django_client/core/generator/typescript/operations_generator.py +13 -4
  399. django_cfg/modules/django_client/core/generator/typescript/templates/client/client.ts.jinja +33 -17
  400. django_cfg/modules/django_client/core/generator/typescript/templates/client/flat_client.ts.jinja +10 -3
  401. django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/fetchers.ts.jinja +0 -1
  402. django_cfg/modules/django_client/core/generator/typescript/templates/fetchers/function.ts.jinja +1 -1
  403. django_cfg/modules/django_client/core/generator/typescript/templates/main_index.ts.jinja +7 -10
  404. django_cfg/modules/django_client/core/generator/typescript/templates/utils/http.ts.jinja +8 -3
  405. django_cfg/modules/django_client/core/ir/context.py +14 -0
  406. django_cfg/modules/django_client/core/ir/schema.py +11 -0
  407. django_cfg/modules/django_client/core/parser/base.py +85 -3
  408. django_cfg/modules/django_client/core/parser/openapi30.py +26 -1
  409. django_cfg/modules/django_client/core/parser/openapi31.py +26 -1
  410. django_cfg/modules/django_client/management/commands/generate_client.py +352 -3
  411. django_cfg/modules/django_currency/examples/example_database_usage.py +1 -1
  412. django_cfg/modules/django_import_export/README.md +19 -1
  413. django_cfg/modules/django_import_export/__init__.py +8 -0
  414. django_cfg/modules/django_import_export/apps.py +16 -0
  415. django_cfg/modules/django_import_export/templates/admin/import_export/change_list_export.html +6 -0
  416. django_cfg/modules/django_import_export/templates/admin/import_export/change_list_export_item.html +7 -0
  417. django_cfg/modules/django_import_export/templates/admin/import_export/change_list_import.html +6 -0
  418. django_cfg/modules/django_import_export/templates/admin/import_export/change_list_import_export.html +39 -0
  419. django_cfg/modules/django_import_export/templates/admin/import_export/change_list_import_item.html +7 -0
  420. django_cfg/modules/django_logging/__init__.py +2 -0
  421. django_cfg/modules/django_logging/django_logger.py +78 -8
  422. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +9 -2
  423. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +2 -2
  424. django_cfg/modules/django_twilio/sendgrid_service.py +8 -5
  425. django_cfg/modules/django_unfold/__init__.py +5 -24
  426. django_cfg/modules/django_unfold/models/__init__.py +0 -23
  427. django_cfg/modules/django_unfold/models/config.py +113 -138
  428. django_cfg/modules/django_unfold/navigation.py +317 -0
  429. django_cfg/modules/django_unfold/tailwind.py +29 -79
  430. django_cfg/modules/nextjs_admin/__init__.py +12 -0
  431. django_cfg/modules/nextjs_admin/apps.py +12 -0
  432. django_cfg/modules/nextjs_admin/models/__init__.py +5 -0
  433. django_cfg/modules/nextjs_admin/models/config.py +205 -0
  434. django_cfg/modules/nextjs_admin/templatetags/__init__.py +1 -0
  435. django_cfg/modules/nextjs_admin/templatetags/nextjs_admin.py +164 -0
  436. django_cfg/modules/nextjs_admin/urls.py +19 -0
  437. django_cfg/modules/nextjs_admin/views.py +261 -0
  438. django_cfg/pyproject.toml +16 -19
  439. django_cfg/registry/core.py +12 -3
  440. django_cfg/registry/modules.py +11 -2
  441. django_cfg/registry/third_party.py +0 -9
  442. django_cfg/routing/callbacks.py +1 -43
  443. django_cfg/static/admin/css/constance.css +44 -0
  444. django_cfg/static/admin/css/dashboard.css +6 -170
  445. django_cfg/static/admin/css/layout.css +21 -0
  446. django_cfg/static/admin/css/tabs.css +95 -0
  447. django_cfg/static/admin/css/theme.css +74 -0
  448. django_cfg/static/admin/js/alpine/activity-tracker.js +55 -0
  449. django_cfg/static/admin/js/alpine/chart.js +101 -0
  450. django_cfg/static/admin/js/alpine/command-modal.js +159 -0
  451. django_cfg/static/admin/js/alpine/commands-panel.js +139 -0
  452. django_cfg/static/admin/js/alpine/commands-section.js +260 -0
  453. django_cfg/static/admin/js/alpine/dashboard-tabs.js +46 -0
  454. django_cfg/static/admin/js/alpine/system-metrics.js +20 -0
  455. django_cfg/static/admin/js/alpine/toggle-section.js +28 -0
  456. django_cfg/static/admin/js/utils.js +60 -0
  457. django_cfg/static/frontend/admin.zip +0 -0
  458. django_cfg/static/js/api/base.mjs +6 -1
  459. django_cfg/static/js/api/centrifugo/client.mjs +164 -0
  460. django_cfg/static/js/api/centrifugo/index.mjs +13 -0
  461. django_cfg/static/js/api/index.mjs +13 -8
  462. django_cfg/static/js/api/knowbase/client.mjs +309 -0
  463. django_cfg/static/js/api/knowbase/index.mjs +13 -0
  464. django_cfg/static/js/api/payments/client.mjs +46 -1215
  465. django_cfg/static/js/api/types.mjs +240 -350
  466. django_cfg/templates/admin/DUAL_TAB_ARCHITECTURE.md +561 -0
  467. django_cfg/templates/admin/constance/includes/results_list.html +68 -11
  468. django_cfg/templates/admin/index.html +814 -61
  469. django_cfg/templates/unfold/layouts/skeleton.html +27 -0
  470. django_cfg/templatetags/django_cfg.py +348 -0
  471. django_cfg/utils/smart_defaults.py +2 -2
  472. django_cfg-1.5.7.dist-info/METADATA +619 -0
  473. django_cfg-1.5.7.dist-info/RECORD +1161 -0
  474. django_cfg/apps/accounts/admin/inlines.py +0 -177
  475. django_cfg/apps/accounts/admin/user_admin.py +0 -308
  476. django_cfg/apps/accounts/apps.py +0 -19
  477. django_cfg/apps/accounts/managers/user_manager.py +0 -299
  478. django_cfg/apps/accounts/migrations/0001_initial.py +0 -119
  479. django_cfg/apps/accounts/services/otp_service.py +0 -205
  480. django_cfg/apps/accounts/views/profile.py +0 -165
  481. django_cfg/apps/agents/__init__.py +0 -68
  482. django_cfg/apps/agents/apps.py +0 -29
  483. django_cfg/apps/agents/integration/registry.py +0 -348
  484. django_cfg/apps/agents/management/commands/create_agent.py +0 -366
  485. django_cfg/apps/agents/management/commands/orchestrator_status.py +0 -192
  486. django_cfg/apps/agents/patterns/content_agents.py +0 -235
  487. django_cfg/apps/ipc/README.md +0 -346
  488. django_cfg/apps/ipc/__init__.py +0 -51
  489. django_cfg/apps/ipc/apps.py +0 -28
  490. django_cfg/apps/ipc/serializers/__init__.py +0 -19
  491. django_cfg/apps/ipc/serializers/serializers.py +0 -229
  492. django_cfg/apps/ipc/services/__init__.py +0 -7
  493. django_cfg/apps/ipc/services/client/__init__.py +0 -23
  494. django_cfg/apps/ipc/services/client/client.py +0 -542
  495. django_cfg/apps/ipc/services/client/config.py +0 -214
  496. django_cfg/apps/ipc/services/client/exceptions.py +0 -201
  497. django_cfg/apps/ipc/services/monitor.py +0 -464
  498. django_cfg/apps/ipc/static/django_cfg_ipc/js/dashboard.mjs +0 -441
  499. django_cfg/apps/ipc/templates/django_cfg_ipc/base.html +0 -71
  500. django_cfg/apps/ipc/templates/django_cfg_ipc/dashboard.html +0 -202
  501. django_cfg/apps/ipc/urls.py +0 -21
  502. django_cfg/apps/ipc/urls_admin.py +0 -20
  503. django_cfg/apps/ipc/views/__init__.py +0 -8
  504. django_cfg/apps/ipc/views/dashboard.py +0 -15
  505. django_cfg/apps/ipc/views/viewsets.py +0 -245
  506. django_cfg/apps/knowbase/__init__.py +0 -27
  507. django_cfg/apps/knowbase/apps.py +0 -81
  508. django_cfg/apps/knowbase/examples/__init__.py +0 -3
  509. django_cfg/apps/knowbase/examples/external_data_usage.py +0 -194
  510. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +0 -200
  511. django_cfg/apps/knowbase/mixins/service.py +0 -364
  512. django_cfg/apps/knowbase/models/external_data.py +0 -370
  513. django_cfg/apps/knowbase/services/archive/vectorization_service.py +0 -365
  514. django_cfg/apps/knowbase/services/embedding/async_processor.py +0 -242
  515. django_cfg/apps/knowbase/services/embedding/batch_processor.py +0 -253
  516. django_cfg/apps/knowbase/services/embedding/processors.py +0 -152
  517. django_cfg/apps/knowbase/services/embedding/utils.py +0 -176
  518. django_cfg/apps/knowbase/tasks/document_processing.py +0 -354
  519. django_cfg/apps/knowbase/utils/chunk_settings.py +0 -263
  520. django_cfg/apps/knowbase/views/archive_views.py +0 -472
  521. django_cfg/apps/knowbase/views/base.py +0 -46
  522. django_cfg/apps/leads/apps.py +0 -16
  523. django_cfg/apps/maintenance/__init__.py +0 -56
  524. django_cfg/apps/maintenance/admin/api_key_admin.py +0 -211
  525. django_cfg/apps/maintenance/admin/scheduled_admin.py +0 -226
  526. django_cfg/apps/maintenance/admin/site_admin.py +0 -286
  527. django_cfg/apps/maintenance/apps.py +0 -18
  528. django_cfg/apps/maintenance/models/__init__.py +0 -29
  529. django_cfg/apps/maintenance/services/__init__.py +0 -42
  530. django_cfg/apps/newsletter/admin/newsletter_admin.py +0 -797
  531. django_cfg/apps/newsletter/apps.py +0 -22
  532. django_cfg/apps/newsletter/management/commands/test_newsletter.py +0 -139
  533. django_cfg/apps/payments/__init__.py +0 -14
  534. django_cfg/apps/payments/admin/balance_admin.py +0 -385
  535. django_cfg/apps/payments/admin/payment_admin.py +0 -313
  536. django_cfg/apps/payments/admin/withdrawal_admin.py +0 -355
  537. django_cfg/apps/payments/apps.py +0 -23
  538. django_cfg/apps/payments/management/commands/check_payment_status.py +0 -290
  539. django_cfg/apps/payments/management/commands/create_payment.py +0 -346
  540. django_cfg/apps/payments/management/commands/sync_currencies.py +0 -254
  541. django_cfg/apps/payments/urls.py +0 -14
  542. django_cfg/apps/support/apps.py +0 -11
  543. django_cfg/apps/support/managers/message_manager.py +0 -34
  544. django_cfg/apps/support/managers/ticket_manager.py +0 -68
  545. django_cfg/apps/support/utils/support_email_service.py +0 -124
  546. django_cfg/apps/support/views/api.py +0 -169
  547. django_cfg/apps/tasks/__init__.py +0 -5
  548. django_cfg/apps/tasks/admin/__init__.py +0 -11
  549. django_cfg/apps/tasks/admin/actions.py +0 -29
  550. django_cfg/apps/tasks/admin/tasks_admin.py +0 -154
  551. django_cfg/apps/tasks/apps.py +0 -17
  552. django_cfg/apps/tasks/serializers.py +0 -82
  553. django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -120
  554. django_cfg/apps/tasks/static/tasks/js/api.js +0 -100
  555. django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +0 -24
  556. django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +0 -85
  557. django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +0 -216
  558. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +0 -269
  559. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +0 -125
  560. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +0 -122
  561. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +0 -352
  562. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +0 -171
  563. django_cfg/apps/tasks/tasks/__init__.py +0 -10
  564. django_cfg/apps/tasks/tasks/demo_tasks.py +0 -134
  565. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -50
  566. django_cfg/apps/tasks/templates/tasks/components/overview_content.html +0 -69
  567. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +0 -19
  568. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -33
  569. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +0 -51
  570. django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +0 -269
  571. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +0 -30
  572. django_cfg/apps/tasks/templates/tasks/layout/base.html +0 -22
  573. django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +0 -168
  574. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +0 -101
  575. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +0 -40
  576. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +0 -37
  577. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +0 -41
  578. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +0 -50
  579. django_cfg/apps/tasks/urls.py +0 -22
  580. django_cfg/apps/tasks/urls_admin.py +0 -15
  581. django_cfg/apps/tasks/utils/__init__.py +0 -1
  582. django_cfg/apps/tasks/utils/simulator.py +0 -353
  583. django_cfg/apps/tasks/views/__init__.py +0 -16
  584. django_cfg/apps/tasks/views/api.py +0 -571
  585. django_cfg/apps/tasks/views/dashboard.py +0 -89
  586. django_cfg/core/generation/integration_generators/tasks.py +0 -92
  587. django_cfg/management/commands/rundramatiq.py +0 -24
  588. django_cfg/management/commands/rundramatiq_simulator.py +0 -22
  589. django_cfg/management/commands/task_clear.py +0 -25
  590. django_cfg/management/commands/task_status.py +0 -24
  591. django_cfg/models/tasks/__init__.py +0 -51
  592. django_cfg/models/tasks/backends.py +0 -251
  593. django_cfg/models/tasks/config.py +0 -316
  594. django_cfg/models/tasks/utils.py +0 -174
  595. django_cfg/modules/django_admin/utils/badges.py +0 -171
  596. django_cfg/modules/django_admin/utils/displays.py +0 -203
  597. django_cfg/modules/django_client/system/__init__.py +0 -24
  598. django_cfg/modules/django_client/system/base_generator.py +0 -123
  599. django_cfg/modules/django_client/system/generate_mjs_clients.py +0 -174
  600. django_cfg/modules/django_client/system/mjs_generator.py +0 -219
  601. django_cfg/modules/django_client/system/schema_parser.py +0 -195
  602. django_cfg/modules/django_client/system/templates/api_client.js.j2 +0 -87
  603. django_cfg/modules/django_client/system/templates/app_index.js.j2 +0 -13
  604. django_cfg/modules/django_client/system/templates/base_client.js.j2 +0 -166
  605. django_cfg/modules/django_client/system/templates/main_index.js.j2 +0 -80
  606. django_cfg/modules/django_client/system/templates/types.js.j2 +0 -24
  607. django_cfg/modules/django_dashboard/__init__.py +0 -23
  608. django_cfg/modules/django_dashboard/components.py +0 -312
  609. django_cfg/modules/django_dashboard/debug.py +0 -174
  610. django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +0 -109
  611. django_cfg/modules/django_dashboard/sections/__init__.py +0 -1
  612. django_cfg/modules/django_dashboard/sections/base.py +0 -129
  613. django_cfg/modules/django_dashboard/sections/commands.py +0 -33
  614. django_cfg/modules/django_dashboard/sections/documentation.py +0 -393
  615. django_cfg/modules/django_dashboard/sections/overview.py +0 -398
  616. django_cfg/modules/django_dashboard/sections/stats.py +0 -48
  617. django_cfg/modules/django_dashboard/sections/system.py +0 -74
  618. django_cfg/modules/django_logging/FIXES_SUMMARY.md +0 -276
  619. django_cfg/modules/django_logging/LOGGING_GUIDE.md +0 -504
  620. django_cfg/modules/django_tasks/__init__.py +0 -29
  621. django_cfg/modules/django_tasks/dramatiq_setup.py +0 -20
  622. django_cfg/modules/django_tasks/factory.py +0 -127
  623. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +0 -253
  624. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +0 -436
  625. django_cfg/modules/django_tasks/management/commands/task_clear.py +0 -226
  626. django_cfg/modules/django_tasks/management/commands/task_status.py +0 -257
  627. django_cfg/modules/django_tasks/service.py +0 -281
  628. django_cfg/modules/django_tasks/settings.py +0 -107
  629. django_cfg/modules/django_unfold/callbacks/__init__.py +0 -9
  630. django_cfg/modules/django_unfold/callbacks/actions.py +0 -51
  631. django_cfg/modules/django_unfold/callbacks/apizones.py +0 -122
  632. django_cfg/modules/django_unfold/callbacks/base.py +0 -290
  633. django_cfg/modules/django_unfold/callbacks/charts.py +0 -223
  634. django_cfg/modules/django_unfold/callbacks/commands.py +0 -40
  635. django_cfg/modules/django_unfold/callbacks/main.py +0 -294
  636. django_cfg/modules/django_unfold/callbacks/statistics.py +0 -240
  637. django_cfg/modules/django_unfold/callbacks/system.py +0 -180
  638. django_cfg/modules/django_unfold/callbacks/users.py +0 -65
  639. django_cfg/modules/django_unfold/dashboard.py +0 -338
  640. django_cfg/modules/django_unfold/models/dashboard.py +0 -207
  641. django_cfg/modules/django_unfold/models/tabs.py +0 -26
  642. django_cfg/modules/django_unfold/models.py +0 -98
  643. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +0 -102
  644. django_cfg/static/admin/js/commands.js +0 -171
  645. django_cfg/static/admin/js/dashboard.js +0 -126
  646. django_cfg/static/js/api/ipc/client.mjs +0 -74
  647. django_cfg/static/js/api/ipc/index.mjs +0 -13
  648. django_cfg/templates/admin/components/action_grid.html +0 -49
  649. django_cfg/templates/admin/components/card.html +0 -50
  650. django_cfg/templates/admin/components/data_table.html +0 -67
  651. django_cfg/templates/admin/components/management_commands.js +0 -375
  652. django_cfg/templates/admin/components/metric_card.html +0 -39
  653. django_cfg/templates/admin/components/modal.html +0 -58
  654. django_cfg/templates/admin/components/progress_bar.html +0 -20
  655. django_cfg/templates/admin/components/section_header.html +0 -26
  656. django_cfg/templates/admin/components/stat_item.html +0 -32
  657. django_cfg/templates/admin/components/stats_grid.html +0 -72
  658. django_cfg/templates/admin/components/status_badge.html +0 -28
  659. django_cfg/templates/admin/components/user_avatar.html +0 -27
  660. django_cfg/templates/admin/constance/change_list.html +0 -113
  661. django_cfg/templates/admin/constance/includes/default_value.html +0 -24
  662. django_cfg/templates/admin/constance/includes/fieldset_header.html +0 -15
  663. django_cfg/templates/admin/constance/includes/setting_row.html +0 -50
  664. django_cfg/templates/admin/constance/includes/table_headers.html +0 -10
  665. django_cfg/templates/admin/examples/component_class_example.html +0 -156
  666. django_cfg/templates/admin/import_export/change_list_export.html +0 -24
  667. django_cfg/templates/admin/import_export/change_list_import.html +0 -24
  668. django_cfg/templates/admin/import_export/change_list_import_export.html +0 -34
  669. django_cfg/templates/admin/index_new.html +0 -119
  670. django_cfg/templates/admin/layouts/base_dashboard.html +0 -60
  671. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +0 -565
  672. django_cfg/templates/admin/sections/commands_section.html +0 -626
  673. django_cfg/templates/admin/sections/documentation_section.html +0 -172
  674. django_cfg/templates/admin/sections/overview_section.html +0 -112
  675. django_cfg/templates/admin/sections/stats_section.html +0 -35
  676. django_cfg/templates/admin/sections/system_section.html +0 -99
  677. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +0 -322
  678. django_cfg/templates/admin/snippets/components/activity_tracker.html +0 -92
  679. django_cfg/templates/admin/snippets/components/charts_section.html +0 -179
  680. django_cfg/templates/admin/snippets/components/django_commands.html +0 -357
  681. django_cfg/templates/admin/snippets/components/quick_actions.html +0 -66
  682. django_cfg/templates/admin/snippets/components/recent_activity.html +0 -35
  683. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +0 -25
  684. django_cfg/templates/admin/snippets/components/recent_users_table.html +0 -102
  685. django_cfg/templates/admin/snippets/components/stats_cards.html +0 -4
  686. django_cfg/templates/admin/snippets/components/stats_tiles.html +0 -92
  687. django_cfg/templates/admin/snippets/components/system_health.html +0 -22
  688. django_cfg/templates/admin/snippets/components/system_metrics.html +0 -191
  689. django_cfg/templates/admin/snippets/components/user_permissions.html +0 -57
  690. django_cfg/templates/admin/snippets/tabs/app_stats_tab.html +0 -201
  691. django_cfg/templates/admin/snippets/tabs/commands_tab.html +0 -66
  692. django_cfg/templates/admin/snippets/tabs/documentation_tab.html +0 -231
  693. django_cfg/templates/admin/snippets/tabs/overview_tab.html +0 -116
  694. django_cfg/templates/admin/snippets/tabs/stats_tab.html +0 -89
  695. django_cfg/templates/admin/snippets/tabs/users_tab.html +0 -51
  696. django_cfg/templates/admin/snippets/zones/zones_table.html +0 -176
  697. django_cfg-1.4.48.dist-info/METADATA +0 -533
  698. django_cfg-1.4.48.dist-info/RECORD +0 -1008
  699. /django_cfg/apps/api/endpoints/{checker.py → endpoints_status/checker.py} +0 -0
  700. /django_cfg/apps/api/endpoints/{drf_views.py → endpoints_status/drf_views.py} +0 -0
  701. /django_cfg/apps/api/endpoints/{serializers.py → endpoints_status/serializers.py} +0 -0
  702. /django_cfg/apps/api/endpoints/{tests.py → endpoints_status/tests.py} +0 -0
  703. /django_cfg/apps/api/endpoints/{views.py → endpoints_status/views.py} +0 -0
  704. /django_cfg/apps/{accounts/migrations → business}/__init__.py +0 -0
  705. /django_cfg/apps/{accounts → business/accounts}/README.md +0 -0
  706. /django_cfg/apps/{accounts → business/accounts}/__init__.py +0 -0
  707. /django_cfg/apps/{accounts → business/accounts}/__models.py +0 -0
  708. /django_cfg/apps/{accounts → business/accounts}/admin/__init__.py +0 -0
  709. /django_cfg/apps/{accounts → business/accounts}/admin/activity_admin.py +0 -0
  710. /django_cfg/apps/{accounts → business/accounts}/admin/filters.py +0 -0
  711. /django_cfg/apps/{accounts → business/accounts}/admin/group_admin.py +0 -0
  712. /django_cfg/apps/{accounts → business/accounts}/admin/otp_admin.py +0 -0
  713. /django_cfg/apps/{accounts → business/accounts}/admin/registration_admin.py +0 -0
  714. /django_cfg/apps/{accounts → business/accounts}/admin/resources.py +0 -0
  715. /django_cfg/apps/{accounts → business/accounts}/admin/twilio_admin.py +0 -0
  716. /django_cfg/apps/{accounts → business/accounts}/management/commands/otp_test.py +0 -0
  717. /django_cfg/apps/{accounts → business/accounts}/managers/__init__.py +0 -0
  718. /django_cfg/apps/{accounts → business/accounts}/migrations/0002_add_phone_otp_clean.py +0 -0
  719. /django_cfg/apps/{accounts → business/accounts}/migrations/0003_twilioresponse.py +0 -0
  720. /django_cfg/apps/{accounts → business/accounts}/migrations/0004_delete_twilioresponse.py +0 -0
  721. /django_cfg/apps/{accounts → business/accounts}/migrations/0005_twilioresponse.py +0 -0
  722. /django_cfg/apps/{accounts → business/accounts}/migrations/0006_remove_twilioresponse_otp_secret_and_more.py +0 -0
  723. /django_cfg/apps/{accounts → business/accounts}/migrations/0007_twilioresponse.py +0 -0
  724. /django_cfg/apps/{knowbase/management → business/accounts/migrations}/__init__.py +0 -0
  725. /django_cfg/apps/{accounts → business/accounts}/models/__init__.py +0 -0
  726. /django_cfg/apps/{accounts → business/accounts}/models/activity.py +0 -0
  727. /django_cfg/apps/{accounts → business/accounts}/models/auth.py +0 -0
  728. /django_cfg/apps/{accounts → business/accounts}/models/base.py +0 -0
  729. /django_cfg/apps/{accounts → business/accounts}/models/choices.py +0 -0
  730. /django_cfg/apps/{accounts → business/accounts}/models/integrations.py +0 -0
  731. /django_cfg/apps/{accounts → business/accounts}/models/registration.py +0 -0
  732. /django_cfg/apps/{accounts → business/accounts}/models/user.py +0 -0
  733. /django_cfg/apps/{accounts → business/accounts}/serializers/__init__.py +0 -0
  734. /django_cfg/apps/{accounts → business/accounts}/serializers/otp.py +0 -0
  735. /django_cfg/apps/{accounts → business/accounts}/serializers/profile.py +0 -0
  736. /django_cfg/apps/{accounts → business/accounts}/serializers/webhook.py +0 -0
  737. /django_cfg/apps/{accounts → business/accounts}/services/__init__.py +0 -0
  738. /django_cfg/apps/{accounts → business/accounts}/services/activity_service.py +0 -0
  739. /django_cfg/apps/{accounts → business/accounts}/signals.py +0 -0
  740. /django_cfg/apps/{accounts → business/accounts}/templates/emails/base_email.html +0 -0
  741. /django_cfg/apps/{accounts → business/accounts}/templates/emails/base_email.txt +0 -0
  742. /django_cfg/apps/{accounts → business/accounts}/templates/emails/otp_email.html +0 -0
  743. /django_cfg/apps/{accounts → business/accounts}/templates/emails/otp_email.txt +0 -0
  744. /django_cfg/apps/{accounts → business/accounts}/templates/emails/welcome_email.html +0 -0
  745. /django_cfg/apps/{accounts → business/accounts}/templates/emails/welcome_email.txt +0 -0
  746. /django_cfg/apps/{accounts → business/accounts}/urls.py +0 -0
  747. /django_cfg/apps/{accounts → business/accounts}/urls_admin.py +0 -0
  748. /django_cfg/apps/{accounts → business/accounts}/utils/notifications.py +0 -0
  749. /django_cfg/apps/{accounts → business/accounts}/views/__init__.py +0 -0
  750. /django_cfg/apps/{accounts → business/accounts}/views/otp.py +0 -0
  751. /django_cfg/apps/{accounts → business/accounts}/views/webhook.py +0 -0
  752. /django_cfg/apps/{agents → business/agents}/README.md +0 -0
  753. /django_cfg/apps/{agents → business/agents}/admin/__init__.py +0 -0
  754. /django_cfg/apps/{agents → business/agents}/admin/execution_actions.py +0 -0
  755. /django_cfg/apps/{agents → business/agents}/admin/execution_admin.py +0 -0
  756. /django_cfg/apps/{agents → business/agents}/admin/registry_actions.py +0 -0
  757. /django_cfg/apps/{agents → business/agents}/admin/registry_admin.py +0 -0
  758. /django_cfg/apps/{agents → business/agents}/admin/toolsets_actions.py +0 -0
  759. /django_cfg/apps/{agents → business/agents}/admin/toolsets_admin.py +0 -0
  760. /django_cfg/apps/{agents → business/agents}/core/__init__.py +0 -0
  761. /django_cfg/apps/{agents → business/agents}/core/dependencies.py +0 -0
  762. /django_cfg/apps/{agents → business/agents}/core/django_agent.py +0 -0
  763. /django_cfg/apps/{agents → business/agents}/core/exceptions.py +0 -0
  764. /django_cfg/apps/{agents → business/agents}/core/models.py +0 -0
  765. /django_cfg/apps/{agents → business/agents}/core/orchestrator.py +0 -0
  766. /django_cfg/apps/{agents → business/agents}/examples/__init__.py +0 -0
  767. /django_cfg/apps/{agents → business/agents}/examples/simple_example.py +0 -0
  768. /django_cfg/apps/{agents → business/agents}/integration/__init__.py +0 -0
  769. /django_cfg/apps/{agents → business/agents}/integration/middleware.py +0 -0
  770. /django_cfg/apps/{agents → business/agents}/integration/signals.py +0 -0
  771. /django_cfg/apps/{agents → business/agents}/management/__init__.py +0 -0
  772. /django_cfg/apps/{agents → business/agents}/management/commands/__init__.py +0 -0
  773. /django_cfg/apps/{agents → business/agents}/managers/__init__.py +0 -0
  774. /django_cfg/apps/{agents → business/agents}/managers/execution.py +0 -0
  775. /django_cfg/apps/{agents → business/agents}/managers/registry.py +0 -0
  776. /django_cfg/apps/{agents → business/agents}/managers/toolsets.py +0 -0
  777. /django_cfg/apps/{agents → business/agents}/migrations/0001_initial.py +0 -0
  778. /django_cfg/apps/{agents → business/agents}/migrations/__init__.py +0 -0
  779. /django_cfg/apps/{agents → business/agents}/models/__init__.py +0 -0
  780. /django_cfg/apps/{agents → business/agents}/models/execution.py +0 -0
  781. /django_cfg/apps/{agents → business/agents}/models/registry.py +0 -0
  782. /django_cfg/apps/{agents → business/agents}/models/toolsets.py +0 -0
  783. /django_cfg/apps/{agents → business/agents}/patterns/__init__.py +0 -0
  784. /django_cfg/apps/{agents → business/agents}/toolsets/__init__.py +0 -0
  785. /django_cfg/apps/{agents → business/agents}/toolsets/cache_toolset.py +0 -0
  786. /django_cfg/apps/{agents → business/agents}/toolsets/django_toolset.py +0 -0
  787. /django_cfg/apps/{agents → business/agents}/toolsets/file_toolset.py +0 -0
  788. /django_cfg/apps/{agents → business/agents}/toolsets/orm_toolset.py +0 -0
  789. /django_cfg/apps/{agents → business/agents}/urls.py +0 -0
  790. /django_cfg/apps/{agents → business/agents}/urls_admin.py +0 -0
  791. /django_cfg/apps/{knowbase → business/knowbase}/README.md +0 -0
  792. /django_cfg/apps/{knowbase → business/knowbase}/admin/__init__.py +0 -0
  793. /django_cfg/apps/{knowbase → business/knowbase}/admin/archive_actions.py +0 -0
  794. /django_cfg/apps/{knowbase → business/knowbase}/admin/archive_admin.py +0 -0
  795. /django_cfg/apps/{knowbase → business/knowbase}/admin/chat_actions.py +0 -0
  796. /django_cfg/apps/{knowbase → business/knowbase}/admin/chat_admin.py +0 -0
  797. /django_cfg/apps/{knowbase → business/knowbase}/admin/document_actions.py +0 -0
  798. /django_cfg/apps/{knowbase → business/knowbase}/admin/document_admin.py +0 -0
  799. /django_cfg/apps/{knowbase → business/knowbase}/admin/external_data_actions.py +0 -0
  800. /django_cfg/apps/{knowbase → business/knowbase}/admin/external_data_admin.py +0 -0
  801. /django_cfg/apps/{knowbase → business/knowbase}/config/README.md +0 -0
  802. /django_cfg/apps/{knowbase → business/knowbase}/config/__init__.py +0 -0
  803. /django_cfg/apps/{knowbase → business/knowbase}/config/constance_fields.py +0 -0
  804. /django_cfg/apps/{knowbase → business/knowbase}/config/constance_settings.py +0 -0
  805. /django_cfg/apps/{knowbase → business/knowbase}/config/settings.py +0 -0
  806. /django_cfg/apps/{knowbase/management/commands → business/knowbase/management}/__init__.py +0 -0
  807. /django_cfg/apps/{leads → business/knowbase/management/commands}/__init__.py +0 -0
  808. /django_cfg/apps/{knowbase → business/knowbase}/management/commands/knowbase_stats.py +0 -0
  809. /django_cfg/apps/{knowbase → business/knowbase}/management/commands/setup_knowbase.py +0 -0
  810. /django_cfg/apps/{knowbase → business/knowbase}/managers/__init__.py +0 -0
  811. /django_cfg/apps/{knowbase → business/knowbase}/managers/archive.py +0 -0
  812. /django_cfg/apps/{knowbase → business/knowbase}/managers/base.py +0 -0
  813. /django_cfg/apps/{knowbase → business/knowbase}/managers/chat.py +0 -0
  814. /django_cfg/apps/{knowbase → business/knowbase}/managers/document.py +0 -0
  815. /django_cfg/apps/{knowbase → business/knowbase}/managers/external_data.py +0 -0
  816. /django_cfg/apps/{knowbase → business/knowbase}/migrations/0001_initial.py +0 -0
  817. /django_cfg/apps/{knowbase → business/knowbase}/migrations/0002_archiveitem_archiveitemchunk_documentarchive_and_more.py +0 -0
  818. /django_cfg/apps/{knowbase → business/knowbase}/migrations/0003_alter_documentarchive_archive_type.py +0 -0
  819. /django_cfg/apps/{knowbase → business/knowbase}/migrations/__init__.py +0 -0
  820. /django_cfg/apps/{knowbase → business/knowbase}/mixins/__init__.py +0 -0
  821. /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/__init__.py +0 -0
  822. /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/defaults.py +0 -0
  823. /django_cfg/apps/{knowbase → business/knowbase}/mixins/config/meta_config.py +0 -0
  824. /django_cfg/apps/{knowbase → business/knowbase}/mixins/config.py +0 -0
  825. /django_cfg/apps/{knowbase → business/knowbase}/mixins/creator.py +0 -0
  826. /django_cfg/apps/{knowbase → business/knowbase}/mixins/external_data_mixin.py +0 -0
  827. /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/__init__.py +0 -0
  828. /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/content_generator.py +0 -0
  829. /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/field_analyzer.py +0 -0
  830. /django_cfg/apps/{knowbase → business/knowbase}/mixins/generators/metadata_generator.py +0 -0
  831. /django_cfg/apps/{knowbase → business/knowbase}/models/__init__.py +0 -0
  832. /django_cfg/apps/{knowbase → business/knowbase}/models/archive.py +0 -0
  833. /django_cfg/apps/{knowbase → business/knowbase}/models/base.py +0 -0
  834. /django_cfg/apps/{knowbase → business/knowbase}/models/chat.py +0 -0
  835. /django_cfg/apps/{knowbase → business/knowbase}/models/document.py +0 -0
  836. /django_cfg/apps/{knowbase → business/knowbase}/serializers/__init__.py +0 -0
  837. /django_cfg/apps/{knowbase → business/knowbase}/serializers/archive_serializers.py +0 -0
  838. /django_cfg/apps/{knowbase → business/knowbase}/serializers/chat_serializers.py +0 -0
  839. /django_cfg/apps/{knowbase → business/knowbase}/serializers/document_serializers.py +0 -0
  840. /django_cfg/apps/{knowbase → business/knowbase}/serializers/external_data_serializers.py +0 -0
  841. /django_cfg/apps/{knowbase → business/knowbase}/serializers/public_serializers.py +0 -0
  842. /django_cfg/apps/{knowbase → business/knowbase}/services/__init__.py +0 -0
  843. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/__init__.py +0 -0
  844. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/__init__.py +0 -0
  845. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/complexity_analyzer.py +0 -0
  846. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/purpose_detector.py +0 -0
  847. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/quality_analyzer.py +0 -0
  848. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/analyzers/tag_generator.py +0 -0
  849. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/archive_service.py +0 -0
  850. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/__init__.py +0 -0
  851. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/base.py +0 -0
  852. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/json_chunker.py +0 -0
  853. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/markdown_chunker.py +0 -0
  854. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/python_chunker.py +0 -0
  855. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking/text_chunker.py +0 -0
  856. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/chunking_service.py +0 -0
  857. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/__init__.py +0 -0
  858. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/builders.py +0 -0
  859. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/context/models.py +0 -0
  860. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/exceptions.py +0 -0
  861. /django_cfg/apps/{knowbase → business/knowbase}/services/archive/extraction_service.py +0 -0
  862. /django_cfg/apps/{knowbase → business/knowbase}/services/base.py +0 -0
  863. /django_cfg/apps/{knowbase → business/knowbase}/services/chat_service.py +0 -0
  864. /django_cfg/apps/{knowbase → business/knowbase}/services/document_service.py +0 -0
  865. /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/__init__.py +0 -0
  866. /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/batch_result.py +0 -0
  867. /django_cfg/apps/{knowbase → business/knowbase}/services/embedding/models.py +0 -0
  868. /django_cfg/apps/{knowbase → business/knowbase}/services/prompt_builder.py +0 -0
  869. /django_cfg/apps/{knowbase → business/knowbase}/services/search_service.py +0 -0
  870. /django_cfg/apps/{knowbase → business/knowbase}/signals/__init__.py +0 -0
  871. /django_cfg/apps/{knowbase → business/knowbase}/signals/archive_signals.py +0 -0
  872. /django_cfg/apps/{knowbase → business/knowbase}/signals/chat_signals.py +0 -0
  873. /django_cfg/apps/{knowbase → business/knowbase}/signals/document_signals.py +0 -0
  874. /django_cfg/apps/{knowbase → business/knowbase}/signals/external_data_signals.py +0 -0
  875. /django_cfg/apps/{knowbase → business/knowbase}/tasks/__init__.py +0 -0
  876. /django_cfg/apps/{knowbase → business/knowbase}/tasks/archive_tasks.py +0 -0
  877. /django_cfg/apps/{knowbase → business/knowbase}/tasks/external_data_tasks.py +0 -0
  878. /django_cfg/apps/{knowbase → business/knowbase}/tasks/maintenance.py +0 -0
  879. /django_cfg/apps/{knowbase → business/knowbase}/urls.py +0 -0
  880. /django_cfg/apps/{knowbase → business/knowbase}/urls_admin.py +0 -0
  881. /django_cfg/apps/{knowbase → business/knowbase}/urls_system.py +0 -0
  882. /django_cfg/apps/{knowbase → business/knowbase}/utils/__init__.py +0 -0
  883. /django_cfg/apps/{knowbase → business/knowbase}/utils/text_processing.py +0 -0
  884. /django_cfg/apps/{knowbase → business/knowbase}/utils/validation.py +0 -0
  885. /django_cfg/apps/{knowbase → business/knowbase}/views/__init__.py +0 -0
  886. /django_cfg/apps/{knowbase → business/knowbase}/views/chat_views.py +0 -0
  887. /django_cfg/apps/{knowbase → business/knowbase}/views/document_views.py +0 -0
  888. /django_cfg/apps/{knowbase → business/knowbase}/views/public_views.py +0 -0
  889. /django_cfg/apps/{leads → business/leads}/README.md +0 -0
  890. /django_cfg/apps/{leads/migrations → business/leads}/__init__.py +0 -0
  891. /django_cfg/apps/{leads → business/leads}/admin/__init__.py +0 -0
  892. /django_cfg/apps/{leads → business/leads}/admin/actions.py +0 -0
  893. /django_cfg/apps/{leads → business/leads}/admin/leads_admin.py +0 -0
  894. /django_cfg/apps/{leads → business/leads}/admin/resources.py +0 -0
  895. /django_cfg/apps/{leads → business/leads}/admin.py +0 -0
  896. /django_cfg/apps/{leads → business/leads}/migrations/0001_initial.py +0 -0
  897. /django_cfg/apps/{maintenance/management → business/leads/migrations}/__init__.py +0 -0
  898. /django_cfg/apps/{leads → business/leads}/models.py +0 -0
  899. /django_cfg/apps/{leads → business/leads}/serializers.py +0 -0
  900. /django_cfg/apps/{leads → business/leads}/signals.py +0 -0
  901. /django_cfg/apps/{leads → business/leads}/tests.py +0 -0
  902. /django_cfg/apps/{leads → business/leads}/urls.py +0 -0
  903. /django_cfg/apps/{leads → business/leads}/urls_admin.py +0 -0
  904. /django_cfg/apps/{leads → business/leads}/views.py +0 -0
  905. /django_cfg/apps/{newsletter → business/newsletter}/README.md +0 -0
  906. /django_cfg/apps/{maintenance/management/commands → business/newsletter}/__init__.py +0 -0
  907. /django_cfg/apps/{newsletter → business/newsletter}/admin/__init__.py +0 -0
  908. /django_cfg/apps/{newsletter → business/newsletter}/admin/actions.py +0 -0
  909. /django_cfg/apps/{newsletter → business/newsletter}/admin/filters.py +0 -0
  910. /django_cfg/apps/{newsletter → business/newsletter}/admin/resources.py +0 -0
  911. /django_cfg/apps/{newsletter → business/newsletter}/admin.py +0 -0
  912. /django_cfg/apps/{newsletter → business/newsletter}/admin_filters.py +0 -0
  913. /django_cfg/apps/{maintenance/migrations → business/newsletter/management}/__init__.py +0 -0
  914. /django_cfg/apps/{newsletter → business/newsletter/management/commands}/__init__.py +0 -0
  915. /django_cfg/apps/{newsletter → business/newsletter}/managers/README.md +0 -0
  916. /django_cfg/apps/{newsletter → business/newsletter}/managers/__init__.py +0 -0
  917. /django_cfg/apps/{newsletter → business/newsletter}/migrations/0001_initial.py +0 -0
  918. /django_cfg/apps/{newsletter/management → business/newsletter/migrations}/__init__.py +0 -0
  919. /django_cfg/apps/{newsletter → business/newsletter}/models.py +0 -0
  920. /django_cfg/apps/{newsletter → business/newsletter}/serializers.py +0 -0
  921. /django_cfg/apps/{newsletter → business/newsletter}/services/email_service.py +0 -0
  922. /django_cfg/apps/{newsletter → business/newsletter}/signals.py +0 -0
  923. /django_cfg/apps/{newsletter → business/newsletter}/urls.py +0 -0
  924. /django_cfg/apps/{maintenance → business/newsletter}/urls_admin.py +0 -0
  925. /django_cfg/apps/{newsletter → business/newsletter}/utils/__init__.py +0 -0
  926. /django_cfg/apps/{newsletter → business/newsletter}/views/__init__.py +0 -0
  927. /django_cfg/apps/{newsletter → business/newsletter}/views/campaigns.py +0 -0
  928. /django_cfg/apps/{newsletter → business/newsletter}/views/emails.py +0 -0
  929. /django_cfg/apps/{newsletter → business/newsletter}/views/newsletters.py +0 -0
  930. /django_cfg/apps/{newsletter → business/newsletter}/views/subscriptions.py +0 -0
  931. /django_cfg/apps/{newsletter → business/newsletter}/views/tracking.py +0 -0
  932. /django_cfg/apps/{payments → business/payments}/CONFIGURATION.md +0 -0
  933. /django_cfg/apps/{payments → business/payments}/admin/__init__.py +0 -0
  934. /django_cfg/apps/{payments → business/payments}/admin/actions.py +0 -0
  935. /django_cfg/apps/{payments → business/payments}/admin/balance_actions.py +0 -0
  936. /django_cfg/apps/{payments → business/payments}/admin/currency_admin.py +0 -0
  937. /django_cfg/apps/{payments → business/payments}/admin/filters.py +0 -0
  938. /django_cfg/apps/{payments → business/payments}/admin/payment_actions.py +0 -0
  939. /django_cfg/apps/{payments → business/payments}/admin/withdrawal_actions.py +0 -0
  940. /django_cfg/apps/{payments → business/payments}/api/__init__.py +0 -0
  941. /django_cfg/apps/{payments → business/payments}/api/serializers.py +0 -0
  942. /django_cfg/apps/{payments → business/payments}/api/urls.py +0 -0
  943. /django_cfg/apps/{payments → business/payments}/api/views.py +0 -0
  944. /django_cfg/apps/{payments → business/payments}/config.py +0 -0
  945. /django_cfg/apps/{payments → business/payments}/management/README.md +0 -0
  946. /django_cfg/apps/{newsletter/management/commands → business/payments/management}/__init__.py +0 -0
  947. /django_cfg/apps/{newsletter/migrations → business/payments/management/commands}/__init__.py +0 -0
  948. /django_cfg/apps/{payments → business/payments}/migrations/0001_initial.py +0 -0
  949. /django_cfg/apps/{payments/management → business/payments/migrations}/__init__.py +0 -0
  950. /django_cfg/apps/{payments → business/payments}/models/__init__.py +0 -0
  951. /django_cfg/apps/{payments → business/payments}/models/balance.py +0 -0
  952. /django_cfg/apps/{payments → business/payments}/models/base.py +0 -0
  953. /django_cfg/apps/{payments → business/payments}/models/currency.py +0 -0
  954. /django_cfg/apps/{payments → business/payments}/models/managers/__init__.py +0 -0
  955. /django_cfg/apps/{payments → business/payments}/models/managers/balance_managers.py +0 -0
  956. /django_cfg/apps/{payments → business/payments}/models/managers/payment_managers.py +0 -0
  957. /django_cfg/apps/{payments → business/payments}/models/payment.py +0 -0
  958. /django_cfg/apps/{payments → business/payments}/models/withdrawal.py +0 -0
  959. /django_cfg/apps/{payments → business/payments}/services/__init__.py +0 -0
  960. /django_cfg/apps/{payments → business/payments}/services/balance_service.py +0 -0
  961. /django_cfg/apps/{payments → business/payments}/services/payment_service.py +0 -0
  962. /django_cfg/apps/{payments → business/payments}/services/providers/__init__.py +0 -0
  963. /django_cfg/apps/{payments → business/payments}/services/providers/models.py +0 -0
  964. /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/__init__.py +0 -0
  965. /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/config.py +0 -0
  966. /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/parser.py +0 -0
  967. /django_cfg/apps/{payments → business/payments}/services/providers/nowpayments/provider.py +0 -0
  968. /django_cfg/apps/{payments/management/commands → business/support}/__init__.py +0 -0
  969. /django_cfg/apps/{support → business/support}/admin/__init__.py +0 -0
  970. /django_cfg/apps/{support → business/support}/admin/actions.py +0 -0
  971. /django_cfg/apps/{support → business/support}/admin/filters.py +0 -0
  972. /django_cfg/apps/{support → business/support}/admin/resources.py +0 -0
  973. /django_cfg/apps/{support → business/support}/admin/support_admin.py +0 -0
  974. /django_cfg/apps/{support → business/support}/admin.py +0 -0
  975. /django_cfg/apps/{support → business/support}/admin_filters.py +0 -0
  976. /django_cfg/apps/{support → business/support}/migrations/0001_initial.py +0 -0
  977. /django_cfg/apps/{support → business/support}/migrations/0002_alter_message_ticket.py +0 -0
  978. /django_cfg/apps/{payments → business/support}/migrations/__init__.py +0 -0
  979. /django_cfg/apps/{support → business/support}/models.py +0 -0
  980. /django_cfg/apps/{support → business/support}/serializers.py +0 -0
  981. /django_cfg/apps/{support → business/support}/signals.py +0 -0
  982. /django_cfg/apps/{support → business/support}/templates/support/chat/access_denied.html +0 -0
  983. /django_cfg/apps/{support → business/support}/templates/support/chat/ticket_chat.html +0 -0
  984. /django_cfg/apps/{support → business/support}/urls.py +0 -0
  985. /django_cfg/apps/{newsletter → business/support}/urls_admin.py +0 -0
  986. /django_cfg/apps/{support → business/support/utils}/__init__.py +0 -0
  987. /django_cfg/apps/{support → business/support}/views/__init__.py +0 -0
  988. /django_cfg/apps/{support → business/support}/views/admin.py +0 -0
  989. /django_cfg/apps/{support → business/support}/views/chat.py +0 -0
  990. /django_cfg/apps/{support/migrations → integrations}/__init__.py +0 -0
  991. /django_cfg/apps/{support/utils → integrations/grpc/management/commands}/__init__.py +0 -0
  992. /django_cfg/{modules/django_dashboard/management → apps/integrations/grpc/migrations}/__init__.py +0 -0
  993. /django_cfg/{modules/django_dashboard/management/commands → apps/system}/__init__.py +0 -0
  994. /django_cfg/apps/{maintenance → system/maintenance}/admin/__init__.py +0 -0
  995. /django_cfg/apps/{maintenance → system/maintenance}/admin/actions.py +0 -0
  996. /django_cfg/apps/{maintenance → system/maintenance}/admin/log_admin.py +0 -0
  997. /django_cfg/{modules/django_tasks → apps/system/maintenance}/management/__init__.py +0 -0
  998. /django_cfg/{modules/django_tasks → apps/system/maintenance}/management/commands/__init__.py +0 -0
  999. /django_cfg/apps/{maintenance → system/maintenance}/management/commands/maintenance.py +0 -0
  1000. /django_cfg/apps/{maintenance → system/maintenance}/management/commands/process_scheduled_maintenance.py +0 -0
  1001. /django_cfg/apps/{maintenance → system/maintenance}/management/commands/sync_cloudflare.py +0 -0
  1002. /django_cfg/apps/{maintenance → system/maintenance}/managers/__init__.py +0 -0
  1003. /django_cfg/apps/{maintenance → system/maintenance}/managers/cloudflare_site_manager.py +0 -0
  1004. /django_cfg/apps/{maintenance → system/maintenance}/managers/maintenance_log_manager.py +0 -0
  1005. /django_cfg/apps/{maintenance → system/maintenance}/migrations/0001_initial.py +0 -0
  1006. /django_cfg/apps/{maintenance → system/maintenance}/migrations/0002_cloudflaresite_maintenance_url.py +0 -0
  1007. /django_cfg/apps/{maintenance → system/maintenance}/migrations/0003_cloudflaresite_include_subdomains_and_more.py +0 -0
  1008. /django_cfg/apps/{maintenance → system/maintenance}/models/cloudflare_api_key.py +0 -0
  1009. /django_cfg/apps/{maintenance → system/maintenance}/models/cloudflare_site.py +0 -0
  1010. /django_cfg/apps/{maintenance → system/maintenance}/models/maintenance_log.py +0 -0
  1011. /django_cfg/apps/{maintenance → system/maintenance}/models/scheduled_maintenance.py +0 -0
  1012. /django_cfg/apps/{maintenance → system/maintenance}/services/bulk_operations_service.py +0 -0
  1013. /django_cfg/apps/{maintenance → system/maintenance}/services/maintenance_service.py +0 -0
  1014. /django_cfg/apps/{maintenance → system/maintenance}/services/scheduled_maintenance_service.py +0 -0
  1015. /django_cfg/apps/{maintenance → system/maintenance}/services/site_sync_service.py +0 -0
  1016. /django_cfg/apps/{maintenance → system/maintenance}/urls.py +0 -0
  1017. /django_cfg/apps/{support → system/maintenance}/urls_admin.py +0 -0
  1018. /django_cfg/apps/{maintenance → system/maintenance}/utils/__init__.py +0 -0
  1019. /django_cfg/apps/{maintenance → system/maintenance}/utils/retry_utils.py +0 -0
  1020. {django_cfg-1.4.48.dist-info → django_cfg-1.5.7.dist-info}/WHEEL +0 -0
  1021. {django_cfg-1.4.48.dist-info → django_cfg-1.5.7.dist-info}/entry_points.txt +0 -0
  1022. {django_cfg-1.4.48.dist-info → django_cfg-1.5.7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,376 @@
1
+ """Views for serving Next.js static builds with automatic JWT injection.
2
+
3
+ JWT tokens are automatically injected into HTML responses for authenticated users.
4
+ This is specific to Next.js frontend apps only.
5
+
6
+ Features:
7
+ - Automatic extraction of ZIP archives with metadata comparison (size + mtime)
8
+ - Auto-reextraction when ZIP content changes (size or timestamp)
9
+ - Marker file (.zip_meta) tracks ZIP metadata for reliable comparison
10
+ - Cache busting (no-store headers for HTML)
11
+ - SPA routing with fallback strategies
12
+ - JWT token injection for authenticated users
13
+ """
14
+
15
+ import logging
16
+ import zipfile
17
+ import shutil
18
+ from pathlib import Path
19
+ from datetime import datetime, timedelta
20
+ from django.http import Http404, HttpResponse, FileResponse
21
+ from django.views.static import serve
22
+ from django.views import View
23
+ from django.views.decorators.clickjacking import xframe_options_exempt
24
+ from django.utils.decorators import method_decorator
25
+ from django.shortcuts import render, redirect
26
+ from django.contrib.auth.mixins import UserPassesTestMixin
27
+ from rest_framework_simplejwt.tokens import RefreshToken
28
+
29
+ logger = logging.getLogger(__name__)
30
+
31
+
32
+ class ZipExtractionMixin:
33
+ """
34
+ Mixin for automatic ZIP extraction with metadata-based refresh.
35
+
36
+ Provides intelligent ZIP archive handling:
37
+ - Auto-extraction when directory doesn't exist
38
+ - Auto-reextraction when ZIP metadata changes (size or mtime)
39
+ - Marker file (.zip_meta) tracks ZIP state for reliable comparison
40
+ - Works correctly in Docker where timestamps can be misleading
41
+
42
+ Usage:
43
+ class MyView(ZipExtractionMixin, View):
44
+ app_name = 'myapp' # Will look for myapp.zip
45
+ """
46
+
47
+ def extract_zip_if_needed(self, base_dir: Path, zip_path: Path, app_name: str) -> bool:
48
+ """
49
+ Extract ZIP archive if needed based on ZIP metadata (size + mtime) comparison.
50
+
51
+ Logic:
52
+ 1. If directory doesn't exist → extract
53
+ 2. If marker file doesn't exist → extract
54
+ 3. If ZIP metadata changed (size or mtime) → remove and re-extract
55
+ 4. If metadata matches → use existing
56
+
57
+ Uses marker file (.zip_meta) to track ZIP metadata. More reliable than
58
+ just mtime comparison, especially in Docker where timestamps can be misleading.
59
+
60
+ Args:
61
+ base_dir: Target directory for extraction
62
+ zip_path: Path to ZIP archive
63
+ app_name: Name of the app (for logging)
64
+
65
+ Returns:
66
+ bool: True if extraction succeeded or not needed, False if failed
67
+ """
68
+ should_extract = False
69
+
70
+ # Check if ZIP exists first
71
+ if not zip_path.exists():
72
+ logger.error(f"[{app_name}] ZIP not found: {zip_path}")
73
+ return False
74
+
75
+ # Get ZIP metadata (size + mtime for reliable comparison)
76
+ zip_stat = zip_path.stat()
77
+ current_meta = f"{zip_stat.st_size}:{zip_stat.st_mtime}"
78
+
79
+ # Marker file stores ZIP metadata
80
+ marker_file = base_dir / '.zip_meta'
81
+
82
+ # Priority 1: If directory doesn't exist at all - always extract
83
+ if not base_dir.exists():
84
+ should_extract = True
85
+ logger.info(f"[{app_name}] Directory doesn't exist, will extract")
86
+
87
+ # Priority 2: Marker file doesn't exist - extract (first run or corrupted)
88
+ elif not marker_file.exists():
89
+ should_extract = True
90
+ logger.info(f"[{app_name}] No marker file found, will extract")
91
+
92
+ # Priority 3: Compare stored metadata with current ZIP metadata
93
+ else:
94
+ try:
95
+ stored_meta = marker_file.read_text().strip()
96
+ if stored_meta != current_meta:
97
+ logger.info(f"[{app_name}] ZIP metadata changed (stored: {stored_meta}, current: {current_meta}), re-extracting")
98
+ try:
99
+ shutil.rmtree(base_dir)
100
+ should_extract = True
101
+ except Exception as e:
102
+ logger.error(f"[{app_name}] Failed to remove old directory: {e}")
103
+ return False
104
+ else:
105
+ logger.info(f"[{app_name}] ZIP unchanged (meta: {current_meta}), using existing directory")
106
+ except Exception as e:
107
+ logger.warning(f"[{app_name}] Failed to read marker file: {e}, will re-extract")
108
+ should_extract = True
109
+
110
+ # Extract ZIP if needed
111
+ if should_extract:
112
+ logger.info(f"[{app_name}] Extracting {zip_path.name} to {base_dir}...")
113
+ try:
114
+ base_dir.parent.mkdir(parents=True, exist_ok=True)
115
+ with zipfile.ZipFile(zip_path, 'r') as zip_ref:
116
+ zip_ref.extractall(base_dir)
117
+
118
+ # Write marker file with current metadata
119
+ marker_file.write_text(current_meta)
120
+ logger.info(f"[{app_name}] Successfully extracted {zip_path.name} and saved marker (meta: {current_meta})")
121
+ return True
122
+ except Exception as e:
123
+ logger.error(f"[{app_name}] Failed to extract: {e}")
124
+ return False
125
+
126
+ # Directory exists and is up-to-date
127
+ return True
128
+
129
+
130
+ @method_decorator(xframe_options_exempt, name='dispatch')
131
+ class NextJSStaticView(ZipExtractionMixin, View):
132
+ """
133
+ Serve Next.js static build files with automatic JWT token injection.
134
+
135
+ Features:
136
+ - Serves Next.js static export files like a static file server
137
+ - Smart ZIP extraction: compares ZIP metadata (size + mtime) with marker file
138
+ - Automatically injects JWT tokens for authenticated users
139
+ - Tokens injected into HTML responses only
140
+ - Handles Next.js client-side routing (.html fallback)
141
+ - Automatically serves index.html for directory paths
142
+ - X-Frame-Options exempt to allow embedding in iframes
143
+
144
+ ZIP Extraction Logic:
145
+ - If directory doesn't exist: extract from ZIP
146
+ - If marker file missing: extract from ZIP
147
+ - If ZIP metadata changed: remove and re-extract
148
+ - If metadata matches: use existing files
149
+ - Marker file (.zip_meta) ensures reliable comparison in Docker
150
+
151
+ Path resolution examples:
152
+ - /cfg/admin/ → /cfg/admin/index.html
153
+ - /cfg/admin/private/ → /cfg/admin/private/index.html (if exists)
154
+ - /cfg/admin/private/ → /cfg/admin/private.html (fallback)
155
+ - /cfg/admin/tasks → /cfg/admin/tasks.html
156
+ - /cfg/admin/tasks → /cfg/admin/tasks/index.html (fallback)
157
+ """
158
+
159
+ app_name = 'admin'
160
+
161
+ def get(self, request, path=''):
162
+ """Serve static files from Next.js build with JWT injection."""
163
+ import django_cfg
164
+
165
+ base_dir = Path(django_cfg.__file__).parent / 'static' / 'frontend' / self.app_name
166
+ zip_path = Path(django_cfg.__file__).parent / 'static' / 'frontend' / f'{self.app_name}.zip'
167
+
168
+ # Extract ZIP if needed using mixin
169
+ if not self.extract_zip_if_needed(base_dir, zip_path, self.app_name):
170
+ return render(request, 'frontend/404.html', status=404)
171
+
172
+ # Ensure directory exists
173
+ if not base_dir.exists():
174
+ logger.error(f"[{self.app_name}] Directory doesn't exist after extraction attempt")
175
+ return render(request, 'frontend/404.html', status=404)
176
+
177
+ original_path = path # Store for logging
178
+
179
+ # Default to index.html for root path
180
+ if not path or path == '/':
181
+ path = 'index.html'
182
+ logger.debug(f"Root path requested, serving: {path}")
183
+
184
+ # Resolve file path with SPA routing fallback strategy
185
+ path = self._resolve_spa_path(base_dir, path)
186
+
187
+ # For HTML files, remove conditional GET headers to force full response
188
+ # This allows JWT token injection (can't inject into 304 Not Modified responses)
189
+ is_html_file = path.endswith('.html')
190
+ if is_html_file and request.user.is_authenticated:
191
+ request.META.pop('HTTP_IF_MODIFIED_SINCE', None)
192
+ request.META.pop('HTTP_IF_NONE_MATCH', None)
193
+
194
+ # Serve the static file
195
+ response = serve(request, path, document_root=str(base_dir))
196
+
197
+ # Convert FileResponse to HttpResponse for HTML files to enable JWT injection
198
+ if isinstance(response, FileResponse):
199
+ content_type = response.get('Content-Type', '')
200
+ if 'text/html' in content_type and request.user.is_authenticated:
201
+ content = b''.join(response.streaming_content)
202
+ original_response = response
203
+ response = HttpResponse(
204
+ content=content,
205
+ status=original_response.status_code,
206
+ content_type=content_type
207
+ )
208
+ # Copy headers from original response
209
+ for header, value in original_response.items():
210
+ if header.lower() not in ('content-length', 'content-type'):
211
+ response[header] = value
212
+
213
+ # Inject JWT tokens for authenticated users on HTML responses
214
+ if self._should_inject_jwt(request, response):
215
+ self._inject_jwt_tokens(request, response)
216
+
217
+ # Disable caching for HTML files (prevent Cloudflare/browser caching)
218
+ if is_html_file:
219
+ response['Cache-Control'] = 'no-store, no-cache, must-revalidate, max-age=0'
220
+ response['Pragma'] = 'no-cache'
221
+ response['Expires'] = '0'
222
+
223
+ return response
224
+
225
+ def _resolve_spa_path(self, base_dir, path):
226
+ """
227
+ Resolve SPA path with multiple fallback strategies.
228
+
229
+ Resolution order:
230
+ 1. Exact file match (e.g., script.js, style.css)
231
+ 2. path/index.html (e.g., private/centrifugo/index.html)
232
+ 3. path.html (e.g., private.html for /private)
233
+ 4. Fallback to root index.html for SPA routing
234
+
235
+ Examples:
236
+ /private/centrifugo → private/centrifugo/index.html
237
+ /private → private.html OR private/index.html
238
+ /_next/static/... → _next/static/... (exact match)
239
+ /unknown/route → index.html (SPA fallback)
240
+ """
241
+ file_path = base_dir / path
242
+
243
+ # Remove trailing slash for processing
244
+ path_normalized = path.rstrip('/')
245
+
246
+ # Strategy 1: Exact file match (for static assets like JS, CSS, images)
247
+ if file_path.exists() and file_path.is_file():
248
+ logger.debug(f"[SPA Router] Exact match: {path}")
249
+ return path
250
+
251
+ # Strategy 2: Try path/index.html (most common for SPA routes)
252
+ index_in_dir = base_dir / path_normalized / 'index.html'
253
+ if index_in_dir.exists():
254
+ resolved_path = f"{path_normalized}/index.html"
255
+ logger.debug(f"[SPA Router] Resolved {path} → {resolved_path}")
256
+ return resolved_path
257
+
258
+ # Strategy 3: Try with trailing slash + index.html
259
+ if path.endswith('/'):
260
+ index_path = path + 'index.html'
261
+ if (base_dir / index_path).exists():
262
+ logger.debug(f"[SPA Router] Trailing slash resolved: {index_path}")
263
+ return index_path
264
+
265
+ # Strategy 4: Try path.html (Next.js static export behavior)
266
+ html_file = base_dir / (path_normalized + '.html')
267
+ if html_file.exists():
268
+ resolved_path = path_normalized + '.html'
269
+ logger.debug(f"[SPA Router] HTML file match: {resolved_path}")
270
+ return resolved_path
271
+
272
+ # Strategy 5: Check if it's a directory without index.html
273
+ if file_path.exists() and file_path.is_dir():
274
+ # Try index.html in that directory
275
+ index_in_existing_dir = file_path / 'index.html'
276
+ if index_in_existing_dir.exists():
277
+ resolved_path = f"{path_normalized}/index.html"
278
+ logger.debug(f"[SPA Router] Directory with index: {resolved_path}")
279
+ return resolved_path
280
+
281
+ # Strategy 6: SPA fallback - serve root index.html
282
+ # This allows client-side routing to handle unknown routes
283
+ root_index = base_dir / 'index.html'
284
+ if root_index.exists():
285
+ logger.debug(f"[SPA Router] Fallback to index.html for route: {path}")
286
+ return 'index.html'
287
+
288
+ # Strategy 7: Nothing found - return original path (will 404)
289
+ logger.warning(f"[SPA Router] No match found for: {path}")
290
+ return path
291
+
292
+ def _should_inject_jwt(self, request, response):
293
+ """Check if JWT tokens should be injected."""
294
+ # Only for authenticated users
295
+ if not request.user or not request.user.is_authenticated:
296
+ return False
297
+
298
+ # Only for HttpResponse (not FileResponse or StreamingHttpResponse)
299
+ if not isinstance(response, HttpResponse) or isinstance(response, FileResponse):
300
+ return False
301
+
302
+ # Check if response has content attribute
303
+ if not hasattr(response, 'content'):
304
+ return False
305
+
306
+ # Only for HTML responses
307
+ content_type = response.get('Content-Type', '')
308
+ return 'text/html' in content_type
309
+
310
+ def _inject_jwt_tokens(self, request, response):
311
+ """Inject JWT tokens into HTML response."""
312
+ try:
313
+ # Generate JWT tokens
314
+ refresh = RefreshToken.for_user(request.user)
315
+ access_token = str(refresh.access_token)
316
+ refresh_token = str(refresh)
317
+
318
+ # Create injection script
319
+ injection_script = f"""
320
+ <script>
321
+ (function() {{
322
+ try {{
323
+ localStorage.setItem('auth_token', '{access_token}');
324
+ localStorage.setItem('refresh_token', '{refresh_token}');
325
+ console.log('[Django-CFG] JWT tokens injected successfully');
326
+ }} catch (e) {{
327
+ console.error('[Django-CFG] Failed to inject JWT tokens:', e);
328
+ }}
329
+ }})();
330
+ </script>
331
+ """
332
+
333
+ # Decode response content
334
+ try:
335
+ content = response.content.decode('utf-8')
336
+ except UnicodeDecodeError:
337
+ logger.warning("Failed to decode response content as UTF-8, skipping JWT injection")
338
+ return
339
+
340
+ # Inject before </head> or </body>
341
+ if '</head>' in content:
342
+ content = content.replace('</head>', f'{injection_script}</head>', 1)
343
+ logger.debug(f"JWT tokens injected before </head> for user {request.user.pk}")
344
+ elif '</body>' in content:
345
+ content = content.replace('</body>', f'{injection_script}</body>', 1)
346
+ logger.debug(f"JWT tokens injected before </body> for user {request.user.pk}")
347
+ else:
348
+ logger.warning(f"No </head> or </body> tag found in HTML, skipping JWT injection")
349
+ return
350
+
351
+ # Update response
352
+ response.content = content.encode('utf-8')
353
+ response['Content-Length'] = len(response.content)
354
+
355
+ except Exception as e:
356
+ # Log error but don't break the response
357
+ logger.error(f"Failed to inject JWT tokens for user {request.user.pk}: {e}", exc_info=True)
358
+
359
+
360
+ class AdminView(UserPassesTestMixin, NextJSStaticView):
361
+ """Serve Next.js Admin Panel. Only accessible to admin users."""
362
+ app_name = 'admin'
363
+
364
+ def test_func(self):
365
+ """Check if user is admin (staff or superuser)."""
366
+ return self.request.user.is_authenticated and (
367
+ self.request.user.is_staff or self.request.user.is_superuser
368
+ )
369
+
370
+ def handle_no_permission(self):
371
+ """Redirect to admin login if not authenticated, otherwise 403."""
372
+ if not self.request.user.is_authenticated:
373
+ from django.contrib.auth.views import redirect_to_login
374
+ return redirect_to_login(self.request.get_full_path())
375
+ # User is authenticated but not admin - show 403
376
+ return render(self.request, 'frontend/403.html', status=403)
@@ -0,0 +1,56 @@
1
+ """
2
+ Simplified Django-CFG Maintenance Application.
3
+
4
+ A simple maintenance mode management app with Cloudflare integration.
5
+ Refactored from 119 files to ~10 files following KISS principles.
6
+
7
+ Proper structure:
8
+ - models/ - CloudflareSite and MaintenanceLog models
9
+ - services/ - MaintenanceService for Cloudflare operations
10
+ - admin/ - Simple admin interfaces
11
+ - management/commands/ - CLI commands
12
+ """
13
+
14
+ __version__ = "2.0.0"
15
+ __author__ = "Django-CFG Team"
16
+
17
+ # Lazy import registry to avoid Django initialization issues
18
+ _LAZY_IMPORTS = {
19
+ # Models
20
+ 'CloudflareApiKey': ('django_cfg.apps.system.maintenance.models', 'CloudflareApiKey'),
21
+ 'CloudflareSite': ('django_cfg.apps.system.maintenance.models', 'CloudflareSite'),
22
+ 'MaintenanceLog': ('django_cfg.apps.system.maintenance.models', 'MaintenanceLog'),
23
+ 'ScheduledMaintenance': ('django_cfg.apps.system.maintenance.models', 'ScheduledMaintenance'),
24
+
25
+ # Services
26
+ 'MaintenanceService': ('django_cfg.apps.system.maintenance.services', 'MaintenanceService'),
27
+ 'SiteSyncService': ('django_cfg.apps.system.maintenance.services', 'SiteSyncService'),
28
+ 'BulkOperationsService': ('django_cfg.apps.system.maintenance.services', 'BulkOperationsService'),
29
+ 'ScheduledMaintenanceService': ('django_cfg.apps.system.maintenance.services', 'ScheduledMaintenanceService'),
30
+ 'bulk_operations': ('django_cfg.apps.system.maintenance.services', 'bulk_operations'),
31
+ 'scheduled_maintenance_service': ('django_cfg.apps.system.maintenance.services', 'scheduled_maintenance_service'),
32
+ 'enable_maintenance_for_domain': ('django_cfg.apps.system.maintenance.services', 'enable_maintenance_for_domain'),
33
+ 'disable_maintenance_for_domain': ('django_cfg.apps.system.maintenance.services', 'disable_maintenance_for_domain'),
34
+ 'sync_site_from_cloudflare': ('django_cfg.apps.system.maintenance.services', 'sync_site_from_cloudflare'),
35
+ 'enable_maintenance_for_domains': ('django_cfg.apps.system.maintenance.services', 'enable_maintenance_for_domains'),
36
+ 'disable_maintenance_for_domains': ('django_cfg.apps.system.maintenance.services', 'disable_maintenance_for_domains'),
37
+ 'bulk_sync_all_sites': ('django_cfg.apps.system.maintenance.services', 'bulk_sync_all_sites'),
38
+ 'get_maintenance_status_report': ('django_cfg.apps.system.maintenance.services', 'get_maintenance_status_report'),
39
+ 'schedule_maintenance_for_sites': ('django_cfg.apps.system.maintenance.services', 'schedule_maintenance_for_sites'),
40
+ 'process_scheduled_maintenances': ('django_cfg.apps.system.maintenance.services', 'process_scheduled_maintenances'),
41
+ }
42
+
43
+
44
+ def __getattr__(name: str):
45
+ """Lazy import mechanism to avoid Django initialization issues."""
46
+ if name in _LAZY_IMPORTS:
47
+ module_path, attr_name = _LAZY_IMPORTS[name]
48
+
49
+ import importlib
50
+ module = importlib.import_module(module_path)
51
+ return getattr(module, attr_name)
52
+
53
+ raise AttributeError(f"module '{__name__}' has no attribute '{name}'")
54
+
55
+
56
+ __all__ = list(_LAZY_IMPORTS.keys())
@@ -0,0 +1,209 @@
1
+ """
2
+ CloudflareApiKey Admin v2.0 - NEW Declarative Pydantic Approach
3
+
4
+ Enhanced API key management with Material Icons and auto-generated displays.
5
+ """
6
+
7
+ from django.contrib import admin
8
+ from django.db.models import Count, Q
9
+
10
+ from django_cfg.modules.django_admin import (
11
+ ActionConfig,
12
+ AdminConfig,
13
+ BadgeField,
14
+ BooleanField,
15
+ CurrencyField,
16
+ DateTimeField,
17
+ FieldsetConfig,
18
+ Icons,
19
+ TextField,
20
+ UserField
21
+ )
22
+ from django_cfg.modules.django_admin.base import PydanticAdmin
23
+
24
+ from ..models import CloudflareApiKey
25
+
26
+
27
+ # ===== CloudflareApiKey Admin Config =====
28
+
29
+ cloudflare_apikey_config = AdminConfig(
30
+ model=CloudflareApiKey,
31
+
32
+ # List display
33
+ list_display=[
34
+ 'status',
35
+ 'name',
36
+ 'description',
37
+ 'is_active',
38
+ 'is_default',
39
+ 'sites_count',
40
+ 'last_used_at',
41
+ 'created_at'
42
+ ],
43
+
44
+ # Display fields with UI widgets (auto-generates display methods)
45
+ display_fields=[
46
+ BadgeField(
47
+ name="status",
48
+ title="Status",
49
+ label_map={
50
+ "active_default": "success",
51
+ "active": "success",
52
+ "inactive": "danger"
53
+ },
54
+ icon=Icons.KEY
55
+ ),
56
+ BadgeField(
57
+ name="name",
58
+ title="Name",
59
+ variant="primary",
60
+ icon=Icons.KEY,
61
+ ordering="name",
62
+ header=True
63
+ ),
64
+ TextField(
65
+ name="description",
66
+ title="Description",
67
+ empty_value="—"
68
+ ),
69
+ BooleanField(
70
+ name="is_active",
71
+ title="Active"
72
+ ),
73
+ BadgeField(
74
+ name="is_default",
75
+ title="Default",
76
+ variant="primary",
77
+ icon=Icons.STAR,
78
+ empty_value="—"
79
+ ),
80
+ TextField(
81
+ name="sites_count",
82
+ title="Sites"
83
+ ),
84
+ DateTimeField(
85
+ name="last_used_at",
86
+ title="Last Used",
87
+ empty_value="Never"
88
+ ),
89
+ DateTimeField(
90
+ name="created_at",
91
+ title="Created",
92
+ ordering="created_at"
93
+ ),
94
+ ],
95
+
96
+ # Search and filters
97
+ search_fields=['name', 'description', 'account_id'],
98
+ list_filter=[
99
+ 'is_active',
100
+ 'is_default',
101
+ 'created_at',
102
+ 'last_used_at'
103
+ ],
104
+
105
+ # Readonly fields
106
+ readonly_fields=[
107
+ 'created_at',
108
+ 'updated_at',
109
+ 'last_used_at',
110
+ 'sites_using_key'
111
+ ],
112
+
113
+ # Fieldsets
114
+ fieldsets=[
115
+ FieldsetConfig(
116
+ title='Basic Information',
117
+ fields=['name', 'description']
118
+ ),
119
+ FieldsetConfig(
120
+ title='Cloudflare Configuration',
121
+ fields=['api_token', 'account_id'],
122
+ collapsed=True
123
+ ),
124
+ FieldsetConfig(
125
+ title='Settings',
126
+ fields=['is_active', 'is_default']
127
+ ),
128
+ FieldsetConfig(
129
+ title='Timestamps',
130
+ fields=['created_at', 'updated_at', 'last_used_at'],
131
+ collapsed=True
132
+ ),
133
+ FieldsetConfig(
134
+ title='Usage',
135
+ fields=['sites_using_key'],
136
+ collapsed=True
137
+ )
138
+ ],
139
+
140
+ # Actions
141
+ actions=[
142
+ ActionConfig(
143
+ name="make_default",
144
+ description="Make default API key",
145
+ variant="primary",
146
+ handler="django_cfg.apps.system.maintenance.admin.actions.make_default_key"
147
+ ),
148
+ ActionConfig(
149
+ name="activate_keys",
150
+ description="Activate API keys",
151
+ variant="success",
152
+ handler="django_cfg.apps.system.maintenance.admin.actions.activate_keys"
153
+ ),
154
+ ActionConfig(
155
+ name="deactivate_keys",
156
+ description="Deactivate API keys",
157
+ variant="warning",
158
+ handler="django_cfg.apps.system.maintenance.admin.actions.deactivate_keys"
159
+ ),
160
+ ],
161
+
162
+ # Ordering
163
+ ordering=['-created_at'],
164
+ )
165
+
166
+
167
+ @admin.register(CloudflareApiKey)
168
+ class CloudflareApiKeyAdmin(PydanticAdmin):
169
+ """Admin interface for CloudflareApiKey model using Django Admin Utilities v2.0."""
170
+ config = cloudflare_apikey_config
171
+
172
+ # Custom readonly methods for detail view
173
+ def sites_using_key(self, obj: CloudflareApiKey) -> str:
174
+ """Show sites using this API key."""
175
+ sites = obj.cloudflaresite_set.all()[:10]
176
+
177
+ if not sites:
178
+ return "No sites using this key"
179
+
180
+ # Declarative site list generation
181
+ site_items = [
182
+ f"{'🔧 Maintenance' if site.maintenance_active else '✅ Active'} {site.name} ({site.domain})"
183
+ for site in sites
184
+ ]
185
+
186
+ total_count = obj.cloudflaresite_set.count()
187
+ overflow_item = [f"... and {total_count - 10} more sites"] if total_count > 10 else []
188
+
189
+ return "\n".join(site_items + overflow_item)
190
+ sites_using_key.short_description = "Sites Using This Key"
191
+
192
+ def changelist_view(self, request, extra_context=None):
193
+ """Add API key statistics to changelist."""
194
+ extra_context = extra_context or {}
195
+
196
+ queryset = self.get_queryset(request)
197
+ stats = queryset.aggregate(
198
+ total_keys=Count('id'),
199
+ active_keys=Count('id', filter=Q(is_active=True)),
200
+ default_keys=Count('id', filter=Q(is_default=True))
201
+ )
202
+
203
+ extra_context['api_key_stats'] = {
204
+ 'total_keys': stats['total_keys'] or 0,
205
+ 'active_keys': stats['active_keys'] or 0,
206
+ 'default_keys': stats['default_keys'] or 0
207
+ }
208
+
209
+ return super().changelist_view(request, extra_context)