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.
- django_cfg/__init__.py +1 -1
- 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.11.dist-info}/METADATA +2 -2
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/RECORD +84 -152
- 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.11.dist-info}/WHEEL +0 -0
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.3.9.dist-info → django_cfg-1.3.11.dist-info}/licenses/LICENSE +0 -0
@@ -1,486 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Auto Generation Command for Django Config Toolkit
|
3
|
-
Generate configuration files, models, and other Django components.
|
4
|
-
"""
|
5
|
-
|
6
|
-
import os
|
7
|
-
import json
|
8
|
-
from pathlib import Path
|
9
|
-
from django.core.management.base import BaseCommand
|
10
|
-
from django.core.management import call_command
|
11
|
-
from django.conf import settings
|
12
|
-
import questionary
|
13
|
-
from datetime import datetime
|
14
|
-
from django_cfg.modules.django_logger import get_logger
|
15
|
-
|
16
|
-
from django_cfg import ConfigToolkit
|
17
|
-
|
18
|
-
logger = get_logger('auto_generate')
|
19
|
-
|
20
|
-
|
21
|
-
class Command(BaseCommand):
|
22
|
-
help = 'Auto-generate configuration files and Django components'
|
23
|
-
|
24
|
-
def add_arguments(self, parser):
|
25
|
-
parser.add_argument(
|
26
|
-
'--config',
|
27
|
-
action='store_true',
|
28
|
-
help='Generate configuration files only'
|
29
|
-
)
|
30
|
-
parser.add_argument(
|
31
|
-
'--models',
|
32
|
-
action='store_true',
|
33
|
-
help='Generate model files only'
|
34
|
-
)
|
35
|
-
parser.add_argument(
|
36
|
-
'--all',
|
37
|
-
action='store_true',
|
38
|
-
help='Generate all components'
|
39
|
-
)
|
40
|
-
|
41
|
-
def handle(self, *args, **options):
|
42
|
-
logger.info("Starting auto_generate command")
|
43
|
-
if options['all']:
|
44
|
-
self.generate_all()
|
45
|
-
elif options['config']:
|
46
|
-
self.generate_config_files()
|
47
|
-
elif options['models']:
|
48
|
-
self.generate_model_files()
|
49
|
-
else:
|
50
|
-
self.show_interactive_menu()
|
51
|
-
|
52
|
-
def show_interactive_menu(self):
|
53
|
-
"""Show interactive menu with generation options"""
|
54
|
-
self.stdout.write(self.style.SUCCESS('\n🚀 Auto Generation Tool - Django Config Toolkit\n'))
|
55
|
-
|
56
|
-
choices = [
|
57
|
-
questionary.Choice('⚙️ Generate Configuration Files', value='config'),
|
58
|
-
questionary.Choice('📊 Generate Model Files', value='models'),
|
59
|
-
questionary.Choice('🔄 Generate All Components', value='all'),
|
60
|
-
questionary.Choice('📝 Generate Environment Template', value='env'),
|
61
|
-
questionary.Choice('🔧 Generate Settings Template', value='settings'),
|
62
|
-
questionary.Choice('❌ Exit', value='exit')
|
63
|
-
]
|
64
|
-
|
65
|
-
choice = questionary.select(
|
66
|
-
'Select generation option:',
|
67
|
-
choices=choices
|
68
|
-
).ask()
|
69
|
-
|
70
|
-
if choice == 'config':
|
71
|
-
self.generate_config_files()
|
72
|
-
elif choice == 'models':
|
73
|
-
self.generate_model_files()
|
74
|
-
elif choice == 'all':
|
75
|
-
self.generate_all()
|
76
|
-
elif choice == 'env':
|
77
|
-
self.generate_env_template()
|
78
|
-
elif choice == 'settings':
|
79
|
-
self.generate_settings_template()
|
80
|
-
elif choice == 'exit':
|
81
|
-
self.stdout.write('Goodbye! 👋')
|
82
|
-
return
|
83
|
-
|
84
|
-
def generate_all(self):
|
85
|
-
"""Generate all components"""
|
86
|
-
self.stdout.write(self.style.SUCCESS('🔄 Generating all components...'))
|
87
|
-
|
88
|
-
self.generate_config_files()
|
89
|
-
self.generate_model_files()
|
90
|
-
self.generate_env_template()
|
91
|
-
self.generate_settings_template()
|
92
|
-
|
93
|
-
self.stdout.write(self.style.SUCCESS('✅ All components generated!'))
|
94
|
-
|
95
|
-
def generate_config_files(self):
|
96
|
-
"""Generate configuration files"""
|
97
|
-
self.stdout.write(self.style.SUCCESS('⚙️ Generating configuration files...'))
|
98
|
-
|
99
|
-
# Generate config.py
|
100
|
-
self.generate_config_py()
|
101
|
-
|
102
|
-
# Generate database config
|
103
|
-
self.generate_database_config()
|
104
|
-
|
105
|
-
# Generate security config
|
106
|
-
self.generate_security_config()
|
107
|
-
|
108
|
-
self.stdout.write(self.style.SUCCESS('✅ Configuration files generated!'))
|
109
|
-
|
110
|
-
def generate_model_files(self):
|
111
|
-
"""Generate model files"""
|
112
|
-
self.stdout.write(self.style.SUCCESS('📊 Generating model files...'))
|
113
|
-
|
114
|
-
# Generate base models
|
115
|
-
self.generate_base_models()
|
116
|
-
|
117
|
-
# Generate API models
|
118
|
-
self.generate_api_models()
|
119
|
-
|
120
|
-
self.stdout.write(self.style.SUCCESS('✅ Model files generated!'))
|
121
|
-
|
122
|
-
def generate_config_py(self):
|
123
|
-
"""Generate main config.py file"""
|
124
|
-
config_content = '''"""
|
125
|
-
Configuration file for Django Config Toolkit
|
126
|
-
Auto-generated configuration with smart defaults.
|
127
|
-
"""
|
128
|
-
|
129
|
-
from django_cfg import ConfigToolkit
|
130
|
-
|
131
|
-
# Initialize configuration
|
132
|
-
config = ConfigToolkit()
|
133
|
-
|
134
|
-
# Export all settings
|
135
|
-
globals().update(config.get_django_settings())
|
136
|
-
|
137
|
-
# Type-safe access to configuration
|
138
|
-
DEBUG = config.debug
|
139
|
-
SECRET_KEY = config.secret_key
|
140
|
-
DATABASE_URL = config.database_url
|
141
|
-
ALLOWED_HOSTS = config.allowed_hosts
|
142
|
-
'''
|
143
|
-
|
144
|
-
config_path = Path('config.py')
|
145
|
-
if not config_path.exists():
|
146
|
-
with open(config_path, 'w') as f:
|
147
|
-
f.write(config_content)
|
148
|
-
self.stdout.write(f' 📄 Created {config_path}')
|
149
|
-
|
150
|
-
def generate_database_config(self):
|
151
|
-
"""Generate database configuration"""
|
152
|
-
db_config_content = '''"""
|
153
|
-
Database Configuration
|
154
|
-
Auto-generated database settings.
|
155
|
-
"""
|
156
|
-
|
157
|
-
from django_cfg import DatabaseConfig
|
158
|
-
|
159
|
-
# Database configuration
|
160
|
-
db_config = DatabaseConfig(
|
161
|
-
database_url="sqlite:///db.sqlite3",
|
162
|
-
max_connections=20,
|
163
|
-
conn_max_age=600,
|
164
|
-
conn_health_checks=True,
|
165
|
-
ssl_require=False,
|
166
|
-
ssl_mode="prefer",
|
167
|
-
query_timeout=30,
|
168
|
-
)
|
169
|
-
|
170
|
-
# Additional databases (uncomment and configure as needed)
|
171
|
-
# db_config.read_replica_url = "postgresql://user:pass@host:port/db"
|
172
|
-
# db_config.cache_db_url = "redis://localhost:6379/1"
|
173
|
-
# db_config.analytics_db_url = "postgresql://user:pass@host:port/analytics"
|
174
|
-
|
175
|
-
# Export database settings
|
176
|
-
globals().update(db_config.to_django_settings())
|
177
|
-
'''
|
178
|
-
|
179
|
-
db_config_path = Path('database_config.py')
|
180
|
-
if not db_config_path.exists():
|
181
|
-
with open(db_config_path, 'w') as f:
|
182
|
-
f.write(db_config_content)
|
183
|
-
self.stdout.write(f' 📄 Created {db_config_path}')
|
184
|
-
|
185
|
-
def generate_security_config(self):
|
186
|
-
"""Generate security configuration"""
|
187
|
-
security_config_content = '''"""
|
188
|
-
Security Configuration
|
189
|
-
Auto-generated security settings.
|
190
|
-
"""
|
191
|
-
|
192
|
-
from django_cfg import SecurityConfig
|
193
|
-
|
194
|
-
# Security configuration
|
195
|
-
security_config = SecurityConfig(
|
196
|
-
secret_key="your-secret-key-here",
|
197
|
-
debug=False,
|
198
|
-
allowed_hosts=["localhost", "127.0.0.1"],
|
199
|
-
csrf_trusted_origins=["http://localhost:3000"],
|
200
|
-
cors_allowed_origins=["http://localhost:3000"],
|
201
|
-
cors_allowed_methods=["GET", "POST", "PUT", "DELETE"],
|
202
|
-
cors_allowed_headers=["*"],
|
203
|
-
)
|
204
|
-
|
205
|
-
# Export security settings
|
206
|
-
globals().update(security_config.to_django_settings())
|
207
|
-
'''
|
208
|
-
|
209
|
-
security_config_path = Path('security_config.py')
|
210
|
-
if not security_config_path.exists():
|
211
|
-
with open(security_config_path, 'w') as f:
|
212
|
-
f.write(security_config_content)
|
213
|
-
self.stdout.write(f' 📄 Created {security_config_path}')
|
214
|
-
|
215
|
-
def generate_base_models(self):
|
216
|
-
"""Generate base model files"""
|
217
|
-
base_models_content = '''"""
|
218
|
-
Base Models
|
219
|
-
Auto-generated base model classes.
|
220
|
-
"""
|
221
|
-
|
222
|
-
from django.db import models
|
223
|
-
from django.utils import timezone
|
224
|
-
|
225
|
-
|
226
|
-
class BaseModel(models.Model):
|
227
|
-
"""Base model with common fields."""
|
228
|
-
|
229
|
-
created_at = models.DateTimeField(auto_now_add=True)
|
230
|
-
updated_at = models.DateTimeField(auto_now=True)
|
231
|
-
is_active = models.BooleanField(default=True)
|
232
|
-
|
233
|
-
class Meta:
|
234
|
-
abstract = True
|
235
|
-
|
236
|
-
def __str__(self):
|
237
|
-
return f"{self.__class__.__name__} {self.id}"
|
238
|
-
|
239
|
-
|
240
|
-
class TimestampedModel(BaseModel):
|
241
|
-
"""Model with timestamps."""
|
242
|
-
|
243
|
-
created_by = models.ForeignKey(
|
244
|
-
'auth.User',
|
245
|
-
on_delete=models.SET_NULL,
|
246
|
-
null=True,
|
247
|
-
blank=True,
|
248
|
-
related_name='%(class)s_created'
|
249
|
-
)
|
250
|
-
updated_by = models.ForeignKey(
|
251
|
-
'auth.User',
|
252
|
-
on_delete=models.SET_NULL,
|
253
|
-
null=True,
|
254
|
-
blank=True,
|
255
|
-
related_name='%(class)s_updated'
|
256
|
-
)
|
257
|
-
|
258
|
-
class Meta:
|
259
|
-
abstract = True
|
260
|
-
'''
|
261
|
-
|
262
|
-
base_models_path = Path('models/base.py')
|
263
|
-
base_models_path.parent.mkdir(exist_ok=True)
|
264
|
-
|
265
|
-
if not base_models_path.exists():
|
266
|
-
with open(base_models_path, 'w') as f:
|
267
|
-
f.write(base_models_content)
|
268
|
-
self.stdout.write(f' 📄 Created {base_models_path}')
|
269
|
-
|
270
|
-
def generate_api_models(self):
|
271
|
-
"""Generate API model files"""
|
272
|
-
api_models_content = '''"""
|
273
|
-
API Models
|
274
|
-
Auto-generated API model classes.
|
275
|
-
"""
|
276
|
-
|
277
|
-
from django.db import models
|
278
|
-
from .base import BaseModel
|
279
|
-
|
280
|
-
|
281
|
-
class APIModel(BaseModel):
|
282
|
-
"""Base model for API resources."""
|
283
|
-
|
284
|
-
name = models.CharField(max_length=255)
|
285
|
-
description = models.TextField(blank=True)
|
286
|
-
slug = models.SlugField(max_length=255, unique=True)
|
287
|
-
|
288
|
-
class Meta:
|
289
|
-
abstract = True
|
290
|
-
|
291
|
-
def __str__(self):
|
292
|
-
return self.name
|
293
|
-
|
294
|
-
|
295
|
-
class ConfigModel(APIModel):
|
296
|
-
"""Configuration model for storing settings."""
|
297
|
-
|
298
|
-
key = models.CharField(max_length=255, unique=True)
|
299
|
-
value = models.JSONField()
|
300
|
-
value_type = models.CharField(
|
301
|
-
max_length=50,
|
302
|
-
choices=[
|
303
|
-
('string', 'String'),
|
304
|
-
('integer', 'Integer'),
|
305
|
-
('float', 'Float'),
|
306
|
-
('boolean', 'Boolean'),
|
307
|
-
('json', 'JSON'),
|
308
|
-
],
|
309
|
-
default='string'
|
310
|
-
)
|
311
|
-
|
312
|
-
class Meta:
|
313
|
-
verbose_name = 'Configuration'
|
314
|
-
verbose_name_plural = 'Configurations'
|
315
|
-
'''
|
316
|
-
|
317
|
-
api_models_path = Path('models/api.py')
|
318
|
-
api_models_path.parent.mkdir(exist_ok=True)
|
319
|
-
|
320
|
-
if not api_models_path.exists():
|
321
|
-
with open(api_models_path, 'w') as f:
|
322
|
-
f.write(api_models_content)
|
323
|
-
self.stdout.write(f' 📄 Created {api_models_path}')
|
324
|
-
|
325
|
-
def generate_env_template(self):
|
326
|
-
"""Generate environment template file"""
|
327
|
-
env_template_content = '''# Environment Configuration Template
|
328
|
-
# Copy this file to .env and configure your settings
|
329
|
-
|
330
|
-
# Django Settings
|
331
|
-
DEBUG=True
|
332
|
-
SECRET_KEY=your-secret-key-here
|
333
|
-
ALLOWED_HOSTS=localhost,127.0.0.1
|
334
|
-
|
335
|
-
# Database Settings
|
336
|
-
DATABASE_URL=sqlite:///db.sqlite3
|
337
|
-
# DATABASE_URL=postgresql://user:password@localhost:5432/dbname
|
338
|
-
# DATABASE_URL=mysql://user:password@localhost:3306/dbname
|
339
|
-
|
340
|
-
# Additional Databases (optional)
|
341
|
-
# DATABASE_URL_CARS=postgresql://user:password@localhost:5432/cars_db
|
342
|
-
# DATABASE_URL_ANALYTICS=postgresql://user:password@localhost:5432/analytics_db
|
343
|
-
# DATABASE_URL_CACHE=redis://localhost:6379/1
|
344
|
-
|
345
|
-
# Email Settings
|
346
|
-
EMAIL_BACKEND=django.core.mail.backends.console.EmailBackend
|
347
|
-
EMAIL_HOST=smtp.gmail.com
|
348
|
-
EMAIL_PORT=587
|
349
|
-
EMAIL_USE_TLS=True
|
350
|
-
EMAIL_HOST_USER=your-email@gmail.com
|
351
|
-
EMAIL_HOST_PASSWORD=your-app-password
|
352
|
-
|
353
|
-
# Cache Settings
|
354
|
-
CACHE_BACKEND=django.core.cache.backends.locmem.LocMemCache
|
355
|
-
# CACHE_BACKEND=django.core.cache.backends.redis.RedisCache
|
356
|
-
# CACHE_LOCATION=redis://127.0.0.1:6379/1
|
357
|
-
|
358
|
-
# Security Settings
|
359
|
-
CSRF_TRUSTED_ORIGINS=http://localhost:3000
|
360
|
-
CORS_ALLOWED_ORIGINS=http://localhost:3000
|
361
|
-
|
362
|
-
# API Settings
|
363
|
-
API_KEY=your-api-key-here
|
364
|
-
API_RATE_LIMIT=1000
|
365
|
-
|
366
|
-
# Logging Settings
|
367
|
-
LOG_LEVEL=INFO
|
368
|
-
LOG_FILE=logs/app.log
|
369
|
-
'''
|
370
|
-
|
371
|
-
env_template_path = Path('.env.template')
|
372
|
-
if not env_template_path.exists():
|
373
|
-
with open(env_template_path, 'w') as f:
|
374
|
-
f.write(env_template_content)
|
375
|
-
self.stdout.write(f' 📄 Created {env_template_path}')
|
376
|
-
|
377
|
-
def generate_settings_template(self):
|
378
|
-
"""Generate Django settings template"""
|
379
|
-
settings_template_content = '''"""
|
380
|
-
Django Settings Template
|
381
|
-
Auto-generated Django settings with Django Config Toolkit.
|
382
|
-
"""
|
383
|
-
|
384
|
-
import os
|
385
|
-
from pathlib import Path
|
386
|
-
|
387
|
-
# Build paths inside the project like this: BASE_DIR / 'subdir'.
|
388
|
-
BASE_DIR = Path(__file__).resolve().parent.parent
|
389
|
-
|
390
|
-
# Import configuration from Django Config Toolkit
|
391
|
-
from django_cfg import ConfigToolkit
|
392
|
-
|
393
|
-
# Initialize configuration
|
394
|
-
config = ConfigToolkit()
|
395
|
-
|
396
|
-
# Export all settings
|
397
|
-
globals().update(config.get_django_settings())
|
398
|
-
|
399
|
-
# Application definition
|
400
|
-
INSTALLED_APPS = [
|
401
|
-
'django.contrib.admin',
|
402
|
-
'django.contrib.auth',
|
403
|
-
'django.contrib.contenttypes',
|
404
|
-
'django.contrib.sessions',
|
405
|
-
'django.contrib.messages',
|
406
|
-
'django.contrib.staticfiles',
|
407
|
-
|
408
|
-
# Third party apps
|
409
|
-
'rest_framework',
|
410
|
-
'corsheaders',
|
411
|
-
'django_cfg',
|
412
|
-
|
413
|
-
# Local apps
|
414
|
-
# Add your apps here
|
415
|
-
]
|
416
|
-
|
417
|
-
MIDDLEWARE = [
|
418
|
-
'corsheaders.middleware.CorsMiddleware',
|
419
|
-
'django.middleware.security.SecurityMiddleware',
|
420
|
-
'django.contrib.sessions.middleware.SessionMiddleware',
|
421
|
-
'django.middleware.common.CommonMiddleware',
|
422
|
-
'django.middleware.csrf.CsrfViewMiddleware',
|
423
|
-
'django.contrib.auth.middleware.AuthenticationMiddleware',
|
424
|
-
'django.contrib.messages.middleware.MessageMiddleware',
|
425
|
-
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
426
|
-
]
|
427
|
-
|
428
|
-
ROOT_URLCONF = 'project.urls'
|
429
|
-
|
430
|
-
TEMPLATES = [
|
431
|
-
{
|
432
|
-
'BACKEND': 'django.template.backends.django.DjangoTemplates',
|
433
|
-
'DIRS': [BASE_DIR / 'templates'],
|
434
|
-
'APP_DIRS': True,
|
435
|
-
'OPTIONS': {
|
436
|
-
'context_processors': [
|
437
|
-
'django.template.context_processors.debug',
|
438
|
-
'django.template.context_processors.request',
|
439
|
-
'django.contrib.auth.context_processors.auth',
|
440
|
-
'django.contrib.messages.context_processors.messages',
|
441
|
-
],
|
442
|
-
},
|
443
|
-
},
|
444
|
-
]
|
445
|
-
|
446
|
-
WSGI_APPLICATION = 'project.wsgi.application'
|
447
|
-
|
448
|
-
# Static files (CSS, JavaScript, Images)
|
449
|
-
STATIC_URL = '/static/'
|
450
|
-
STATIC_ROOT = BASE_DIR / 'staticfiles'
|
451
|
-
STATICFILES_DIRS = [BASE_DIR / 'static']
|
452
|
-
|
453
|
-
# Media files
|
454
|
-
MEDIA_URL = '/media/'
|
455
|
-
MEDIA_ROOT = BASE_DIR / 'media'
|
456
|
-
|
457
|
-
# Default primary key field type
|
458
|
-
DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'
|
459
|
-
|
460
|
-
# REST Framework settings
|
461
|
-
REST_FRAMEWORK = {
|
462
|
-
'DEFAULT_AUTHENTICATION_CLASSES': [
|
463
|
-
'rest_framework.authentication.SessionAuthentication',
|
464
|
-
'rest_framework.authentication.TokenAuthentication',
|
465
|
-
],
|
466
|
-
'DEFAULT_PERMISSION_CLASSES': [
|
467
|
-
'rest_framework.permissions.IsAuthenticated',
|
468
|
-
],
|
469
|
-
'DEFAULT_PAGINATION_CLASS': 'rest_framework.pagination.PageNumberPagination',
|
470
|
-
'PAGE_SIZE': 20,
|
471
|
-
}
|
472
|
-
|
473
|
-
# Health check URLs
|
474
|
-
HEALTH_CHECK_URLS = [
|
475
|
-
'health/',
|
476
|
-
'health/detailed/',
|
477
|
-
'ready/',
|
478
|
-
'alive/',
|
479
|
-
]
|
480
|
-
'''
|
481
|
-
|
482
|
-
settings_template_path = Path('settings_template.py')
|
483
|
-
if not settings_template_path.exists():
|
484
|
-
with open(settings_template_path, 'w') as f:
|
485
|
-
f.write(settings_template_content)
|
486
|
-
self.stdout.write(f' 📄 Created {settings_template_path}')
|
@@ -1,87 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Django App Agent Module - AI-Powered Django Application Generator.
|
3
|
-
|
4
|
-
This module provides intelligent Django application generation using AI agents
|
5
|
-
with infrastructure-aware code generation and intelligent questioning systems.
|
6
|
-
|
7
|
-
Key Features:
|
8
|
-
- AI-powered code generation with Pydantic AI
|
9
|
-
- Infrastructure-aware pattern recognition
|
10
|
-
- Intelligent questioning for requirement gathering
|
11
|
-
- Type-safe everything with Pydantic 2
|
12
|
-
- Rich CLI interface with progress tracking
|
13
|
-
- Multi-agent orchestration for complex workflows
|
14
|
-
|
15
|
-
Usage:
|
16
|
-
from django_cfg.modules.django_app_agent import AppGeneratorService
|
17
|
-
|
18
|
-
service = AppGeneratorService()
|
19
|
-
result = await service.generate_app(request)
|
20
|
-
"""
|
21
|
-
|
22
|
-
from typing import TYPE_CHECKING
|
23
|
-
|
24
|
-
# Version information
|
25
|
-
__version__ = "0.4.0"
|
26
|
-
__author__ = "Django-CFG Team"
|
27
|
-
__email__ = "team@django-cfg.dev"
|
28
|
-
|
29
|
-
# Module metadata
|
30
|
-
__title__ = "Django App Agent"
|
31
|
-
__description__ = "AI-Powered Django Application Generator"
|
32
|
-
__url__ = "https://github.com/django-cfg/django-cfg"
|
33
|
-
__license__ = "MIT"
|
34
|
-
|
35
|
-
# Public API exports (lazy loading for performance)
|
36
|
-
if TYPE_CHECKING:
|
37
|
-
from .services.app_generator import AppGeneratorService
|
38
|
-
from .services.questioning_service import QuestioningService
|
39
|
-
from .services.diagnostic_service import DiagnosticService
|
40
|
-
from .models.requests import AppGenerationRequest
|
41
|
-
from .models.responses import AppGenerationResult
|
42
|
-
from .core.exceptions import (
|
43
|
-
DjangoAppAgentError,
|
44
|
-
GenerationError,
|
45
|
-
ValidationError,
|
46
|
-
ConfigurationError
|
47
|
-
)
|
48
|
-
|
49
|
-
__all__ = [
|
50
|
-
# Services
|
51
|
-
"AppGeneratorService",
|
52
|
-
"QuestioningService",
|
53
|
-
"DiagnosticService",
|
54
|
-
|
55
|
-
# Models
|
56
|
-
"AppGenerationRequest",
|
57
|
-
"AppGenerationResult",
|
58
|
-
|
59
|
-
# Exceptions
|
60
|
-
"DjangoAppAgentError",
|
61
|
-
"GenerationError",
|
62
|
-
"ValidationError",
|
63
|
-
"ConfigurationError",
|
64
|
-
|
65
|
-
# Metadata
|
66
|
-
"__version__",
|
67
|
-
"__author__",
|
68
|
-
"__title__",
|
69
|
-
"__description__",
|
70
|
-
]
|
71
|
-
|
72
|
-
|
73
|
-
def get_version() -> str:
|
74
|
-
"""Get the current version of Django App Agent Module."""
|
75
|
-
return __version__
|
76
|
-
|
77
|
-
|
78
|
-
def get_info() -> dict[str, str]:
|
79
|
-
"""Get module information."""
|
80
|
-
return {
|
81
|
-
"title": __title__,
|
82
|
-
"version": __version__,
|
83
|
-
"description": __description__,
|
84
|
-
"author": __author__,
|
85
|
-
"url": __url__,
|
86
|
-
"license": __license__,
|
87
|
-
}
|
@@ -1,40 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
AI Agents for Django App Agent Module.
|
3
|
-
|
4
|
-
This module contains specialized AI agents for:
|
5
|
-
- Code generation and analysis
|
6
|
-
- Intelligent questioning
|
7
|
-
- Quality validation
|
8
|
-
- Diagnostic problem solving
|
9
|
-
- Orchestration and coordination
|
10
|
-
"""
|
11
|
-
|
12
|
-
from .base import DjangoAgent, AgentExecutor, AgentContext
|
13
|
-
from .interfaces import AgentRegistry, AgentClientFactory
|
14
|
-
|
15
|
-
# TODO: Import specialized agents when they are implemented
|
16
|
-
# from .generation import AppGeneratorAgent
|
17
|
-
# from .analysis import CodeAnalysisAgent, ProjectAnalysisAgent
|
18
|
-
# from .validation import QualityValidationAgent, SecurityValidationAgent
|
19
|
-
# from .dialogue import DialogueAgent, QuestioningAgent
|
20
|
-
# from .diagnostic import DiagnosticAgent, ProblemSolverAgent
|
21
|
-
|
22
|
-
__all__ = [
|
23
|
-
# Base classes
|
24
|
-
"DjangoAgent",
|
25
|
-
"AgentExecutor",
|
26
|
-
"AgentContext",
|
27
|
-
"AgentRegistry",
|
28
|
-
"AgentClientFactory",
|
29
|
-
|
30
|
-
# TODO: Add specialized agents when implemented
|
31
|
-
# "AppGeneratorAgent",
|
32
|
-
# "CodeAnalysisAgent",
|
33
|
-
# "ProjectAnalysisAgent",
|
34
|
-
# "QualityValidationAgent",
|
35
|
-
# "SecurityValidationAgent",
|
36
|
-
# "DialogueAgent",
|
37
|
-
# "QuestioningAgent",
|
38
|
-
# "DiagnosticAgent",
|
39
|
-
# "ProblemSolverAgent",
|
40
|
-
]
|
@@ -1,24 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Base classes for Django App Agent AI agents.
|
3
|
-
|
4
|
-
This module provides foundational classes for all AI agents:
|
5
|
-
- DjangoAgent: Base class with django-cfg integration
|
6
|
-
- AgentContext: Context management for agent execution
|
7
|
-
- AgentExecutor: Execution management and orchestration
|
8
|
-
"""
|
9
|
-
|
10
|
-
from .agent import DjangoAgent, SimpleTextAgent, create_simple_agent
|
11
|
-
from .context import AgentContext, AgentDependencies, create_agent_dependencies
|
12
|
-
from .executor import AgentExecutor, ExecutionResult, ExecutionStatus
|
13
|
-
|
14
|
-
__all__ = [
|
15
|
-
"DjangoAgent",
|
16
|
-
"SimpleTextAgent",
|
17
|
-
"create_simple_agent",
|
18
|
-
"AgentContext",
|
19
|
-
"AgentDependencies",
|
20
|
-
"create_agent_dependencies",
|
21
|
-
"AgentExecutor",
|
22
|
-
"ExecutionResult",
|
23
|
-
"ExecutionStatus",
|
24
|
-
]
|