django-cfg 1.3.5__py3-none-any.whl → 1.3.9__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 (252) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/admin/__init__.py +24 -8
  3. django_cfg/apps/accounts/admin/activity_admin.py +146 -0
  4. django_cfg/apps/accounts/admin/filters.py +98 -22
  5. django_cfg/apps/accounts/admin/group_admin.py +86 -0
  6. django_cfg/apps/accounts/admin/inlines.py +42 -13
  7. django_cfg/apps/accounts/admin/otp_admin.py +115 -0
  8. django_cfg/apps/accounts/admin/registration_admin.py +173 -0
  9. django_cfg/apps/accounts/admin/resources.py +123 -19
  10. django_cfg/apps/accounts/admin/twilio_admin.py +327 -0
  11. django_cfg/apps/accounts/admin/user_admin.py +362 -0
  12. django_cfg/apps/agents/admin/__init__.py +17 -4
  13. django_cfg/apps/agents/admin/execution_admin.py +204 -183
  14. django_cfg/apps/agents/admin/registry_admin.py +230 -255
  15. django_cfg/apps/agents/admin/toolsets_admin.py +274 -321
  16. django_cfg/apps/agents/core/__init__.py +1 -1
  17. django_cfg/apps/agents/core/django_agent.py +221 -0
  18. django_cfg/apps/agents/core/exceptions.py +14 -0
  19. django_cfg/apps/agents/core/orchestrator.py +18 -3
  20. django_cfg/apps/knowbase/admin/__init__.py +1 -1
  21. django_cfg/apps/knowbase/admin/archive_admin.py +352 -640
  22. django_cfg/apps/knowbase/admin/chat_admin.py +258 -192
  23. django_cfg/apps/knowbase/admin/document_admin.py +269 -262
  24. django_cfg/apps/knowbase/admin/external_data_admin.py +271 -489
  25. django_cfg/apps/knowbase/config/settings.py +21 -4
  26. django_cfg/apps/knowbase/views/chat_views.py +3 -0
  27. django_cfg/apps/leads/admin/__init__.py +3 -1
  28. django_cfg/apps/leads/admin/leads_admin.py +235 -35
  29. django_cfg/apps/maintenance/admin/__init__.py +2 -2
  30. django_cfg/apps/maintenance/admin/api_key_admin.py +125 -63
  31. django_cfg/apps/maintenance/admin/log_admin.py +143 -61
  32. django_cfg/apps/maintenance/admin/scheduled_admin.py +212 -301
  33. django_cfg/apps/maintenance/admin/site_admin.py +213 -352
  34. django_cfg/apps/newsletter/admin/__init__.py +29 -2
  35. django_cfg/apps/newsletter/admin/newsletter_admin.py +531 -193
  36. django_cfg/apps/payments/admin/__init__.py +18 -27
  37. django_cfg/apps/payments/admin/api_keys_admin.py +179 -546
  38. django_cfg/apps/payments/admin/balance_admin.py +166 -632
  39. django_cfg/apps/payments/admin/currencies_admin.py +235 -607
  40. django_cfg/apps/payments/admin/endpoint_groups_admin.py +127 -0
  41. django_cfg/apps/payments/admin/filters.py +83 -3
  42. django_cfg/apps/payments/admin/networks_admin.py +258 -0
  43. django_cfg/apps/payments/admin/payments_admin.py +171 -461
  44. django_cfg/apps/payments/admin/subscriptions_admin.py +119 -636
  45. django_cfg/apps/payments/admin/tariffs_admin.py +248 -0
  46. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +105 -34
  47. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +12 -16
  48. django_cfg/apps/payments/admin_interface/views/__init__.py +2 -0
  49. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +13 -18
  50. django_cfg/apps/payments/management/commands/manage_currencies.py +236 -274
  51. django_cfg/apps/payments/management/commands/manage_providers.py +4 -1
  52. django_cfg/apps/payments/middleware/api_access.py +32 -6
  53. django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +26 -0
  54. django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +28 -0
  55. django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +30 -0
  56. django_cfg/apps/payments/models/balance.py +12 -0
  57. django_cfg/apps/payments/models/currencies.py +106 -32
  58. django_cfg/apps/payments/models/managers/currency_managers.py +65 -0
  59. django_cfg/apps/payments/services/core/currency_service.py +35 -28
  60. django_cfg/apps/payments/services/core/payment_service.py +1 -1
  61. django_cfg/apps/payments/services/providers/__init__.py +3 -0
  62. django_cfg/apps/payments/services/providers/base.py +95 -39
  63. django_cfg/apps/payments/services/providers/models/__init__.py +40 -0
  64. django_cfg/apps/payments/services/providers/models/base.py +122 -0
  65. django_cfg/apps/payments/services/providers/models/providers.py +87 -0
  66. django_cfg/apps/payments/services/providers/models/universal.py +48 -0
  67. django_cfg/apps/payments/services/providers/nowpayments/__init__.py +31 -0
  68. django_cfg/apps/payments/services/providers/nowpayments/config.py +70 -0
  69. django_cfg/apps/payments/services/providers/nowpayments/models.py +150 -0
  70. django_cfg/apps/payments/services/providers/nowpayments/parsers.py +879 -0
  71. django_cfg/apps/payments/services/providers/{nowpayments.py → nowpayments/provider.py} +240 -209
  72. django_cfg/apps/payments/services/providers/nowpayments/sync.py +196 -0
  73. django_cfg/apps/payments/services/providers/registry.py +4 -32
  74. django_cfg/apps/payments/services/providers/sync_service.py +277 -0
  75. django_cfg/apps/payments/static/payments/js/api-client.js +23 -5
  76. django_cfg/apps/payments/static/payments/js/payment-form.js +65 -8
  77. django_cfg/apps/payments/tasks/__init__.py +39 -0
  78. django_cfg/apps/payments/tasks/types.py +73 -0
  79. django_cfg/apps/payments/tasks/usage_tracking.py +308 -0
  80. django_cfg/apps/payments/templates/admin/payments/_components/dashboard_header.html +23 -0
  81. django_cfg/apps/payments/templates/admin/payments/_components/stats_card.html +25 -0
  82. django_cfg/apps/payments/templates/admin/payments/_components/stats_grid.html +16 -0
  83. django_cfg/apps/payments/templates/admin/payments/apikey/change_list.html +39 -0
  84. django_cfg/apps/payments/templates/admin/payments/balance/change_list.html +50 -0
  85. django_cfg/apps/payments/templates/admin/payments/currency/change_list.html +40 -0
  86. django_cfg/apps/payments/templates/admin/payments/payment/change_list.html +48 -0
  87. django_cfg/apps/payments/templates/admin/payments/subscription/change_list.html +48 -0
  88. django_cfg/apps/payments/urls_admin.py +1 -1
  89. django_cfg/apps/payments/views/api/currencies.py +5 -5
  90. django_cfg/apps/payments/views/overview/services.py +2 -2
  91. django_cfg/apps/payments/views/serializers/currencies.py +4 -3
  92. django_cfg/apps/support/admin/__init__.py +10 -1
  93. django_cfg/apps/support/admin/support_admin.py +338 -141
  94. django_cfg/apps/tasks/admin/__init__.py +11 -0
  95. django_cfg/apps/tasks/admin/tasks_admin.py +430 -0
  96. django_cfg/apps/urls.py +1 -2
  97. django_cfg/config.py +1 -1
  98. django_cfg/core/config.py +10 -5
  99. django_cfg/core/generation.py +1 -1
  100. django_cfg/management/commands/__init__.py +13 -1
  101. django_cfg/management/commands/app_agent_diagnose.py +470 -0
  102. django_cfg/management/commands/app_agent_generate.py +342 -0
  103. django_cfg/management/commands/app_agent_info.py +308 -0
  104. django_cfg/management/commands/migrate_all.py +9 -3
  105. django_cfg/management/commands/migrator.py +11 -6
  106. django_cfg/management/commands/rundramatiq.py +3 -2
  107. django_cfg/middleware/__init__.py +0 -2
  108. django_cfg/models/api_keys.py +115 -0
  109. django_cfg/modules/django_admin/__init__.py +64 -0
  110. django_cfg/modules/django_admin/decorators/__init__.py +13 -0
  111. django_cfg/modules/django_admin/decorators/actions.py +106 -0
  112. django_cfg/modules/django_admin/decorators/display.py +106 -0
  113. django_cfg/modules/django_admin/mixins/__init__.py +14 -0
  114. django_cfg/modules/django_admin/mixins/display_mixin.py +81 -0
  115. django_cfg/modules/django_admin/mixins/optimization_mixin.py +41 -0
  116. django_cfg/modules/django_admin/mixins/standalone_actions_mixin.py +202 -0
  117. django_cfg/modules/django_admin/models/__init__.py +20 -0
  118. django_cfg/modules/django_admin/models/action_models.py +33 -0
  119. django_cfg/modules/django_admin/models/badge_models.py +20 -0
  120. django_cfg/modules/django_admin/models/base.py +26 -0
  121. django_cfg/modules/django_admin/models/display_models.py +31 -0
  122. django_cfg/modules/django_admin/utils/badges.py +159 -0
  123. django_cfg/modules/django_admin/utils/displays.py +247 -0
  124. django_cfg/modules/django_app_agent/__init__.py +87 -0
  125. django_cfg/modules/django_app_agent/agents/__init__.py +40 -0
  126. django_cfg/modules/django_app_agent/agents/base/__init__.py +24 -0
  127. django_cfg/modules/django_app_agent/agents/base/agent.py +354 -0
  128. django_cfg/modules/django_app_agent/agents/base/context.py +236 -0
  129. django_cfg/modules/django_app_agent/agents/base/executor.py +430 -0
  130. django_cfg/modules/django_app_agent/agents/generation/__init__.py +12 -0
  131. django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +15 -0
  132. django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +147 -0
  133. django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +99 -0
  134. django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +32 -0
  135. django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +290 -0
  136. django_cfg/modules/django_app_agent/agents/interfaces.py +376 -0
  137. django_cfg/modules/django_app_agent/core/__init__.py +33 -0
  138. django_cfg/modules/django_app_agent/core/config.py +300 -0
  139. django_cfg/modules/django_app_agent/core/exceptions.py +359 -0
  140. django_cfg/modules/django_app_agent/models/__init__.py +71 -0
  141. django_cfg/modules/django_app_agent/models/base.py +283 -0
  142. django_cfg/modules/django_app_agent/models/context.py +496 -0
  143. django_cfg/modules/django_app_agent/models/enums.py +481 -0
  144. django_cfg/modules/django_app_agent/models/requests.py +500 -0
  145. django_cfg/modules/django_app_agent/models/responses.py +585 -0
  146. django_cfg/modules/django_app_agent/pytest.ini +6 -0
  147. django_cfg/modules/django_app_agent/services/__init__.py +42 -0
  148. django_cfg/modules/django_app_agent/services/app_generator/__init__.py +30 -0
  149. django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +133 -0
  150. django_cfg/modules/django_app_agent/services/app_generator/context.py +40 -0
  151. django_cfg/modules/django_app_agent/services/app_generator/main.py +202 -0
  152. django_cfg/modules/django_app_agent/services/app_generator/structure.py +316 -0
  153. django_cfg/modules/django_app_agent/services/app_generator/validation.py +125 -0
  154. django_cfg/modules/django_app_agent/services/base.py +437 -0
  155. django_cfg/modules/django_app_agent/services/context_builder/__init__.py +34 -0
  156. django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +141 -0
  157. django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +276 -0
  158. django_cfg/modules/django_app_agent/services/context_builder/main.py +272 -0
  159. django_cfg/modules/django_app_agent/services/context_builder/models.py +40 -0
  160. django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +85 -0
  161. django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +31 -0
  162. django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +311 -0
  163. django_cfg/modules/django_app_agent/services/project_scanner/main.py +221 -0
  164. django_cfg/modules/django_app_agent/services/project_scanner/models.py +59 -0
  165. django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +94 -0
  166. django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +28 -0
  167. django_cfg/modules/django_app_agent/services/questioning_service/main.py +273 -0
  168. django_cfg/modules/django_app_agent/services/questioning_service/models.py +111 -0
  169. django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +251 -0
  170. django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +347 -0
  171. django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +356 -0
  172. django_cfg/modules/django_app_agent/services/report_service.py +332 -0
  173. django_cfg/modules/django_app_agent/services/template_manager/__init__.py +18 -0
  174. django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +236 -0
  175. django_cfg/modules/django_app_agent/services/template_manager/main.py +159 -0
  176. django_cfg/modules/django_app_agent/services/template_manager/models.py +36 -0
  177. django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +100 -0
  178. django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +105 -0
  179. django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +31 -0
  180. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +44 -0
  181. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +81 -0
  182. django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +107 -0
  183. django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +139 -0
  184. django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +91 -0
  185. django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +195 -0
  186. django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +35 -0
  187. django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +211 -0
  188. django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +200 -0
  189. django_cfg/modules/django_app_agent/services/validation_service/__init__.py +25 -0
  190. django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +333 -0
  191. django_cfg/modules/django_app_agent/services/validation_service/main.py +242 -0
  192. django_cfg/modules/django_app_agent/services/validation_service/models.py +66 -0
  193. django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +352 -0
  194. django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +272 -0
  195. django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +203 -0
  196. django_cfg/modules/django_app_agent/ui/__init__.py +25 -0
  197. django_cfg/modules/django_app_agent/ui/cli.py +419 -0
  198. django_cfg/modules/django_app_agent/ui/rich_components.py +622 -0
  199. django_cfg/modules/django_app_agent/utils/__init__.py +38 -0
  200. django_cfg/modules/django_app_agent/utils/logging.py +360 -0
  201. django_cfg/modules/django_app_agent/utils/validation.py +417 -0
  202. django_cfg/modules/django_currency/__init__.py +2 -2
  203. django_cfg/modules/django_currency/clients/__init__.py +2 -2
  204. django_cfg/modules/django_currency/clients/hybrid_client.py +587 -0
  205. django_cfg/modules/django_currency/core/converter.py +12 -12
  206. django_cfg/modules/django_currency/database/__init__.py +2 -2
  207. django_cfg/modules/django_currency/database/database_loader.py +93 -42
  208. django_cfg/modules/django_llm/llm/client.py +10 -2
  209. django_cfg/modules/django_unfold/callbacks/actions.py +1 -1
  210. django_cfg/modules/django_unfold/callbacks/statistics.py +1 -1
  211. django_cfg/modules/django_unfold/dashboard.py +14 -13
  212. django_cfg/modules/django_unfold/models/config.py +1 -1
  213. django_cfg/registry/core.py +3 -0
  214. django_cfg/registry/third_party.py +2 -2
  215. django_cfg/template_archive/django_sample.zip +0 -0
  216. {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/METADATA +2 -1
  217. {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/RECORD +224 -118
  218. django_cfg/apps/accounts/admin/activity.py +0 -96
  219. django_cfg/apps/accounts/admin/group.py +0 -17
  220. django_cfg/apps/accounts/admin/otp.py +0 -59
  221. django_cfg/apps/accounts/admin/registration_source.py +0 -97
  222. django_cfg/apps/accounts/admin/twilio_response.py +0 -227
  223. django_cfg/apps/accounts/admin/user.py +0 -300
  224. django_cfg/apps/agents/core/agent.py +0 -281
  225. django_cfg/apps/payments/admin_interface/old/payments/base.html +0 -175
  226. django_cfg/apps/payments/admin_interface/old/payments/components/dev_tool_card.html +0 -125
  227. django_cfg/apps/payments/admin_interface/old/payments/components/loading_spinner.html +0 -16
  228. django_cfg/apps/payments/admin_interface/old/payments/components/ngrok_status_card.html +0 -113
  229. django_cfg/apps/payments/admin_interface/old/payments/components/notification.html +0 -27
  230. django_cfg/apps/payments/admin_interface/old/payments/components/provider_card.html +0 -86
  231. django_cfg/apps/payments/admin_interface/old/payments/components/status_card.html +0 -35
  232. django_cfg/apps/payments/admin_interface/old/payments/currency_converter.html +0 -382
  233. django_cfg/apps/payments/admin_interface/old/payments/payment_dashboard.html +0 -309
  234. django_cfg/apps/payments/admin_interface/old/payments/payment_form.html +0 -303
  235. django_cfg/apps/payments/admin_interface/old/payments/payment_list.html +0 -382
  236. django_cfg/apps/payments/admin_interface/old/payments/payment_status.html +0 -500
  237. django_cfg/apps/payments/admin_interface/old/payments/webhook_dashboard.html +0 -518
  238. django_cfg/apps/payments/admin_interface/old/static/payments/css/components.css +0 -619
  239. django_cfg/apps/payments/admin_interface/old/static/payments/css/dashboard.css +0 -188
  240. django_cfg/apps/payments/admin_interface/old/static/payments/js/components.js +0 -545
  241. django_cfg/apps/payments/admin_interface/old/static/payments/js/ngrok-status.js +0 -163
  242. django_cfg/apps/payments/admin_interface/old/static/payments/js/utils.js +0 -412
  243. django_cfg/apps/tasks/admin.py +0 -320
  244. django_cfg/middleware/static_nocache.py +0 -55
  245. django_cfg/modules/django_currency/clients/yahoo_client.py +0 -157
  246. /django_cfg/modules/{django_unfold → django_admin}/icons/README.md +0 -0
  247. /django_cfg/modules/{django_unfold → django_admin}/icons/__init__.py +0 -0
  248. /django_cfg/modules/{django_unfold → django_admin}/icons/constants.py +0 -0
  249. /django_cfg/modules/{django_unfold → django_admin}/icons/generate_icons.py +0 -0
  250. {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/WHEEL +0 -0
  251. {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/entry_points.txt +0 -0
  252. {django_cfg-1.3.5.dist-info → django_cfg-1.3.9.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,481 @@
1
+ """
2
+ Enumerations for Django App Agent Module.
3
+
4
+ This module defines all enums used throughout the system:
5
+ - Application features and types
6
+ - Generation stages and complexity levels
7
+ - Question types and impact levels
8
+ - Validation severities and statuses
9
+ """
10
+
11
+ from enum import Enum, IntEnum
12
+ from typing import List, Set
13
+
14
+
15
+ class AppFeature(str, Enum):
16
+ """Features that can be included in generated Django applications."""
17
+
18
+ # Core Django features
19
+ MODELS = "models"
20
+ VIEWS = "views"
21
+ URLS = "urls"
22
+ ADMIN = "admin"
23
+ FORMS = "forms"
24
+ TEMPLATES = "templates"
25
+ STATIC = "static"
26
+
27
+ # API and serialization
28
+ API = "api"
29
+ SERIALIZERS = "serializers"
30
+ VIEWSETS = "viewsets"
31
+ FILTERS = "filters"
32
+ PAGINATION = "pagination"
33
+
34
+ # Testing and quality
35
+ TESTS = "tests"
36
+ FIXTURES = "fixtures"
37
+
38
+ # Background processing
39
+ TASKS = "tasks"
40
+ SIGNALS = "signals"
41
+
42
+ # Security and permissions
43
+ SECURITY = "security"
44
+ PERMISSIONS = "permissions"
45
+ AUTHENTICATION = "authentication"
46
+
47
+ # Configuration and management
48
+ CONFIG = "config"
49
+ MANAGEMENT_COMMANDS = "management_commands"
50
+ MIDDLEWARE = "middleware"
51
+ CONTEXT_PROCESSORS = "context_processors"
52
+
53
+ # Database and migrations
54
+ MIGRATIONS = "migrations"
55
+ ROUTERS = "routers"
56
+
57
+ # Documentation and development
58
+ DOCS = "docs"
59
+ SERVICES = "services" # Service layer pattern
60
+
61
+ # Django-CFG specific
62
+ CFG_CONFIG = "cfg_config"
63
+ CFG_MODULES = "cfg_modules"
64
+
65
+ @classmethod
66
+ def get_core_features(cls) -> Set["AppFeature"]:
67
+ """Get core features that are typically included."""
68
+ return {cls.MODELS, cls.VIEWS, cls.ADMIN, cls.URLS}
69
+
70
+ @classmethod
71
+ def get_advanced_features(cls) -> Set["AppFeature"]:
72
+ """Get advanced features for complex applications."""
73
+ return {
74
+ cls.API, cls.SERIALIZERS, cls.VIEWSETS, cls.TESTS, cls.FORMS,
75
+ cls.SIGNALS, cls.MANAGEMENT_COMMANDS, cls.PERMISSIONS, cls.MIDDLEWARE,
76
+ cls.TASKS, cls.SECURITY, cls.AUTHENTICATION, cls.SERVICES
77
+ }
78
+
79
+ @classmethod
80
+ def get_ui_features(cls) -> Set["AppFeature"]:
81
+ """Get UI-related features."""
82
+ return {cls.TEMPLATES, cls.STATIC, cls.FORMS}
83
+
84
+ @classmethod
85
+ def get_api_features(cls) -> Set["AppFeature"]:
86
+ """Get API-related features."""
87
+ return {cls.API, cls.SERIALIZERS, cls.VIEWSETS, cls.FILTERS, cls.PAGINATION}
88
+
89
+ @classmethod
90
+ def get_django_cfg_features(cls) -> Set["AppFeature"]:
91
+ """Get django-cfg specific features."""
92
+ return {cls.CFG_CONFIG, cls.CFG_MODULES, cls.CONFIG, cls.SERVICES}
93
+
94
+ def get_dependencies(self) -> Set["AppFeature"]:
95
+ """Get features that this feature depends on."""
96
+ dependencies = {
97
+ # API features depend on models and views
98
+ self.API: {self.MODELS, self.VIEWS},
99
+ self.SERIALIZERS: {self.MODELS},
100
+ self.VIEWSETS: {self.MODELS, self.VIEWS, self.SERIALIZERS},
101
+ self.FILTERS: {self.MODELS, self.API},
102
+ self.PAGINATION: {self.API},
103
+
104
+ # Admin and forms depend on models
105
+ self.ADMIN: {self.MODELS},
106
+ self.FORMS: {self.MODELS},
107
+
108
+ # Testing depends on models
109
+ self.TESTS: {self.MODELS},
110
+
111
+ # Signals and permissions depend on models
112
+ self.SIGNALS: {self.MODELS},
113
+ self.PERMISSIONS: {self.MODELS},
114
+ self.AUTHENTICATION: {self.MODELS, self.PERMISSIONS},
115
+
116
+ # Security depends on authentication and permissions
117
+ self.SECURITY: {self.AUTHENTICATION, self.PERMISSIONS},
118
+
119
+ # Tasks may depend on models
120
+ self.TASKS: {self.MODELS},
121
+
122
+ # Services depend on models
123
+ self.SERVICES: {self.MODELS},
124
+
125
+ # Django-CFG features
126
+ self.CFG_MODULES: {self.CFG_CONFIG},
127
+ }
128
+ return dependencies.get(self, set())
129
+
130
+ def supports_app_type(self, app_type: 'AppType') -> bool:
131
+ """Check if this feature is supported by the given app type."""
132
+ if app_type == AppType.DJANGO:
133
+ # Django supports all features except django-cfg specific ones
134
+ django_cfg_only = {self.CFG_CONFIG, self.CFG_MODULES}
135
+ return self not in django_cfg_only
136
+ elif app_type == AppType.DJANGO_CFG:
137
+ # Django-CFG supports all features
138
+ return True
139
+ return False
140
+
141
+
142
+ class AppComplexity(str, Enum):
143
+ """Complexity levels for application generation."""
144
+
145
+ SIMPLE = "simple"
146
+ MODERATE = "moderate"
147
+ ADVANCED = "advanced"
148
+ ENTERPRISE = "enterprise"
149
+
150
+ def get_recommended_features(self) -> Set[AppFeature]:
151
+ """Get recommended features for this complexity level."""
152
+ feature_sets = {
153
+ self.SIMPLE: {
154
+ AppFeature.MODELS,
155
+ AppFeature.VIEWS,
156
+ AppFeature.URLS
157
+ },
158
+ self.MODERATE: {
159
+ AppFeature.MODELS,
160
+ AppFeature.VIEWS,
161
+ AppFeature.ADMIN,
162
+ AppFeature.URLS,
163
+ AppFeature.TESTS,
164
+ AppFeature.FORMS
165
+ },
166
+ self.ADVANCED: {
167
+ AppFeature.MODELS,
168
+ AppFeature.VIEWS,
169
+ AppFeature.ADMIN,
170
+ AppFeature.API,
171
+ AppFeature.SERIALIZERS,
172
+ AppFeature.TESTS,
173
+ AppFeature.FORMS,
174
+ AppFeature.URLS,
175
+ AppFeature.TEMPLATES,
176
+ AppFeature.SIGNALS,
177
+ AppFeature.PERMISSIONS
178
+ },
179
+ self.ENTERPRISE: {
180
+ AppFeature.MODELS,
181
+ AppFeature.VIEWS,
182
+ AppFeature.ADMIN,
183
+ AppFeature.API,
184
+ AppFeature.SERIALIZERS,
185
+ AppFeature.VIEWSETS,
186
+ AppFeature.FILTERS,
187
+ AppFeature.PAGINATION,
188
+ AppFeature.TESTS,
189
+ AppFeature.FORMS,
190
+ AppFeature.URLS,
191
+ AppFeature.TEMPLATES,
192
+ AppFeature.SIGNALS,
193
+ AppFeature.PERMISSIONS,
194
+ AppFeature.AUTHENTICATION,
195
+ AppFeature.SECURITY,
196
+ AppFeature.MANAGEMENT_COMMANDS,
197
+ AppFeature.MIDDLEWARE,
198
+ AppFeature.TASKS,
199
+ AppFeature.SERVICES,
200
+ AppFeature.DOCS
201
+ }
202
+ }
203
+ return feature_sets.get(self, set())
204
+
205
+ def get_estimated_time_minutes(self) -> int:
206
+ """Get estimated generation time in minutes."""
207
+ time_estimates = {
208
+ self.SIMPLE: 2,
209
+ self.MODERATE: 5,
210
+ self.ADVANCED: 8,
211
+ self.ENTERPRISE: 12
212
+ }
213
+ return time_estimates.get(self, 5)
214
+
215
+ def get_max_questions(self) -> int:
216
+ """Get maximum number of questions for this complexity."""
217
+ question_limits = {
218
+ self.SIMPLE: 5,
219
+ self.MODERATE: 10,
220
+ self.ADVANCED: 15,
221
+ self.ENTERPRISE: 20
222
+ }
223
+ return question_limits.get(self, 10)
224
+
225
+
226
+ class AppType(str, Enum):
227
+ """Types of Django applications that can be generated."""
228
+
229
+ DJANGO = "django"
230
+ DJANGO_CFG = "django_cfg"
231
+
232
+ def get_base_patterns(self) -> Set[str]:
233
+ """Get base architectural patterns for this app type."""
234
+ patterns = {
235
+ self.DJANGO: {
236
+ "class_based_views",
237
+ "model_forms",
238
+ "django_admin"
239
+ },
240
+ self.DJANGO_CFG: {
241
+ "service_layer",
242
+ "pydantic_models",
243
+ "async_views",
244
+ "type_safety"
245
+ }
246
+ }
247
+ return patterns.get(self, set())
248
+
249
+ def supports_feature(self, feature: AppFeature) -> bool:
250
+ """Check if this app type supports a specific feature."""
251
+ # Django-CFG supports all features
252
+ if self == self.DJANGO_CFG:
253
+ return True
254
+
255
+ # Standard Django has some limitations
256
+ unsupported_for_django = {
257
+ # All features are supported in standard Django
258
+ }
259
+ return feature not in unsupported_for_django
260
+
261
+
262
+ class QuestionType(str, Enum):
263
+ """Types of questions in the intelligent questioning system."""
264
+
265
+ YES_NO = "yes_no"
266
+ MULTIPLE_CHOICE = "multiple_choice"
267
+ TEXT_INPUT = "text_input"
268
+ NUMERIC_INPUT = "numeric_input"
269
+ SELECTION = "selection"
270
+ RANKING = "ranking"
271
+
272
+ def get_validation_pattern(self) -> str:
273
+ """Get validation pattern for this question type."""
274
+ patterns = {
275
+ self.YES_NO: r"^(yes|no|y|n)$",
276
+ self.NUMERIC_INPUT: r"^\d+(\.\d+)?$",
277
+ self.TEXT_INPUT: r"^.{1,500}$", # 1-500 characters
278
+ }
279
+ return patterns.get(self, r"^.*$")
280
+
281
+ def requires_options(self) -> bool:
282
+ """Check if this question type requires predefined options."""
283
+ return self in {self.MULTIPLE_CHOICE, self.SELECTION, self.RANKING}
284
+
285
+
286
+ class ImpactLevel(str, Enum):
287
+ """Impact levels for questions and decisions."""
288
+
289
+ LOW = "low"
290
+ MEDIUM = "medium"
291
+ HIGH = "high"
292
+ CRITICAL = "critical"
293
+
294
+ def get_priority_score(self) -> int:
295
+ """Get numeric priority score for sorting."""
296
+ scores = {
297
+ self.LOW: 1,
298
+ self.MEDIUM: 2,
299
+ self.HIGH: 3,
300
+ self.CRITICAL: 4
301
+ }
302
+ return scores.get(self, 1)
303
+
304
+ def should_ask_early(self) -> bool:
305
+ """Check if questions with this impact should be asked early."""
306
+ return self in {self.HIGH, self.CRITICAL}
307
+
308
+
309
+ class GenerationStage(str, Enum):
310
+ """Stages in the application generation process."""
311
+
312
+ INITIALIZATION = "initialization"
313
+ ANALYSIS = "analysis"
314
+ QUESTIONING = "questioning"
315
+ PLANNING = "planning"
316
+ GENERATION = "generation"
317
+ VALIDATION = "validation"
318
+ INTEGRATION = "integration"
319
+ FINALIZATION = "finalization"
320
+ COMPLETED = "completed"
321
+ FAILED = "failed"
322
+
323
+ def get_next_stage(self) -> "GenerationStage":
324
+ """Get the next stage in the process."""
325
+ stage_order = [
326
+ self.INITIALIZATION,
327
+ self.ANALYSIS,
328
+ self.QUESTIONING,
329
+ self.PLANNING,
330
+ self.GENERATION,
331
+ self.VALIDATION,
332
+ self.INTEGRATION,
333
+ self.FINALIZATION,
334
+ self.COMPLETED
335
+ ]
336
+
337
+ try:
338
+ current_index = stage_order.index(self)
339
+ if current_index < len(stage_order) - 1:
340
+ return stage_order[current_index + 1]
341
+ except ValueError:
342
+ pass
343
+
344
+ return self.COMPLETED
345
+
346
+ def is_terminal(self) -> bool:
347
+ """Check if this is a terminal stage."""
348
+ return self in {self.COMPLETED, self.FAILED}
349
+
350
+ def get_progress_percentage(self) -> float:
351
+ """Get progress percentage for this stage."""
352
+ progress_map = {
353
+ self.INITIALIZATION: 5.0,
354
+ self.ANALYSIS: 15.0,
355
+ self.QUESTIONING: 25.0,
356
+ self.PLANNING: 35.0,
357
+ self.GENERATION: 70.0,
358
+ self.VALIDATION: 85.0,
359
+ self.INTEGRATION: 95.0,
360
+ self.FINALIZATION: 98.0,
361
+ self.COMPLETED: 100.0,
362
+ self.FAILED: 0.0
363
+ }
364
+ return progress_map.get(self, 0.0)
365
+
366
+
367
+ class ValidationSeverity(str, Enum):
368
+ """Severity levels for validation issues."""
369
+
370
+ INFO = "info"
371
+ WARNING = "warning"
372
+ ERROR = "error"
373
+ CRITICAL = "critical"
374
+
375
+ def is_blocking(self) -> bool:
376
+ """Check if this severity level blocks generation."""
377
+ return self in {self.ERROR, self.CRITICAL}
378
+
379
+ def get_priority(self) -> int:
380
+ """Get numeric priority for sorting (higher = more severe)."""
381
+ priorities = {
382
+ self.INFO: 1,
383
+ self.WARNING: 2,
384
+ self.ERROR: 3,
385
+ self.CRITICAL: 4
386
+ }
387
+ return priorities.get(self, 1)
388
+
389
+
390
+ class AgentRole(str, Enum):
391
+ """Roles for different AI agents in the system."""
392
+
393
+ ORCHESTRATOR = "orchestrator"
394
+ ANALYZER = "analyzer"
395
+ GENERATOR = "generator"
396
+ VALIDATOR = "validator"
397
+ DIALOGUE = "dialogue"
398
+ DIAGNOSTIC = "diagnostic"
399
+
400
+ def get_description(self) -> str:
401
+ """Get human-readable description of the agent role."""
402
+ descriptions = {
403
+ self.ORCHESTRATOR: "Coordinates and manages the overall generation process",
404
+ self.ANALYZER: "Analyzes project structure and identifies patterns",
405
+ self.GENERATOR: "Generates application code and files",
406
+ self.VALIDATOR: "Validates generated code quality and compliance",
407
+ self.DIALOGUE: "Conducts intelligent questioning sessions",
408
+ self.DIAGNOSTIC: "Diagnoses problems and suggests solutions"
409
+ }
410
+ return descriptions.get(self, "Unknown agent role")
411
+
412
+ def get_required_capabilities(self) -> Set[str]:
413
+ """Get required capabilities for this agent role."""
414
+ capabilities = {
415
+ self.ORCHESTRATOR: {"workflow_management", "agent_coordination"},
416
+ self.ANALYZER: {"code_analysis", "pattern_recognition"},
417
+ self.GENERATOR: {"code_generation", "template_processing"},
418
+ self.VALIDATOR: {"code_validation", "quality_assessment"},
419
+ self.DIALOGUE: {"natural_language", "question_generation"},
420
+ self.DIAGNOSTIC: {"problem_analysis", "solution_generation"}
421
+ }
422
+ return capabilities.get(self, set())
423
+
424
+
425
+ class FileType(str, Enum):
426
+ """Types of files that can be generated."""
427
+
428
+ MODEL = "model"
429
+ VIEW = "view"
430
+ FORM = "form"
431
+ ADMIN = "admin"
432
+ URL = "url"
433
+ TEST = "test"
434
+ TEMPLATE = "template"
435
+ STATIC = "static"
436
+ MIGRATION = "migration"
437
+ MANAGEMENT = "management"
438
+ SIGNAL = "signal"
439
+ MIDDLEWARE = "middleware"
440
+ CONFIG = "config"
441
+ INIT = "init"
442
+
443
+ def get_file_extension(self) -> str:
444
+ """Get typical file extension for this file type."""
445
+ extensions = {
446
+ self.MODEL: ".py",
447
+ self.VIEW: ".py",
448
+ self.FORM: ".py",
449
+ self.ADMIN: ".py",
450
+ self.URL: ".py",
451
+ self.TEST: ".py",
452
+ self.TEMPLATE: ".html",
453
+ self.STATIC: ".css",
454
+ self.MIGRATION: ".py",
455
+ self.MANAGEMENT: ".py",
456
+ self.SIGNAL: ".py",
457
+ self.MIDDLEWARE: ".py",
458
+ self.CONFIG: ".py",
459
+ self.INIT: ".py"
460
+ }
461
+ return extensions.get(self, ".py")
462
+
463
+ def get_typical_directory(self) -> str:
464
+ """Get typical directory for this file type."""
465
+ directories = {
466
+ self.MODEL: "models",
467
+ self.VIEW: "views",
468
+ self.FORM: "forms",
469
+ self.ADMIN: "", # Root of app
470
+ self.URL: "", # Root of app
471
+ self.TEST: "tests",
472
+ self.TEMPLATE: "templates",
473
+ self.STATIC: "static",
474
+ self.MIGRATION: "migrations",
475
+ self.MANAGEMENT: "management/commands",
476
+ self.SIGNAL: "signals",
477
+ self.MIDDLEWARE: "middleware",
478
+ self.CONFIG: "",
479
+ self.INIT: ""
480
+ }
481
+ return directories.get(self, "")