django-cfg 1.3.13__py3-none-any.whl → 1.4.3__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.
Files changed (446) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  3. django_cfg/apps/accounts/serializers/profile.py +1 -1
  4. django_cfg/apps/accounts/services/otp_service.py +18 -11
  5. django_cfg/apps/accounts/signals.py +15 -24
  6. django_cfg/apps/accounts/utils/notifications.py +217 -358
  7. django_cfg/apps/accounts/views/otp.py +2 -2
  8. django_cfg/apps/accounts/views/webhook.py +1 -1
  9. django_cfg/apps/agents/core/django_agent.py +1 -1
  10. django_cfg/apps/agents/examples/__init__.py +3 -0
  11. django_cfg/apps/agents/examples/simple_example.py +161 -0
  12. django_cfg/apps/api/commands/views.py +66 -83
  13. django_cfg/apps/api/health/drf_views.py +269 -0
  14. django_cfg/apps/api/health/serializers.py +45 -0
  15. django_cfg/apps/api/health/urls.py +6 -1
  16. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  17. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  18. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  19. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  20. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  21. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  22. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  23. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  24. django_cfg/apps/knowbase/config/settings.py +2 -2
  25. django_cfg/apps/knowbase/examples/__init__.py +3 -0
  26. django_cfg/apps/knowbase/examples/external_data_usage.py +191 -0
  27. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  28. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  29. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  30. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  31. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  32. django_cfg/apps/knowbase/mixins/examples/vehicle_model_example.py +199 -0
  33. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  34. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  35. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  36. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  37. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  38. django_cfg/apps/knowbase/mixins/service.py +2 -2
  39. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  41. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  42. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  43. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  44. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  47. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  48. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  49. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  50. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  51. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  52. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  53. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  54. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  55. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  56. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  57. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  58. django_cfg/apps/leads/tests.py +1 -1
  59. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  60. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  61. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  62. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  63. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  64. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  65. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  67. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  68. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  69. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  70. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  71. django_cfg/apps/payments/apps.py +1 -1
  72. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  73. django_cfg/apps/payments/config/helpers.py +3 -2
  74. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  75. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  76. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  77. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  78. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  79. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  80. django_cfg/apps/payments/middleware/api_access.py +1 -1
  81. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  82. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  83. django_cfg/apps/payments/models/balance.py +2 -2
  84. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  85. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  86. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  87. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  88. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  89. django_cfg/apps/payments/models/payments.py +2 -2
  90. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  91. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  92. django_cfg/apps/payments/services/core/base.py +1 -1
  93. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  94. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  95. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  96. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  97. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  98. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  99. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  100. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  101. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  102. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  103. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  104. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  105. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  106. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  107. django_cfg/apps/payments/services/providers/base.py +1 -1
  108. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  112. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  113. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  114. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  115. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  116. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  117. django_cfg/apps/payments/services/providers/registry.py +1 -1
  118. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  119. django_cfg/apps/payments/signals/__init__.py +1 -1
  120. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  121. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  122. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  123. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  124. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  125. django_cfg/apps/payments/views/api/balances.py +1 -1
  126. django_cfg/apps/payments/views/api/base.py +1 -1
  127. django_cfg/apps/payments/views/api/currencies.py +1 -1
  128. django_cfg/apps/payments/views/api/payments.py +1 -1
  129. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  130. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  131. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  132. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  133. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  134. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  135. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  136. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  137. django_cfg/apps/support/admin/support_admin.py +21 -13
  138. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  139. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  140. django_cfg/apps/support/utils/support_email_service.py +1 -1
  141. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  142. django_cfg/apps/tasks/utils/simulator.py +1 -1
  143. django_cfg/apps/tasks/views/dashboard.py +33 -3
  144. django_cfg/apps/urls.py +5 -1
  145. django_cfg/cli/README.md +57 -471
  146. django_cfg/cli/commands/create_project.py +140 -529
  147. django_cfg/cli/main.py +13 -10
  148. django_cfg/core/__init__.py +63 -6
  149. django_cfg/core/base/__init__.py +5 -0
  150. django_cfg/core/base/config_model.py +652 -0
  151. django_cfg/core/builders/__init__.py +11 -0
  152. django_cfg/core/builders/apps_builder.py +258 -0
  153. django_cfg/core/builders/middleware_builder.py +115 -0
  154. django_cfg/core/builders/security_builder.py +96 -0
  155. django_cfg/core/config.py +20 -892
  156. django_cfg/core/constants.py +69 -0
  157. django_cfg/core/environment/__init__.py +9 -0
  158. django_cfg/core/exceptions.py +45 -298
  159. django_cfg/core/generation/__init__.py +51 -0
  160. django_cfg/core/generation/core_generators/__init__.py +0 -0
  161. django_cfg/core/generation/core_generators/settings.py +90 -0
  162. django_cfg/core/generation/core_generators/static.py +82 -0
  163. django_cfg/core/generation/core_generators/templates.py +141 -0
  164. django_cfg/core/generation/data_generators/__init__.py +15 -0
  165. django_cfg/core/generation/data_generators/cache.py +132 -0
  166. django_cfg/core/generation/data_generators/database.py +117 -0
  167. django_cfg/core/generation/generation.py +92 -0
  168. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  169. django_cfg/core/generation/integration_generators/api.py +237 -0
  170. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  171. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  172. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  173. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  174. django_cfg/core/generation/orchestrator.py +285 -0
  175. django_cfg/core/generation/protocols.py +30 -0
  176. django_cfg/core/generation/security_generators/__init__.py +0 -0
  177. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  178. django_cfg/core/generation/utility_generators/email.py +58 -0
  179. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  180. django_cfg/core/generation/utility_generators/limits.py +58 -0
  181. django_cfg/core/generation/utility_generators/logging.py +66 -0
  182. django_cfg/core/generation/utility_generators/security.py +101 -0
  183. django_cfg/core/generation/utils/__init__.py +0 -0
  184. django_cfg/core/generation/utils/helpers.py +32 -0
  185. django_cfg/core/integration/__init__.py +18 -25
  186. django_cfg/core/integration/display/startup.py +146 -133
  187. django_cfg/core/integration/url_integration.py +13 -2
  188. django_cfg/core/services/__init__.py +5 -0
  189. django_cfg/core/services/config_service.py +121 -0
  190. django_cfg/core/state/__init__.py +9 -0
  191. django_cfg/core/state/registry.py +84 -0
  192. django_cfg/core/types/__init__.py +15 -0
  193. django_cfg/core/types/aliases.py +15 -0
  194. django_cfg/core/types/enums.py +49 -0
  195. django_cfg/dashboard/DEBUG_README.md +105 -0
  196. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  197. django_cfg/dashboard/__init__.py +24 -0
  198. django_cfg/dashboard/components.py +308 -0
  199. django_cfg/dashboard/debug.py +176 -0
  200. django_cfg/dashboard/management/__init__.py +0 -0
  201. django_cfg/dashboard/management/commands/__init__.py +0 -0
  202. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  203. django_cfg/dashboard/sections/__init__.py +1 -0
  204. django_cfg/dashboard/sections/base.py +128 -0
  205. django_cfg/dashboard/sections/commands.py +32 -0
  206. django_cfg/dashboard/sections/overview.py +394 -0
  207. django_cfg/dashboard/sections/stats.py +48 -0
  208. django_cfg/dashboard/sections/system.py +73 -0
  209. django_cfg/management/commands/check_settings.py +6 -2
  210. django_cfg/management/commands/clear_constance.py +6 -1
  211. django_cfg/management/commands/create_token.py +5 -4
  212. django_cfg/management/commands/generate.py +5 -0
  213. django_cfg/management/commands/list_urls.py +7 -2
  214. django_cfg/management/commands/migrate_all.py +6 -2
  215. django_cfg/management/commands/migrator.py +6 -1
  216. django_cfg/management/commands/rundramatiq.py +6 -1
  217. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  218. django_cfg/management/commands/runserver_ngrok.py +9 -7
  219. django_cfg/management/commands/script.py +25 -21
  220. django_cfg/management/commands/show_config.py +6 -1
  221. django_cfg/management/commands/show_urls.py +8 -3
  222. django_cfg/management/commands/superuser.py +5 -4
  223. django_cfg/management/commands/task_clear.py +8 -3
  224. django_cfg/management/commands/task_status.py +8 -3
  225. django_cfg/management/commands/test_email.py +6 -1
  226. django_cfg/management/commands/test_telegram.py +6 -1
  227. django_cfg/management/commands/test_twilio.py +6 -1
  228. django_cfg/management/commands/tree.py +7 -4
  229. django_cfg/models/__init__.py +88 -3
  230. django_cfg/models/api/__init__.py +27 -0
  231. django_cfg/models/{api.py → api/config.py} +1 -1
  232. django_cfg/models/api/drf/__init__.py +21 -0
  233. django_cfg/models/api/drf/config.py +101 -0
  234. django_cfg/models/api/drf/redoc.py +31 -0
  235. django_cfg/models/api/drf/spectacular.py +129 -0
  236. django_cfg/models/api/drf/swagger.py +59 -0
  237. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  238. django_cfg/models/{limits.py → api/limits.py} +0 -1
  239. django_cfg/models/base/__init__.py +14 -0
  240. django_cfg/models/django/__init__.py +16 -0
  241. django_cfg/models/{constance.py → django/constance.py} +1 -1
  242. django_cfg/models/{environment.py → django/environment.py} +1 -1
  243. django_cfg/models/infrastructure/__init__.py +17 -0
  244. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  245. django_cfg/models/infrastructure/database/__init__.py +22 -0
  246. django_cfg/models/infrastructure/database/config.py +265 -0
  247. django_cfg/models/infrastructure/database/converters.py +91 -0
  248. django_cfg/models/infrastructure/database/parsers.py +96 -0
  249. django_cfg/models/infrastructure/database/routing.py +85 -0
  250. django_cfg/models/infrastructure/database/validators.py +170 -0
  251. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  252. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  253. django_cfg/models/ngrok/__init__.py +11 -0
  254. django_cfg/models/ngrok/auth.py +37 -0
  255. django_cfg/models/ngrok/config.py +77 -0
  256. django_cfg/models/ngrok/tunnel.py +35 -0
  257. django_cfg/models/payments/__init__.py +20 -0
  258. django_cfg/models/payments/api_keys.py +57 -0
  259. django_cfg/models/{payments.py → payments/config.py} +56 -154
  260. django_cfg/models/payments/providers/__init__.py +15 -0
  261. django_cfg/models/payments/providers/base.py +25 -0
  262. django_cfg/models/payments/providers/nowpayments.py +48 -0
  263. django_cfg/models/services/__init__.py +18 -0
  264. django_cfg/models/services/base.py +65 -0
  265. django_cfg/models/{email.py → services/email.py} +1 -1
  266. django_cfg/models/services/telegram.py +172 -0
  267. django_cfg/models/tasks/__init__.py +51 -0
  268. django_cfg/models/tasks/backends.py +250 -0
  269. django_cfg/models/tasks/config.py +314 -0
  270. django_cfg/models/tasks/utils.py +174 -0
  271. django_cfg/modules/base.py +18 -3
  272. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  273. django_cfg/modules/django_admin/decorators/display.py +1 -1
  274. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  275. django_cfg/modules/django_currency/examples/__init__.py +3 -0
  276. django_cfg/modules/django_currency/examples/example_database_usage.py +144 -0
  277. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  278. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  279. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  280. django_cfg/modules/django_drf_theme/README.md +207 -0
  281. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  282. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  283. django_cfg/modules/django_drf_theme/apps.py +15 -0
  284. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  285. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  286. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  287. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  288. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  289. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  290. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  291. django_cfg/modules/django_email/__init__.py +14 -0
  292. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  293. django_cfg/modules/django_email/utils.py +40 -0
  294. django_cfg/modules/django_health/__init__.py +9 -0
  295. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  296. django_cfg/modules/django_ipc_client/README.md +346 -0
  297. django_cfg/modules/django_ipc_client/__init__.py +51 -0
  298. django_cfg/modules/django_ipc_client/client.py +540 -0
  299. django_cfg/modules/django_ipc_client/config.py +207 -0
  300. django_cfg/modules/django_ipc_client/dashboard/README.md +517 -0
  301. django_cfg/modules/django_ipc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  302. django_cfg/modules/django_ipc_client/dashboard/__init__.py +11 -0
  303. django_cfg/modules/django_ipc_client/dashboard/apps.py +22 -0
  304. django_cfg/modules/django_ipc_client/dashboard/monitor.py +435 -0
  305. django_cfg/modules/django_ipc_client/dashboard/static/django_ipc_dashboard/js/dashboard.js +373 -0
  306. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/base.html +76 -0
  307. django_cfg/modules/django_ipc_client/dashboard/templates/django_ipc_dashboard/dashboard.html +200 -0
  308. django_cfg/modules/django_ipc_client/dashboard/urls.py +22 -0
  309. django_cfg/modules/django_ipc_client/dashboard/urls_admin.py +9 -0
  310. django_cfg/modules/django_ipc_client/dashboard/views.py +251 -0
  311. django_cfg/modules/django_ipc_client/exceptions.py +201 -0
  312. django_cfg/modules/django_llm/llm/client.py +155 -550
  313. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  314. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  315. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  316. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  317. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  318. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  319. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  320. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  321. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  322. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  323. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  324. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  325. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  326. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  327. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  328. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  329. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  330. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  331. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  332. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  333. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  334. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  335. django_cfg/modules/django_llm/translator/translator.py +150 -603
  336. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  337. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  338. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  339. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  340. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  341. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  342. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  343. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  344. django_cfg/modules/django_logging/__init__.py +14 -0
  345. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  346. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  347. django_cfg/modules/django_ngrok/__init__.py +39 -0
  348. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  349. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  350. django_cfg/modules/django_rpc_old/README.md +397 -0
  351. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  352. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  353. django_cfg/modules/django_rpc_old/client.py +531 -0
  354. django_cfg/modules/django_rpc_old/config.py +279 -0
  355. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  356. django_cfg/modules/django_tailwind/README.md +478 -0
  357. django_cfg/modules/django_tailwind/__init__.py +7 -0
  358. django_cfg/modules/django_tailwind/apps.py +10 -0
  359. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  360. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  361. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  362. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  363. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  364. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  365. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  366. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  367. django_cfg/modules/django_tasks/__init__.py +29 -0
  368. django_cfg/modules/django_tasks/factory.py +127 -0
  369. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  370. django_cfg/modules/django_tasks/settings.py +107 -0
  371. django_cfg/modules/django_telegram/__init__.py +29 -0
  372. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  373. django_cfg/modules/django_telegram/utils.py +62 -0
  374. django_cfg/modules/django_twilio/__init__.py +54 -107
  375. django_cfg/modules/django_twilio/_imports.py +30 -0
  376. django_cfg/modules/django_twilio/base.py +192 -0
  377. django_cfg/modules/django_twilio/email_otp.py +227 -0
  378. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  379. django_cfg/modules/django_twilio/simple_service.py +1 -2
  380. django_cfg/modules/django_twilio/sms.py +94 -0
  381. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  382. django_cfg/modules/django_twilio/unified.py +310 -0
  383. django_cfg/modules/django_twilio/utils.py +190 -0
  384. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  385. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  386. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  387. django_cfg/modules/django_unfold/dashboard.py +65 -43
  388. django_cfg/modules/django_unfold/models/config.py +13 -12
  389. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  390. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  391. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  392. django_cfg/registry/core.py +24 -26
  393. django_cfg/registry/modules.py +5 -2
  394. django_cfg/registry/services.py +20 -3
  395. django_cfg/registry/third_party.py +8 -8
  396. django_cfg/static/admin/css/dashboard.css +260 -0
  397. django_cfg/static/admin/js/commands.js +171 -0
  398. django_cfg/static/admin/js/dashboard.js +126 -0
  399. django_cfg/templates/admin/components/management_commands.js +375 -0
  400. django_cfg/templates/admin/components/progress_bar.html +18 -23
  401. django_cfg/templates/admin/examples/component_class_example.html +156 -0
  402. django_cfg/templates/admin/index.html +48 -20
  403. django_cfg/templates/admin/index_new.html +106 -0
  404. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  405. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  406. django_cfg/templates/admin/sections/commands_section.html +626 -0
  407. django_cfg/templates/admin/sections/overview_section.html +112 -0
  408. django_cfg/templates/admin/sections/stats_section.html +35 -0
  409. django_cfg/templates/admin/sections/system_section.html +99 -0
  410. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  411. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  412. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  413. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  414. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  415. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  416. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  417. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  418. django_cfg/templatetags/django_cfg.py +7 -1
  419. django_cfg/utils/smart_defaults.py +4 -4
  420. django_cfg-1.4.3.dist-info/METADATA +533 -0
  421. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/RECORD +432 -195
  422. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  423. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  424. django_cfg/core/generation.py +0 -621
  425. django_cfg/management/commands/validate_config.py +0 -189
  426. django_cfg/models/database.py +0 -480
  427. django_cfg/models/drf.py +0 -272
  428. django_cfg/models/ngrok.py +0 -122
  429. django_cfg/models/services.py +0 -440
  430. django_cfg/models/tasks.py +0 -550
  431. django_cfg/modules/django_twilio/service.py +0 -942
  432. django_cfg/template_archive/django_sample.zip +0 -0
  433. django_cfg/templates/rest_framework/api.html +0 -12
  434. django_cfg/utils/toolkit.py +0 -703
  435. django_cfg-1.3.13.dist-info/METADATA +0 -1029
  436. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  437. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  438. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  439. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  440. /django_cfg/models/{base.py → base/config.py} +0 -0
  441. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  442. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  443. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  444. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/WHEEL +0 -0
  445. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/entry_points.txt +0 -0
  446. {django_cfg-1.3.13.dist-info → django_cfg-1.4.3.dist-info}/licenses/LICENSE +0 -0
@@ -7,7 +7,7 @@ Django logging settings with Pydantic 2.
7
7
  from typing import Dict, Any, List, Optional
8
8
  from pathlib import Path
9
9
  from pydantic import Field, field_validator
10
- from .base import BaseConfig
10
+ from ..base import BaseConfig
11
11
 
12
12
 
13
13
  class LoggerConfig(BaseConfig):
@@ -6,7 +6,7 @@ Django security settings with Pydantic 2.
6
6
 
7
7
  from typing import List, Dict, Any
8
8
  from pydantic import Field, field_validator
9
- from .base import BaseConfig
9
+ from ..base import BaseConfig
10
10
 
11
11
 
12
12
  class SecurityConfig(BaseConfig):
@@ -103,7 +103,7 @@ class SecurityConfig(BaseConfig):
103
103
  })
104
104
 
105
105
  # Add corsheaders to middleware if not present
106
- # This will be handled by the main ConfigToolkit
106
+ # This will be handled by the main DjangoConfig
107
107
 
108
108
  # CSRF settings
109
109
  settings.update({
@@ -0,0 +1,11 @@
1
+ """
2
+ Ngrok configuration models.
3
+
4
+ Simplified flat configuration without unnecessary nesting.
5
+ """
6
+
7
+ from .config import NgrokConfig
8
+
9
+ __all__ = [
10
+ "NgrokConfig",
11
+ ]
@@ -0,0 +1,37 @@
1
+ """
2
+ Ngrok authentication configuration.
3
+ """
4
+
5
+ from typing import Optional
6
+ from pydantic import BaseModel, Field
7
+ import os
8
+
9
+
10
+ class NgrokAuthConfig(BaseModel):
11
+ """Ngrok authentication configuration."""
12
+
13
+ authtoken: Optional[str] = Field(
14
+ default=None,
15
+ description="Ngrok auth token (loaded from NGROK_AUTHTOKEN env var if not provided)",
16
+ repr=False # Don't show in repr for security
17
+ )
18
+
19
+ authtoken_from_env: bool = Field(
20
+ default=True, # Try to load from env var by default
21
+ description="Load auth token from NGROK_AUTHTOKEN environment variable"
22
+ )
23
+
24
+ def get_authtoken(self) -> Optional[str]:
25
+ """Get auth token from config or environment."""
26
+ if self.authtoken:
27
+ return self.authtoken
28
+
29
+ if self.authtoken_from_env:
30
+ return os.environ.get("NGROK_AUTHTOKEN")
31
+
32
+ return None
33
+
34
+
35
+ __all__ = [
36
+ "NgrokAuthConfig",
37
+ ]
@@ -0,0 +1,77 @@
1
+ """
2
+ Main ngrok configuration for django_cfg.
3
+
4
+ Simplified flat structure - only essential fields.
5
+ Domain and schemes are auto-determined from api_url in config.
6
+ """
7
+
8
+ from typing import Optional, List
9
+ from pydantic import BaseModel, Field, field_validator
10
+ import os
11
+
12
+
13
+ class NgrokConfig(BaseModel):
14
+ """Simplified flat ngrok configuration for django-cfg.
15
+
16
+ Key simplifications:
17
+ - No domain field (uses api_url from DjangoConfig automatically)
18
+ - No schemes field (auto-determined from api_url: http:// -> http, https:// -> https)
19
+ - Flat structure (no nested NgrokAuthConfig/NgrokTunnelConfig)
20
+ """
21
+
22
+ model_config = {
23
+ "str_strip_whitespace": True,
24
+ "validate_assignment": True,
25
+ "extra": "forbid"
26
+ }
27
+
28
+ # Control
29
+ enabled: bool = Field(
30
+ default=False,
31
+ description="Enable ngrok integration (only works in DEBUG mode)"
32
+ )
33
+
34
+ # Authentication
35
+ authtoken: Optional[str] = Field(
36
+ default=None,
37
+ description="Ngrok auth token. If None, will try NGROK_AUTHTOKEN env var",
38
+ repr=False # Don't show in repr for security
39
+ )
40
+
41
+ # Optional tunnel features
42
+ basic_auth: Optional[List[str]] = Field(
43
+ default=None,
44
+ description="Basic auth credentials in format ['user:pass']"
45
+ )
46
+
47
+ compression: bool = Field(
48
+ default=True,
49
+ description="Enable gzip compression"
50
+ )
51
+
52
+ @field_validator("enabled")
53
+ @classmethod
54
+ def validate_enabled_in_debug_only(cls, v: bool) -> bool:
55
+ """Ensure ngrok is only enabled in debug mode."""
56
+ if v:
57
+ # Only check if Django is available and fully configured
58
+ try:
59
+ from django.conf import settings
60
+ # Only validate if settings are configured and DEBUG attribute exists
61
+ if settings.configured and hasattr(settings, 'DEBUG') and not settings.DEBUG:
62
+ raise ValueError("Ngrok can only be enabled in DEBUG mode")
63
+ except (ImportError, AttributeError, RuntimeError):
64
+ # Django not available, not configured, or settings not ready - skip validation
65
+ pass
66
+ return v
67
+
68
+ def get_authtoken(self) -> Optional[str]:
69
+ """Get auth token from config or environment."""
70
+ if self.authtoken:
71
+ return self.authtoken
72
+ return os.environ.get("NGROK_AUTHTOKEN")
73
+
74
+
75
+ __all__ = [
76
+ "NgrokConfig",
77
+ ]
@@ -0,0 +1,35 @@
1
+ """
2
+ Ngrok tunnel configuration.
3
+ """
4
+
5
+ from typing import Optional, List, Literal
6
+ from pydantic import BaseModel, Field
7
+
8
+
9
+ class NgrokTunnelConfig(BaseModel):
10
+ """Configuration for ngrok tunnel."""
11
+
12
+ domain: Optional[str] = Field(
13
+ default=None,
14
+ description="Custom domain for tunnel (requires paid ngrok plan)"
15
+ )
16
+
17
+ schemes: List[Literal["http", "https"]] = Field(
18
+ default_factory=lambda: ["http", "https"],
19
+ description="URL schemes to tunnel"
20
+ )
21
+
22
+ basic_auth: Optional[List[str]] = Field(
23
+ default=None,
24
+ description="Basic auth credentials in format ['user:pass']"
25
+ )
26
+
27
+ compression: bool = Field(
28
+ default=True,
29
+ description="Enable gzip compression"
30
+ )
31
+
32
+
33
+ __all__ = [
34
+ "NgrokTunnelConfig",
35
+ ]
@@ -0,0 +1,20 @@
1
+ """
2
+ Payment configuration models for django_cfg.
3
+
4
+ Provides type-safe configuration for payment providers and API keys:
5
+ - PaymentsConfig: Main payments configuration
6
+ - ProviderAPIKeysConfig: API keys management
7
+ - BaseProviderConfig: Base provider configuration
8
+ - NowPaymentsProviderConfig: NowPayments provider
9
+ """
10
+
11
+ from .config import PaymentsConfig
12
+ from .api_keys import ProviderAPIKeysConfig
13
+ from .providers import BaseProviderConfig, NowPaymentsProviderConfig
14
+
15
+ __all__ = [
16
+ "PaymentsConfig",
17
+ "ProviderAPIKeysConfig",
18
+ "BaseProviderConfig",
19
+ "NowPaymentsProviderConfig",
20
+ ]
@@ -0,0 +1,57 @@
1
+ """
2
+ API keys configuration for payment providers.
3
+ """
4
+
5
+ from pydantic import BaseModel, Field
6
+ from typing import List, Dict, Optional
7
+ from .providers.base import BaseProviderConfig
8
+
9
+
10
+ class ProviderAPIKeysConfig(BaseModel):
11
+ """
12
+ API keys configuration for payment providers.
13
+
14
+ Stores list of provider configurations.
15
+ """
16
+
17
+ providers: List[BaseProviderConfig] = Field(
18
+ default_factory=list,
19
+ description="List of provider configurations"
20
+ )
21
+
22
+ def add_provider(self, provider_config: BaseProviderConfig):
23
+ """Add a provider configuration."""
24
+ # Remove existing provider with same name
25
+ self.providers = [p for p in self.providers if p.provider_name != provider_config.provider_name]
26
+ self.providers.append(provider_config)
27
+
28
+ def get_provider_config(self, provider: str) -> Dict[str, any]:
29
+ """Get provider-specific configuration."""
30
+ provider_lower = provider.lower()
31
+
32
+ for provider_config in self.providers:
33
+ if provider_config.provider_name.lower() == provider_lower:
34
+ return provider_config.get_provider_config()
35
+
36
+ return {'enabled': False, 'provider_name': provider}
37
+
38
+ def get_enabled_providers(self) -> List[str]:
39
+ """Get list of enabled providers."""
40
+ enabled = []
41
+ for provider_config in self.providers:
42
+ config = provider_config.get_provider_config()
43
+ if config.get('enabled', False):
44
+ enabled.append(provider_config.provider_name)
45
+ return enabled
46
+
47
+ def get_provider_by_name(self, provider_name: str) -> Optional[BaseProviderConfig]:
48
+ """Get provider configuration by name."""
49
+ for provider_config in self.providers:
50
+ if provider_config.provider_name.lower() == provider_name.lower():
51
+ return provider_config
52
+ return None
53
+
54
+
55
+ __all__ = [
56
+ "ProviderAPIKeysConfig",
57
+ ]
@@ -1,135 +1,41 @@
1
1
  """
2
- Payments configuration model for Django-CFG.
2
+ Main payments configuration for django_cfg.
3
3
 
4
- Simple, clean configuration following django-cfg philosophy.
4
+ Payments app configuration with middleware, rate limiting, and usage tracking.
5
5
  """
6
6
 
7
7
  from pydantic import BaseModel, Field
8
- from typing import List, Dict, Optional
9
- from django_cfg.models.cfg import BaseCfgAutoModule
10
-
11
-
12
- class BaseProviderConfig(BaseModel):
13
- """Base configuration for payment providers."""
14
-
15
- provider_name: str = Field(..., description="Provider name")
16
- enabled: bool = Field(default=True, description="Whether provider is enabled")
17
-
18
- def get_provider_config(self) -> Dict[str, any]:
19
- """Get provider-specific configuration."""
20
- return {
21
- 'provider_name': self.provider_name,
22
- 'enabled': self.enabled,
23
- }
24
-
25
-
26
- class NowPaymentsProviderConfig(BaseProviderConfig):
27
- """NowPayments provider configuration."""
28
-
29
- provider_name: str = Field(default="nowpayments", description="Provider name")
30
- api_key: str = Field(default="", description="NowPayments API key")
31
- ipn_secret: str = Field(default="", description="NowPayments IPN secret for webhook validation")
32
- sandbox_mode: bool = Field(default=True, description="NowPayments sandbox mode")
33
-
34
- def get_provider_config(self) -> Dict[str, any]:
35
- """Get NowPayments-specific configuration."""
36
- return {
37
- 'provider_name': self.provider_name,
38
- 'enabled': self.enabled and bool(self.api_key.strip()),
39
- 'api_key': self.api_key,
40
- 'ipn_secret': self.ipn_secret,
41
- 'sandbox_mode': self.sandbox_mode,
42
- }
43
-
44
-
45
- # Future provider configs (commented out for now)
46
- # class StripeProviderConfig(BaseProviderConfig):
47
- # """Stripe provider configuration."""
48
- #
49
- # provider_name: str = Field(default="stripe", description="Provider name")
50
- # api_key: str = Field(default="", description="Stripe API key")
51
- # webhook_secret: str = Field(default="", description="Stripe webhook secret")
52
- #
53
- # def get_provider_config(self) -> Dict[str, any]:
54
- # return {
55
- # 'provider_name': self.provider_name,
56
- # 'enabled': self.enabled and bool(self.api_key.strip()),
57
- # 'api_key': self.api_key,
58
- # 'webhook_secret': self.webhook_secret,
59
- # }
60
-
61
-
62
- class ProviderAPIKeysConfig(BaseModel):
63
- """
64
- API keys configuration for payment providers.
65
-
66
- Stores list of provider configurations.
67
- """
68
-
69
- providers: List[BaseProviderConfig] = Field(
70
- default_factory=list,
71
- description="List of provider configurations"
72
- )
73
-
74
- def add_provider(self, provider_config: BaseProviderConfig):
75
- """Add a provider configuration."""
76
- # Remove existing provider with same name
77
- self.providers = [p for p in self.providers if p.provider_name != provider_config.provider_name]
78
- self.providers.append(provider_config)
79
-
80
- def get_provider_config(self, provider: str) -> Dict[str, any]:
81
- """Get provider-specific configuration."""
82
- provider_lower = provider.lower()
83
-
84
- for provider_config in self.providers:
85
- if provider_config.provider_name.lower() == provider_lower:
86
- return provider_config.get_provider_config()
87
-
88
- return {'enabled': False, 'provider_name': provider}
89
-
90
- def get_enabled_providers(self) -> List[str]:
91
- """Get list of enabled providers."""
92
- enabled = []
93
- for provider_config in self.providers:
94
- config = provider_config.get_provider_config()
95
- if config.get('enabled', False):
96
- enabled.append(provider_config.provider_name)
97
- return enabled
98
-
99
- def get_provider_by_name(self, provider_name: str) -> Optional[BaseProviderConfig]:
100
- """Get provider configuration by name."""
101
- for provider_config in self.providers:
102
- if provider_config.provider_name.lower() == provider_name.lower():
103
- return provider_config
104
- return None
8
+ from typing import List, Dict
9
+ from django_cfg.models.base import BaseCfgAutoModule
10
+ from .api_keys import ProviderAPIKeysConfig
105
11
 
106
12
 
107
13
  class PaymentsConfig(BaseModel, BaseCfgAutoModule):
108
14
  """
109
15
  Payments app configuration for django-cfg.
110
-
16
+
111
17
  Includes both static configuration and API keys.
112
18
  API keys are now managed through BaseCfgAutoModule instead of Constance.
113
19
  """
114
-
20
+
115
21
  # Core settings
116
22
  enabled: bool = Field(
117
- default=False,
23
+ default=False,
118
24
  description="Enable payments app"
119
25
  )
120
-
26
+
121
27
  # API keys configuration
122
28
  api_keys: ProviderAPIKeysConfig = Field(
123
29
  default_factory=ProviderAPIKeysConfig,
124
30
  description="API keys and secrets for payment providers"
125
31
  )
126
-
32
+
127
33
  # Middleware settings
128
34
  middleware_enabled: bool = Field(
129
35
  default=True,
130
36
  description="Enable payments middleware"
131
37
  )
132
-
38
+
133
39
  # Whitelist approach - only these paths require API key
134
40
  protected_paths: List[str] = Field(
135
41
  default=[
@@ -139,22 +45,22 @@ class PaymentsConfig(BaseModel, BaseCfgAutoModule):
139
45
  ],
140
46
  description="Paths that require API key authentication (whitelist approach)"
141
47
  )
142
-
48
+
143
49
  protected_patterns: List[str] = Field(
144
50
  default=[
145
51
  r'^/api/admin/.*$', # All admin API endpoints
146
- r'^/api/private/.*$', # All private API endpoints
52
+ r'^/api/private/.*$', # All private API endpoints
147
53
  r'^/api/secure/.*$', # All secure API endpoints
148
54
  ],
149
55
  description="Regex patterns for paths that require API key authentication"
150
56
  )
151
-
57
+
152
58
  # Rate limiting defaults
153
59
  rate_limiting_enabled: bool = Field(
154
60
  default=True,
155
61
  description="Enable rate limiting middleware"
156
62
  )
157
-
63
+
158
64
  default_rate_limits: Dict[str, int] = Field(
159
65
  default={
160
66
  'anonymous': 60,
@@ -166,18 +72,18 @@ class PaymentsConfig(BaseModel, BaseCfgAutoModule):
166
72
  },
167
73
  description="Default rate limits (requests per minute) by tier"
168
74
  )
169
-
75
+
170
76
  # Usage tracking
171
77
  usage_tracking_enabled: bool = Field(
172
78
  default=True,
173
79
  description="Enable usage tracking middleware"
174
80
  )
175
-
81
+
176
82
  track_anonymous_usage: bool = Field(
177
83
  default=False,
178
84
  description="Track anonymous user requests"
179
85
  )
180
-
86
+
181
87
  # Cache settings
182
88
  cache_timeouts: Dict[str, int] = Field(
183
89
  default={
@@ -188,94 +94,94 @@ class PaymentsConfig(BaseModel, BaseCfgAutoModule):
188
94
  },
189
95
  description="Cache timeout settings in seconds"
190
96
  )
191
-
97
+
192
98
  def get_middleware_classes(self) -> List[str]:
193
99
  """
194
100
  Get middleware classes to add to Django MIDDLEWARE setting.
195
-
101
+
196
102
  Returns:
197
103
  List of middleware class paths
198
104
  """
199
105
  if not self.enabled or not self.middleware_enabled:
200
106
  return []
201
-
107
+
202
108
  middleware = []
203
-
109
+
204
110
  # Always add API access middleware first
205
111
  middleware.append('django_cfg.apps.payments.middleware.APIAccessMiddleware')
206
-
112
+
207
113
  # Add rate limiting if enabled
208
114
  if self.rate_limiting_enabled:
209
115
  middleware.append('django_cfg.apps.payments.middleware.RateLimitingMiddleware')
210
-
116
+
211
117
  # Add usage tracking if enabled
212
118
  if self.usage_tracking_enabled:
213
119
  middleware.append('django_cfg.apps.payments.middleware.UsageTrackingMiddleware')
214
-
120
+
215
121
  return middleware
216
-
122
+
217
123
  def should_enable_tasks(self) -> bool:
218
124
  """
219
125
  Check if payments app requires Celery tasks.
220
-
126
+
221
127
  Returns:
222
128
  True if tasks should be enabled
223
129
  """
224
130
  return self.enabled # Enable tasks if payments is enabled
225
-
131
+
226
132
  # Navigation and UI feature checks
227
133
  def show_webhook_dashboard(self) -> bool:
228
134
  """Check if webhook dashboard should be shown in navigation."""
229
135
  return self.enabled
230
-
136
+
231
137
  def show_payment_creation(self) -> bool:
232
138
  """Check if payment creation should be shown in navigation."""
233
139
  return self.enabled
234
-
140
+
235
141
  def show_currency_converter(self) -> bool:
236
142
  """Check if currency converter should be shown in navigation."""
237
143
  return self.enabled
238
-
144
+
239
145
  def show_api_management(self) -> bool:
240
146
  """Check if API key management should be shown in navigation."""
241
147
  return self.enabled
242
-
148
+
243
149
  def show_subscription_management(self) -> bool:
244
150
  """Check if subscription management should be shown in navigation."""
245
151
  return self.enabled
246
-
152
+
247
153
  def show_balance_management(self) -> bool:
248
154
  """Check if balance management should be shown in navigation."""
249
155
  return self.enabled
250
-
156
+
251
157
  def show_transaction_history(self) -> bool:
252
158
  """Check if transaction history should be shown in navigation."""
253
159
  return self.enabled
254
-
160
+
255
161
  def show_currency_management(self) -> bool:
256
162
  """Check if currency management should be shown in navigation."""
257
163
  return self.enabled
258
-
164
+
259
165
  def show_rate_limiting_features(self) -> bool:
260
166
  """Check if rate limiting features should be shown."""
261
167
  return self.enabled and self.rate_limiting_enabled
262
-
168
+
263
169
  def show_usage_tracking_features(self) -> bool:
264
170
  """Check if usage tracking features should be shown."""
265
171
  return self.enabled and self.usage_tracking_enabled
266
-
172
+
267
173
  def get_enabled_navigation_items(self) -> List[str]:
268
174
  """
269
175
  Get list of enabled navigation items for dynamic UI generation.
270
-
176
+
271
177
  Returns:
272
178
  List of enabled navigation item identifiers
273
179
  """
274
180
  items = []
275
-
181
+
276
182
  if not self.enabled:
277
183
  return items
278
-
184
+
279
185
  # Core features (always enabled if payments is enabled)
280
186
  items.extend([
281
187
  'payment_dashboard',
@@ -284,59 +190,59 @@ class PaymentsConfig(BaseModel, BaseCfgAutoModule):
284
190
  'networks_admin',
285
191
  'provider_currencies_admin',
286
192
  ])
287
-
193
+
288
194
  # Optional features based on configuration
289
195
  if self.show_webhook_dashboard():
290
196
  items.append('webhook_dashboard')
291
-
197
+
292
198
  if self.show_payment_creation():
293
199
  items.append('payment_creation')
294
-
200
+
295
201
  if self.show_currency_converter():
296
202
  items.append('currency_converter')
297
-
203
+
298
204
  if self.show_api_management():
299
205
  items.extend(['api_keys_admin', 'endpoint_groups_admin'])
300
-
206
+
301
207
  if self.show_subscription_management():
302
208
  items.extend(['subscriptions_admin', 'tariffs_admin'])
303
-
209
+
304
210
  if self.show_balance_management():
305
211
  items.append('balances_admin')
306
-
212
+
307
213
  if self.show_transaction_history():
308
214
  items.append('transactions_admin')
309
-
215
+
310
216
  return items
311
-
217
+
312
218
  # API Keys access methods
313
219
  def get_provider_api_config(self, provider: str) -> Dict[str, any]:
314
220
  """Get provider-specific API configuration."""
315
221
  return self.api_keys.get_provider_config(provider)
316
-
222
+
317
223
  def get_enabled_providers(self) -> List[str]:
318
224
  """Get list of enabled providers (those with API keys configured)."""
319
225
  return self.api_keys.get_enabled_providers()
320
-
226
+
321
227
  def is_provider_enabled(self, provider: str) -> bool:
322
228
  """Check if a specific provider is enabled (has API keys configured)."""
323
229
  config = self.api_keys.get_provider_config(provider)
324
230
  return config.get('enabled', False)
325
-
231
+
326
232
  # BaseCfgAutoModule implementation
327
233
  def get_smart_defaults(self):
328
234
  """Get smart default configuration for this module."""
329
235
  return PaymentsConfig()
330
-
236
+
331
237
  def get_module_config(self):
332
238
  """Get the final configuration for this module."""
333
239
  return self
334
-
240
+
335
241
  @classmethod
336
242
  def get_current_config(cls) -> 'PaymentsConfig':
337
243
  """
338
244
  Get current payments configuration from django-cfg.
339
-
245
+
340
246
  Uses PaymentsConfigManager for consistent access.
341
247
  """
342
248
  try:
@@ -347,10 +253,6 @@ class PaymentsConfig(BaseModel, BaseCfgAutoModule):
347
253
  return cls()
348
254
 
349
255
 
350
- # Export all payment configuration classes
351
256
  __all__ = [
352
- "BaseProviderConfig",
353
- "NowPaymentsProviderConfig",
354
- "ProviderAPIKeysConfig",
355
257
  "PaymentsConfig",
356
258
  ]
@@ -0,0 +1,15 @@
1
+ """
2
+ Payment provider configurations.
3
+
4
+ Provides type-safe configuration for payment providers:
5
+ - BaseProviderConfig: Base class for all providers
6
+ - NowPaymentsProviderConfig: NowPayments provider
7
+ """
8
+
9
+ from .base import BaseProviderConfig
10
+ from .nowpayments import NowPaymentsProviderConfig
11
+
12
+ __all__ = [
13
+ "BaseProviderConfig",
14
+ "NowPaymentsProviderConfig",
15
+ ]