django-spire 0.17.0__py3-none-any.whl → 0.17.1__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_spire/consts.py +1 -1
- django_spire/core/management/commands/spire_startapp_pkg/template/app/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/apps.py.template +15 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/forms.py.template +18 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/bots.py.template +18 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/intel.py.template +7 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/prompts.py.template +32 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/migrations/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/models.py.template +52 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/querysets.py.template +20 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/seed.py.template +6 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/seeder.py.template +26 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/factory_service.py.template +12 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/intelligence_service.py.template +12 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/processor_service.py.template +12 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/service.py.template +22 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/services/transformation_service.py.template +12 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_intelligence/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_intelligence/test_bots.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_models.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_factory_service.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_intelligence_service.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_processor_service.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_service.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_transformation_service.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/test_form_urls.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/test_page_urls.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/test_form_views.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/test_page_views.py.template +8 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/__init__.py.template +9 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/form_urls.py.template +15 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/page_urls.py.template +11 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/views/__init__.py.template +0 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/views/form_views.py.template +134 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/app/views/page_views.py.template +44 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${detail_card_template_name}.html.template +24 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${form_card_template_name}.html.template +9 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${list_card_template_name}.html.template +18 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/form/${form_template_name}.html.template +22 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/item/${item_template_name}.html.template +24 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${detail_page_template_name}.html.template +13 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${form_page_template_name}.html.template +13 -0
- django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${list_page_template_name}.html.template +9 -0
- {django_spire-0.17.0.dist-info → django_spire-0.17.1.dist-info}/METADATA +1 -1
- {django_spire-0.17.0.dist-info → django_spire-0.17.1.dist-info}/RECORD +55 -6
- {django_spire-0.17.0.dist-info → django_spire-0.17.1.dist-info}/WHEEL +0 -0
- {django_spire-0.17.0.dist-info → django_spire-0.17.1.dist-info}/licenses/LICENSE.md +0 -0
- {django_spire-0.17.0.dist-info → django_spire-0.17.1.dist-info}/top_level.txt +0 -0
django_spire/consts.py
CHANGED
|
File without changes
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from django.apps import AppConfig
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class ${app_config_class_name}(AppConfig):
|
|
5
|
+
default_auto_field = 'django.db.models.BigAutoField'
|
|
6
|
+
label = '${django_label}'
|
|
7
|
+
name = '${module_path}'
|
|
8
|
+
|
|
9
|
+
MODEL_PERMISSIONS = (
|
|
10
|
+
{
|
|
11
|
+
'name': '${permission_name}',
|
|
12
|
+
'model_class_path': '${model_class_path}',
|
|
13
|
+
'is_proxy_model': ${is_proxy_model}
|
|
14
|
+
},
|
|
15
|
+
)
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django import forms
|
|
6
|
+
|
|
7
|
+
from ${module_path} import models
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from typing import ClassVar
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ${form_class_name}(forms.ModelForm):
|
|
14
|
+
field = forms.JSONField(required=False)
|
|
15
|
+
|
|
16
|
+
class Meta:
|
|
17
|
+
model = models.${model_class_name}
|
|
18
|
+
exclude: ClassVar = []
|
|
File without changes
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/bots.py.template
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dandy import Bot
|
|
4
|
+
|
|
5
|
+
from ${module_path}.intelligence import intel, prompts
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class ${bot_class_name}(Bot):
|
|
9
|
+
llm_intel_class = intel.${intel_class_name}
|
|
10
|
+
llm_role = prompts.${instruction_prompt_function_name}()
|
|
11
|
+
|
|
12
|
+
def process(
|
|
13
|
+
self,
|
|
14
|
+
user_input: str
|
|
15
|
+
) -> intel.${intel_class_name}:
|
|
16
|
+
return self.llm.prompt_to_intel(
|
|
17
|
+
prompt=prompts.${user_input_prompt_function_name}(user_input)
|
|
18
|
+
)
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from dandy import Prompt
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
def ${instruction_prompt_function_name}() -> Prompt:
|
|
7
|
+
return (
|
|
8
|
+
Prompt()
|
|
9
|
+
.title('${model_verbose_name} Operations')
|
|
10
|
+
.line_break()
|
|
11
|
+
.heading('Purpose')
|
|
12
|
+
.text('This prompt provides instructions for ${model_verbose_name} operations.')
|
|
13
|
+
.line_break()
|
|
14
|
+
.heading('Instructions')
|
|
15
|
+
.ordered_list([
|
|
16
|
+
'Instruction 1',
|
|
17
|
+
'Instruction 2',
|
|
18
|
+
'Instruction 3',
|
|
19
|
+
])
|
|
20
|
+
.line_break()
|
|
21
|
+
)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def ${user_input_prompt_function_name}(user_input: str) -> Prompt:
|
|
25
|
+
return (
|
|
26
|
+
Prompt()
|
|
27
|
+
.heading('${model_verbose_name} Request')
|
|
28
|
+
.text('The user wants to perform the following operation:')
|
|
29
|
+
.text('')
|
|
30
|
+
.text(user_input)
|
|
31
|
+
.text('')
|
|
32
|
+
)
|
|
File without changes
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from django.db import models
|
|
4
|
+
from django.urls import reverse
|
|
5
|
+
|
|
6
|
+
from django_spire.contrib.breadcrumb import Breadcrumbs
|
|
7
|
+
from django_spire.history.mixins import HistoryModelMixin
|
|
8
|
+
|
|
9
|
+
from ${module_path} import querysets
|
|
10
|
+
from ${module_path}.services.service import ${service_class_name}
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ${model_class_name}(HistoryModelMixin):
|
|
14
|
+
name = models.CharField(max_length=255)
|
|
15
|
+
description = models.TextField(default='')
|
|
16
|
+
|
|
17
|
+
objects = querysets.${queryset_class_name}().as_manager()
|
|
18
|
+
services = ${service_class_name}()
|
|
19
|
+
|
|
20
|
+
def __str__(self):
|
|
21
|
+
return self.name
|
|
22
|
+
|
|
23
|
+
@classmethod
|
|
24
|
+
def base_breadcrumb(cls) -> Breadcrumbs:
|
|
25
|
+
crumbs = Breadcrumbs()
|
|
26
|
+
|
|
27
|
+
crumbs.add_breadcrumb(
|
|
28
|
+
'${model_verbose_name}',
|
|
29
|
+
reverse('${url_reverse_path}:page:list')
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
return crumbs
|
|
33
|
+
|
|
34
|
+
def breadcrumbs(self) -> Breadcrumbs:
|
|
35
|
+
crumbs = Breadcrumbs()
|
|
36
|
+
crumbs.add_base_breadcrumb(self._meta.model)
|
|
37
|
+
|
|
38
|
+
if self.pk:
|
|
39
|
+
crumbs.add_breadcrumb(
|
|
40
|
+
str(self),
|
|
41
|
+
reverse(
|
|
42
|
+
'${url_reverse_path}:page:detail',
|
|
43
|
+
kwargs={'pk': self.pk}
|
|
44
|
+
)
|
|
45
|
+
)
|
|
46
|
+
|
|
47
|
+
return crumbs
|
|
48
|
+
|
|
49
|
+
class Meta:
|
|
50
|
+
verbose_name = '${model_verbose_name}'
|
|
51
|
+
verbose_name_plural = '${model_verbose_name_plural}'
|
|
52
|
+
db_table = '${db_table_name}'
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django.db.models import Q
|
|
6
|
+
|
|
7
|
+
from django_spire.history.querysets import HistoryQuerySet
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from django.db.models import QuerySet
|
|
11
|
+
|
|
12
|
+
from ${module_path}.models import ${model_class_name}
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class ${queryset_class_name}(HistoryQuerySet):
|
|
16
|
+
def search(self, search_value: str) -> QuerySet[${model_class_name}]:
|
|
17
|
+
return self.filter(
|
|
18
|
+
Q(name__icontains=search_value) |
|
|
19
|
+
Q(description__icontains=search_value)
|
|
20
|
+
)
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/__init__.py.template
ADDED
|
File without changes
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/seeder.py.template
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.seeding import DjangoModelSeeder
|
|
6
|
+
|
|
7
|
+
from ${module_path} import models
|
|
8
|
+
|
|
9
|
+
if TYPE_CHECKING:
|
|
10
|
+
from typing import ClassVar
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class ${seeder_class_name}(DjangoModelSeeder):
|
|
14
|
+
"""https://django-spire.stratusadv.com/app_guides/seeding/overview/"""
|
|
15
|
+
|
|
16
|
+
model_class = models.${model_class_name}
|
|
17
|
+
default_to = 'faker'
|
|
18
|
+
|
|
19
|
+
fields: ClassVar = {
|
|
20
|
+
'id': 'exclude',
|
|
21
|
+
'created_datetime': 'exclude',
|
|
22
|
+
'is_active': True,
|
|
23
|
+
'is_deleted': False,
|
|
24
|
+
# 'name': ('faker', 'company'),
|
|
25
|
+
# 'status': ('faker'),
|
|
26
|
+
}
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/__init__.py.template
ADDED
|
File without changes
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.service import BaseDjangoModelService
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ${module_path}.models import ${model_class_name}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ${factory_service_class_name}(BaseDjangoModelService['${model_class_name}']):
|
|
12
|
+
obj: ${model_class_name}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.service import BaseDjangoModelService
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ${module_path}.models import ${model_class_name}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ${intelligence_service_class_name}(BaseDjangoModelService['${model_class_name}']):
|
|
12
|
+
obj: ${model_class_name}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.service import BaseDjangoModelService
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ${module_path}.models import ${model_class_name}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ${processor_service_class_name}(BaseDjangoModelService['${model_class_name}']):
|
|
12
|
+
obj: ${model_class_name}
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/service.py.template
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.service import BaseDjangoModelService
|
|
6
|
+
|
|
7
|
+
from ${module_path}.services.factory_service import ${factory_service_class_name}
|
|
8
|
+
from ${module_path}.services.intelligence_service import ${intelligence_service_class_name}
|
|
9
|
+
from ${module_path}.services.processor_service import ${processor_service_class_name}
|
|
10
|
+
from ${module_path}.services.transformation_service import ${transformation_service_class_name}
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from ${module_path}.models import ${model_class_name}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
class ${service_class_name}(BaseDjangoModelService['${model_class_name}']):
|
|
17
|
+
obj: ${model_class_name}
|
|
18
|
+
|
|
19
|
+
intelligence = ${intelligence_service_class_name}()
|
|
20
|
+
processor = ${processor_service_class_name}()
|
|
21
|
+
factory = ${factory_service_class_name}()
|
|
22
|
+
transformation = ${transformation_service_class_name}()
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django_spire.contrib.service import BaseDjangoModelService
|
|
6
|
+
|
|
7
|
+
if TYPE_CHECKING:
|
|
8
|
+
from ${module_path}.models import ${model_class_name}
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
class ${transformation_service_class_name}(BaseDjangoModelService['${model_class_name}']):
|
|
12
|
+
obj: ${model_class_name}
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/__init__.py.template
ADDED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/form_urls.py.template
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
from django.urls import path
|
|
2
|
+
|
|
3
|
+
from ${module_path}.views import form_views
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
app_name = 'form'
|
|
7
|
+
|
|
8
|
+
urlpatterns = [
|
|
9
|
+
path('create/', form_views.${create_form_view_name}, name='create'),
|
|
10
|
+
path('<int:pk>/update/', form_views.${update_form_view_name}, name='update'),
|
|
11
|
+
path('<int:pk>/delete/', form_views.${delete_form_view_name}, name='delete'),
|
|
12
|
+
path('create/modal/', form_views.${create_modal_form_view_name}, name='create_modal'),
|
|
13
|
+
path('<int:pk>/update/modal/', form_views.${update_modal_form_view_name}, name='update_modal'),
|
|
14
|
+
path('<int:pk>/delete/modal/', form_views.${delete_modal_form_view_name}, name='delete_modal'),
|
|
15
|
+
]
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/page_urls.py.template
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
from django.urls import path
|
|
2
|
+
|
|
3
|
+
from ${module_path}.views import page_views
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
app_name = 'page'
|
|
7
|
+
|
|
8
|
+
urlpatterns = [
|
|
9
|
+
path('list/', page_views.${list_page_view_name}, name='list'),
|
|
10
|
+
path('<int:pk>/detail/', page_views.${detail_page_view_name}, name='detail'),
|
|
11
|
+
]
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/__init__.py.template
ADDED
|
File without changes
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/form_views.py.template
ADDED
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django.contrib.auth.decorators import permission_required
|
|
6
|
+
from django.shortcuts import get_object_or_404, redirect
|
|
7
|
+
from django.template.response import TemplateResponse
|
|
8
|
+
from django.urls import reverse
|
|
9
|
+
|
|
10
|
+
from django_spire.contrib.form.utils import show_form_errors
|
|
11
|
+
from django_spire.contrib.generic_views import modal_views, portal_views
|
|
12
|
+
from django_spire.core.redirect.safe_redirect import safe_redirect_url
|
|
13
|
+
from django_spire.core.shortcuts import get_object_or_null_obj
|
|
14
|
+
from django_spire.history.activity.utils import add_form_activity
|
|
15
|
+
|
|
16
|
+
import django_glue as dg
|
|
17
|
+
|
|
18
|
+
from ${module_path} import forms, models
|
|
19
|
+
|
|
20
|
+
if TYPE_CHECKING:
|
|
21
|
+
from django.core.handlers.wsgi import WSGIRequest
|
|
22
|
+
from django.http import HttpResponseRedirect
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
@permission_required('${permission_prefix}.delete_${model_instance_name}')
|
|
26
|
+
def ${delete_modal_form_view_name}(request: WSGIRequest, pk: int) -> TemplateResponse:
|
|
27
|
+
${context_single_var} = get_object_or_404(models.${model_class_name}, pk=pk)
|
|
28
|
+
|
|
29
|
+
form_action = reverse(
|
|
30
|
+
'${url_reverse_path}:form:delete_modal',
|
|
31
|
+
kwargs={'pk': pk}
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
def add_activity() -> None:
|
|
35
|
+
${context_single_var}.add_activity(
|
|
36
|
+
user=request.user,
|
|
37
|
+
verb='deleted',
|
|
38
|
+
device=request.device,
|
|
39
|
+
information=f'{request.user.get_full_name()} deleted a ${model_instance_name}.'
|
|
40
|
+
)
|
|
41
|
+
|
|
42
|
+
fallback = reverse('${url_reverse_path}:page:list')
|
|
43
|
+
return_url = safe_redirect_url(request, fallback=fallback)
|
|
44
|
+
|
|
45
|
+
return modal_views.dispatch_modal_delete_form_content(
|
|
46
|
+
request,
|
|
47
|
+
obj=${context_single_var},
|
|
48
|
+
form_action=form_action,
|
|
49
|
+
activity_func=add_activity,
|
|
50
|
+
return_url=return_url,
|
|
51
|
+
)
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
@permission_required('${permission_prefix}.delete_${model_instance_name}')
|
|
55
|
+
def ${delete_form_view_name}(request: WSGIRequest, pk: int) -> TemplateResponse:
|
|
56
|
+
${context_single_var} = get_object_or_404(models.${model_class_name}, pk=pk)
|
|
57
|
+
|
|
58
|
+
return_url = request.GET.get(
|
|
59
|
+
'return_url',
|
|
60
|
+
reverse('${url_reverse_path}:page:list')
|
|
61
|
+
)
|
|
62
|
+
|
|
63
|
+
return portal_views.delete_form_view(
|
|
64
|
+
request,
|
|
65
|
+
obj=${context_single_var},
|
|
66
|
+
return_url=return_url
|
|
67
|
+
)
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
@permission_required('${permission_prefix}.add_${model_instance_name}')
|
|
71
|
+
def ${create_modal_form_view_name}(request: WSGIRequest) -> TemplateResponse:
|
|
72
|
+
return _modal_form_view(request)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
@permission_required('${permission_prefix}.change_${model_instance_name}')
|
|
76
|
+
def ${update_modal_form_view_name}(request: WSGIRequest, pk: int) -> TemplateResponse:
|
|
77
|
+
return _modal_form_view(request, pk)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def _modal_form_view(request: WSGIRequest, pk: int = 0) -> TemplateResponse:
|
|
81
|
+
${context_single_var} = get_object_or_404(models.${model_class_name}, pk=pk)
|
|
82
|
+
|
|
83
|
+
dg.glue_model_object(request, '${glue_model_key}', ${context_single_var})
|
|
84
|
+
|
|
85
|
+
context_data = {
|
|
86
|
+
'${context_single_var}': ${context_single_var}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
return TemplateResponse(
|
|
90
|
+
request,
|
|
91
|
+
context=context_data,
|
|
92
|
+
template='${template_directory_path}/modal/content/${form_template_name}'
|
|
93
|
+
)
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
@permission_required('${permission_prefix}.add_${model_instance_name}')
|
|
97
|
+
def ${create_form_view_name}(request: WSGIRequest) -> TemplateResponse:
|
|
98
|
+
return _form_view(request)
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
@permission_required('${permission_prefix}.change_${model_instance_name}')
|
|
102
|
+
def ${update_form_view_name}(request: WSGIRequest, pk: int) -> TemplateResponse:
|
|
103
|
+
return _form_view(request, pk)
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def _form_view(request: WSGIRequest, pk: int = 0) -> TemplateResponse|HttpResponseRedirect:
|
|
107
|
+
${context_single_var} = get_object_or_null_obj(models.${model_class_name}, pk=pk)
|
|
108
|
+
|
|
109
|
+
dg.glue_model_object(request, '${glue_model_key}', ${context_single_var}, 'view')
|
|
110
|
+
|
|
111
|
+
if request.method == 'POST':
|
|
112
|
+
form = forms.${form_class_name}(request.POST, instance=${context_single_var})
|
|
113
|
+
|
|
114
|
+
if form.is_valid():
|
|
115
|
+
${context_single_var} = form.save()
|
|
116
|
+
add_form_activity(${context_single_var}, pk, request.user)
|
|
117
|
+
|
|
118
|
+
return redirect(
|
|
119
|
+
request.GET.get(
|
|
120
|
+
'return_url',
|
|
121
|
+
reverse('${url_reverse_path}:page:list')
|
|
122
|
+
)
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
show_form_errors(request, form)
|
|
126
|
+
else:
|
|
127
|
+
form = forms.${form_class_name}(instance=${context_single_var})
|
|
128
|
+
|
|
129
|
+
return portal_views.form_view(
|
|
130
|
+
request,
|
|
131
|
+
form=form,
|
|
132
|
+
obj=${context_single_var},
|
|
133
|
+
template='${template_directory_path}/page/${form_page_template_name}'
|
|
134
|
+
)
|
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/page_views.py.template
ADDED
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from typing import TYPE_CHECKING
|
|
4
|
+
|
|
5
|
+
from django.contrib.auth.decorators import permission_required
|
|
6
|
+
from django.shortcuts import get_object_or_404
|
|
7
|
+
|
|
8
|
+
from django_spire.contrib.generic_views import portal_views
|
|
9
|
+
|
|
10
|
+
from ${module_path} import models
|
|
11
|
+
|
|
12
|
+
if TYPE_CHECKING:
|
|
13
|
+
from django.core.handlers.wsgi import WSGIRequest
|
|
14
|
+
from django.template.response import TemplateResponse
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
@permission_required('${permission_prefix}.view_${model_instance_name}')
|
|
18
|
+
def ${detail_page_view_name}(request: WSGIRequest, pk: int) -> TemplateResponse:
|
|
19
|
+
${context_single_var} = get_object_or_404(models.${model_class_name}, pk=pk)
|
|
20
|
+
|
|
21
|
+
context_data = {
|
|
22
|
+
'${context_single_var}': ${context_single_var},
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
return portal_views.detail_view(
|
|
26
|
+
request,
|
|
27
|
+
obj=${context_single_var},
|
|
28
|
+
context_data=context_data,
|
|
29
|
+
template='${template_directory_path}/page/${detail_page_template_name}'
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
@permission_required('${permission_prefix}.view_${model_instance_name}')
|
|
34
|
+
def ${list_page_view_name}(request: WSGIRequest) -> TemplateResponse:
|
|
35
|
+
context_data = {
|
|
36
|
+
'${context_plural_var}': models.${model_class_name}.objects.all()
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return portal_views.list_view(
|
|
40
|
+
request,
|
|
41
|
+
model=models.${model_class_name},
|
|
42
|
+
context_data=context_data,
|
|
43
|
+
template='${template_directory_path}/page/${list_page_template_name}'
|
|
44
|
+
)
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{% extends 'django_spire/card/title_card.html' %}
|
|
2
|
+
|
|
3
|
+
{% block card_title %}
|
|
4
|
+
${model_verbose_name}
|
|
5
|
+
{% endblock %}
|
|
6
|
+
|
|
7
|
+
{% block card_button %}
|
|
8
|
+
{% if perms.${permission_prefix}.change_${model_instance_name} %}
|
|
9
|
+
{% url '${url_reverse_path}:form:update' pk=${context_single_var}.pk as ${context_single_var}_edit_url %}
|
|
10
|
+
{% include 'django_spire/button/primary_dark_button.html' with button_text='Edit' button_icon='bi bi-pencil' button_href=${context_single_var}_edit_url %}
|
|
11
|
+
{% endif %}
|
|
12
|
+
{% endblock %}
|
|
13
|
+
|
|
14
|
+
{% block card_title_content %}
|
|
15
|
+
<div class="row g-3">
|
|
16
|
+
<div class="col-12">
|
|
17
|
+
{% include 'django_spire/element/attribute_element.html' with attribute_title='Name' attribute_value=${context_single_var}.name %}
|
|
18
|
+
</div>
|
|
19
|
+
|
|
20
|
+
<div class="col-12">
|
|
21
|
+
{% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=${context_single_var}.description|linebreaksbr %}
|
|
22
|
+
</div>
|
|
23
|
+
</div>
|
|
24
|
+
{% endblock %}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
{% extends 'django_spire/card/title_card.html' %}
|
|
2
|
+
|
|
3
|
+
{% block card_title %}
|
|
4
|
+
${model_verbose_name_plural}
|
|
5
|
+
{% endblock %}
|
|
6
|
+
|
|
7
|
+
{% block card_button %}
|
|
8
|
+
{% url '${url_reverse_path}:form:create' as new_${context_single_var}_url %}
|
|
9
|
+
{% include 'django_spire/button/primary_dark_button.html' with button_text='Add' button_icon='bi bi-plus' button_href=new_${context_single_var}_url %}
|
|
10
|
+
{% endblock %}
|
|
11
|
+
|
|
12
|
+
{% block card_title_content %}
|
|
13
|
+
{% for ${context_single_var} in ${context_plural_var} %}
|
|
14
|
+
{% include '${template_directory_path}/item/${item_template_name}' %}
|
|
15
|
+
{% empty %}
|
|
16
|
+
{% include 'django_spire/item/no_data_item.html' %}
|
|
17
|
+
{% endfor %}
|
|
18
|
+
{% endblock %}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
<div
|
|
2
|
+
x-data="{
|
|
3
|
+
async init() {
|
|
4
|
+
await this.${glue_model_key}.get()
|
|
5
|
+
},
|
|
6
|
+
${glue_model_key}: new ModelObjectGlue('${glue_model_key}')
|
|
7
|
+
}"
|
|
8
|
+
>
|
|
9
|
+
{% include 'django_spire/element/divider_element.html' with divider_title='Details' %}
|
|
10
|
+
|
|
11
|
+
<div class="row g-3 mb-3">
|
|
12
|
+
<div class="col-12">
|
|
13
|
+
{% include 'django_glue/form/field/char_field.html' with glue_model_field='${glue_model_key}.name' %}
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<div class="col-12">
|
|
17
|
+
{% include 'django_glue/form/field/text_field.html' with glue_model_field='${glue_model_key}.description' %}
|
|
18
|
+
</div>
|
|
19
|
+
</div>
|
|
20
|
+
</div>
|
|
21
|
+
|
|
22
|
+
{% include 'django_spire/contrib/form/button/form_submit_button.html' %}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{% extends 'django_spire/item/item.html' %}
|
|
2
|
+
|
|
3
|
+
{% block item_title %}
|
|
4
|
+
{% url '${url_reverse_path}:page:detail' pk=${context_single_var}.pk as ${context_single_var}_view_url %}
|
|
5
|
+
{% include 'django_spire/element/attribute_element.html' with attribute_title='${model_verbose_name}' attribute_value=${context_single_var}.name attribute_href=${context_single_var}_view_url %}
|
|
6
|
+
{% endblock %}
|
|
7
|
+
|
|
8
|
+
{% block item_row_content %}
|
|
9
|
+
{% include 'django_spire/element/attribute_element.html' with attribute_title='Description' attribute_value=${context_single_var}.description %}
|
|
10
|
+
{% endblock %}
|
|
11
|
+
|
|
12
|
+
{% block item_button %}
|
|
13
|
+
{% url '${url_reverse_path}:page:detail' pk=${context_single_var}.pk as ${context_single_var}_view_url %}
|
|
14
|
+
|
|
15
|
+
{% if perms.${permission_prefix}.change_${model_instance_name} %}
|
|
16
|
+
{% url '${url_reverse_path}:form:update' pk=${context_single_var}.pk as ${context_single_var}_edit_url %}
|
|
17
|
+
{% endif %}
|
|
18
|
+
|
|
19
|
+
{% if perms.${permission_prefix}.delete_${model_instance_name} %}
|
|
20
|
+
{% url '${url_reverse_path}:form:delete' pk=${context_single_var}.pk as ${context_single_var}_delete_url %}
|
|
21
|
+
{% endif %}
|
|
22
|
+
|
|
23
|
+
{% include 'django_spire/dropdown/ellipsis_dropdown.html' with view_url=${context_single_var}_view_url edit_url=${context_single_var}_edit_url delete_url=${context_single_var}_delete_url %}
|
|
24
|
+
{% endblock %}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% extends 'django_spire/page/full_page.html' %}
|
|
2
|
+
|
|
3
|
+
{% block page_content %}
|
|
4
|
+
<div class="row g-3">
|
|
5
|
+
<div class="col-12">
|
|
6
|
+
{% include '${template_directory_path}/card/${detail_card_template_name}' %}
|
|
7
|
+
</div>
|
|
8
|
+
|
|
9
|
+
<div class="col-4">
|
|
10
|
+
{% include 'history/card/activity_list_card.html' with activity_log=${context_single_var}.activity_log.prefetch_user %}
|
|
11
|
+
</div>
|
|
12
|
+
</div>
|
|
13
|
+
{% endblock %}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
{% extends 'django_spire/page/form_full_page.html' %}
|
|
2
|
+
|
|
3
|
+
{% block page_content %}
|
|
4
|
+
<form method="post">
|
|
5
|
+
{% csrf_token %}
|
|
6
|
+
|
|
7
|
+
<div class="row g-3">
|
|
8
|
+
<div class="col-12">
|
|
9
|
+
{% include '${template_directory_path}/card/${form_card_template_name}' %}
|
|
10
|
+
</div>
|
|
11
|
+
</div>
|
|
12
|
+
</form>
|
|
13
|
+
{% endblock %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-spire
|
|
3
|
-
Version: 0.17.
|
|
3
|
+
Version: 0.17.1
|
|
4
4
|
Summary: A project for Django Spire
|
|
5
5
|
Author-email: Brayden Carlson <braydenc@stratusadv.com>, Nathan Johnson <nathanj@stratusadv.com>
|
|
6
6
|
License: Copyright (c) 2024 Stratus Advanced Technologies and Contributors.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
django_spire/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
2
|
django_spire/conf.py,sha256=EYC1hXqYqheYrb_b6Q93LrSgNl91JV633E4N5j-KGTo,1012
|
|
3
|
-
django_spire/consts.py,sha256=
|
|
3
|
+
django_spire/consts.py,sha256=OZWVVkyHmTiy_6lNgmeAJAedfpjT64zQzYfPdZwTjg8,390
|
|
4
4
|
django_spire/exceptions.py,sha256=L5ndRO5ftMmh0pHkO2z_NG3LSGZviJ-dDHNT73SzTNw,48
|
|
5
5
|
django_spire/settings.py,sha256=tGxgEri3TQRBaiwX7YRcWifMf_g1xv1RznplFR6zZnI,821
|
|
6
6
|
django_spire/urls.py,sha256=mKeZszb5U4iIGqddMb5Tt5fRC72U2wABEOi6mvOfEBU,656
|
|
@@ -423,6 +423,55 @@ django_spire/core/management/commands/spire_startapp_pkg/resolver.py,sha256=-y86
|
|
|
423
423
|
django_spire/core/management/commands/spire_startapp_pkg/user_input.py,sha256=VUyY9PrqM07vRvgbVJhkC4lgNolnBik3K8S_8U9s_zM,9518
|
|
424
424
|
django_spire/core/management/commands/spire_startapp_pkg/validator.py,sha256=cVzQqaShGZ0ae-M69tHFDgXlYBmtR2Zg0zblIj55-Nc,3404
|
|
425
425
|
django_spire/core/management/commands/spire_startapp_pkg/template/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
426
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
427
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/apps.py.template,sha256=hry02l60eqkUVUraogSZ9XRoZAFqrUkJw51U0KOcBuc,393
|
|
428
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/forms.py.template,sha256=zdHsuTjk_fM2s7o0_JgcHioIZKxBcmo4vziHXYEYHmA,361
|
|
429
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/models.py.template,sha256=U5-5feDcgy63uPiuxm5mwrtsoC61ExAIyhK1c-pK3iY,1406
|
|
430
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/querysets.py.template,sha256=my06IPSuiyKw1Goj7-cAMWRIRWDSY0RFpkrmFYLwuiE,539
|
|
431
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
432
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/bots.py.template,sha256=jd6AhAhEU_e0QmIX7uMUDnvjSRJ6TU9kV8-rv2NXJ5k,472
|
|
433
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/intel.py.template,sha256=byeizQFWtrhcnEOaSIpRfm12vo1ZyhoMcH6EjxBptWU,119
|
|
434
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/intelligence/prompts.py.template,sha256=1FxXSCC5V2fQexyHWfoOsepNngxe49_tv7DEykA2xPQ,826
|
|
435
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/migrations/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
436
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
437
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/seed.py.template,sha256=M7EqfGNfjkgM6Fq4CeWhSDaD6cvbRLY_iX0pjuH57rU,146
|
|
438
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/seeding/seeder.py.template,sha256=LSSdIsbPpsXcLrRi0sSzz1NjxM-6nEtG7EGdawlLhiY,633
|
|
439
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
440
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/factory_service.py.template,sha256=yWvLFT6G0hLUOYafp9UwLmmHY0j1OYHgHfqpCZ0glso,326
|
|
441
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/intelligence_service.py.template,sha256=FHjE-Gm4bJ6V7ksb7HObo-gvB8tuceAxct7kvYM57mg,331
|
|
442
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/processor_service.py.template,sha256=IGs5kH4_tnKJLe6u30KVs-Ky1zWbUHM3EXQbAiSWR5U,328
|
|
443
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/service.py.template,sha256=aakNxhOJC4_uzz_7DSgzIMy-kKXau6lZnUrKLQqT4bg,888
|
|
444
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/services/transformation_service.py.template,sha256=KziILbCSErJLR5yet_uQPpZdjqNn_jdz61wzGkzsYLY,333
|
|
445
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
446
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_models.py.template,sha256=SI9aMtCJinF0dV_oEqhMe6T-cS_yxXpe0EJbZKZCZxY,197
|
|
447
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_intelligence/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
448
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_intelligence/test_bots.py.template,sha256=CRb3mM0PwsYhzBbjZKTtqnX6NuVWEy4GHS_VLjZ4ftg,195
|
|
449
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
450
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_factory_service.py.template,sha256=oE5XfkPYG14ol3yBrXlGgIsZX-OwCxnJfG8f2RVIDFg,207
|
|
451
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_intelligence_service.py.template,sha256=tHECog2BMvHPBvreCIS1SaLI6w9eTTZAUcP91M89878,212
|
|
452
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_processor_service.py.template,sha256=QkDbgr8_JQv71FZa_supA08KjAqP8KeWxdew8IWWJz4,209
|
|
453
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_service.py.template,sha256=_Wu60zUWEigP4laPamAv0EpzJKTNV3LTq8jIz8QpGmQ,199
|
|
454
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_services/test_transformation_service.py.template,sha256=XdQYL1abaeKHC3kCRIQOmmZ9OUW0TKr255WcRwBT6AU,214
|
|
455
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
456
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/test_form_urls.py.template,sha256=JluI4IZYqetiqOTYDi9ohSK6w8Yj8D36A9DA7zLSURo,195
|
|
457
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_urls/test_page_urls.py.template,sha256=JluI4IZYqetiqOTYDi9ohSK6w8Yj8D36A9DA7zLSURo,195
|
|
458
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
459
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/test_form_views.py.template,sha256=ZXbAwKt9jl9Wv_ho-DoBQGdhRpPXld7PFbIFWfPLCMo,196
|
|
460
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/tests/test_views/test_page_views.py.template,sha256=ZXbAwKt9jl9Wv_ho-DoBQGdhRpPXld7PFbIFWfPLCMo,196
|
|
461
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/__init__.py.template,sha256=oLUVg3_pnCtG-wRGA38vmLU7J__SIw1xUtrhi0EvlQI,252
|
|
462
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/form_urls.py.template,sha256=D2ReVjflX_ZIVU3xGJzokHWnWdwpLEfW92gAMQxo-Pw,641
|
|
463
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/urls/page_urls.py.template,sha256=f3y2mJCP92HrLMw37T7xSUc1E6Ky8ZnqiFIzJYnM3jc,262
|
|
464
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/__init__.py.template,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
465
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/form_views.py.template,sha256=KWvIdPrhfPdpvuJMHYvoUQXi1_ngUeSx28OX691JO10,4538
|
|
466
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/app/views/page_views.py.template,sha256=h1MBeRmY7c3bioVp46zHwTINtHYJ5dmCf_kmMRDUHC8,1399
|
|
467
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${detail_card_template_name}.html.template,sha256=-TtrmvKgiB5fMmVtP6ZZdg3tkkKvKdG0Z6DNtdzL1Lw,1004
|
|
468
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${form_card_template_name}.html.template,sha256=Tybi6-14YHAoXeqPFDE4ZIesCaEggPBlAP6wHJ7uzPw,236
|
|
469
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/card/${list_card_template_name}.html.template,sha256=s8w4sibmXKMmAa3OWM43OrjKUplbWAQMRxtjDgKgXk8,677
|
|
470
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/form/${form_template_name}.html.template,sha256=JDoLlUlu1TAlYV0Sqk3XqjpUcnmbt9utp94asoLH5sk,716
|
|
471
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/item/${item_template_name}.html.template,sha256=reHnBcH87yOJvCqEduAeiQ1eafqj687tBtaXO4ZJMYw,1334
|
|
472
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${detail_page_template_name}.html.template,sha256=ffmg2eNi3AIkS1hAxMgWP51qAzZ8HUuyloNEP3SXXw0,436
|
|
473
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${form_page_template_name}.html.template,sha256=JdUCGpWgCvwg328dgAkCA9b7MGTyQG2EZs_Dol8c-pM,346
|
|
474
|
+
django_spire/core/management/commands/spire_startapp_pkg/template/templates/page/${list_page_template_name}.html.template,sha256=Ve0RVvWjMU6m33wXdDv10MkDoEFKWULuu-1_BK-O4aI,254
|
|
426
475
|
django_spire/core/middleware/__init__.py,sha256=BvBwVHLVebknJkObtKk_s5OqaIJaAmnavTvnnv4TBO8,149
|
|
427
476
|
django_spire/core/middleware/maintenance.py,sha256=jJtmz69UXJBBgPkq5SNspWuER1bGfAjSnsVipYS4TF0,921
|
|
428
477
|
django_spire/core/redirect/__init__.py,sha256=ubAsz_h3ufwgNNkdtqiJQDgXc6DodE2LTUyBwi9dgkE,71
|
|
@@ -1046,8 +1095,8 @@ django_spire/theme/urls/page_urls.py,sha256=S8nkKkgbhG3XHI3uMUL-piOjXIrRkuY2UlM_
|
|
|
1046
1095
|
django_spire/theme/views/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
1047
1096
|
django_spire/theme/views/json_views.py,sha256=W1khC2K_EMbEzAFmMxC_P76_MFnkRH4-eVdodrRfAhw,1904
|
|
1048
1097
|
django_spire/theme/views/page_views.py,sha256=pHr8iekjtR99xs7w1taj35HEo133Svq1dvDD0y0VL1c,3933
|
|
1049
|
-
django_spire-0.17.
|
|
1050
|
-
django_spire-0.17.
|
|
1051
|
-
django_spire-0.17.
|
|
1052
|
-
django_spire-0.17.
|
|
1053
|
-
django_spire-0.17.
|
|
1098
|
+
django_spire-0.17.1.dist-info/licenses/LICENSE.md,sha256=tlTbOtgKoy-xAQpUk9gPeh9O4oRXCOzoWdW3jJz0wnA,1091
|
|
1099
|
+
django_spire-0.17.1.dist-info/METADATA,sha256=TRZJFfU9itNrxHhw4T0ODV43rqFJa1g7dtsk4ZZX3KQ,4936
|
|
1100
|
+
django_spire-0.17.1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1101
|
+
django_spire-0.17.1.dist-info/top_level.txt,sha256=xf3QV1e--ONkVpgMDQE9iqjQ1Vg4--_6C8wmO-KxPHQ,13
|
|
1102
|
+
django_spire-0.17.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|