django-cfg 1.3.11__py3-none-any.whl → 1.4.0__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 (439) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/inlines.py +11 -5
  3. django_cfg/apps/accounts/admin/user_admin.py +39 -16
  4. django_cfg/apps/accounts/serializers/profile.py +1 -1
  5. django_cfg/apps/accounts/services/otp_service.py +18 -11
  6. django_cfg/apps/accounts/signals.py +15 -24
  7. django_cfg/apps/accounts/utils/notifications.py +217 -358
  8. django_cfg/apps/accounts/views/otp.py +2 -2
  9. django_cfg/apps/accounts/views/webhook.py +1 -1
  10. django_cfg/apps/agents/core/django_agent.py +1 -1
  11. django_cfg/apps/api/commands/views.py +66 -83
  12. django_cfg/apps/api/health/drf_views.py +269 -0
  13. django_cfg/apps/api/health/serializers.py +45 -0
  14. django_cfg/apps/api/health/urls.py +6 -1
  15. django_cfg/apps/knowbase/admin/actions/__init__.py +13 -0
  16. django_cfg/apps/knowbase/admin/actions/visibility_actions.py +56 -0
  17. django_cfg/apps/knowbase/admin/document_admin.py +136 -270
  18. django_cfg/apps/knowbase/admin/helpers/__init__.py +17 -0
  19. django_cfg/apps/knowbase/admin/helpers/configs.py +72 -0
  20. django_cfg/apps/knowbase/admin/helpers/display_helpers.py +156 -0
  21. django_cfg/apps/knowbase/admin/helpers/statistics.py +108 -0
  22. django_cfg/apps/knowbase/config/constance_fields.py +1 -1
  23. django_cfg/apps/knowbase/config/settings.py +2 -2
  24. django_cfg/apps/knowbase/mixins/__init__.py +19 -2
  25. django_cfg/apps/knowbase/mixins/config/__init__.py +14 -0
  26. django_cfg/apps/knowbase/mixins/config/defaults.py +75 -0
  27. django_cfg/apps/knowbase/mixins/config/meta_config.py +120 -0
  28. django_cfg/apps/knowbase/mixins/creator.py +10 -10
  29. django_cfg/apps/knowbase/mixins/external_data_mixin.py +105 -403
  30. django_cfg/apps/knowbase/mixins/generators/__init__.py +16 -0
  31. django_cfg/apps/knowbase/mixins/generators/content_generator.py +218 -0
  32. django_cfg/apps/knowbase/mixins/generators/field_analyzer.py +76 -0
  33. django_cfg/apps/knowbase/mixins/generators/metadata_generator.py +124 -0
  34. django_cfg/apps/knowbase/mixins/service.py +2 -2
  35. django_cfg/apps/knowbase/services/archive/__init__.py +1 -0
  36. django_cfg/apps/knowbase/services/archive/analyzers/__init__.py +17 -0
  37. django_cfg/apps/knowbase/services/archive/analyzers/complexity_analyzer.py +33 -0
  38. django_cfg/apps/knowbase/services/archive/analyzers/purpose_detector.py +36 -0
  39. django_cfg/apps/knowbase/services/archive/analyzers/quality_analyzer.py +39 -0
  40. django_cfg/apps/knowbase/services/archive/analyzers/tag_generator.py +103 -0
  41. django_cfg/apps/knowbase/services/archive/chunking/__init__.py +19 -0
  42. django_cfg/apps/knowbase/services/archive/chunking/base.py +81 -0
  43. django_cfg/apps/knowbase/services/archive/chunking/json_chunker.py +62 -0
  44. django_cfg/apps/knowbase/services/archive/chunking/markdown_chunker.py +107 -0
  45. django_cfg/apps/knowbase/services/archive/chunking/python_chunker.py +248 -0
  46. django_cfg/apps/knowbase/services/archive/chunking/text_chunker.py +70 -0
  47. django_cfg/apps/knowbase/services/archive/chunking_service.py +110 -729
  48. django_cfg/apps/knowbase/services/archive/context/__init__.py +14 -0
  49. django_cfg/apps/knowbase/services/archive/context/builders.py +220 -0
  50. django_cfg/apps/knowbase/services/archive/context/models.py +38 -0
  51. django_cfg/apps/knowbase/services/embedding/models.py +18 -14
  52. django_cfg/apps/knowbase/services/embedding/processors.py +6 -3
  53. django_cfg/apps/knowbase/tasks/document_processing.py +11 -3
  54. django_cfg/apps/leads/tests.py +1 -1
  55. django_cfg/apps/payments/admin/api_keys_admin.py +1 -1
  56. django_cfg/apps/payments/admin/balance_admin.py +1 -1
  57. django_cfg/apps/payments/admin/currencies_admin.py +1 -1
  58. django_cfg/apps/payments/admin/payments_admin.py +1 -1
  59. django_cfg/apps/payments/admin/subscriptions_admin.py +1 -1
  60. django_cfg/apps/payments/admin_interface/templates/payments/base.html +59 -126
  61. django_cfg/apps/payments/admin_interface/views/api/payments.py +1 -1
  62. django_cfg/apps/payments/admin_interface/views/api/stats.py +1 -1
  63. django_cfg/apps/payments/admin_interface/views/api/users.py +1 -1
  64. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +1 -1
  65. django_cfg/apps/payments/admin_interface/views/api/webhook_public.py +1 -1
  66. django_cfg/apps/payments/admin_interface/views/base.py +29 -2
  67. django_cfg/apps/payments/apps.py +1 -1
  68. django_cfg/apps/payments/config/django_cfg_integration.py +2 -2
  69. django_cfg/apps/payments/config/helpers.py +3 -2
  70. django_cfg/apps/payments/management/commands/cleanup_expired_data.py +1 -1
  71. django_cfg/apps/payments/management/commands/currency_stats.py +1 -1
  72. django_cfg/apps/payments/management/commands/manage_currencies.py +1 -1
  73. django_cfg/apps/payments/management/commands/manage_providers.py +1 -1
  74. django_cfg/apps/payments/management/commands/process_pending_payments.py +1 -1
  75. django_cfg/apps/payments/management/commands/test_providers.py +1 -1
  76. django_cfg/apps/payments/middleware/api_access.py +1 -1
  77. django_cfg/apps/payments/middleware/rate_limiting.py +1 -1
  78. django_cfg/apps/payments/middleware/usage_tracking.py +1 -1
  79. django_cfg/apps/payments/models/balance.py +2 -2
  80. django_cfg/apps/payments/models/managers/api_key_managers.py +1 -1
  81. django_cfg/apps/payments/models/managers/balance_managers.py +1 -1
  82. django_cfg/apps/payments/models/managers/currency_managers.py +1 -1
  83. django_cfg/apps/payments/models/managers/payment_managers.py +1 -1
  84. django_cfg/apps/payments/models/managers/subscription_managers.py +1 -1
  85. django_cfg/apps/payments/models/payments.py +2 -2
  86. django_cfg/apps/payments/services/cache_service/__init__.py +1 -1
  87. django_cfg/apps/payments/services/cache_service/simple_cache.py +10 -5
  88. django_cfg/apps/payments/services/core/base.py +1 -1
  89. django_cfg/apps/payments/services/core/currency/__init__.py +13 -0
  90. django_cfg/apps/payments/services/core/currency/currency_converter.py +57 -0
  91. django_cfg/apps/payments/services/core/currency/currency_validator.py +61 -0
  92. django_cfg/apps/payments/services/core/operations/__init__.py +15 -0
  93. django_cfg/apps/payments/services/core/operations/payment_canceller.py +100 -0
  94. django_cfg/apps/payments/services/core/operations/payment_creator.py +196 -0
  95. django_cfg/apps/payments/services/core/operations/status_checker.py +100 -0
  96. django_cfg/apps/payments/services/core/payment_service.py +124 -612
  97. django_cfg/apps/payments/services/core/providers/__init__.py +13 -0
  98. django_cfg/apps/payments/services/core/providers/provider_client.py +132 -0
  99. django_cfg/apps/payments/services/core/providers/status_mapper.py +89 -0
  100. django_cfg/apps/payments/services/core/utils/__init__.py +13 -0
  101. django_cfg/apps/payments/services/core/utils/data_converter.py +48 -0
  102. django_cfg/apps/payments/services/core/utils/statistics_calculator.py +69 -0
  103. django_cfg/apps/payments/services/providers/base.py +1 -1
  104. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +3 -3
  105. django_cfg/apps/payments/services/providers/nowpayments/parsers/__init__.py +9 -0
  106. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/__init__.py +23 -0
  107. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/constants.py +23 -0
  108. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/currency_names.py +244 -0
  109. django_cfg/apps/payments/services/providers/nowpayments/parsers/data/patterns.py +511 -0
  110. django_cfg/apps/payments/services/providers/nowpayments/parsers/parser.py +168 -0
  111. django_cfg/apps/payments/services/providers/nowpayments/provider.py +1 -1
  112. django_cfg/apps/payments/services/providers/nowpayments/sync.py +1 -1
  113. django_cfg/apps/payments/services/providers/registry.py +1 -1
  114. django_cfg/apps/payments/services/providers/sync_service.py +1 -1
  115. django_cfg/apps/payments/signals/__init__.py +1 -1
  116. django_cfg/apps/payments/signals/api_key_signals.py +1 -1
  117. django_cfg/apps/payments/signals/balance_signals.py +1 -1
  118. django_cfg/apps/payments/signals/payment_signals.py +1 -1
  119. django_cfg/apps/payments/signals/subscription_signals.py +1 -1
  120. django_cfg/apps/payments/views/api/api_keys.py +1 -1
  121. django_cfg/apps/payments/views/api/balances.py +1 -1
  122. django_cfg/apps/payments/views/api/base.py +1 -1
  123. django_cfg/apps/payments/views/api/currencies.py +1 -1
  124. django_cfg/apps/payments/views/api/payments.py +1 -1
  125. django_cfg/apps/payments/views/api/subscriptions.py +1 -1
  126. django_cfg/apps/payments/views/api/webhooks.py +1 -1
  127. django_cfg/apps/payments/views/serializers/api_keys.py +1 -1
  128. django_cfg/apps/payments/views/serializers/balances.py +1 -1
  129. django_cfg/apps/payments/views/serializers/currencies.py +1 -1
  130. django_cfg/apps/payments/views/serializers/payments.py +1 -1
  131. django_cfg/apps/payments/views/serializers/subscriptions.py +1 -1
  132. django_cfg/apps/payments/views/serializers/webhooks.py +1 -1
  133. django_cfg/apps/support/admin/support_admin.py +21 -13
  134. django_cfg/apps/support/templates/support/chat/access_denied.html +21 -27
  135. django_cfg/apps/support/templates/support/chat/ticket_chat.html +183 -254
  136. django_cfg/apps/support/utils/support_email_service.py +1 -1
  137. django_cfg/apps/tasks/templates/tasks/layout/base.html +20 -115
  138. django_cfg/apps/tasks/utils/simulator.py +1 -1
  139. django_cfg/apps/tasks/views/dashboard.py +33 -3
  140. django_cfg/apps/urls.py +5 -1
  141. django_cfg/cli/README.md +57 -471
  142. django_cfg/cli/commands/create_project.py +140 -529
  143. django_cfg/cli/main.py +13 -10
  144. django_cfg/core/__init__.py +63 -6
  145. django_cfg/core/base/__init__.py +5 -0
  146. django_cfg/core/base/config_model.py +652 -0
  147. django_cfg/core/builders/__init__.py +11 -0
  148. django_cfg/core/builders/apps_builder.py +258 -0
  149. django_cfg/core/builders/middleware_builder.py +115 -0
  150. django_cfg/core/builders/security_builder.py +96 -0
  151. django_cfg/core/config.py +20 -892
  152. django_cfg/core/constants.py +69 -0
  153. django_cfg/core/environment/__init__.py +9 -0
  154. django_cfg/core/exceptions.py +45 -298
  155. django_cfg/core/generation/__init__.py +51 -0
  156. django_cfg/core/generation/core_generators/__init__.py +0 -0
  157. django_cfg/core/generation/core_generators/settings.py +90 -0
  158. django_cfg/core/generation/core_generators/static.py +82 -0
  159. django_cfg/core/generation/core_generators/templates.py +141 -0
  160. django_cfg/core/generation/data_generators/__init__.py +15 -0
  161. django_cfg/core/generation/data_generators/cache.py +132 -0
  162. django_cfg/core/generation/data_generators/database.py +117 -0
  163. django_cfg/core/generation/generation.py +92 -0
  164. django_cfg/core/generation/integration_generators/__init__.py +21 -0
  165. django_cfg/core/generation/integration_generators/api.py +237 -0
  166. django_cfg/core/generation/integration_generators/sessions.py +65 -0
  167. django_cfg/core/generation/integration_generators/tailwind.py +54 -0
  168. django_cfg/core/generation/integration_generators/tasks.py +92 -0
  169. django_cfg/core/generation/integration_generators/third_party.py +144 -0
  170. django_cfg/core/generation/orchestrator.py +285 -0
  171. django_cfg/core/generation/protocols.py +30 -0
  172. django_cfg/core/generation/security_generators/__init__.py +0 -0
  173. django_cfg/core/generation/utility_generators/__init__.py +24 -0
  174. django_cfg/core/generation/utility_generators/email.py +58 -0
  175. django_cfg/core/generation/utility_generators/i18n.py +66 -0
  176. django_cfg/core/generation/utility_generators/limits.py +58 -0
  177. django_cfg/core/generation/utility_generators/logging.py +66 -0
  178. django_cfg/core/generation/utility_generators/security.py +101 -0
  179. django_cfg/core/generation/utils/__init__.py +0 -0
  180. django_cfg/core/generation/utils/helpers.py +32 -0
  181. django_cfg/core/integration/__init__.py +18 -25
  182. django_cfg/core/integration/display/startup.py +146 -133
  183. django_cfg/core/integration/url_integration.py +13 -2
  184. django_cfg/core/services/__init__.py +5 -0
  185. django_cfg/core/services/config_service.py +121 -0
  186. django_cfg/core/state/__init__.py +9 -0
  187. django_cfg/core/state/registry.py +84 -0
  188. django_cfg/core/types/__init__.py +15 -0
  189. django_cfg/core/types/aliases.py +15 -0
  190. django_cfg/core/types/enums.py +49 -0
  191. django_cfg/dashboard/DEBUG_README.md +105 -0
  192. django_cfg/dashboard/REFACTORING_SUMMARY.md +237 -0
  193. django_cfg/dashboard/__init__.py +24 -0
  194. django_cfg/dashboard/components.py +308 -0
  195. django_cfg/dashboard/debug.py +176 -0
  196. django_cfg/dashboard/management/__init__.py +0 -0
  197. django_cfg/dashboard/management/commands/__init__.py +0 -0
  198. django_cfg/dashboard/management/commands/debug_dashboard.py +109 -0
  199. django_cfg/dashboard/sections/__init__.py +1 -0
  200. django_cfg/dashboard/sections/base.py +128 -0
  201. django_cfg/dashboard/sections/commands.py +32 -0
  202. django_cfg/dashboard/sections/overview.py +394 -0
  203. django_cfg/dashboard/sections/stats.py +48 -0
  204. django_cfg/dashboard/sections/system.py +73 -0
  205. django_cfg/management/commands/check_settings.py +6 -2
  206. django_cfg/management/commands/clear_constance.py +6 -1
  207. django_cfg/management/commands/create_token.py +5 -4
  208. django_cfg/management/commands/generate.py +5 -0
  209. django_cfg/management/commands/list_urls.py +7 -2
  210. django_cfg/management/commands/migrate_all.py +6 -2
  211. django_cfg/management/commands/migrator.py +6 -1
  212. django_cfg/management/commands/rundramatiq.py +6 -1
  213. django_cfg/management/commands/rundramatiq_simulator.py +11 -4
  214. django_cfg/management/commands/runserver_ngrok.py +9 -7
  215. django_cfg/management/commands/script.py +25 -21
  216. django_cfg/management/commands/show_config.py +6 -1
  217. django_cfg/management/commands/show_urls.py +8 -3
  218. django_cfg/management/commands/superuser.py +5 -4
  219. django_cfg/management/commands/task_clear.py +8 -3
  220. django_cfg/management/commands/task_status.py +8 -3
  221. django_cfg/management/commands/test_email.py +6 -1
  222. django_cfg/management/commands/test_telegram.py +6 -1
  223. django_cfg/management/commands/test_twilio.py +6 -1
  224. django_cfg/management/commands/tree.py +7 -4
  225. django_cfg/models/__init__.py +88 -3
  226. django_cfg/models/api/__init__.py +27 -0
  227. django_cfg/models/{api.py → api/config.py} +1 -1
  228. django_cfg/models/api/drf/__init__.py +21 -0
  229. django_cfg/models/api/drf/config.py +101 -0
  230. django_cfg/models/api/drf/redoc.py +31 -0
  231. django_cfg/models/api/drf/spectacular.py +129 -0
  232. django_cfg/models/api/drf/swagger.py +59 -0
  233. django_cfg/models/{api_keys.py → api/keys.py} +16 -6
  234. django_cfg/models/{limits.py → api/limits.py} +0 -1
  235. django_cfg/models/base/__init__.py +14 -0
  236. django_cfg/models/django/__init__.py +16 -0
  237. django_cfg/models/{constance.py → django/constance.py} +1 -1
  238. django_cfg/models/{environment.py → django/environment.py} +1 -1
  239. django_cfg/models/infrastructure/__init__.py +17 -0
  240. django_cfg/models/{cache.py → infrastructure/cache.py} +3 -2
  241. django_cfg/models/infrastructure/database/__init__.py +22 -0
  242. django_cfg/models/infrastructure/database/config.py +265 -0
  243. django_cfg/models/infrastructure/database/converters.py +91 -0
  244. django_cfg/models/infrastructure/database/parsers.py +96 -0
  245. django_cfg/models/infrastructure/database/routing.py +85 -0
  246. django_cfg/models/infrastructure/database/validators.py +170 -0
  247. django_cfg/models/{logging.py → infrastructure/logging.py} +1 -1
  248. django_cfg/models/{security.py → infrastructure/security.py} +2 -2
  249. django_cfg/models/ngrok/__init__.py +11 -0
  250. django_cfg/models/ngrok/auth.py +37 -0
  251. django_cfg/models/ngrok/config.py +77 -0
  252. django_cfg/models/ngrok/tunnel.py +35 -0
  253. django_cfg/models/payments/__init__.py +20 -0
  254. django_cfg/models/payments/api_keys.py +57 -0
  255. django_cfg/models/{payments.py → payments/config.py} +56 -154
  256. django_cfg/models/payments/providers/__init__.py +15 -0
  257. django_cfg/models/payments/providers/base.py +25 -0
  258. django_cfg/models/payments/providers/nowpayments.py +48 -0
  259. django_cfg/models/services/__init__.py +18 -0
  260. django_cfg/models/services/base.py +65 -0
  261. django_cfg/models/{email.py → services/email.py} +1 -1
  262. django_cfg/models/services/telegram.py +172 -0
  263. django_cfg/models/tasks/__init__.py +51 -0
  264. django_cfg/models/tasks/backends.py +250 -0
  265. django_cfg/models/tasks/config.py +314 -0
  266. django_cfg/models/tasks/utils.py +174 -0
  267. django_cfg/modules/base.py +18 -3
  268. django_cfg/modules/django_admin/decorators/actions.py +1 -1
  269. django_cfg/modules/django_admin/decorators/display.py +1 -1
  270. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +1 -1
  271. django_cfg/modules/django_cfg_rpc_client/README.md +346 -0
  272. django_cfg/modules/django_cfg_rpc_client/__init__.py +51 -0
  273. django_cfg/modules/django_cfg_rpc_client/client.py +540 -0
  274. django_cfg/modules/django_cfg_rpc_client/config.py +207 -0
  275. django_cfg/modules/django_cfg_rpc_client/dashboard/README.md +517 -0
  276. django_cfg/modules/django_cfg_rpc_client/dashboard/UNFOLD_INTEGRATION.md +439 -0
  277. django_cfg/modules/django_cfg_rpc_client/dashboard/__init__.py +11 -0
  278. django_cfg/modules/django_cfg_rpc_client/dashboard/apps.py +22 -0
  279. django_cfg/modules/django_cfg_rpc_client/dashboard/monitor.py +435 -0
  280. django_cfg/modules/django_cfg_rpc_client/dashboard/static/django_cfg_rpc_dashboard/js/dashboard.js +373 -0
  281. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/base.html +76 -0
  282. django_cfg/modules/django_cfg_rpc_client/dashboard/templates/django_cfg_rpc_dashboard/dashboard.html +200 -0
  283. django_cfg/modules/django_cfg_rpc_client/dashboard/urls.py +22 -0
  284. django_cfg/modules/django_cfg_rpc_client/dashboard/urls_admin.py +9 -0
  285. django_cfg/modules/django_cfg_rpc_client/dashboard/views.py +251 -0
  286. django_cfg/modules/django_cfg_rpc_client/exceptions.py +201 -0
  287. django_cfg/modules/django_drf_theme/CHANGELOG.md +210 -0
  288. django_cfg/modules/django_drf_theme/EXAMPLE.md +465 -0
  289. django_cfg/modules/django_drf_theme/IMPLEMENTATION.md +232 -0
  290. django_cfg/modules/django_drf_theme/README.md +207 -0
  291. django_cfg/modules/django_drf_theme/TAILWIND_CDN_GUIDE.md +274 -0
  292. django_cfg/modules/django_drf_theme/__init__.py +23 -0
  293. django_cfg/modules/django_drf_theme/apps.py +15 -0
  294. django_cfg/modules/django_drf_theme/renderers.py +58 -0
  295. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/api.html +375 -0
  296. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/base.html +938 -0
  297. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/filter_form.html +132 -0
  298. django_cfg/modules/django_drf_theme/templates/rest_framework/tailwind/forms/raw_data_form.html +123 -0
  299. django_cfg/modules/django_drf_theme/templatetags/__init__.py +1 -0
  300. django_cfg/modules/django_drf_theme/templatetags/tailwind_tags.py +57 -0
  301. django_cfg/modules/django_email/__init__.py +14 -0
  302. django_cfg/modules/{django_email.py → django_email/service.py} +78 -113
  303. django_cfg/modules/django_email/utils.py +40 -0
  304. django_cfg/modules/django_health/__init__.py +9 -0
  305. django_cfg/modules/{django_health.py → django_health/service.py} +23 -21
  306. django_cfg/modules/django_llm/llm/client.py +155 -550
  307. django_cfg/modules/django_llm/llm/embeddings/__init__.py +13 -0
  308. django_cfg/modules/django_llm/llm/embeddings/mock_embedder.py +106 -0
  309. django_cfg/modules/django_llm/llm/embeddings/openai_embedder.py +79 -0
  310. django_cfg/modules/django_llm/llm/models_api/__init__.py +9 -0
  311. django_cfg/modules/django_llm/llm/models_api/models_query.py +163 -0
  312. django_cfg/modules/django_llm/llm/providers/__init__.py +15 -0
  313. django_cfg/modules/django_llm/llm/providers/config_builder.py +103 -0
  314. django_cfg/modules/django_llm/llm/providers/provider_manager.py +148 -0
  315. django_cfg/modules/django_llm/llm/providers/provider_selector.py +60 -0
  316. django_cfg/modules/django_llm/llm/requests/__init__.py +15 -0
  317. django_cfg/modules/django_llm/llm/requests/cache_manager.py +170 -0
  318. django_cfg/modules/django_llm/llm/requests/chat_handler.py +199 -0
  319. django_cfg/modules/django_llm/llm/requests/embedding_handler.py +113 -0
  320. django_cfg/modules/django_llm/llm/responses/__init__.py +9 -0
  321. django_cfg/modules/django_llm/llm/responses/response_builder.py +131 -0
  322. django_cfg/modules/django_llm/llm/stats/__init__.py +9 -0
  323. django_cfg/modules/django_llm/llm/stats/stats_manager.py +107 -0
  324. django_cfg/modules/django_llm/translator/detectors/__init__.py +13 -0
  325. django_cfg/modules/django_llm/translator/detectors/language_detector.py +90 -0
  326. django_cfg/modules/django_llm/translator/detectors/script_detector.py +153 -0
  327. django_cfg/modules/django_llm/translator/stats/__init__.py +11 -0
  328. django_cfg/modules/django_llm/translator/stats/stats_tracker.py +85 -0
  329. django_cfg/modules/django_llm/translator/translator.py +150 -603
  330. django_cfg/modules/django_llm/translator/translators/__init__.py +15 -0
  331. django_cfg/modules/django_llm/translator/translators/json_translator.py +316 -0
  332. django_cfg/modules/django_llm/translator/translators/text_translator.py +139 -0
  333. django_cfg/modules/django_llm/translator/utils/__init__.py +13 -0
  334. django_cfg/modules/django_llm/translator/utils/prompt_builder.py +110 -0
  335. django_cfg/modules/django_llm/translator/utils/text_utils.py +114 -0
  336. django_cfg/modules/django_logging/FIXES_SUMMARY.md +276 -0
  337. django_cfg/modules/django_logging/LOGGING_GUIDE.md +504 -0
  338. django_cfg/modules/django_logging/__init__.py +14 -0
  339. django_cfg/modules/{django_logger.py → django_logging/django_logger.py} +13 -13
  340. django_cfg/modules/{logger.py → django_logging/logger.py} +14 -4
  341. django_cfg/modules/django_ngrok/__init__.py +39 -0
  342. django_cfg/modules/{django_ngrok.py → django_ngrok/service.py} +14 -42
  343. django_cfg/modules/django_rpc_old/POETRY.md +344 -0
  344. django_cfg/modules/django_rpc_old/README.md +397 -0
  345. django_cfg/modules/django_rpc_old/TESTING.md +358 -0
  346. django_cfg/modules/django_rpc_old/__init__.py +39 -0
  347. django_cfg/modules/django_rpc_old/client.py +531 -0
  348. django_cfg/modules/django_rpc_old/config.py +279 -0
  349. django_cfg/modules/django_rpc_old/exceptions.py +172 -0
  350. django_cfg/modules/django_tailwind/README.md +478 -0
  351. django_cfg/modules/django_tailwind/__init__.py +7 -0
  352. django_cfg/modules/django_tailwind/apps.py +10 -0
  353. django_cfg/modules/django_tailwind/templates/django_tailwind/app.html +5 -0
  354. django_cfg/modules/django_tailwind/templates/django_tailwind/base.html +117 -0
  355. django_cfg/modules/django_tailwind/templates/django_tailwind/components/navbar.html +124 -0
  356. django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_toggle.html +54 -0
  357. django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html +116 -0
  358. django_cfg/modules/django_tailwind/templates/django_tailwind/simple.html +46 -0
  359. django_cfg/modules/django_tailwind/templatetags/__init__.py +1 -0
  360. django_cfg/modules/django_tailwind/templatetags/tailwind_info.py +185 -0
  361. django_cfg/modules/django_tasks/__init__.py +29 -0
  362. django_cfg/modules/django_tasks/factory.py +127 -0
  363. django_cfg/modules/{django_tasks.py → django_tasks/service.py} +45 -274
  364. django_cfg/modules/django_tasks/settings.py +107 -0
  365. django_cfg/modules/django_telegram/__init__.py +29 -0
  366. django_cfg/modules/{django_telegram.py → django_telegram/service.py} +45 -113
  367. django_cfg/modules/django_telegram/utils.py +62 -0
  368. django_cfg/modules/django_twilio/__init__.py +54 -107
  369. django_cfg/modules/django_twilio/_imports.py +30 -0
  370. django_cfg/modules/django_twilio/base.py +192 -0
  371. django_cfg/modules/django_twilio/email_otp.py +227 -0
  372. django_cfg/modules/django_twilio/sendgrid_service.py +1 -1
  373. django_cfg/modules/django_twilio/simple_service.py +1 -2
  374. django_cfg/modules/django_twilio/sms.py +94 -0
  375. django_cfg/modules/django_twilio/twilio_service.py +2 -3
  376. django_cfg/modules/django_twilio/unified.py +310 -0
  377. django_cfg/modules/django_twilio/utils.py +190 -0
  378. django_cfg/modules/django_twilio/whatsapp.py +137 -0
  379. django_cfg/modules/django_unfold/callbacks/base.py +198 -7
  380. django_cfg/modules/django_unfold/callbacks/main.py +102 -10
  381. django_cfg/modules/django_unfold/dashboard.py +65 -43
  382. django_cfg/modules/django_unfold/models/config.py +13 -12
  383. django_cfg/modules/django_unfold/models/navigation.py +8 -3
  384. django_cfg/modules/django_unfold/models/tabs.py +2 -2
  385. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +102 -0
  386. django_cfg/registry/core.py +24 -26
  387. django_cfg/registry/modules.py +5 -2
  388. django_cfg/registry/services.py +20 -3
  389. django_cfg/registry/third_party.py +8 -8
  390. django_cfg/static/admin/css/dashboard.css +260 -0
  391. django_cfg/static/admin/js/commands.js +171 -0
  392. django_cfg/static/admin/js/dashboard.js +126 -0
  393. django_cfg/templates/admin/components/management_commands.js +375 -0
  394. django_cfg/templates/admin/components/progress_bar.html +18 -23
  395. django_cfg/templates/admin/index.html +48 -20
  396. django_cfg/templates/admin/index_new.html +106 -0
  397. django_cfg/templates/admin/layouts/base_dashboard.html +60 -0
  398. django_cfg/templates/admin/layouts/dashboard_with_tabs.html +1 -20
  399. django_cfg/templates/admin/sections/commands_section.html +626 -0
  400. django_cfg/templates/admin/sections/overview_section.html +112 -0
  401. django_cfg/templates/admin/sections/stats_section.html +35 -0
  402. django_cfg/templates/admin/sections/system_section.html +99 -0
  403. django_cfg/templates/admin/snippets/components/CHARTS_GUIDE.md +322 -0
  404. django_cfg/templates/admin/snippets/components/activity_tracker.html +85 -47
  405. django_cfg/templates/admin/snippets/components/charts_section.html +154 -64
  406. django_cfg/templates/admin/snippets/components/django_commands.html +3 -3
  407. django_cfg/templates/admin/snippets/components/recent_activity_improved.html +25 -0
  408. django_cfg/templates/admin/snippets/components/recent_users_table.html +1 -1
  409. django_cfg/templates/admin/snippets/components/system_metrics.html +179 -93
  410. django_cfg/templates/admin/snippets/zones/zones_table.html +2 -2
  411. django_cfg/templatetags/django_cfg.py +7 -1
  412. django_cfg/utils/smart_defaults.py +4 -4
  413. django_cfg-1.4.0.dist-info/METADATA +920 -0
  414. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/RECORD +425 -196
  415. django_cfg/apps/accounts/utils/auth_email_service.py +0 -84
  416. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +0 -879
  417. django_cfg/core/generation.py +0 -621
  418. django_cfg/management/commands/validate_config.py +0 -189
  419. django_cfg/models/database.py +0 -480
  420. django_cfg/models/drf.py +0 -272
  421. django_cfg/models/ngrok.py +0 -122
  422. django_cfg/models/services.py +0 -440
  423. django_cfg/models/tasks.py +0 -550
  424. django_cfg/modules/django_twilio/service.py +0 -942
  425. django_cfg/template_archive/django_sample.zip +0 -0
  426. django_cfg/templates/rest_framework/api.html +0 -12
  427. django_cfg/utils/toolkit.py +0 -703
  428. django_cfg-1.3.11.dist-info/METADATA +0 -1029
  429. /django_cfg/apps/accounts/management/commands/{test_otp.py → otp_test.py} +0 -0
  430. /django_cfg/core/{environment.py → environment/detector.py} +0 -0
  431. /django_cfg/models/{cors.py → api/cors.py} +0 -0
  432. /django_cfg/models/{jwt.py → api/jwt.py} +0 -0
  433. /django_cfg/models/{base.py → base/config.py} +0 -0
  434. /django_cfg/models/{cfg.py → base/module.py} +0 -0
  435. /django_cfg/models/{revolution.py → django/revolution.py} +0 -0
  436. /django_cfg/modules/{dramatiq_setup.py → django_tasks/dramatiq_setup.py} +0 -0
  437. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/WHEEL +0 -0
  438. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/entry_points.txt +0 -0
  439. {django_cfg-1.3.11.dist-info → django_cfg-1.4.0.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,16 @@
1
+ """
2
+ Generators for ExternalData auto-generation.
3
+
4
+ Content, metadata, and field analysis utilities for automatic generation
5
+ of ExternalData from Django model instances.
6
+ """
7
+
8
+ from .content_generator import ExternalDataContentGenerator
9
+ from .metadata_generator import ExternalDataMetadataGenerator
10
+ from .field_analyzer import ExternalDataFieldAnalyzer
11
+
12
+ __all__ = [
13
+ 'ExternalDataContentGenerator',
14
+ 'ExternalDataMetadataGenerator',
15
+ 'ExternalDataFieldAnalyzer',
16
+ ]
@@ -0,0 +1,218 @@
1
+ """
2
+ Content and title generation for ExternalData.
3
+
4
+ Handles automatic generation of titles and markdown content from model instances.
5
+ """
6
+
7
+ from typing import List, Dict, Any, Tuple
8
+
9
+
10
+ class ExternalDataContentGenerator:
11
+ """
12
+ Generate content and titles for model instances.
13
+
14
+ Provides smart auto-generation of titles and comprehensive markdown content
15
+ based on model fields and metadata.
16
+ """
17
+
18
+ def __init__(self, instance):
19
+ """
20
+ Initialize content generator for a model instance.
21
+
22
+ Args:
23
+ instance: Django model instance to generate content for
24
+ """
25
+ self.instance = instance
26
+ self.model_class = instance.__class__
27
+
28
+ def generate_title(self) -> str:
29
+ """
30
+ Auto-generate title based on model fields.
31
+
32
+ Tries common title fields first (title, name, etc.), then falls back
33
+ to string representation with model name.
34
+
35
+ Returns:
36
+ Generated title string (e.g., "Product: iPhone 15")
37
+ """
38
+ # Try common title fields first
39
+ title_fields = ['title', 'name', 'full_name', 'display_name', 'label']
40
+
41
+ for field_name in title_fields:
42
+ if hasattr(self.instance, field_name):
43
+ value = getattr(self.instance, field_name, None)
44
+ if value and str(value).strip():
45
+ # Add model context for clarity
46
+ model_name = self.model_class._meta.verbose_name or self.model_class.__name__
47
+ return f"{model_name}: {value}"
48
+
49
+ # Fallback: use string representation with model name
50
+ model_name = self.model_class._meta.verbose_name or self.model_class.__name__
51
+ return f"{model_name}: {self.instance}"
52
+
53
+ def generate_content(self) -> str:
54
+ """
55
+ Auto-generate comprehensive markdown content.
56
+
57
+ Generates structured markdown content with:
58
+ - Header with title
59
+ - Basic Information section with key fields
60
+ - Related Information section with relationships
61
+ - Statistics section if available
62
+ - Technical Information section with metadata
63
+
64
+ Returns:
65
+ Generated markdown content as string
66
+ """
67
+ content_parts = []
68
+
69
+ # Header with title
70
+ title = self.generate_title()
71
+ content_parts.append(f"# {title}")
72
+ content_parts.append("")
73
+
74
+ # Basic Information section
75
+ content_parts.append("## Basic Information")
76
+
77
+ # Add key fields
78
+ key_fields = self._get_content_fields()
79
+ for field_name, field_value, field_label in key_fields:
80
+ if field_value is not None and str(field_value).strip():
81
+ content_parts.append(f"- **{field_label}**: {field_value}")
82
+
83
+ content_parts.append("")
84
+
85
+ # Add relationships section if any
86
+ relationships = self._get_relationship_info()
87
+ if relationships:
88
+ content_parts.append("## Related Information")
89
+ for rel_name, rel_info in relationships.items():
90
+ content_parts.append(f"- **{rel_name}**: {rel_info}")
91
+ content_parts.append("")
92
+
93
+ # Add statistics if available
94
+ stats = self._get_statistics_info()
95
+ if stats:
96
+ content_parts.append("## Statistics")
97
+ for stat_name, stat_value in stats.items():
98
+ content_parts.append(f"- **{stat_name}**: {stat_value}")
99
+ content_parts.append("")
100
+
101
+ # Add metadata section
102
+ content_parts.append("## Technical Information")
103
+ content_parts.append(
104
+ f"This data is automatically synchronized from the {self.model_class.__name__} "
105
+ f"model using ExternalDataMixin."
106
+ )
107
+ content_parts.append(f"")
108
+ content_parts.append(f"**Model**: {self.model_class._meta.label}")
109
+ content_parts.append(f"**ID**: {self.instance.pk}")
110
+
111
+ if hasattr(self.instance, 'created_at') and self.instance.created_at:
112
+ created_str = self.instance.created_at.strftime('%Y-%m-%d %H:%M:%S')
113
+ content_parts.append(f"**Created**: {created_str}")
114
+
115
+ if hasattr(self.instance, 'updated_at') and self.instance.updated_at:
116
+ updated_str = self.instance.updated_at.strftime('%Y-%m-%d %H:%M:%S')
117
+ content_parts.append(f"**Updated**: {updated_str}")
118
+
119
+ return "\n".join(content_parts)
120
+
121
+ def _get_content_fields(self) -> List[Tuple[str, Any, str]]:
122
+ """
123
+ Get fields to include in content generation.
124
+
125
+ Returns priority fields with their values and labels.
126
+
127
+ Returns:
128
+ List of tuples: (field_name, field_value, field_label)
129
+ """
130
+ fields_info = []
131
+
132
+ # Define field priority and labels
133
+ priority_fields = {
134
+ 'name': 'Name',
135
+ 'title': 'Title',
136
+ 'code': 'Code',
137
+ 'description': 'Description',
138
+ 'summary': 'Summary',
139
+ 'body_type': 'Body Type',
140
+ 'segment': 'Segment',
141
+ 'category': 'Category',
142
+ 'type': 'Type',
143
+ 'status': 'Status',
144
+ 'is_active': 'Active',
145
+ 'is_public': 'Public',
146
+ 'price': 'Price',
147
+ 'year': 'Year',
148
+ 'fuel_type': 'Fuel Type',
149
+ }
150
+
151
+ # Add priority fields first
152
+ for field_name, field_label in priority_fields.items():
153
+ if hasattr(self.instance, field_name):
154
+ value = getattr(self.instance, field_name, None)
155
+ if value is not None:
156
+ # Format boolean fields
157
+ if isinstance(value, bool):
158
+ value = "Yes" if value else "No"
159
+ # Format choice fields
160
+ elif hasattr(self.instance, f'get_{field_name}_display'):
161
+ display_value = getattr(self.instance, f'get_{field_name}_display')()
162
+ if display_value:
163
+ value = display_value
164
+ # Format foreign key relationships
165
+ elif hasattr(value, '__str__'):
166
+ value = str(value)
167
+
168
+ fields_info.append((field_name, value, field_label))
169
+
170
+ return fields_info
171
+
172
+ def _get_relationship_info(self) -> Dict[str, str]:
173
+ """
174
+ Get relationship information for content.
175
+
176
+ Extracts foreign key relationships from common field names.
177
+
178
+ Returns:
179
+ Dictionary mapping relationship names to string values
180
+ """
181
+ relationships = {}
182
+
183
+ # Common relationship field names
184
+ rel_fields = ['brand', 'category', 'parent', 'owner', 'user', 'created_by']
185
+
186
+ for field_name in rel_fields:
187
+ if hasattr(self.instance, field_name):
188
+ value = getattr(self.instance, field_name, None)
189
+ if value:
190
+ relationships[field_name.replace('_', ' ').title()] = str(value)
191
+
192
+ return relationships
193
+
194
+ def _get_statistics_info(self) -> Dict[str, Any]:
195
+ """
196
+ Get statistics information for content.
197
+
198
+ Extracts numeric statistics from common field names.
199
+
200
+ Returns:
201
+ Dictionary mapping statistic names to formatted values
202
+ """
203
+ stats = {}
204
+
205
+ # Common statistics field names
206
+ stat_fields = ['total_vehicles', 'total_models', 'total_items', 'count', 'views', 'likes']
207
+
208
+ for field_name in stat_fields:
209
+ if hasattr(self.instance, field_name):
210
+ value = getattr(self.instance, field_name, None)
211
+ if value is not None and (isinstance(value, (int, float)) and value > 0):
212
+ label = field_name.replace('_', ' ').title()
213
+ if isinstance(value, float):
214
+ stats[label] = f"{value:,.2f}"
215
+ else:
216
+ stats[label] = f"{value:,}"
217
+
218
+ return stats
@@ -0,0 +1,76 @@
1
+ """
2
+ Field analysis and detection for ExternalData.
3
+
4
+ Handles automatic detection of important fields to watch and analyze.
5
+ """
6
+
7
+ from typing import List
8
+
9
+
10
+ class ExternalDataFieldAnalyzer:
11
+ """
12
+ Analyze model fields for auto-generation and change detection.
13
+
14
+ Provides utilities to detect important fields that should be watched
15
+ for changes and included in content generation.
16
+ """
17
+
18
+ def __init__(self, model_class):
19
+ """
20
+ Initialize field analyzer for a model class.
21
+
22
+ Args:
23
+ model_class: Django model class to analyze
24
+ """
25
+ self.model_class = model_class
26
+
27
+ def auto_detect_watch_fields(self) -> List[str]:
28
+ """
29
+ Auto-detect important fields to watch for changes.
30
+
31
+ Analyzes model fields and returns list of field names that should
32
+ trigger ExternalData updates when changed.
33
+
34
+ Returns:
35
+ List of field names to watch (max 10 fields)
36
+ """
37
+ watch_fields = []
38
+
39
+ # Get all model fields
40
+ for field in self.model_class._meta.get_fields():
41
+ if hasattr(field, 'name') and not field.name.startswith('_'):
42
+ field_name = field.name
43
+
44
+ # Skip auto-generated and system fields
45
+ skip_fields = {
46
+ 'id', 'pk', 'created_at', 'updated_at', 'external_source_id',
47
+ '_external_content_hash', 'slug'
48
+ }
49
+ if field_name in skip_fields:
50
+ continue
51
+
52
+ # Skip reverse foreign keys and many-to-many
53
+ if hasattr(field, 'related_model') and field.many_to_many:
54
+ continue
55
+ if hasattr(field, 'remote_field') and field.remote_field:
56
+ if hasattr(field.remote_field, 'related_name'):
57
+ continue
58
+
59
+ # Include important field types
60
+ if hasattr(field, '__class__'):
61
+ field_type = field.__class__.__name__
62
+ important_types = {
63
+ 'CharField', 'TextField', 'BooleanField', 'IntegerField',
64
+ 'PositiveIntegerField', 'ForeignKey', 'DecimalField', 'FloatField'
65
+ }
66
+ if field_type in important_types:
67
+ watch_fields.append(field_name)
68
+
69
+ # If no fields detected, watch all non-system fields
70
+ if not watch_fields:
71
+ for field in self.model_class._meta.get_fields():
72
+ if hasattr(field, 'name') and not field.name.startswith('_'):
73
+ if field.name not in {'id', 'pk'}:
74
+ watch_fields.append(field.name)
75
+
76
+ return watch_fields[:10] # Limit to prevent too many triggers
@@ -0,0 +1,124 @@
1
+ """
2
+ Metadata and tags generation for ExternalData.
3
+
4
+ Handles automatic generation of descriptions, tags, and metadata from model instances.
5
+ """
6
+
7
+ from typing import List
8
+
9
+
10
+ class ExternalDataMetadataGenerator:
11
+ """
12
+ Generate metadata, tags, and descriptions for model instances.
13
+
14
+ Provides smart auto-generation based on model fields and relationships.
15
+ """
16
+
17
+ def __init__(self, instance):
18
+ """
19
+ Initialize metadata generator for a model instance.
20
+
21
+ Args:
22
+ instance: Django model instance to generate metadata for
23
+ """
24
+ self.instance = instance
25
+ self.model_class = instance.__class__
26
+
27
+ def generate_description(self) -> str:
28
+ """
29
+ Auto-generate description based on model fields.
30
+
31
+ Tries common description fields first, then builds description
32
+ from key fields (name, status, dates).
33
+
34
+ Returns:
35
+ Generated description string
36
+ """
37
+ model_name = self.model_class._meta.verbose_name or self.model_class.__name__
38
+
39
+ # Try common description fields
40
+ desc_fields = ['description', 'summary', 'about', 'details', 'info']
41
+ for field_name in desc_fields:
42
+ if hasattr(self.instance, field_name):
43
+ value = getattr(self.instance, field_name, None)
44
+ if value and str(value).strip():
45
+ return f"{model_name} information: {value}"
46
+
47
+ # Build description from key fields
48
+ key_info = []
49
+
50
+ # Add primary identifier
51
+ if hasattr(self.instance, 'name') and self.instance.name:
52
+ key_info.append(f"Name: {self.instance.name}")
53
+ elif hasattr(self.instance, 'title') and self.instance.title:
54
+ key_info.append(f"Title: {self.instance.title}")
55
+
56
+ # Add status if available
57
+ if hasattr(self.instance, 'is_active'):
58
+ status = "Active" if self.instance.is_active else "Inactive"
59
+ key_info.append(f"Status: {status}")
60
+
61
+ # Add creation date if available
62
+ if hasattr(self.instance, 'created_at') and self.instance.created_at:
63
+ created_str = self.instance.created_at.strftime('%Y-%m-%d')
64
+ key_info.append(f"Created: {created_str}")
65
+
66
+ if key_info:
67
+ return (f"Comprehensive information about this {model_name.lower()}. "
68
+ f"{', '.join(key_info)}.")
69
+
70
+ return f"Auto-generated information from {model_name} model."
71
+
72
+ def generate_tags(self) -> List[str]:
73
+ """
74
+ Auto-generate tags based on model fields and metadata.
75
+
76
+ Generates tags from:
77
+ - Model name and verbose name
78
+ - App label
79
+ - Field values (category, type, status, etc.)
80
+ - Boolean field values
81
+
82
+ Returns:
83
+ List of tags (max 10), cleaned and deduplicated
84
+ """
85
+ tags = []
86
+
87
+ # Add model-based tags
88
+ tags.append(self.model_class.__name__.lower())
89
+ if self.model_class._meta.verbose_name:
90
+ tags.append(self.model_class._meta.verbose_name.lower().replace(' ', '_'))
91
+
92
+ # Add app label
93
+ tags.append(self.model_class._meta.app_label)
94
+
95
+ # Add field-based tags
96
+ tag_fields = ['category', 'type', 'kind', 'status', 'brand', 'model']
97
+ for field_name in tag_fields:
98
+ if hasattr(self.instance, field_name):
99
+ value = getattr(self.instance, field_name, None)
100
+ if value:
101
+ # Handle foreign key relationships
102
+ if hasattr(value, 'name'):
103
+ tags.append(str(value.name).lower())
104
+ elif hasattr(value, 'code'):
105
+ tags.append(str(value.code).lower())
106
+ else:
107
+ tags.append(str(value).lower())
108
+
109
+ # Add boolean field tags
110
+ bool_fields = ['is_active', 'is_public', 'is_featured', 'is_published']
111
+ for field_name in bool_fields:
112
+ if hasattr(self.instance, field_name):
113
+ value = getattr(self.instance, field_name, None)
114
+ if value is True:
115
+ tags.append(field_name.replace('is_', ''))
116
+
117
+ # Clean and deduplicate tags
118
+ clean_tags = []
119
+ for tag in tags:
120
+ clean_tag = str(tag).lower().strip().replace(' ', '_')
121
+ if clean_tag and clean_tag not in clean_tags:
122
+ clean_tags.append(clean_tag)
123
+
124
+ return clean_tags[:10] # Limit to 10 tags
@@ -18,7 +18,7 @@ from ..models.external_data import ExternalData, ExternalDataChunk, ExternalData
18
18
  from ..services.base import BaseService
19
19
  from ..services.embedding import process_external_data_chunks_optimized
20
20
  from .creator import ExternalDataCreator
21
- from .config import ExternalDataConfig
21
+ from .config import ExternalDataMetaConfig
22
22
 
23
23
  logger = logging.getLogger(__name__)
24
24
 
@@ -62,7 +62,7 @@ class ExternalDataService(BaseService):
62
62
  """
63
63
  try:
64
64
  # Create configuration
65
- config = ExternalDataConfig(
65
+ config = ExternalDataMetaConfig(
66
66
  title=title,
67
67
  description=description,
68
68
  source_type=source_type,
@@ -9,6 +9,7 @@ from .archive_service import *
9
9
  from .extraction_service import *
10
10
  from .chunking_service import *
11
11
  from .vectorization_service import *
12
+ from .context import ChunkContextBuilder, ChunkData, ChunkContextMetadata
12
13
 
13
14
  __all__ = [
14
15
  # Main archive service
@@ -0,0 +1,17 @@
1
+ """
2
+ Code analysis utilities.
3
+
4
+ Complexity calculation, quality assessment, purpose detection, and tag generation.
5
+ """
6
+
7
+ from .complexity_analyzer import ComplexityAnalyzer
8
+ from .quality_analyzer import QualityAnalyzer
9
+ from .purpose_detector import PurposeDetector
10
+ from .tag_generator import TagGenerator
11
+
12
+ __all__ = [
13
+ 'ComplexityAnalyzer',
14
+ 'QualityAnalyzer',
15
+ 'PurposeDetector',
16
+ 'TagGenerator',
17
+ ]
@@ -0,0 +1,33 @@
1
+ """
2
+ Code complexity analyzer.
3
+
4
+ Calculates complexity score for code chunks.
5
+ """
6
+
7
+
8
+ class ComplexityAnalyzer:
9
+ """Analyze code complexity."""
10
+
11
+ @staticmethod
12
+ def calculate_code_complexity(content: str) -> float:
13
+ """
14
+ Calculate code complexity score.
15
+
16
+ Simple complexity metric based on lines and control structures.
17
+
18
+ Args:
19
+ content: Code content to analyze
20
+
21
+ Returns:
22
+ Complexity score between 0.0 and 1.0
23
+ """
24
+ # Simple complexity based on lines and control structures
25
+ lines = content.split('\n')
26
+ complexity = len(lines) / 100.0 # Base complexity
27
+
28
+ # Add complexity for control structures
29
+ control_keywords = ['if', 'for', 'while', 'try', 'except', 'with']
30
+ for keyword in control_keywords:
31
+ complexity += content.count(keyword) * 0.1
32
+
33
+ return min(1.0, complexity)
@@ -0,0 +1,36 @@
1
+ """
2
+ Code purpose detector.
3
+
4
+ Detects the purpose of code elements based on naming and content.
5
+ """
6
+
7
+
8
+ class PurposeDetector:
9
+ """Detect purpose of code elements."""
10
+
11
+ @staticmethod
12
+ def detect_code_purpose(element_name: str, content: str) -> str:
13
+ """
14
+ Detect purpose of code element.
15
+
16
+ Args:
17
+ element_name: Name of the code element
18
+ content: Element content
19
+
20
+ Returns:
21
+ Purpose string (e.g., 'test', 'initialization', 'configuration')
22
+ """
23
+ name_lower = element_name.lower()
24
+
25
+ if name_lower.startswith('test_'):
26
+ return 'test'
27
+ elif name_lower.startswith('_'):
28
+ return 'private_method'
29
+ elif 'config' in name_lower:
30
+ return 'configuration'
31
+ elif 'init' in name_lower:
32
+ return 'initialization'
33
+ elif 'main' in name_lower:
34
+ return 'main_function'
35
+ else:
36
+ return 'implementation'
@@ -0,0 +1,39 @@
1
+ """
2
+ Code quality analyzer.
3
+
4
+ Assesses code quality based on documentation and formatting.
5
+ """
6
+
7
+
8
+ class QualityAnalyzer:
9
+ """Assess code quality."""
10
+
11
+ @staticmethod
12
+ def assess_code_quality(content: str) -> float:
13
+ """
14
+ Assess code quality score.
15
+
16
+ Simple quality assessment based on documentation and formatting.
17
+
18
+ Args:
19
+ content: Code content to analyze
20
+
21
+ Returns:
22
+ Quality score between 0.0 and 1.0
23
+ """
24
+ # Simple quality assessment
25
+ quality = 0.5 # Base quality
26
+
27
+ # Boost for docstrings
28
+ if '"""' in content or "'''" in content:
29
+ quality += 0.2
30
+
31
+ # Boost for comments
32
+ comment_lines = len([line for line in content.split('\n') if line.strip().startswith('#')])
33
+ quality += min(0.2, comment_lines / 10.0)
34
+
35
+ # Penalty for very long lines
36
+ long_lines = len([line for line in content.split('\n') if len(line) > 100])
37
+ quality -= min(0.2, long_lines / 10.0)
38
+
39
+ return max(0.0, min(1.0, quality))