django-cfg 1.4.88__py3-none-any.whl → 1.4.89__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.

Potentially problematic release.


This version of django-cfg might be problematic. Click here for more details.

Files changed (146) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/centrifugo/views/__init__.py +0 -2
  3. django_cfg/apps/dashboard/services/__init__.py +2 -0
  4. django_cfg/apps/dashboard/services/overview_service.py +205 -0
  5. django_cfg/apps/frontend/test_routing.py +134 -0
  6. django_cfg/apps/frontend/views.py +69 -28
  7. django_cfg/apps/urls.py +0 -1
  8. django_cfg/core/builders/apps_builder.py +0 -58
  9. django_cfg/modules/django_unfold/__init__.py +5 -24
  10. django_cfg/modules/django_unfold/models/__init__.py +0 -23
  11. django_cfg/modules/django_unfold/models/config.py +11 -65
  12. django_cfg/modules/django_unfold/{dashboard.py → navigation.py} +21 -152
  13. django_cfg/modules/django_unfold/tailwind.py +2 -4
  14. django_cfg/pyproject.toml +1 -1
  15. django_cfg/registry/third_party.py +0 -9
  16. django_cfg/routing/callbacks.py +1 -43
  17. django_cfg/static/frontend/admin/404/index.html +1 -1
  18. django_cfg/static/frontend/admin/404.html +1 -1
  19. django_cfg/static/frontend/admin/500/index.html +1 -1
  20. django_cfg/static/frontend/admin/_next/static/{D_d9HRw5Yn7BRHAX5q89_ → 0sN9ktsgXH48ygtGSrhfu}/_buildManifest.js +1 -1
  21. django_cfg/static/frontend/admin/_next/static/chunks/50314-9443faa6df24aebf.js +1 -0
  22. django_cfg/static/frontend/admin/_next/static/chunks/pages/{_app-1c0fff0f59a6d683.js → _app-c7dcd3aa616fab68.js} +1 -1
  23. django_cfg/static/frontend/admin/_next/static/chunks/pages/private/{centrifugo-44a8313fa040e9ad.js → centrifugo-f9ecbc3ae0052a03.js} +1 -1
  24. django_cfg/static/frontend/admin/auth/index.html +1 -1
  25. django_cfg/static/frontend/admin/index.html +1 -1
  26. django_cfg/static/frontend/admin/legal/cookies/index.html +1 -1
  27. django_cfg/static/frontend/admin/legal/privacy/index.html +1 -1
  28. django_cfg/static/frontend/admin/legal/security/index.html +1 -1
  29. django_cfg/static/frontend/admin/legal/terms/index.html +1 -1
  30. django_cfg/static/frontend/admin/private/centrifugo/index.html +1 -1
  31. django_cfg/static/frontend/admin/private/index.html +1 -1
  32. django_cfg/static/frontend/admin/private/profile/index.html +1 -1
  33. django_cfg/static/frontend/admin/private/ui/index.html +2 -2
  34. {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/METADATA +1 -1
  35. {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/RECORD +39 -143
  36. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/css/dashboard.css +0 -260
  37. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_channels.mjs +0 -313
  38. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_testing.mjs +0 -803
  39. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/main.mjs +0 -341
  40. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/overview.mjs +0 -432
  41. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/testing.mjs +0 -33
  42. django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/websocket.mjs +0 -210
  43. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/channels_content.html +0 -46
  44. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/live_channels_content.html +0 -123
  45. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/overview_content.html +0 -45
  46. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/publishes_content.html +0 -84
  47. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/stat_cards.html +0 -53
  48. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/system_status.html +0 -91
  49. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/tab_navigation.html +0 -29
  50. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/components/testing_tools.html +0 -415
  51. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/layout/base.html +0 -61
  52. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/pages/dashboard.html +0 -58
  53. django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/tags/connection_script.html +0 -48
  54. django_cfg/apps/centrifugo/templatetags/__init__.py +0 -1
  55. django_cfg/apps/centrifugo/templatetags/centrifugo_tags.py +0 -81
  56. django_cfg/apps/centrifugo/urls_admin.py +0 -20
  57. django_cfg/apps/centrifugo/views/dashboard.py +0 -28
  58. django_cfg/modules/django_dashboard/__init__.py +0 -23
  59. django_cfg/modules/django_dashboard/components.py +0 -312
  60. django_cfg/modules/django_dashboard/debug.py +0 -174
  61. django_cfg/modules/django_dashboard/management/__init__.py +0 -0
  62. django_cfg/modules/django_dashboard/management/commands/__init__.py +0 -0
  63. django_cfg/modules/django_dashboard/management/commands/debug_dashboard.py +0 -109
  64. django_cfg/modules/django_dashboard/sections/__init__.py +0 -1
  65. django_cfg/modules/django_dashboard/sections/base.py +0 -129
  66. django_cfg/modules/django_dashboard/sections/commands.py +0 -33
  67. django_cfg/modules/django_dashboard/sections/documentation.py +0 -393
  68. django_cfg/modules/django_dashboard/sections/overview.py +0 -398
  69. django_cfg/modules/django_dashboard/sections/stats.py +0 -48
  70. django_cfg/modules/django_dashboard/sections/system.py +0 -74
  71. django_cfg/modules/django_dashboard/sections/widgets.py +0 -222
  72. django_cfg/modules/django_unfold/callbacks/__init__.py +0 -9
  73. django_cfg/modules/django_unfold/callbacks/actions.py +0 -51
  74. django_cfg/modules/django_unfold/callbacks/apizones.py +0 -122
  75. django_cfg/modules/django_unfold/callbacks/base.py +0 -290
  76. django_cfg/modules/django_unfold/callbacks/charts.py +0 -223
  77. django_cfg/modules/django_unfold/callbacks/commands.py +0 -40
  78. django_cfg/modules/django_unfold/callbacks/main.py +0 -322
  79. django_cfg/modules/django_unfold/callbacks/statistics.py +0 -240
  80. django_cfg/modules/django_unfold/callbacks/system.py +0 -180
  81. django_cfg/modules/django_unfold/callbacks/users.py +0 -65
  82. django_cfg/modules/django_unfold/models/dashboard.py +0 -207
  83. django_cfg/modules/django_unfold/models/tabs.py +0 -26
  84. django_cfg/modules/django_unfold/models.py +0 -98
  85. django_cfg/modules/django_unfold/templates/unfold/helpers/app_list.html +0 -102
  86. django_cfg/static/frontend/admin/_next/static/chunks/50314-5ec79b293c2283dd.js +0 -1
  87. django_cfg/templates/admin/sections/commands_section.html +0 -5
  88. django_cfg/templates/admin/sections/documentation_section.html +0 -5
  89. django_cfg/templates/admin/sections/overview_section.html +0 -5
  90. django_cfg/templates/admin/sections/stats_section.html +0 -5
  91. django_cfg/templates/admin/sections/system_section.html +0 -5
  92. django_cfg/templates/admin/sections/widgets_section.html +0 -11
  93. django_cfg/templates/admin_old/components/action_grid.html +0 -49
  94. django_cfg/templates/admin_old/components/card.html +0 -50
  95. django_cfg/templates/admin_old/components/data_table.html +0 -67
  96. django_cfg/templates/admin_old/components/metric_card.html +0 -39
  97. django_cfg/templates/admin_old/components/modal.html +0 -58
  98. django_cfg/templates/admin_old/components/progress_bar.html +0 -20
  99. django_cfg/templates/admin_old/components/section_header.html +0 -26
  100. django_cfg/templates/admin_old/components/stat_item.html +0 -32
  101. django_cfg/templates/admin_old/components/stats_grid.html +0 -72
  102. django_cfg/templates/admin_old/components/status_badge.html +0 -28
  103. django_cfg/templates/admin_old/components/user_avatar.html +0 -27
  104. django_cfg/templates/admin_old/constance/change_list.html +0 -74
  105. django_cfg/templates/admin_old/constance/includes/default_value.html +0 -24
  106. django_cfg/templates/admin_old/constance/includes/fieldset_header.html +0 -15
  107. django_cfg/templates/admin_old/constance/includes/results_list.html +0 -16
  108. django_cfg/templates/admin_old/constance/includes/setting_row.html +0 -50
  109. django_cfg/templates/admin_old/constance/includes/table_headers.html +0 -10
  110. django_cfg/templates/admin_old/examples/component_class_example.html +0 -156
  111. django_cfg/templates/admin_old/import_export/change_list_export.html +0 -24
  112. django_cfg/templates/admin_old/import_export/change_list_import.html +0 -24
  113. django_cfg/templates/admin_old/import_export/change_list_import_export.html +0 -34
  114. django_cfg/templates/admin_old/index.html +0 -80
  115. django_cfg/templates/admin_old/index_new.html +0 -119
  116. django_cfg/templates/admin_old/layouts/base_dashboard.html +0 -62
  117. django_cfg/templates/admin_old/layouts/dashboard_with_tabs.html +0 -176
  118. django_cfg/templates/admin_old/sections/commands_section.html +0 -549
  119. django_cfg/templates/admin_old/sections/documentation_section.html +0 -152
  120. django_cfg/templates/admin_old/sections/overview_section.html +0 -112
  121. django_cfg/templates/admin_old/sections/stats_section.html +0 -35
  122. django_cfg/templates/admin_old/sections/system_section.html +0 -99
  123. django_cfg/templates/admin_old/sections/widgets_section.html +0 -129
  124. django_cfg/templates/admin_old/snippets/components/activity_tracker.html +0 -70
  125. django_cfg/templates/admin_old/snippets/components/charts_section.html +0 -113
  126. django_cfg/templates/admin_old/snippets/components/django_commands.html +0 -270
  127. django_cfg/templates/admin_old/snippets/components/quick_actions.html +0 -66
  128. django_cfg/templates/admin_old/snippets/components/recent_activity_improved.html +0 -25
  129. django_cfg/templates/admin_old/snippets/components/recent_users_table.html +0 -102
  130. django_cfg/templates/admin_old/snippets/components/stats_cards.html +0 -4
  131. django_cfg/templates/admin_old/snippets/components/stats_tiles.html +0 -92
  132. django_cfg/templates/admin_old/snippets/components/system_health.html +0 -22
  133. django_cfg/templates/admin_old/snippets/components/system_metrics.html +0 -199
  134. django_cfg/templates/admin_old/snippets/components/user_permissions.html +0 -57
  135. django_cfg/templates/admin_old/snippets/tabs/app_stats_tab.html +0 -201
  136. django_cfg/templates/admin_old/snippets/tabs/commands_tab.html +0 -114
  137. django_cfg/templates/admin_old/snippets/tabs/documentation_tab.html +0 -42
  138. django_cfg/templates/admin_old/snippets/tabs/overview_tab.html +0 -116
  139. django_cfg/templates/admin_old/snippets/tabs/stats_tab.html +0 -89
  140. django_cfg/templates/admin_old/snippets/tabs/users_tab.html +0 -51
  141. django_cfg/templates/admin_old/snippets/tabs/widgets_tab.html +0 -38
  142. django_cfg/templates/admin_old/snippets/zones/zones_table.html +0 -176
  143. /django_cfg/static/frontend/admin/_next/static/{D_d9HRw5Yn7BRHAX5q89_ → 0sN9ktsgXH48ygtGSrhfu}/_ssgManifest.js +0 -0
  144. {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/WHEEL +0 -0
  145. {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/entry_points.txt +0 -0
  146. {django_cfg-1.4.88.dist-info → django_cfg-1.4.89.dist-info}/licenses/LICENSE +0 -0
@@ -1,26 +0,0 @@
1
- """
2
- Tab Configuration Models for Unfold Dashboard
3
-
4
- Pydantic models for tab configurations.
5
- """
6
-
7
- from typing import List, Optional
8
-
9
- from pydantic import BaseModel, ConfigDict, Field
10
-
11
-
12
- class TabItem(BaseModel):
13
- """Tab item configuration."""
14
- model_config = ConfigDict(validate_assignment=True, extra="forbid")
15
-
16
- title: str = Field(..., min_length=1, description="Tab title")
17
- link: str = Field(..., min_length=1, description="Tab URL")
18
- permission: Optional[str] = Field(None, description="Permission callback")
19
-
20
-
21
- class TabConfiguration(BaseModel):
22
- """Tab configuration for admin models."""
23
- model_config = ConfigDict(validate_assignment=True, extra="forbid")
24
-
25
- models: List[str] = Field(..., min_length=1, description="Model names for tab")
26
- items: List[TabItem] = Field(..., min_length=1, description="Tab items")
@@ -1,98 +0,0 @@
1
- """
2
- Dashboard Pydantic Models for Django CFG Unfold Module
3
-
4
- All dashboard data models with type safety.
5
- Following CRITICAL_REQUIREMENTS.md - NO raw dicts, ALL type-safe.
6
- """
7
-
8
- from typing import List, Optional
9
-
10
- from pydantic import BaseModel, Field
11
-
12
-
13
- class StatCard(BaseModel):
14
- """Statistics card model for dashboard."""
15
-
16
- title: str = Field(..., description="Card title")
17
- value: str = Field(..., description="Main value to display")
18
- icon: str = Field(..., description="Material icon name")
19
- change: Optional[str] = Field(None, description="Change indicator (e.g., '+5', '-2%')")
20
- change_type: str = Field("neutral", description="Change type: positive, negative, neutral")
21
- description: Optional[str] = Field(None, description="Additional description")
22
- color: str = Field("primary", description="Card color theme")
23
-
24
-
25
- class SystemHealthItem(BaseModel):
26
- """System health status item."""
27
-
28
- component: str = Field(..., description="Component name (database, cache, etc.)")
29
- status: str = Field(..., description="Status: healthy, warning, error, unknown")
30
- description: str = Field(..., description="Status description")
31
- last_check: str = Field(..., description="Last check time")
32
- health_percentage: Optional[int] = Field(None, description="Health percentage (0-100)")
33
-
34
-
35
- class QuickAction(BaseModel):
36
- """Quick action button for dashboard."""
37
-
38
- title: str = Field(..., description="Action title")
39
- description: str = Field(..., description="Action description")
40
- icon: str = Field(..., description="Material icon name")
41
- link: str = Field(..., description="Action URL or URL name")
42
- color: str = Field("primary", description="Button color")
43
- category: str = Field("general", description="Action category")
44
-
45
- def get_resolved_url(self) -> str:
46
- """
47
- Resolve URL name to full URL if needed.
48
-
49
- Returns:
50
- Full URL string - either the original link if it's already a URL,
51
- or the resolved URL if it's a URL name.
52
- """
53
- # If link starts with '/' or 'http', it's already a full URL
54
- if self.link.startswith(("/", "http")):
55
- return self.link
56
-
57
- # Try to resolve as URL name
58
- try:
59
- from django.urls import reverse
60
- from django.urls.exceptions import NoReverseMatch
61
- return reverse(self.link)
62
- except (NoReverseMatch, ImportError, Exception):
63
- # If reverse fails, return the original link
64
- return self.link
65
-
66
- def model_dump(self, **kwargs) -> dict:
67
- """Override model_dump to include resolved URL."""
68
- data = super().model_dump(**kwargs)
69
- # Replace link with resolved URL
70
- data["link"] = self.get_resolved_url()
71
- return data
72
-
73
-
74
- class DashboardData(BaseModel):
75
- """Main dashboard data container."""
76
-
77
- stat_cards: List[StatCard] = Field(default_factory=list, description="Statistics cards")
78
- system_health: List[SystemHealthItem] = Field(default_factory=list, description="System health items")
79
- quick_actions: List[QuickAction] = Field(default_factory=list, description="Quick action buttons")
80
- last_updated: str = Field(..., description="Last update timestamp")
81
- environment: str = Field("development", description="Current environment")
82
-
83
-
84
- class ChartDataset(BaseModel):
85
- """Chart dataset for dashboard charts."""
86
-
87
- label: str = Field(..., description="Dataset label")
88
- data: List[int] = Field(default_factory=list, description="Data points")
89
- backgroundColor: str = Field(..., description="Background color")
90
- borderColor: str = Field(..., description="Border color")
91
- tension: float = Field(0.4, description="Line tension")
92
-
93
-
94
- class ChartData(BaseModel):
95
- """Chart data structure."""
96
-
97
- labels: List[str] = Field(default_factory=list, description="Chart labels")
98
- datasets: List[ChartDataset] = Field(default_factory=list, description="Chart datasets")
@@ -1,102 +0,0 @@
1
- {% load i18n unfold %}
2
-
3
- {% if sidebar_navigation %}
4
- <div class="h-0 grow overflow-auto" data-simplebar>
5
- {% for group in sidebar_navigation %}
6
- {% if group.items %}
7
- {% has_nav_item_active group.items as has_active %}
8
-
9
- <div class="hidden mb-2 has-[ol]:has-[li]:block" {% if group.collapsible %}x-data="{navigationOpen: {% if group.open %}true{% elif has_active %}true{% else %}false{% endif %}}"{% endif %}>
10
- {% if group.separator %}
11
- <hr class="border-t border-base-200 mx-6 my-2 dark:border-base-800" />
12
- {% endif %}
13
-
14
- {% if group.title %}
15
- <h2 class="font-semibold flex flex-row group items-center mb-1 mx-3 py-1.5 px-3 select-none text-font-important-light text-sm dark:text-font-important-dark {% if group.collapsible %}cursor-pointer hover:text-primary-600 dark:hover:text-primary-500{% endif %}" {% if group.collapsible %}x-on:click="navigationOpen = !navigationOpen"{% endif %}>
16
- {{ group.title }}
17
-
18
- {% if group.collapsible %}
19
- <span class="material-symbols-outlined ml-auto transition-all group-hover:text-primary-600 dark:group-hover:text-primary-500" x-bind:class="{'rotate-90': navigationOpen}">
20
- chevron_right
21
- </span>
22
- {% endif %}
23
- </h2>
24
- {% endif %}
25
-
26
- <ol class="flex flex-col gap-1 px-6" {% if group.collapsible %}x-show="navigationOpen"{% endif %}>
27
- {% for item in group.items %}
28
- {% if item.has_permission %}
29
- <li>
30
- <a href="{% if item.link_callback %}{{ item.link_callback }}{% else %}{{ item.link }}{% endif %}" class="flex h-[38px] items-center -mx-3 px-3 rounded-default hover:text-primary-600 dark:hover:text-primary-500 {% if item.active %}bg-base-100 font-semibold text-primary-600 dark:bg-white/[.06] dark:text-primary-500{% endif %}">
31
- {% if item.icon %}
32
- <span class="material-symbols-outlined md-18 mr-3 w-[18px]">
33
- {{ item.icon }}
34
- </span>
35
- {% endif %}
36
-
37
- <span class="text-sm">
38
- {{ item.title|safe }}
39
- </span>
40
-
41
- {% if item.badge %}
42
- <span class="bg-red-600 font-semibold ml-2 px-1 relative rounded-xs text-xs text-white">
43
- {% if item.badge_callback %}
44
- {{ item.badge_callback }}
45
- {% else %}
46
- {{ item.badge }}
47
- {% endif %}
48
- </span>
49
- {% endif %}
50
- </a>
51
- </li>
52
- {% endif %}
53
- {% endfor %}
54
- </ol>
55
- </div>
56
- {% endif %}
57
- {% endfor %}
58
- </div>
59
-
60
- {% if sidebar_show_all_applications and app_list|length > 0 %}
61
- <div class="mt-auto" x-data="{ openAllApplications: false }">
62
- <a class="cursor-pointer flex items-center h-[64px] px-6 py-3 text-sm dark:text-font-default-dark hover:text-primary-600 dark:hover:text-primary-500" x-on:click="openAllApplications = !openAllApplications">
63
- <span class="material-symbols-outlined md-18 mr-3">
64
- apps
65
- </span>
66
-
67
- <span>
68
- {% trans "All applications" %}
69
- </span>
70
- </a>
71
-
72
- <div class="absolute bottom-0 left-0 right-0 top-0 z-50 md:left-72" x-cloak x-show="openAllApplications">
73
- <div class="absolute bg-base-900/80 backdrop-blur-xs bottom-0 left-0 right-0 top-0 z-10 w-screen"></div>
74
-
75
- <div class="bg-white flex flex-col h-full overflow-x-hidden overflow-y-auto py-5 px-8 relative text-sm w-80 z-20 dark:bg-base-900 dark:border-r dark:border-base-800" x-on:click.outside="openAllApplications = false" x-on:keydown.escape.window="openAllApplications = false" data-simplebar>
76
- {% for app in app_list %}
77
- <div class="mb-6 last:mb-0">
78
- <h2 class="mb-4 font-semibold text-font-important-light truncate dark:text-font-important-dark">
79
- {{ app.name }}
80
- </h2>
81
-
82
- <ul>
83
- {% for model in app.models %}
84
- <li class="block mb-4 last:mb-0">
85
- <a href="{{ model.admin_url }}" class="block truncate hover:text-primary-600 dark:hover:text-primary-500">
86
- {{ model.name }}
87
- </a>
88
- </li>
89
- {% endfor %}
90
- </ul>
91
- </div>
92
- {% endfor %}
93
- </div>
94
- </div>
95
- </div>
96
- {% endif %}
97
- {% else %}
98
- <p>
99
- {% trans "You don’t have permission to view or edit anything." as error_message %}
100
- {% include "unfold/helpers/messages/error.html" with error=error_message %}
101
- </p>
102
- {% endif %}