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