django-cfg 1.3.9__py3-none-any.whl → 1.3.13__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.
- django_cfg/__init__.py +1 -1
- django_cfg/apps/accounts/admin/inlines.py +11 -5
- django_cfg/apps/payments/admin/networks_admin.py +12 -1
- django_cfg/apps/payments/admin/payments_admin.py +13 -0
- django_cfg/apps/payments/admin_interface/serializers/payment_serializers.py +62 -14
- django_cfg/apps/payments/admin_interface/templates/payments/components/payment_card.html +121 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/payment_qr_code.html +95 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/progress_bar.html +37 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/provider_stats.html +60 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_badge.html +41 -0
- django_cfg/apps/payments/admin_interface/templates/payments/components/status_overview.html +83 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_detail.html +363 -0
- django_cfg/apps/payments/admin_interface/templates/payments/payment_form.html +33 -3
- django_cfg/apps/payments/admin_interface/views/api/payments.py +102 -0
- django_cfg/apps/payments/admin_interface/views/api/webhook_admin.py +96 -45
- django_cfg/apps/payments/admin_interface/views/forms.py +5 -1
- django_cfg/apps/payments/config/__init__.py +14 -15
- django_cfg/apps/payments/config/django_cfg_integration.py +59 -1
- django_cfg/apps/payments/config/helpers.py +8 -13
- django_cfg/apps/payments/migrations/0001_initial.py +33 -46
- django_cfg/apps/payments/migrations/0002_rename_payments_un_user_id_7f6e79_idx_payments_un_user_id_8ce187_idx_and_more.py +46 -0
- django_cfg/apps/payments/migrations/0003_universalpayment_status_changed_at.py +25 -0
- django_cfg/apps/payments/models/managers/payment_managers.py +142 -25
- django_cfg/apps/payments/models/payments.py +94 -0
- django_cfg/apps/payments/services/core/base.py +4 -4
- django_cfg/apps/payments/services/core/payment_service.py +265 -38
- django_cfg/apps/payments/services/providers/base.py +209 -3
- django_cfg/apps/payments/services/providers/models/__init__.py +2 -0
- django_cfg/apps/payments/services/providers/models/base.py +25 -2
- django_cfg/apps/payments/services/providers/nowpayments/models.py +2 -2
- django_cfg/apps/payments/services/providers/nowpayments/provider.py +57 -9
- django_cfg/apps/payments/services/providers/registry.py +5 -5
- django_cfg/apps/payments/services/types/requests.py +19 -7
- django_cfg/apps/payments/signals/payment_signals.py +31 -2
- django_cfg/apps/payments/static/payments/js/api-client.js +6 -1
- django_cfg/apps/payments/static/payments/js/payment-detail.js +167 -0
- django_cfg/apps/payments/static/payments/js/payment-form.js +35 -26
- django_cfg/apps/payments/templatetags/payment_tags.py +8 -0
- django_cfg/apps/payments/urls.py +3 -2
- django_cfg/apps/payments/views/api/currencies.py +3 -0
- django_cfg/apps/payments/views/serializers/currencies.py +18 -5
- django_cfg/apps/tasks/admin/tasks_admin.py +2 -2
- django_cfg/apps/tasks/static/tasks/css/dashboard.css +68 -217
- django_cfg/apps/tasks/static/tasks/js/api.js +40 -84
- django_cfg/apps/tasks/static/tasks/js/components/DataManager.js +24 -0
- django_cfg/apps/tasks/static/tasks/js/components/TabManager.js +85 -0
- django_cfg/apps/tasks/static/tasks/js/components/TaskRenderer.js +216 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/main.mjs +245 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/overview.mjs +123 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/queues.mjs +120 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/tasks.mjs +350 -0
- django_cfg/apps/tasks/static/tasks/js/dashboard/workers.mjs +169 -0
- django_cfg/apps/tasks/tasks/__init__.py +10 -0
- django_cfg/apps/tasks/tasks/demo_tasks.py +133 -0
- django_cfg/apps/tasks/templates/tasks/components/management_actions.html +42 -45
- django_cfg/apps/tasks/templates/tasks/components/{status_cards.html → overview_content.html} +30 -11
- django_cfg/apps/tasks/templates/tasks/components/queues_content.html +19 -0
- django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +16 -10
- django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +51 -0
- django_cfg/apps/tasks/templates/tasks/components/workers_content.html +30 -0
- django_cfg/apps/tasks/templates/tasks/layout/base.html +117 -0
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +82 -0
- django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +40 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +37 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +41 -0
- django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +50 -0
- django_cfg/apps/tasks/urls.py +2 -2
- django_cfg/apps/tasks/urls_admin.py +2 -2
- django_cfg/apps/tasks/utils/__init__.py +1 -0
- django_cfg/apps/tasks/utils/simulator.py +356 -0
- django_cfg/apps/tasks/views/__init__.py +16 -0
- django_cfg/apps/tasks/views/api.py +569 -0
- django_cfg/apps/tasks/views/dashboard.py +58 -0
- django_cfg/core/integration/__init__.py +21 -0
- django_cfg/management/commands/rundramatiq_simulator.py +430 -0
- django_cfg/models/constance.py +0 -11
- django_cfg/models/payments.py +137 -3
- django_cfg/modules/django_tasks.py +54 -21
- django_cfg/registry/core.py +4 -9
- django_cfg/template_archive/django_sample.zip +0 -0
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/METADATA +2 -2
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/RECORD +85 -153
- django_cfg/apps/payments/config/constance/__init__.py +0 -22
- django_cfg/apps/payments/config/constance/config_service.py +0 -123
- django_cfg/apps/payments/config/constance/fields.py +0 -69
- django_cfg/apps/payments/config/constance/settings.py +0 -160
- django_cfg/apps/payments/migrations/0002_currency_usd_rate_currency_usd_rate_updated_at.py +0 -26
- django_cfg/apps/payments/migrations/0003_remove_provider_currency_fields.py +0 -28
- django_cfg/apps/payments/migrations/0004_add_reserved_usd_field.py +0 -30
- django_cfg/apps/tasks/static/tasks/js/dashboard.js +0 -614
- django_cfg/apps/tasks/static/tasks/js/modals.js +0 -452
- django_cfg/apps/tasks/static/tasks/js/notifications.js +0 -144
- django_cfg/apps/tasks/static/tasks/js/task-monitor.js +0 -454
- django_cfg/apps/tasks/static/tasks/js/theme.js +0 -77
- django_cfg/apps/tasks/templates/tasks/base.html +0 -96
- django_cfg/apps/tasks/templates/tasks/components/info_cards.html +0 -85
- django_cfg/apps/tasks/templates/tasks/components/overview_tab.html +0 -22
- django_cfg/apps/tasks/templates/tasks/components/queues_tab.html +0 -19
- django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -103
- django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html +0 -32
- django_cfg/apps/tasks/templates/tasks/components/workers_tab.html +0 -29
- django_cfg/apps/tasks/templates/tasks/dashboard.html +0 -29
- django_cfg/apps/tasks/views.py +0 -461
- django_cfg/management/commands/app_agent_diagnose.py +0 -470
- django_cfg/management/commands/app_agent_generate.py +0 -342
- django_cfg/management/commands/app_agent_info.py +0 -308
- django_cfg/management/commands/auto_generate.py +0 -486
- django_cfg/modules/django_app_agent/__init__.py +0 -87
- django_cfg/modules/django_app_agent/agents/__init__.py +0 -40
- django_cfg/modules/django_app_agent/agents/base/__init__.py +0 -24
- django_cfg/modules/django_app_agent/agents/base/agent.py +0 -354
- django_cfg/modules/django_app_agent/agents/base/context.py +0 -236
- django_cfg/modules/django_app_agent/agents/base/executor.py +0 -430
- django_cfg/modules/django_app_agent/agents/generation/__init__.py +0 -12
- django_cfg/modules/django_app_agent/agents/generation/app_generator/__init__.py +0 -15
- django_cfg/modules/django_app_agent/agents/generation/app_generator/config_validator.py +0 -147
- django_cfg/modules/django_app_agent/agents/generation/app_generator/main.py +0 -99
- django_cfg/modules/django_app_agent/agents/generation/app_generator/models.py +0 -32
- django_cfg/modules/django_app_agent/agents/generation/app_generator/prompt_manager.py +0 -290
- django_cfg/modules/django_app_agent/agents/interfaces.py +0 -376
- django_cfg/modules/django_app_agent/core/__init__.py +0 -33
- django_cfg/modules/django_app_agent/core/config.py +0 -300
- django_cfg/modules/django_app_agent/core/exceptions.py +0 -359
- django_cfg/modules/django_app_agent/models/__init__.py +0 -71
- django_cfg/modules/django_app_agent/models/base.py +0 -283
- django_cfg/modules/django_app_agent/models/context.py +0 -496
- django_cfg/modules/django_app_agent/models/enums.py +0 -481
- django_cfg/modules/django_app_agent/models/requests.py +0 -500
- django_cfg/modules/django_app_agent/models/responses.py +0 -585
- django_cfg/modules/django_app_agent/pytest.ini +0 -6
- django_cfg/modules/django_app_agent/services/__init__.py +0 -42
- django_cfg/modules/django_app_agent/services/app_generator/__init__.py +0 -30
- django_cfg/modules/django_app_agent/services/app_generator/ai_integration.py +0 -133
- django_cfg/modules/django_app_agent/services/app_generator/context.py +0 -40
- django_cfg/modules/django_app_agent/services/app_generator/main.py +0 -202
- django_cfg/modules/django_app_agent/services/app_generator/structure.py +0 -316
- django_cfg/modules/django_app_agent/services/app_generator/validation.py +0 -125
- django_cfg/modules/django_app_agent/services/base.py +0 -437
- django_cfg/modules/django_app_agent/services/context_builder/__init__.py +0 -34
- django_cfg/modules/django_app_agent/services/context_builder/code_extractor.py +0 -141
- django_cfg/modules/django_app_agent/services/context_builder/context_generator.py +0 -276
- django_cfg/modules/django_app_agent/services/context_builder/main.py +0 -272
- django_cfg/modules/django_app_agent/services/context_builder/models.py +0 -40
- django_cfg/modules/django_app_agent/services/context_builder/pattern_analyzer.py +0 -85
- django_cfg/modules/django_app_agent/services/project_scanner/__init__.py +0 -31
- django_cfg/modules/django_app_agent/services/project_scanner/app_discovery.py +0 -311
- django_cfg/modules/django_app_agent/services/project_scanner/main.py +0 -221
- django_cfg/modules/django_app_agent/services/project_scanner/models.py +0 -59
- django_cfg/modules/django_app_agent/services/project_scanner/pattern_detection.py +0 -94
- django_cfg/modules/django_app_agent/services/questioning_service/__init__.py +0 -28
- django_cfg/modules/django_app_agent/services/questioning_service/main.py +0 -273
- django_cfg/modules/django_app_agent/services/questioning_service/models.py +0 -111
- django_cfg/modules/django_app_agent/services/questioning_service/question_generator.py +0 -251
- django_cfg/modules/django_app_agent/services/questioning_service/response_processor.py +0 -347
- django_cfg/modules/django_app_agent/services/questioning_service/session_manager.py +0 -356
- django_cfg/modules/django_app_agent/services/report_service.py +0 -332
- django_cfg/modules/django_app_agent/services/template_manager/__init__.py +0 -18
- django_cfg/modules/django_app_agent/services/template_manager/jinja_engine.py +0 -236
- django_cfg/modules/django_app_agent/services/template_manager/main.py +0 -159
- django_cfg/modules/django_app_agent/services/template_manager/models.py +0 -36
- django_cfg/modules/django_app_agent/services/template_manager/template_loader.py +0 -100
- django_cfg/modules/django_app_agent/services/template_manager/templates/admin.py.j2 +0 -105
- django_cfg/modules/django_app_agent/services/template_manager/templates/apps.py.j2 +0 -31
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_config.py.j2 +0 -44
- django_cfg/modules/django_app_agent/services/template_manager/templates/cfg_module.py.j2 +0 -81
- django_cfg/modules/django_app_agent/services/template_manager/templates/forms.py.j2 +0 -107
- django_cfg/modules/django_app_agent/services/template_manager/templates/models.py.j2 +0 -139
- django_cfg/modules/django_app_agent/services/template_manager/templates/serializers.py.j2 +0 -91
- django_cfg/modules/django_app_agent/services/template_manager/templates/tests.py.j2 +0 -195
- django_cfg/modules/django_app_agent/services/template_manager/templates/urls.py.j2 +0 -35
- django_cfg/modules/django_app_agent/services/template_manager/templates/views.py.j2 +0 -211
- django_cfg/modules/django_app_agent/services/template_manager/variable_processor.py +0 -200
- django_cfg/modules/django_app_agent/services/validation_service/__init__.py +0 -25
- django_cfg/modules/django_app_agent/services/validation_service/django_validator.py +0 -333
- django_cfg/modules/django_app_agent/services/validation_service/main.py +0 -242
- django_cfg/modules/django_app_agent/services/validation_service/models.py +0 -66
- django_cfg/modules/django_app_agent/services/validation_service/quality_validator.py +0 -352
- django_cfg/modules/django_app_agent/services/validation_service/security_validator.py +0 -272
- django_cfg/modules/django_app_agent/services/validation_service/syntax_validator.py +0 -203
- django_cfg/modules/django_app_agent/ui/__init__.py +0 -25
- django_cfg/modules/django_app_agent/ui/cli.py +0 -419
- django_cfg/modules/django_app_agent/ui/rich_components.py +0 -622
- django_cfg/modules/django_app_agent/utils/__init__.py +0 -38
- django_cfg/modules/django_app_agent/utils/logging.py +0 -360
- django_cfg/modules/django_app_agent/utils/validation.py +0 -417
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.13.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!")
|