django-cfg 1.3.9__py3-none-any.whl → 1.3.11__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 (187) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/payments/admin/networks_admin.py +12 -1
  3. django_cfg/apps/payments/admin/payments_admin.py +13 -0
  4. django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +62 -14
  5. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_card.html +121 -0
  6. django_cfg/apps/payments/admin_interface/templates/payments/components/payment_qr_code.html +95 -0
  7. django_cfg/apps/payments/admin_interface/templates/payments/components/progress_bar.html +37 -0
  8. django_cfg/apps/payments/admin_interface/templates/payments/components/provider_stats.html +60 -0
  9. django_cfg/apps/payments/admin_interface/templates/payments/components/status_badge.html +41 -0
  10. django_cfg/apps/payments/admin_interface/templates/payments/components/status_overview.html +83 -0
  11. django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +363 -0
  12. django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +33 -3
  13. django_cfg/apps/payments/admin_interface/views/api/payments.py +102 -0
  14. django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +96 -45
  15. django_cfg/apps/payments/admin_interface/views/forms.py +5 -1
  16. django_cfg/apps/payments/config/__init__.py +14 -15
  17. django_cfg/apps/payments/config/django_cfg_integration.py +59 -1
  18. django_cfg/apps/payments/config/helpers.py +8 -13
  19. django_cfg/apps/payments/migrations/0001_initial.py +33 -46
  20. django_cfg/apps/payments/migrations/0002_rename_payments_un_user_id_7f6e79_idx_payments_un_user_id_8ce187_idx_and_more.py +46 -0
  21. django_cfg/apps/payments/migrations/0003_universalpayment_status_changed_at.py +25 -0
  22. django_cfg/apps/payments/models/managers/payment_managers.py +142 -25
  23. django_cfg/apps/payments/models/payments.py +94 -0
  24. django_cfg/apps/payments/services/core/base.py +4 -4
  25. django_cfg/apps/payments/services/core/payment_service.py +265 -38
  26. django_cfg/apps/payments/services/providers/base.py +209 -3
  27. django_cfg/apps/payments/services/providers/models/__init__.py +2 -0
  28. django_cfg/apps/payments/services/providers/models/base.py +25 -2
  29. django_cfg/apps/payments/services/providers/nowpayments/models.py +2 -2
  30. django_cfg/apps/payments/services/providers/nowpayments/provider.py +57 -9
  31. django_cfg/apps/payments/services/providers/registry.py +5 -5
  32. django_cfg/apps/payments/services/types/requests.py +19 -7
  33. django_cfg/apps/payments/signals/payment_signals.py +31 -2
  34. django_cfg/apps/payments/static/payments/js/api-client.js +6 -1
  35. django_cfg/apps/payments/static/payments/js/payment-detail.js +167 -0
  36. django_cfg/apps/payments/static/payments/js/payment-form.js +35 -26
  37. django_cfg/apps/payments/templatetags/payment_tags.py +8 -0
  38. django_cfg/apps/payments/urls.py +3 -2
  39. django_cfg/apps/payments/views/api/currencies.py +3 -0
  40. django_cfg/apps/payments/views/serializers/currencies.py +18 -5
  41. django_cfg/apps/tasks/admin/tasks_admin.py +2 -2
  42. django_cfg/apps/tasks/static/tasks/css/dashboard.css +68 -217
  43. django_cfg/apps/tasks/static/tasks/js/api.js +40 -84
  44. django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +24 -0
  45. django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +85 -0
  46. django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +216 -0
  47. django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +245 -0
  48. django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +123 -0
  49. django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +120 -0
  50. django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +350 -0
  51. django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +169 -0
  52. django_cfg/apps/tasks/tasks/__init__.py +10 -0
  53. django_cfg/apps/tasks/tasks/demo_tasks.py +133 -0
  54. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +42 -45
  55. django_cfg/apps/tasks/templates/tasks/components/{status_cards.html → overview_content.html} +30 -11
  56. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +19 -0
  57. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +16 -10
  58. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +51 -0
  59. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +30 -0
  60. django_cfg/apps/tasks/templates/tasks/layout/base.html +117 -0
  61. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +82 -0
  62. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +40 -0
  63. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +37 -0
  64. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +41 -0
  65. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +50 -0
  66. django_cfg/apps/tasks/urls.py +2 -2
  67. django_cfg/apps/tasks/urls_admin.py +2 -2
  68. django_cfg/apps/tasks/utils/__init__.py +1 -0
  69. django_cfg/apps/tasks/utils/simulator.py +356 -0
  70. django_cfg/apps/tasks/views/__init__.py +16 -0
  71. django_cfg/apps/tasks/views/api.py +569 -0
  72. django_cfg/apps/tasks/views/dashboard.py +58 -0
  73. django_cfg/core/integration/__init__.py +21 -0
  74. django_cfg/management/commands/rundramatiq_simulator.py +430 -0
  75. django_cfg/models/constance.py +0 -11
  76. django_cfg/models/payments.py +137 -3
  77. django_cfg/modules/django_tasks.py +54 -21
  78. django_cfg/registry/core.py +4 -9
  79. django_cfg/template_archive/django_sample.zip +0 -0
  80. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/METADATA +2 -2
  81. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/RECORD +84 -152
  82. django_cfg/apps/payments/config/constance/__init__.py +0 -22
  83. django_cfg/apps/payments/config/constance/config_service.py +0 -123
  84. django_cfg/apps/payments/config/constance/fields.py +0 -69
  85. django_cfg/apps/payments/config/constance/settings.py +0 -160
  86. django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +0 -26
  87. django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +0 -28
  88. django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +0 -30
  89. django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -614
  90. django_cfg/apps/tasks/static/tasks/js/modals.js +0 -452
  91. django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -144
  92. django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -454
  93. django_cfg/apps/tasks/static/tasks/js/theme.js +0 -77
  94. django_cfg/apps/tasks/templates/tasks/base.html +0 -96
  95. django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -85
  96. django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -22
  97. django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -19
  98. django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -103
  99. django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -32
  100. django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -29
  101. django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -29
  102. django_cfg/apps/tasks/views.py +0 -461
  103. django_cfg/management/commands/app_agent_diagnose.py +0 -470
  104. django_cfg/management/commands/app_agent_generate.py +0 -342
  105. django_cfg/management/commands/app_agent_info.py +0 -308
  106. django_cfg/management/commands/auto_generate.py +0 -486
  107. django_cfg/modules/django_app_agent/__init__.py +0 -87
  108. django_cfg/modules/django_app_agent/agents/__init__.py +0 -40
  109. django_cfg/modules/django_app_agent/agents/base/__init__.py +0 -24
  110. django_cfg/modules/django_app_agent/agents/base/agent.py +0 -354
  111. django_cfg/modules/django_app_agent/agents/base/context.py +0 -236
  112. django_cfg/modules/django_app_agent/agents/base/executor.py +0 -430
  113. django_cfg/modules/django_app_agent/agents/generation/__init__.py +0 -12
  114. django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +0 -15
  115. django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +0 -147
  116. django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +0 -99
  117. django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +0 -32
  118. django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +0 -290
  119. django_cfg/modules/django_app_agent/agents/interfaces.py +0 -376
  120. django_cfg/modules/django_app_agent/core/__init__.py +0 -33
  121. django_cfg/modules/django_app_agent/core/config.py +0 -300
  122. django_cfg/modules/django_app_agent/core/exceptions.py +0 -359
  123. django_cfg/modules/django_app_agent/models/__init__.py +0 -71
  124. django_cfg/modules/django_app_agent/models/base.py +0 -283
  125. django_cfg/modules/django_app_agent/models/context.py +0 -496
  126. django_cfg/modules/django_app_agent/models/enums.py +0 -481
  127. django_cfg/modules/django_app_agent/models/requests.py +0 -500
  128. django_cfg/modules/django_app_agent/models/responses.py +0 -585
  129. django_cfg/modules/django_app_agent/pytest.ini +0 -6
  130. django_cfg/modules/django_app_agent/services/__init__.py +0 -42
  131. django_cfg/modules/django_app_agent/services/app_generator/__init__.py +0 -30
  132. django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +0 -133
  133. django_cfg/modules/django_app_agent/services/app_generator/context.py +0 -40
  134. django_cfg/modules/django_app_agent/services/app_generator/main.py +0 -202
  135. django_cfg/modules/django_app_agent/services/app_generator/structure.py +0 -316
  136. django_cfg/modules/django_app_agent/services/app_generator/validation.py +0 -125
  137. django_cfg/modules/django_app_agent/services/base.py +0 -437
  138. django_cfg/modules/django_app_agent/services/context_builder/__init__.py +0 -34
  139. django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +0 -141
  140. django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +0 -276
  141. django_cfg/modules/django_app_agent/services/context_builder/main.py +0 -272
  142. django_cfg/modules/django_app_agent/services/context_builder/models.py +0 -40
  143. django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +0 -85
  144. django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +0 -31
  145. django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +0 -311
  146. django_cfg/modules/django_app_agent/services/project_scanner/main.py +0 -221
  147. django_cfg/modules/django_app_agent/services/project_scanner/models.py +0 -59
  148. django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +0 -94
  149. django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +0 -28
  150. django_cfg/modules/django_app_agent/services/questioning_service/main.py +0 -273
  151. django_cfg/modules/django_app_agent/services/questioning_service/models.py +0 -111
  152. django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +0 -251
  153. django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +0 -347
  154. django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +0 -356
  155. django_cfg/modules/django_app_agent/services/report_service.py +0 -332
  156. django_cfg/modules/django_app_agent/services/template_manager/__init__.py +0 -18
  157. django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +0 -236
  158. django_cfg/modules/django_app_agent/services/template_manager/main.py +0 -159
  159. django_cfg/modules/django_app_agent/services/template_manager/models.py +0 -36
  160. django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +0 -100
  161. django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +0 -105
  162. django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +0 -31
  163. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +0 -44
  164. django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +0 -81
  165. django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +0 -107
  166. django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +0 -139
  167. django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +0 -91
  168. django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +0 -195
  169. django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +0 -35
  170. django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +0 -211
  171. django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +0 -200
  172. django_cfg/modules/django_app_agent/services/validation_service/__init__.py +0 -25
  173. django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +0 -333
  174. django_cfg/modules/django_app_agent/services/validation_service/main.py +0 -242
  175. django_cfg/modules/django_app_agent/services/validation_service/models.py +0 -66
  176. django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +0 -352
  177. django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +0 -272
  178. django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +0 -203
  179. django_cfg/modules/django_app_agent/ui/__init__.py +0 -25
  180. django_cfg/modules/django_app_agent/ui/cli.py +0 -419
  181. django_cfg/modules/django_app_agent/ui/rich_components.py +0 -622
  182. django_cfg/modules/django_app_agent/utils/__init__.py +0 -38
  183. django_cfg/modules/django_app_agent/utils/logging.py +0 -360
  184. django_cfg/modules/django_app_agent/utils/validation.py +0 -417
  185. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/WHEEL +0 -0
  186. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/entry_points.txt +0 -0
  187. {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/licenses/LICENSE +0 -0
@@ -1,342 +0,0 @@
1
- """
2
- Django management command for AI-powered app generation.
3
-
4
- This command serves as a thin wrapper that:
5
- 1. Loads django-cfg configuration
6
- 2. Delegates to django_app_agent module
7
- 3. Provides Django-native CLI interface
8
- """
9
-
10
- import asyncio
11
- import sys
12
- from pathlib import Path
13
- from typing import List, Optional
14
-
15
- from django.core.management.base import BaseCommand, CommandError
16
- from django.conf import settings
17
-
18
- try:
19
- from django_cfg.modules.django_app_agent.services.base import create_service_dependencies
20
- from django_cfg.modules.django_app_agent.ui.cli import DjangoAppAgentCLI
21
- from django_cfg.modules.django_app_agent.models.requests import (
22
- AppGenerationRequest,
23
- AppFeature,
24
- AppComplexity,
25
- AppType
26
- )
27
- from django_cfg.modules.django_app_agent.models.enums import AppFeature as AppFeatureEnum
28
- from django_cfg.modules.django_app_agent.core.exceptions import DjangoAppAgentError
29
- from django_cfg.modules.django_app_agent.core.config import AgentConfig
30
- from django_cfg.modules.django_app_agent.utils.logging import get_logger
31
- except ImportError as e:
32
- print(f"Error importing django_app_agent module: {e}")
33
- print("Make sure the django_app_agent module is properly installed.")
34
- sys.exit(1)
35
-
36
-
37
- class Command(BaseCommand):
38
- """Django management command for AI-powered app generation."""
39
-
40
- help = "Generate Django applications using AI assistance (Django App Agent)"
41
-
42
- def add_arguments(self, parser):
43
- """Add command line arguments."""
44
-
45
- # Positional arguments
46
- parser.add_argument(
47
- 'app_name',
48
- nargs='?',
49
- type=str,
50
- help='Name of the application to generate'
51
- )
52
-
53
- parser.add_argument(
54
- 'description',
55
- nargs='?',
56
- type=str,
57
- help='Description of the application'
58
- )
59
-
60
- # Optional arguments
61
- parser.add_argument(
62
- '--features',
63
- type=str,
64
- help='Comma-separated list of features (e.g., models,admin,views,api,tests)'
65
- )
66
-
67
- parser.add_argument(
68
- '--complexity',
69
- choices=['simple', 'moderate', 'advanced', 'enterprise'],
70
- default='moderate',
71
- help='Application complexity level (default: moderate)'
72
- )
73
-
74
- parser.add_argument(
75
- '--app-type',
76
- choices=['django', 'django_cfg'],
77
- default='django_cfg',
78
- help='Type of application to generate (default: django_cfg)'
79
- )
80
-
81
- parser.add_argument(
82
- '--output-dir',
83
- type=str,
84
- help='Custom output directory for the application'
85
- )
86
-
87
- parser.add_argument(
88
- '--max-questions',
89
- type=int,
90
- default=20,
91
- help='Maximum number of interactive questions (default: 20)'
92
- )
93
-
94
- parser.add_argument(
95
- '--no-questions',
96
- action='store_true',
97
- help='Skip interactive questioning'
98
- )
99
-
100
- parser.add_argument(
101
- '--interactive',
102
- action='store_true',
103
- default=True,
104
- help='Enable interactive mode (default: True)'
105
- )
106
-
107
- parser.add_argument(
108
- '--non-interactive',
109
- action='store_true',
110
- help='Disable interactive mode'
111
- )
112
-
113
- parser.add_argument(
114
- '--quality-threshold',
115
- type=float,
116
- default=0.8,
117
- help='Quality threshold for generated code (0.0-1.0, default: 0.8)'
118
- )
119
-
120
- parser.add_argument(
121
- '--model',
122
- type=str,
123
- help='Specific AI model to use (e.g., gpt-4o, claude-3-5-sonnet)'
124
- )
125
-
126
- parser.add_argument(
127
- '--verbose',
128
- action='store_true',
129
- help='Enable verbose output'
130
- )
131
-
132
- def handle(self, *args, **options):
133
- """Handle the command execution."""
134
-
135
- try:
136
- # Initialize logger
137
- logger = get_logger("management.commands.generate_app")
138
-
139
- # Determine interactive mode
140
- interactive = options.get('interactive', True) and not options.get('non_interactive', False)
141
- if options.get('no_questions'):
142
- interactive = False
143
-
144
- # If no arguments provided and interactive mode, use CLI
145
- if not options.get('app_name') and interactive:
146
- self.stdout.write(
147
- self.style.SUCCESS("🚀 Starting Django App Agent CLI...")
148
- )
149
- return self._run_interactive_cli(options)
150
-
151
- # Validate required arguments for non-interactive mode
152
- if not options.get('app_name'):
153
- raise CommandError("app_name is required when not in interactive mode")
154
-
155
- if not options.get('description'):
156
- raise CommandError("description is required when not in interactive mode")
157
-
158
- # Parse features
159
- features = []
160
- if options.get('features'):
161
- feature_names = [f.strip() for f in options['features'].split(',')]
162
- for feature_name in feature_names:
163
- try:
164
- features.append(AppFeatureEnum(feature_name.lower()))
165
- except ValueError:
166
- self.stdout.write(
167
- self.style.WARNING(f"Unknown feature: {feature_name}")
168
- )
169
-
170
- # Create generation request
171
- request = AppGenerationRequest(
172
- app_name=options['app_name'],
173
- description=options['description'],
174
- app_type=AppType(options.get('app_type', 'django_cfg')),
175
- complexity=AppComplexity(options.get('complexity', 'moderate')),
176
- features=features,
177
- output_directory=options.get('output_dir'),
178
- max_questions=options.get('max_questions', 20),
179
- rich_interface=interactive,
180
- verbose_output=options.get('verbose', False)
181
- )
182
-
183
- # Run generation
184
- return self._run_generation(request, options)
185
-
186
- except DjangoAppAgentError as e:
187
- logger.error(f"App generation failed: {e}")
188
- raise CommandError(f"App generation failed: {e}")
189
- except Exception as e:
190
- logger.error(f"Unexpected error: {e}")
191
- raise CommandError(f"Unexpected error: {e}")
192
-
193
- def _run_interactive_cli(self, options):
194
- """Run the interactive CLI interface."""
195
- try:
196
- # Initialize CLI
197
- cli = DjangoAppAgentCLI()
198
-
199
- # Run async CLI
200
- if sys.platform == 'win32':
201
- asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
202
-
203
- result = asyncio.run(cli.run_interactive())
204
-
205
- if result and result.status == "success":
206
- self.stdout.write(
207
- self.style.SUCCESS(
208
- f"✅ Application '{result.app_name}' generated successfully!"
209
- )
210
- )
211
- self.stdout.write(f"Generated {len(result.generated_files)} files")
212
- if result.report_path:
213
- self.stdout.write(f"Report saved to: {result.report_path}")
214
- else:
215
- self.stdout.write(
216
- self.style.ERROR("❌ Application generation failed")
217
- )
218
- if result and result.errors:
219
- for error in result.errors:
220
- self.stdout.write(f" • {error}")
221
-
222
- except KeyboardInterrupt:
223
- self.stdout.write("\n🛑 Generation cancelled by user")
224
- except Exception as e:
225
- raise CommandError(f"CLI execution failed: {e}")
226
-
227
- def _run_generation(self, request: AppGenerationRequest, options):
228
- """Run the generation process."""
229
- try:
230
- # Initialize configuration from django-cfg
231
- config = AgentConfig.from_django_cfg()
232
- logger = get_logger("management.commands.generate_app")
233
-
234
- # Import and initialize services
235
- from django_cfg.modules.django_app_agent.services import AppGeneratorService
236
- from django_cfg.modules.django_app_agent.agents import AgentRegistry, AgentClientFactory
237
-
238
- # Set up agent registry
239
- registry = AgentRegistry()
240
-
241
- # For now, we'll use a placeholder since actual agents aren't implemented yet
242
- # In production, this would initialize real agents
243
- local_client = {} # AgentClientFactory.create_local_client(agents, config, logger)
244
- # Note: Using placeholder since actual agents aren't implemented yet
245
- # registry.register_agent("local", local_client, "client")
246
-
247
- # Initialize service
248
- service = AppGeneratorService(config)
249
-
250
- # Create service dependencies
251
-
252
- dependencies = create_service_dependencies(
253
- config=config,
254
- service_name="app_generator",
255
- project_root=Path.cwd(),
256
- output_directory=Path.cwd() / "apps"
257
- )
258
-
259
- # Show progress
260
- self.stdout.write(f"🔧 Generating application '{request.app_name}'...")
261
- self.stdout.write(f" Type: {request.app_type.value}")
262
- self.stdout.write(f" Complexity: {request.complexity.value}")
263
- self.stdout.write(f" Features: {', '.join([f.value for f in request.features])}")
264
-
265
- # Run generation (async)
266
- if sys.platform == 'win32':
267
- asyncio.set_event_loop_policy(asyncio.WindowsProactorEventLoopPolicy())
268
-
269
- result = asyncio.run(service.process(request, dependencies))
270
-
271
- # Display results
272
- if result.success:
273
- self.stdout.write(
274
- self.style.SUCCESS(
275
- f"✅ Application '{request.app_name}' generated successfully!"
276
- )
277
- )
278
- self.stdout.write(f"Generated {len(result.generated_files)} files")
279
-
280
- if options.get('verbose'):
281
- self.stdout.write("\n📁 Generated files:")
282
- for file in result.generated_files:
283
- self.stdout.write(f" • {file.relative_path}")
284
-
285
- if result.generation_report_path:
286
- self.stdout.write(f"📊 Report saved to: {result.generation_report_path}")
287
-
288
- self.stdout.write(f"📈 Quality score: {result.quality_score:.2f}")
289
- self.stdout.write(f"🔒 Type safety: {result.type_safety_score:.2f}")
290
- self.stdout.write(f"📏 Pattern consistency: {result.pattern_consistency_score:.2f}")
291
- self.stdout.write(f"🧪 Test coverage: {result.test_coverage_percentage:.1f}%")
292
- else:
293
- self.stdout.write(
294
- self.style.ERROR(f"❌ Generation failed")
295
- )
296
- if result.errors:
297
- for error in result.errors:
298
- self.stdout.write(f" • {error.message}")
299
-
300
- except Exception as e:
301
- raise CommandError(f"Generation process failed: {e}")
302
-
303
- def _show_help(self):
304
- """Show extended help information."""
305
- help_text = """
306
- 🚀 Django App Agent - AI-Powered Application Generation
307
-
308
- USAGE:
309
- python manage.py app_agent_generate [APP_NAME] [DESCRIPTION] [OPTIONS]
310
-
311
- EXAMPLES:
312
- # Interactive mode (recommended)
313
- python manage.py app_agent_generate
314
-
315
- # Direct generation
316
- python manage.py app_agent_generate blog "A simple blog application"
317
-
318
- # With specific features
319
- python manage.py app_agent_generate shop "E-commerce shop" --features models,admin,api,tests
320
-
321
- # Advanced configuration
322
- python manage.py app_agent_generate cms "Content management" \\
323
- --complexity advanced \\
324
- --app-type django_cfg \\
325
- --max-questions 15 \\
326
- --verbose
327
-
328
- FEATURES:
329
- Available features: models, views, urls, admin, forms, templates, static,
330
- api, serializers, viewsets, filters, pagination, tests, fixtures,
331
- security, authentication, permissions, tasks, signals, middleware,
332
- management_commands, docs, services, cfg_config, cfg_modules
333
-
334
- COMPLEXITY LEVELS:
335
- simple - Basic CRUD with minimal features
336
- moderate - Standard app with common features
337
- advanced - Full-featured app with API and tests
338
- enterprise - Complete app with security and advanced features
339
-
340
- For more information, visit: https://docs.django-cfg.com/app-agent/
341
- """
342
- self.stdout.write(help_text)
@@ -1,308 +0,0 @@
1
- """
2
- Django management command for Django App Agent information.
3
-
4
- This command provides information about the Django App Agent module,
5
- its capabilities, configuration, and available commands.
6
- """
7
-
8
- import sys
9
- from pathlib import Path
10
-
11
- from django.core.management.base import BaseCommand, CommandError
12
- from django.conf import settings
13
-
14
- try:
15
- from django_cfg.modules.django_app_agent.core.config import AgentConfig
16
- from django_cfg.modules.django_app_agent.utils.logging import get_logger
17
- from django_cfg.modules.django_app_agent.models.enums import AppFeature, AppComplexity, AppType
18
- from django_cfg.modules.django_app_agent import __version__
19
- except ImportError as e:
20
- print(f"Error importing django_app_agent module: {e}")
21
- print("Make sure the django_app_agent module is properly installed.")
22
- sys.exit(1)
23
-
24
-
25
- class Command(BaseCommand):
26
- """Django management command for Django App Agent information."""
27
-
28
- help = "Show information about Django App Agent module and its capabilities"
29
-
30
- def add_arguments(self, parser):
31
- """Add command line arguments."""
32
-
33
- parser.add_argument(
34
- '--features',
35
- action='store_true',
36
- help='Show available application features'
37
- )
38
-
39
- parser.add_argument(
40
- '--config',
41
- action='store_true',
42
- help='Show current configuration'
43
- )
44
-
45
- parser.add_argument(
46
- '--commands',
47
- action='store_true',
48
- help='Show available app_agent commands'
49
- )
50
-
51
- parser.add_argument(
52
- '--examples',
53
- action='store_true',
54
- help='Show usage examples'
55
- )
56
-
57
- parser.add_argument(
58
- '--all',
59
- action='store_true',
60
- help='Show all information'
61
- )
62
-
63
- def handle(self, *args, **options):
64
- """Handle the command execution."""
65
-
66
- try:
67
- # Show header
68
- self._show_header()
69
-
70
- # Determine what to show
71
- show_all = options.get('all', False)
72
-
73
- if show_all or not any([
74
- options.get('features'),
75
- options.get('config'),
76
- options.get('commands'),
77
- options.get('examples')
78
- ]):
79
- # Show everything if no specific options or --all
80
- self._show_overview()
81
- self._show_features()
82
- self._show_commands()
83
- self._show_config()
84
- self._show_examples()
85
- else:
86
- # Show specific sections
87
- if options.get('features') or show_all:
88
- self._show_features()
89
-
90
- if options.get('config') or show_all:
91
- self._show_config()
92
-
93
- if options.get('commands') or show_all:
94
- self._show_commands()
95
-
96
- if options.get('examples') or show_all:
97
- self._show_examples()
98
-
99
- # Show footer
100
- self._show_footer()
101
-
102
- except Exception as e:
103
- raise CommandError(f"Failed to show information: {e}")
104
-
105
- def _show_header(self):
106
- """Show header information."""
107
- self.stdout.write(
108
- self.style.SUCCESS("🤖 Django App Agent - AI-Powered Application Generation")
109
- )
110
- self.stdout.write("=" * 70)
111
-
112
- try:
113
- version = __version__
114
- except:
115
- version = "Unknown"
116
-
117
- self.stdout.write(f"Version: {version}")
118
- self.stdout.write(f"Project: {getattr(settings, 'BASE_DIR', 'Unknown')}")
119
- self.stdout.write("")
120
-
121
- def _show_overview(self):
122
- """Show module overview."""
123
- self.stdout.write(self.style.HTTP_INFO("📋 Overview"))
124
- self.stdout.write("-" * 20)
125
-
126
- overview = """
127
- Django App Agent is an AI-powered module for generating Django applications
128
- with intelligent questioning, context analysis, and code generation capabilities.
129
-
130
- Key Features:
131
- • 🎯 Interactive AI-driven app generation
132
- • 🧠 Intelligent questioning system
133
- • 🏗️ Multiple application types (Django, Django-CFG)
134
- • 📊 Quality validation and reporting
135
- • 🎨 Rich terminal interface
136
- • 🔧 Extensible architecture with agent isolation
137
-
138
- The module supports 25+ application features and can generate everything
139
- from simple CRUD apps to complex enterprise applications with APIs,
140
- authentication, and advanced functionality.
141
- """
142
-
143
- self.stdout.write(overview.strip())
144
- self.stdout.write("")
145
-
146
- def _show_features(self):
147
- """Show available application features."""
148
- self.stdout.write(self.style.HTTP_INFO("🎯 Available Application Features"))
149
- self.stdout.write("-" * 40)
150
-
151
- # Group features by category
152
- feature_groups = {
153
- "Core Django": [
154
- AppFeature.MODELS, AppFeature.VIEWS, AppFeature.URLS,
155
- AppFeature.ADMIN, AppFeature.FORMS, AppFeature.TEMPLATES, AppFeature.STATIC
156
- ],
157
- "API & Serialization": [
158
- AppFeature.API, AppFeature.SERIALIZERS, AppFeature.VIEWSETS,
159
- AppFeature.FILTERS, AppFeature.PAGINATION
160
- ],
161
- "Testing & Quality": [
162
- AppFeature.TESTS, AppFeature.FIXTURES
163
- ],
164
- "Background Processing": [
165
- AppFeature.TASKS, AppFeature.SIGNALS
166
- ],
167
- "Security & Auth": [
168
- AppFeature.SECURITY, AppFeature.AUTHENTICATION, AppFeature.PERMISSIONS
169
- ],
170
- "Configuration & Management": [
171
- AppFeature.CONFIG, AppFeature.MANAGEMENT_COMMANDS,
172
- AppFeature.MIDDLEWARE, AppFeature.CONTEXT_PROCESSORS
173
- ],
174
- "Database": [
175
- AppFeature.MIGRATIONS, AppFeature.ROUTERS
176
- ],
177
- "Documentation": [
178
- AppFeature.DOCS, AppFeature.SERVICES
179
- ],
180
- "Django-CFG Specific": [
181
- AppFeature.CFG_CONFIG, AppFeature.CFG_MODULES
182
- ]
183
- }
184
-
185
- for group_name, features in feature_groups.items():
186
- self.stdout.write(f"\n{group_name}:")
187
- for feature in features:
188
- self.stdout.write(f" • {feature.value}")
189
-
190
- self.stdout.write(f"\nTotal: {len(list(AppFeature))} features available")
191
- self.stdout.write("")
192
-
193
- def _show_commands(self):
194
- """Show available app_agent commands."""
195
- self.stdout.write(self.style.HTTP_INFO("💻 Available Commands"))
196
- self.stdout.write("-" * 25)
197
-
198
- commands = [
199
- {
200
- 'name': 'app_agent_generate',
201
- 'description': 'Generate Django applications with AI assistance',
202
- 'usage': 'python manage.py app_agent_generate [app_name] [description] [options]'
203
- },
204
- {
205
- 'name': 'app_agent_diagnose',
206
- 'description': 'Diagnose problems in Django/Django-cfg projects',
207
- 'usage': 'python manage.py app_agent_diagnose [options]'
208
- },
209
- {
210
- 'name': 'app_agent_info',
211
- 'description': 'Show information about Django App Agent (this command)',
212
- 'usage': 'python manage.py app_agent_info [options]'
213
- }
214
- ]
215
-
216
- for cmd in commands:
217
- self.stdout.write(f"\n🔧 {cmd['name']}")
218
- self.stdout.write(f" {cmd['description']}")
219
- self.stdout.write(f" Usage: {cmd['usage']}")
220
-
221
- self.stdout.write("")
222
-
223
- def _show_config(self):
224
- """Show current configuration."""
225
- self.stdout.write(self.style.HTTP_INFO("⚙️ Configuration"))
226
- self.stdout.write("-" * 20)
227
-
228
- try:
229
- config = AgentConfig()
230
-
231
- self.stdout.write("Configuration Status: ✅ Loaded")
232
-
233
- # Show complexity levels
234
- self.stdout.write(f"\nComplexity Levels:")
235
- for complexity in AppComplexity:
236
- features = complexity.get_recommended_features()
237
- time_est = complexity.get_estimated_time_minutes()
238
- max_questions = complexity.get_max_questions()
239
-
240
- self.stdout.write(f" • {complexity.value}:")
241
- self.stdout.write(f" - Features: {len(features)}")
242
- self.stdout.write(f" - Est. time: {time_est} minutes")
243
- self.stdout.write(f" - Max questions: {max_questions}")
244
-
245
- # Show app types
246
- self.stdout.write(f"\nApplication Types:")
247
- for app_type in AppType:
248
- self.stdout.write(f" • {app_type.value}")
249
-
250
- except Exception as e:
251
- self.stdout.write(f"Configuration Status: ❌ Error loading config: {e}")
252
-
253
- self.stdout.write("")
254
-
255
- def _show_examples(self):
256
- """Show usage examples."""
257
- self.stdout.write(self.style.HTTP_INFO("📚 Usage Examples"))
258
- self.stdout.write("-" * 25)
259
-
260
- examples = [
261
- {
262
- 'title': 'Interactive Generation (Recommended)',
263
- 'command': 'python manage.py app_agent_generate',
264
- 'description': 'Start interactive mode with AI questioning'
265
- },
266
- {
267
- 'title': 'Quick Blog App',
268
- 'command': 'python manage.py app_agent_generate blog "A simple blog application"',
269
- 'description': 'Generate a blog app with default settings'
270
- },
271
- {
272
- 'title': 'E-commerce with Specific Features',
273
- 'command': 'python manage.py app_agent_generate shop "E-commerce shop" --features models,admin,api,tests --complexity advanced',
274
- 'description': 'Generate advanced e-commerce app with specific features'
275
- },
276
- {
277
- 'title': 'Django-CFG Module',
278
- 'command': 'python manage.py app_agent_generate analytics "Analytics module" --app-type django_cfg --complexity enterprise',
279
- 'description': 'Generate enterprise-level django-cfg module'
280
- },
281
- {
282
- 'title': 'Project Diagnosis',
283
- 'command': 'python manage.py app_agent_diagnose',
284
- 'description': 'Interactive diagnosis of project issues'
285
- },
286
- {
287
- 'title': 'Specific App Diagnosis',
288
- 'command': 'python manage.py app_agent_diagnose --app users --category auth --description "Login issues"',
289
- 'description': 'Diagnose authentication issues in users app'
290
- }
291
- ]
292
-
293
- for example in examples:
294
- self.stdout.write(f"\n📝 {example['title']}")
295
- self.stdout.write(f" Command: {example['command']}")
296
- self.stdout.write(f" Description: {example['description']}")
297
-
298
- self.stdout.write("")
299
-
300
- def _show_footer(self):
301
- """Show footer information."""
302
- self.stdout.write("=" * 70)
303
- self.stdout.write("For more information:")
304
- self.stdout.write("• Documentation: https://docs.django-cfg.com/app-agent/")
305
- self.stdout.write("• Help: python manage.py app_agent_generate --help")
306
- self.stdout.write("• Help: python manage.py app_agent_diagnose --help")
307
- self.stdout.write("")
308
- self.stdout.write("🚀 Ready to generate amazing Django applications with AI!")