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,211 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Views for {{ app_name }} application.
|
3
|
-
|
4
|
-
{{ description }}
|
5
|
-
"""
|
6
|
-
|
7
|
-
from django.shortcuts import render, get_object_or_404, redirect
|
8
|
-
from django.http import HttpResponse, JsonResponse, Http404
|
9
|
-
from django.views.generic import (
|
10
|
-
ListView, DetailView, CreateView, UpdateView, DeleteView, TemplateView
|
11
|
-
)
|
12
|
-
from django.contrib import messages
|
13
|
-
from django.urls import reverse_lazy
|
14
|
-
{% if features.authentication %}
|
15
|
-
from django.contrib.auth.decorators import login_required
|
16
|
-
from django.contrib.auth.mixins import LoginRequiredMixin
|
17
|
-
{% endif %}
|
18
|
-
{% if features.permissions %}
|
19
|
-
from django.contrib.auth.mixins import PermissionRequiredMixin
|
20
|
-
{% endif %}
|
21
|
-
{% if features.forms %}
|
22
|
-
from .forms import {{ app_name|pascal_case }}Form
|
23
|
-
{% endif %}
|
24
|
-
from .models import {{ app_name|pascal_case }}Model
|
25
|
-
|
26
|
-
|
27
|
-
{% if features.function_based_views %}
|
28
|
-
{% if features.authentication %}
|
29
|
-
@login_required
|
30
|
-
{% endif %}
|
31
|
-
def {{ app_name }}_index(request):
|
32
|
-
"""Index view for {{ app_name }}."""
|
33
|
-
items = {{ app_name|pascal_case }}Model.objects.all()
|
34
|
-
{% if features.status_tracking %}
|
35
|
-
items = items.filter(status='published')
|
36
|
-
{% endif %}
|
37
|
-
|
38
|
-
context = {
|
39
|
-
'items': items,
|
40
|
-
'app_name': '{{ app_name|title_case }}',
|
41
|
-
'description': '{{ description }}'
|
42
|
-
}
|
43
|
-
return render(request, '{{ app_name }}/index.html', context)
|
44
|
-
|
45
|
-
|
46
|
-
{% if features.authentication %}
|
47
|
-
@login_required
|
48
|
-
{% endif %}
|
49
|
-
def {{ app_name }}_detail(request, pk):
|
50
|
-
"""Detail view for {{ app_name }}."""
|
51
|
-
item = get_object_or_404({{ app_name|pascal_case }}Model, pk=pk)
|
52
|
-
|
53
|
-
{% if features.status_tracking and features.authentication %}
|
54
|
-
# Only show published items to non-owners
|
55
|
-
if item.status != 'published' and item.owner != request.user:
|
56
|
-
raise Http404("Item not found")
|
57
|
-
{% endif %}
|
58
|
-
|
59
|
-
context = {
|
60
|
-
'item': item,
|
61
|
-
'app_name': '{{ app_name|title_case }}'
|
62
|
-
}
|
63
|
-
return render(request, '{{ app_name }}/detail.html', context)
|
64
|
-
{% endif %}
|
65
|
-
|
66
|
-
|
67
|
-
{% if features.class_based_views %}
|
68
|
-
class {{ app_name|pascal_case }}ListView(
|
69
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
70
|
-
ListView
|
71
|
-
):
|
72
|
-
"""List view for {{ app_name }} items."""
|
73
|
-
|
74
|
-
model = {{ app_name|pascal_case }}Model
|
75
|
-
template_name = '{{ app_name }}/list.html'
|
76
|
-
context_object_name = 'items'
|
77
|
-
paginate_by = 20
|
78
|
-
|
79
|
-
{% if features.status_tracking %}
|
80
|
-
def get_queryset(self):
|
81
|
-
"""Filter published items."""
|
82
|
-
queryset = super().get_queryset()
|
83
|
-
{% if features.authentication %}
|
84
|
-
if self.request.user.is_authenticated:
|
85
|
-
return queryset # Show all to authenticated users
|
86
|
-
{% endif %}
|
87
|
-
return queryset.filter(status='published')
|
88
|
-
{% endif %}
|
89
|
-
|
90
|
-
def get_context_data(self, **kwargs):
|
91
|
-
context = super().get_context_data(**kwargs)
|
92
|
-
context['app_name'] = '{{ app_name|title_case }}'
|
93
|
-
return context
|
94
|
-
|
95
|
-
|
96
|
-
class {{ app_name|pascal_case }}DetailView(
|
97
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
98
|
-
DetailView
|
99
|
-
):
|
100
|
-
"""Detail view for {{ app_name }} items."""
|
101
|
-
|
102
|
-
model = {{ app_name|pascal_case }}Model
|
103
|
-
template_name = '{{ app_name }}/detail.html'
|
104
|
-
context_object_name = 'item'
|
105
|
-
|
106
|
-
|
107
|
-
{% if features.crud_views %}
|
108
|
-
class {{ app_name|pascal_case }}CreateView(
|
109
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
110
|
-
{%- if features.permissions %}PermissionRequiredMixin, {% endif -%}
|
111
|
-
CreateView
|
112
|
-
):
|
113
|
-
"""Create view for {{ app_name }} items."""
|
114
|
-
|
115
|
-
model = {{ app_name|pascal_case }}Model
|
116
|
-
{% if features.forms %}
|
117
|
-
form_class = {{ app_name|pascal_case }}Form
|
118
|
-
{% else %}
|
119
|
-
fields = ['name', 'description'{% if features.status_tracking %}, 'status'{% endif %}]
|
120
|
-
{% endif %}
|
121
|
-
template_name = '{{ app_name }}/form.html'
|
122
|
-
success_url = reverse_lazy('{{ app_name }}:list')
|
123
|
-
{% if features.permissions %}
|
124
|
-
permission_required = '{{ app_name }}.add_{{ app_name|snake_case }}model'
|
125
|
-
{% endif %}
|
126
|
-
|
127
|
-
{% if features.user_relations %}
|
128
|
-
def form_valid(self, form):
|
129
|
-
form.instance.owner = self.request.user
|
130
|
-
messages.success(self.request, f'{{ app_name|title_case }} created successfully!')
|
131
|
-
return super().form_valid(form)
|
132
|
-
{% endif %}
|
133
|
-
|
134
|
-
|
135
|
-
class {{ app_name|pascal_case }}UpdateView(
|
136
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
137
|
-
{%- if features.permissions %}PermissionRequiredMixin, {% endif -%}
|
138
|
-
UpdateView
|
139
|
-
):
|
140
|
-
"""Update view for {{ app_name }} items."""
|
141
|
-
|
142
|
-
model = {{ app_name|pascal_case }}Model
|
143
|
-
{% if features.forms %}
|
144
|
-
form_class = {{ app_name|pascal_case }}Form
|
145
|
-
{% else %}
|
146
|
-
fields = ['name', 'description'{% if features.status_tracking %}, 'status'{% endif %}]
|
147
|
-
{% endif %}
|
148
|
-
template_name = '{{ app_name }}/form.html'
|
149
|
-
{% if features.permissions %}
|
150
|
-
permission_required = '{{ app_name }}.change_{{ app_name|snake_case }}model'
|
151
|
-
{% endif %}
|
152
|
-
|
153
|
-
def form_valid(self, form):
|
154
|
-
messages.success(self.request, f'{{ app_name|title_case }} updated successfully!')
|
155
|
-
return super().form_valid(form)
|
156
|
-
|
157
|
-
|
158
|
-
class {{ app_name|pascal_case }}DeleteView(
|
159
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
160
|
-
{%- if features.permissions %}PermissionRequiredMixin, {% endif -%}
|
161
|
-
DeleteView
|
162
|
-
):
|
163
|
-
"""Delete view for {{ app_name }} items."""
|
164
|
-
|
165
|
-
model = {{ app_name|pascal_case }}Model
|
166
|
-
template_name = '{{ app_name }}/confirm_delete.html'
|
167
|
-
success_url = reverse_lazy('{{ app_name }}:list')
|
168
|
-
{% if features.permissions %}
|
169
|
-
permission_required = '{{ app_name }}.delete_{{ app_name|snake_case }}model'
|
170
|
-
{% endif %}
|
171
|
-
|
172
|
-
def delete(self, request, *args, **kwargs):
|
173
|
-
messages.success(request, f'{{ app_name|title_case }} deleted successfully!')
|
174
|
-
return super().delete(request, *args, **kwargs)
|
175
|
-
{% endif %}
|
176
|
-
{% endif %}
|
177
|
-
|
178
|
-
|
179
|
-
{% if features.api_views %}
|
180
|
-
class {{ app_name|pascal_case }}APIView(
|
181
|
-
{%- if features.authentication %}LoginRequiredMixin, {% endif -%}
|
182
|
-
TemplateView
|
183
|
-
):
|
184
|
-
"""API view for {{ app_name }}."""
|
185
|
-
|
186
|
-
def get(self, request, *args, **kwargs):
|
187
|
-
"""Get {{ app_name }} data as JSON."""
|
188
|
-
items = {{ app_name|pascal_case }}Model.objects.all()
|
189
|
-
{% if features.status_tracking %}
|
190
|
-
items = items.filter(status='published')
|
191
|
-
{% endif %}
|
192
|
-
|
193
|
-
data = [
|
194
|
-
{
|
195
|
-
'id': item.pk,
|
196
|
-
'name': item.name,
|
197
|
-
'description': item.description,
|
198
|
-
{% if features.status_tracking %}
|
199
|
-
'status': item.status,
|
200
|
-
{% endif %}
|
201
|
-
'created_at': item.created_at.isoformat(),
|
202
|
-
}
|
203
|
-
for item in items[:50] # Limit to 50 items
|
204
|
-
]
|
205
|
-
|
206
|
-
return JsonResponse({
|
207
|
-
'success': True,
|
208
|
-
'data': data,
|
209
|
-
'count': len(data)
|
210
|
-
})
|
211
|
-
{% endif %}
|
@@ -1,200 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Variable Processor for Template Manager.
|
3
|
-
|
4
|
-
This module handles processing and enrichment of template variables
|
5
|
-
based on app features and context.
|
6
|
-
"""
|
7
|
-
|
8
|
-
from typing import Dict, Any, List, Set
|
9
|
-
import re
|
10
|
-
|
11
|
-
from pydantic import BaseModel, Field
|
12
|
-
|
13
|
-
from ...models.enums import AppType, AppFeature
|
14
|
-
from ...models.requests import TemplateRequest
|
15
|
-
from ..base import ServiceDependencies
|
16
|
-
|
17
|
-
|
18
|
-
class VariableProcessor(BaseModel):
|
19
|
-
"""Processes and enriches template variables."""
|
20
|
-
|
21
|
-
def __init__(self, **data):
|
22
|
-
"""Initialize variable processor."""
|
23
|
-
super().__init__(**data)
|
24
|
-
|
25
|
-
async def process_variables(
|
26
|
-
self,
|
27
|
-
request: TemplateRequest,
|
28
|
-
dependencies: ServiceDependencies
|
29
|
-
) -> Dict[str, Any]:
|
30
|
-
"""Process and enrich template variables."""
|
31
|
-
# Start with provided variables
|
32
|
-
variables = dict(request.variables)
|
33
|
-
|
34
|
-
# Add standard variables
|
35
|
-
variables.update(self._get_standard_variables(request))
|
36
|
-
|
37
|
-
# Add feature-based variables
|
38
|
-
variables.update(self._get_feature_variables(request))
|
39
|
-
|
40
|
-
# Add computed variables
|
41
|
-
variables.update(self._get_computed_variables(request, variables))
|
42
|
-
|
43
|
-
dependencies.log_operation(
|
44
|
-
"Variables processed",
|
45
|
-
total_variables=len(variables),
|
46
|
-
standard_vars=len(self._get_standard_variables(request)),
|
47
|
-
feature_vars=len(self._get_feature_variables(request))
|
48
|
-
)
|
49
|
-
|
50
|
-
return variables
|
51
|
-
|
52
|
-
def _get_standard_variables(self, request: TemplateRequest) -> Dict[str, Any]:
|
53
|
-
"""Get standard template variables."""
|
54
|
-
app_name = request.variables.get('app_name', 'myapp')
|
55
|
-
description = request.variables.get('description', f'Django application: {app_name}')
|
56
|
-
|
57
|
-
return {
|
58
|
-
'app_name': app_name,
|
59
|
-
'description': description,
|
60
|
-
'app_type': request.app_type if isinstance(request.app_type, str) else request.app_type.value,
|
61
|
-
'features': {(f.value if hasattr(f, 'value') else f): True for f in request.features},
|
62
|
-
|
63
|
-
# Name variations
|
64
|
-
'app_name_snake': self._to_snake_case(app_name),
|
65
|
-
'app_name_camel': self._to_camel_case(app_name),
|
66
|
-
'app_name_pascal': self._to_pascal_case(app_name),
|
67
|
-
'app_name_kebab': self._to_kebab_case(app_name),
|
68
|
-
'app_name_title': self._to_title_case(app_name),
|
69
|
-
|
70
|
-
# Pluralization
|
71
|
-
'app_name_plural': self._pluralize(app_name),
|
72
|
-
'app_name_singular': self._singularize(app_name),
|
73
|
-
}
|
74
|
-
|
75
|
-
def _get_feature_variables(self, request: TemplateRequest) -> Dict[str, Any]:
|
76
|
-
"""Get feature-specific variables."""
|
77
|
-
features_dict = {}
|
78
|
-
|
79
|
-
# Create feature flags
|
80
|
-
for feature in AppFeature:
|
81
|
-
features_dict[feature.value] = feature in request.features
|
82
|
-
|
83
|
-
# Add feature groups
|
84
|
-
features_dict.update({
|
85
|
-
'has_authentication': any(f in request.features for f in [
|
86
|
-
AppFeature.AUTHENTICATION, AppFeature.SECURITY
|
87
|
-
]),
|
88
|
-
'has_api': any(f in request.features for f in [
|
89
|
-
AppFeature.API, AppFeature.SERIALIZERS, AppFeature.VIEWSETS
|
90
|
-
]),
|
91
|
-
'has_admin': AppFeature.ADMIN in request.features,
|
92
|
-
'has_forms': AppFeature.FORMS in request.features,
|
93
|
-
'has_tests': AppFeature.TESTS in request.features,
|
94
|
-
'has_models': AppFeature.MODELS in request.features,
|
95
|
-
'has_views': AppFeature.VIEWS in request.features,
|
96
|
-
'has_urls': AppFeature.URLS in request.features,
|
97
|
-
|
98
|
-
# Advanced features
|
99
|
-
'has_advanced_features': any(f in request.features for f in [
|
100
|
-
AppFeature.SERIALIZERS, AppFeature.VIEWSETS, AppFeature.FILTERS,
|
101
|
-
AppFeature.PAGINATION, AppFeature.SECURITY, AppFeature.TASKS
|
102
|
-
]),
|
103
|
-
|
104
|
-
# Django-CFG specific
|
105
|
-
'is_django_cfg': request.app_type == AppType.DJANGO_CFG,
|
106
|
-
'has_cfg_features': any(f in request.features for f in [
|
107
|
-
AppFeature.CFG_CONFIG, AppFeature.CFG_MODULES
|
108
|
-
]),
|
109
|
-
})
|
110
|
-
|
111
|
-
return {'features': features_dict}
|
112
|
-
|
113
|
-
def _get_computed_variables(
|
114
|
-
self,
|
115
|
-
request: TemplateRequest,
|
116
|
-
existing_vars: Dict[str, Any]
|
117
|
-
) -> Dict[str, Any]:
|
118
|
-
"""Get computed variables based on existing variables."""
|
119
|
-
app_name = existing_vars.get('app_name', 'myapp')
|
120
|
-
|
121
|
-
computed = {
|
122
|
-
# Model class names
|
123
|
-
'model_class': f"{self._to_pascal_case(app_name)}Model",
|
124
|
-
'admin_class': f"{self._to_pascal_case(app_name)}Admin",
|
125
|
-
'form_class': f"{self._to_pascal_case(app_name)}Form",
|
126
|
-
'serializer_class': f"{self._to_pascal_case(app_name)}Serializer",
|
127
|
-
|
128
|
-
# View class names
|
129
|
-
'list_view_class': f"{self._to_pascal_case(app_name)}ListView",
|
130
|
-
'detail_view_class': f"{self._to_pascal_case(app_name)}DetailView",
|
131
|
-
'create_view_class': f"{self._to_pascal_case(app_name)}CreateView",
|
132
|
-
'update_view_class': f"{self._to_pascal_case(app_name)}UpdateView",
|
133
|
-
'delete_view_class': f"{self._to_pascal_case(app_name)}DeleteView",
|
134
|
-
|
135
|
-
# URL patterns
|
136
|
-
'url_namespace': app_name,
|
137
|
-
'url_prefix': self._to_kebab_case(app_name),
|
138
|
-
|
139
|
-
# Template paths
|
140
|
-
'template_dir': app_name,
|
141
|
-
'list_template': f"{app_name}/list.html",
|
142
|
-
'detail_template': f"{app_name}/detail.html",
|
143
|
-
'form_template': f"{app_name}/form.html",
|
144
|
-
|
145
|
-
# Database table name
|
146
|
-
'db_table': f"{app_name}_{self._to_snake_case(app_name)}model",
|
147
|
-
|
148
|
-
# Permissions
|
149
|
-
'add_permission': f"{app_name}.add_{self._to_snake_case(app_name)}model",
|
150
|
-
'change_permission': f"{app_name}.change_{self._to_snake_case(app_name)}model",
|
151
|
-
'delete_permission': f"{app_name}.delete_{self._to_snake_case(app_name)}model",
|
152
|
-
'view_permission': f"{app_name}.view_{self._to_snake_case(app_name)}model",
|
153
|
-
}
|
154
|
-
|
155
|
-
return computed
|
156
|
-
|
157
|
-
# String transformation utilities
|
158
|
-
def _to_snake_case(self, text: str) -> str:
|
159
|
-
"""Convert text to snake_case."""
|
160
|
-
s1 = re.sub('(.)([A-Z][a-z]+)', r'\1_\2', text)
|
161
|
-
s2 = re.sub('([a-z0-9])([A-Z])', r'\1_\2', s1)
|
162
|
-
return s2.lower().replace(' ', '_').replace('-', '_')
|
163
|
-
|
164
|
-
def _to_camel_case(self, text: str) -> str:
|
165
|
-
"""Convert text to camelCase."""
|
166
|
-
components = re.split(r'[_\s-]+', text.lower())
|
167
|
-
return components[0] + ''.join(word.capitalize() for word in components[1:])
|
168
|
-
|
169
|
-
def _to_pascal_case(self, text: str) -> str:
|
170
|
-
"""Convert text to PascalCase."""
|
171
|
-
components = re.split(r'[_\s-]+', text.lower())
|
172
|
-
return ''.join(word.capitalize() for word in components)
|
173
|
-
|
174
|
-
def _to_kebab_case(self, text: str) -> str:
|
175
|
-
"""Convert text to kebab-case."""
|
176
|
-
return self._to_snake_case(text).replace('_', '-')
|
177
|
-
|
178
|
-
def _to_title_case(self, text: str) -> str:
|
179
|
-
"""Convert text to Title Case."""
|
180
|
-
return text.replace('_', ' ').replace('-', ' ').title()
|
181
|
-
|
182
|
-
def _pluralize(self, text: str) -> str:
|
183
|
-
"""Simple pluralization."""
|
184
|
-
if text.endswith('y'):
|
185
|
-
return text[:-1] + 'ies'
|
186
|
-
elif text.endswith(('s', 'sh', 'ch', 'x', 'z')):
|
187
|
-
return text + 'es'
|
188
|
-
else:
|
189
|
-
return text + 's'
|
190
|
-
|
191
|
-
def _singularize(self, text: str) -> str:
|
192
|
-
"""Simple singularization."""
|
193
|
-
if text.endswith('ies'):
|
194
|
-
return text[:-3] + 'y'
|
195
|
-
elif text.endswith('es') and not text.endswith(('ses', 'ches', 'xes', 'zes')):
|
196
|
-
return text[:-2]
|
197
|
-
elif text.endswith('s') and not text.endswith('ss'):
|
198
|
-
return text[:-1]
|
199
|
-
else:
|
200
|
-
return text
|
@@ -1,25 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
Validation Service for Django App Agent Module.
|
3
|
-
|
4
|
-
This package provides comprehensive code validation including
|
5
|
-
syntax checking, Django best practices, security analysis,
|
6
|
-
and quality metrics calculation.
|
7
|
-
"""
|
8
|
-
|
9
|
-
from .main import ValidationService
|
10
|
-
from .models import ValidationRequest, ValidationResult, ValidationIssue
|
11
|
-
from .syntax_validator import SyntaxValidator
|
12
|
-
from .django_validator import DjangoValidator
|
13
|
-
from .security_validator import SecurityValidator
|
14
|
-
from .quality_validator import QualityValidator
|
15
|
-
|
16
|
-
__all__ = [
|
17
|
-
"ValidationService",
|
18
|
-
"ValidationRequest",
|
19
|
-
"ValidationResult",
|
20
|
-
"ValidationIssue",
|
21
|
-
"SyntaxValidator",
|
22
|
-
"DjangoValidator",
|
23
|
-
"SecurityValidator",
|
24
|
-
"QualityValidator",
|
25
|
-
]
|