django-cfg 1.4.107__py3-none-any.whl → 1.4.109__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 (140) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/views/profile.py +19 -9
  3. django_cfg/apps/centrifugo/views/admin_api.py +4 -7
  4. django_cfg/apps/centrifugo/views/monitoring.py +3 -6
  5. django_cfg/apps/centrifugo/views/testing_api.py +3 -6
  6. django_cfg/apps/dashboard/services/system_health_service.py +16 -11
  7. django_cfg/apps/dashboard/views/activity_views.py +3 -5
  8. django_cfg/apps/dashboard/views/apizones_views.py +4 -5
  9. django_cfg/apps/dashboard/views/charts_views.py +4 -5
  10. django_cfg/apps/dashboard/views/overview_views.py +4 -5
  11. django_cfg/apps/dashboard/views/statistics_views.py +4 -5
  12. django_cfg/apps/dashboard/views/system_views.py +4 -5
  13. django_cfg/apps/knowbase/__init__.py +2 -2
  14. django_cfg/apps/knowbase/apps.py +2 -8
  15. django_cfg/apps/knowbase/views/base.py +9 -4
  16. django_cfg/apps/support/views/api.py +16 -7
  17. django_cfg/apps/tasks/__init__.py +61 -2
  18. django_cfg/apps/tasks/admin/__init__.py +3 -10
  19. django_cfg/apps/tasks/admin/config.py +98 -0
  20. django_cfg/apps/tasks/admin/task_log.py +265 -0
  21. django_cfg/apps/tasks/apps.py +7 -9
  22. django_cfg/apps/tasks/filters/__init__.py +10 -0
  23. django_cfg/apps/tasks/filters/task_log.py +121 -0
  24. django_cfg/apps/tasks/migrations/0001_initial.py +196 -0
  25. django_cfg/apps/tasks/models/__init__.py +4 -0
  26. django_cfg/apps/tasks/models/task_log.py +246 -0
  27. django_cfg/apps/tasks/serializers/__init__.py +28 -0
  28. django_cfg/apps/tasks/serializers/task_log.py +249 -0
  29. django_cfg/apps/tasks/services/__init__.py +10 -0
  30. django_cfg/apps/tasks/services/client/__init__.py +7 -0
  31. django_cfg/apps/tasks/services/client/client.py +234 -0
  32. django_cfg/apps/tasks/services/config_helper.py +63 -0
  33. django_cfg/apps/tasks/services/sync.py +204 -0
  34. django_cfg/apps/tasks/urls.py +7 -13
  35. django_cfg/apps/tasks/views/__init__.py +4 -10
  36. django_cfg/apps/tasks/views/task_log.py +41 -0
  37. django_cfg/apps/tasks/views/task_log_base.py +41 -0
  38. django_cfg/apps/tasks/views/task_log_overview.py +100 -0
  39. django_cfg/apps/tasks/views/task_log_related.py +41 -0
  40. django_cfg/apps/tasks/views/task_log_stats.py +91 -0
  41. django_cfg/apps/tasks/views/task_log_timeline.py +81 -0
  42. django_cfg/apps/urls.py +0 -1
  43. django_cfg/cli/commands/info.py +1 -1
  44. django_cfg/cli/utils.py +1 -1
  45. django_cfg/core/base/config_model.py +1 -1
  46. django_cfg/core/builders/apps_builder.py +1 -1
  47. django_cfg/core/generation/integration_generators/__init__.py +1 -1
  48. django_cfg/core/generation/integration_generators/tasks.py +14 -18
  49. django_cfg/core/generation/security_generators/crypto_fields.py +2 -1
  50. django_cfg/core/integration/display/startup.py +1 -1
  51. django_cfg/mixins/__init__.py +12 -0
  52. django_cfg/mixins/admin_api.py +37 -0
  53. django_cfg/mixins/client_api.py +39 -0
  54. django_cfg/models/django/constance.py +2 -8
  55. django_cfg/models/django/crypto_fields.py +13 -48
  56. django_cfg/models/tasks/__init__.py +8 -10
  57. django_cfg/models/tasks/backends.py +76 -207
  58. django_cfg/models/tasks/config.py +20 -127
  59. django_cfg/models/tasks/utils.py +17 -29
  60. django_cfg/modules/django_client/management/commands/generate_client.py +13 -1
  61. django_cfg/modules/django_unfold/navigation.py +121 -22
  62. django_cfg/pyproject.toml +2 -2
  63. django_cfg/registry/core.py +1 -1
  64. django_cfg/static/frontend/admin.zip +0 -0
  65. {django_cfg-1.4.107.dist-info → django_cfg-1.4.109.dist-info}/METADATA +3 -3
  66. {django_cfg-1.4.107.dist-info → django_cfg-1.4.109.dist-info}/RECORD +70 -117
  67. django_cfg/apps/tasks/admin/actions.py +0 -29
  68. django_cfg/apps/tasks/admin/tasks_admin.py +0 -154
  69. django_cfg/apps/tasks/api/serializers.py +0 -82
  70. django_cfg/apps/tasks/api/views.py +0 -571
  71. django_cfg/apps/tasks/serializers.py +0 -82
  72. django_cfg/apps/tasks/static/tasks/css/dashboard-alpine.css +0 -299
  73. django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -120
  74. django_cfg/apps/tasks/static/tasks/js/alpine/README.md +0 -47
  75. django_cfg/apps/tasks/static/tasks/js/alpine/actions/index.js +0 -8
  76. django_cfg/apps/tasks/static/tasks/js/alpine/actions/management.js +0 -123
  77. django_cfg/apps/tasks/static/tasks/js/alpine/actions/pagination.js +0 -21
  78. django_cfg/apps/tasks/static/tasks/js/alpine/actions/tasks.js +0 -101
  79. django_cfg/apps/tasks/static/tasks/js/alpine/actions/workers.js +0 -59
  80. django_cfg/apps/tasks/static/tasks/js/alpine/computed.js +0 -35
  81. django_cfg/apps/tasks/static/tasks/js/alpine/index.js +0 -148
  82. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/index.js +0 -36
  83. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/overview.js +0 -37
  84. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/queues.js +0 -27
  85. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/tasks.js +0 -32
  86. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/workers.js +0 -21
  87. django_cfg/apps/tasks/static/tasks/js/alpine/state.js +0 -36
  88. django_cfg/apps/tasks/static/tasks/js/alpine/utils/formatters.js +0 -42
  89. django_cfg/apps/tasks/static/tasks/js/alpine/utils/helpers.js +0 -68
  90. django_cfg/apps/tasks/static/tasks/js/dashboard-alpine.js +0 -725
  91. django_cfg/apps/tasks/tasks/__init__.py +0 -10
  92. django_cfg/apps/tasks/tasks/demo_tasks.py +0 -127
  93. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -71
  94. django_cfg/apps/tasks/templates/tasks/components/overview_content.html +0 -94
  95. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +0 -44
  96. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -45
  97. django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -151
  98. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +0 -61
  99. django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +0 -269
  100. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +0 -60
  101. django_cfg/apps/tasks/templates/tasks/layout/base.html +0 -20
  102. django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +0 -168
  103. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +0 -77
  104. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +0 -40
  105. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +0 -40
  106. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +0 -86
  107. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +0 -90
  108. django_cfg/apps/tasks/urls_admin.py +0 -15
  109. django_cfg/apps/tasks/utils/__init__.py +0 -1
  110. django_cfg/apps/tasks/utils/simulator.py +0 -353
  111. django_cfg/apps/tasks/views/api.py +0 -571
  112. django_cfg/apps/tasks/views/dashboard.py +0 -89
  113. django_cfg/management/commands/rundramatiq.py +0 -24
  114. django_cfg/management/commands/rundramatiq_simulator.py +0 -22
  115. django_cfg/management/commands/task_clear.py +0 -25
  116. django_cfg/management/commands/task_status.py +0 -24
  117. django_cfg/modules/django_client/system/__init__.py +0 -24
  118. django_cfg/modules/django_client/system/base_generator.py +0 -123
  119. django_cfg/modules/django_client/system/generate_mjs_clients.py +0 -176
  120. django_cfg/modules/django_client/system/mjs_generator.py +0 -219
  121. django_cfg/modules/django_client/system/schema_parser.py +0 -199
  122. django_cfg/modules/django_client/system/templates/api_client.js.j2 +0 -87
  123. django_cfg/modules/django_client/system/templates/app_index.js.j2 +0 -13
  124. django_cfg/modules/django_client/system/templates/base_client.js.j2 +0 -166
  125. django_cfg/modules/django_client/system/templates/main_index.js.j2 +0 -80
  126. django_cfg/modules/django_client/system/templates/types.js.j2 +0 -24
  127. django_cfg/modules/django_tasks/__init__.py +0 -29
  128. django_cfg/modules/django_tasks/dramatiq_setup.py +0 -20
  129. django_cfg/modules/django_tasks/factory.py +0 -127
  130. django_cfg/modules/django_tasks/management/commands/__init__.py +0 -0
  131. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +0 -253
  132. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +0 -436
  133. django_cfg/modules/django_tasks/management/commands/task_clear.py +0 -226
  134. django_cfg/modules/django_tasks/management/commands/task_status.py +0 -257
  135. django_cfg/modules/django_tasks/service.py +0 -281
  136. django_cfg/modules/django_tasks/settings.py +0 -107
  137. /django_cfg/{modules/django_tasks/management → apps/tasks/migrations}/__init__.py +0 -0
  138. {django_cfg-1.4.107.dist-info → django_cfg-1.4.109.dist-info}/WHEEL +0 -0
  139. {django_cfg-1.4.107.dist-info → django_cfg-1.4.109.dist-info}/entry_points.txt +0 -0
  140. {django_cfg-1.4.107.dist-info → django_cfg-1.4.109.dist-info}/licenses/LICENSE +0 -0
@@ -4,15 +4,19 @@ Default Navigation Configuration for Django CFG Unfold
4
4
  Provides default navigation sections based on enabled django-cfg modules.
5
5
  """
6
6
 
7
- from typing import Any, Dict, List
7
+ import logging
8
+ import traceback
9
+ from typing import Any, Dict, List, Optional
8
10
 
9
- from django.urls import reverse_lazy
11
+ from django.urls import reverse_lazy, NoReverseMatch
10
12
 
11
13
  from django_cfg.modules.django_admin.icons import Icons
12
14
  from django_cfg.modules.base import BaseCfgModule
13
15
 
14
16
  from .models.navigation import NavigationItem, NavigationSection
15
17
 
18
+ logger = logging.getLogger(__name__)
19
+
16
20
 
17
21
  class NavigationManager(BaseCfgModule):
18
22
  """
@@ -39,19 +43,92 @@ class NavigationManager(BaseCfgModule):
39
43
  self._config_loaded = True
40
44
  return self._config
41
45
 
46
+ def _safe_reverse(self, url_name: str, fallback: Optional[str] = None) -> Optional[str]:
47
+ """
48
+ Safely resolve URL with error logging.
49
+
50
+ Args:
51
+ url_name: Django URL name to reverse
52
+ fallback: Optional fallback URL if reverse fails
53
+
54
+ Returns:
55
+ Resolved URL string or fallback, None if both fail
56
+ """
57
+ try:
58
+ return str(reverse_lazy(url_name))
59
+ except NoReverseMatch as e:
60
+ logger.error(
61
+ f"Failed to reverse URL '{url_name}': {e}\n"
62
+ f"Traceback:\n{''.join(traceback.format_tb(e.__traceback__))}"
63
+ )
64
+ if fallback:
65
+ logger.warning(f"Using fallback URL: {fallback}")
66
+ return fallback
67
+ return None
68
+ except Exception as e:
69
+ logger.error(
70
+ f"Unexpected error reversing URL '{url_name}': {e}\n"
71
+ f"Traceback:\n{''.join(traceback.format_exc())}"
72
+ )
73
+ return fallback
74
+
75
+ def _create_nav_item(
76
+ self,
77
+ title: str,
78
+ icon: str,
79
+ url_name: str,
80
+ fallback_link: Optional[str] = None
81
+ ) -> Optional[NavigationItem]:
82
+ """
83
+ Create NavigationItem with safe URL resolution.
84
+
85
+ Args:
86
+ title: Navigation item title
87
+ icon: Icon identifier
88
+ url_name: Django URL name to reverse
89
+ fallback_link: Optional fallback URL
90
+
91
+ Returns:
92
+ NavigationItem or None if URL resolution fails
93
+ """
94
+ link = self._safe_reverse(url_name, fallback_link)
95
+ if link is None:
96
+ logger.warning(f"Skipping navigation item '{title}' - URL '{url_name}' could not be resolved")
97
+ return None
98
+
99
+ return NavigationItem(title=title, icon=icon, link=link)
100
+
42
101
  def get_navigation_config(self) -> List[Dict[str, Any]]:
43
102
  """Get complete default navigation configuration for Unfold sidebar."""
103
+ # Dashboard section with safe URL resolution
104
+ dashboard_items = []
105
+
106
+ # Overview
107
+ overview_item = self._create_nav_item("Overview", Icons.DASHBOARD, "admin:index")
108
+ if overview_item:
109
+ dashboard_items.append(overview_item)
110
+
111
+ # Settings
112
+ settings_item = self._create_nav_item("Settings", Icons.SETTINGS, "admin:constance_config_changelist")
113
+ if settings_item:
114
+ dashboard_items.append(settings_item)
115
+
116
+ # Health Check
117
+ health_item = self._create_nav_item("Health Check", Icons.HEALTH_AND_SAFETY, "django_cfg_drf_health", "/cfg/health/")
118
+ if health_item:
119
+ dashboard_items.append(health_item)
120
+
121
+ # Endpoints Status
122
+ endpoints_item = self._create_nav_item("Endpoints Status", Icons.API, "endpoints_status_drf", "/cfg/endpoints/")
123
+ if endpoints_item:
124
+ dashboard_items.append(endpoints_item)
125
+
44
126
  navigation_sections = [
45
127
  NavigationSection(
46
128
  title="Dashboard",
47
129
  separator=True,
48
130
  collapsible=True,
49
- items=[
50
- NavigationItem(title="Overview", icon=Icons.DASHBOARD, link=str(reverse_lazy("admin:index"))),
51
- NavigationItem(title="Settings", icon=Icons.SETTINGS, link=str(reverse_lazy("admin:constance_config_changelist"))),
52
- NavigationItem(title="Health Check", icon=Icons.HEALTH_AND_SAFETY, link=str(reverse_lazy("django_cfg_drf_health"))),
53
- NavigationItem(title="Endpoints Status", icon=Icons.API, link=str(reverse_lazy("endpoints_status_drf"))),
54
- ]
131
+ items=dashboard_items
55
132
  ),
56
133
  ]
57
134
 
@@ -69,29 +146,51 @@ class NavigationManager(BaseCfgModule):
69
146
  )
70
147
  )
71
148
 
72
- # Add Operations section (System & Monitoring tools)
73
- operations_items = []
74
-
75
- # Background Tasks (if enabled)
149
+ # Background Tasks section (if enabled)
76
150
  if self.should_enable_tasks():
77
- operations_items.extend([
78
- NavigationItem(title="Background Tasks", icon=Icons.TASK, link=str(reverse_lazy("admin:django_dramatiq_task_changelist"))),
79
- NavigationItem(title="Task Dashboard", icon=Icons.SETTINGS_APPLICATIONS, link=str(reverse_lazy("dashboard"))),
80
- ])
151
+ tasks_items = []
152
+
153
+ tasks_items.append(
154
+ NavigationItem(title="Dashboard", icon=Icons.SETTINGS_APPLICATIONS, link="/cfg/admin/admin/tasks")
155
+ )
156
+
157
+ # Try to add Tasks Logs with safe URL resolution
158
+ logs_item = self._create_nav_item(
159
+ title="Logs",
160
+ icon=Icons.TASK,
161
+ url_name="admin:django_cfg_tasks_tasklog_changelist",
162
+ fallback_link="/admin/django_cfg_tasks/tasklog/"
163
+ )
164
+ if logs_item:
165
+ tasks_items.append(logs_item)
166
+
167
+ navigation_sections.append(NavigationSection(
168
+ title="Background Tasks",
169
+ separator=True,
170
+ collapsible=True,
171
+ items=tasks_items
172
+ ))
173
+
174
+ # System Operations section
175
+ system_items = []
81
176
 
82
177
  # Maintenance Mode (if enabled)
83
178
  if self.is_maintenance_enabled():
84
- operations_items.append(
85
- NavigationItem(title="Maintenance", icon=Icons.BUILD, link=str(reverse_lazy("admin:maintenance_cloudflaresite_changelist")))
179
+ maintenance_item = self._create_nav_item(
180
+ title="Maintenance",
181
+ icon=Icons.BUILD,
182
+ url_name="admin:maintenance_cloudflaresite_changelist"
86
183
  )
184
+ if maintenance_item:
185
+ system_items.append(maintenance_item)
87
186
 
88
- # Add Operations section if there are any items
89
- if operations_items:
187
+ # Add System Operations section if there are any items
188
+ if system_items:
90
189
  navigation_sections.append(NavigationSection(
91
- title="Operations",
190
+ title="System Operations",
92
191
  separator=True,
93
192
  collapsible=True,
94
- items=operations_items
193
+ items=system_items
95
194
  ))
96
195
 
97
196
  # Add Accounts section if enabled
django_cfg/pyproject.toml CHANGED
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.4.107"
7
+ version = "1.4.109"
8
8
  description = "Modern Django framework with type-safe Pydantic v2 configuration, Next.js admin integration, real-time WebSockets, and 8 enterprise apps. Replace settings.py with validated models, 90% less code. Production-ready with AI agents, auto-generated TypeScript clients, and zero-config features."
9
9
  readme = "README.md"
10
10
  keywords = [ "django", "configuration", "pydantic", "settings", "type-safety", "pydantic-settings", "django-environ", "startup-validation", "ide-autocomplete", "nextjs-admin", "react-admin", "websocket", "centrifugo", "real-time", "typescript-generation", "ai-agents", "enterprise-django", "django-settings", "type-safe-config", "modern-django",]
11
11
  classifiers = [ "Development Status :: 4 - Beta", "Framework :: Django", "Framework :: Django :: 5.2", "Intended Audience :: Developers", "License :: OSI Approved :: MIT License", "Operating System :: OS Independent", "Programming Language :: Python", "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.12", "Programming Language :: Python :: 3.13", "Topic :: Internet :: WWW/HTTP", "Topic :: Internet :: WWW/HTTP :: Dynamic Content", "Topic :: Software Development :: Libraries :: Python Modules", "Topic :: System :: Systems Administration", "Typing :: Typed",]
12
12
  requires-python = ">=3.12,<3.14"
13
- dependencies = [ "pydantic>=2.11.0,<3.0", "pydantic[email]>=2.11.0,<3.0", "PyYAML>=6.0,<7.0", "click>=8.2.0,<9.0", "questionary>=2.1.0,<3.0", "rich>=14.0.0,<15.0", "cloudflare>=4.3.0,<5.0", "loguru>=0.7.0,<1.0", "colorlog>=6.9.0,<7.0", "cachetools>=5.3.0,<7.0", "toml>=0.10.2,<0.11.0", "ngrok>=1.5.1; python_version>='3.12'", "psycopg[binary,pool]>=3.2.0,<4.0", "dj-database-url>=3.0.0,<4.0", "whitenoise>=6.8.0,<7.0", "django-cors-headers>=4.7.0,<5.0", "djangorestframework>=3.16.0,<4.0", "djangorestframework-simplejwt>=5.5.0,<6.0", "djangorestframework-simplejwt[token-blacklist]>=5.5.0,<6.0", "drf-nested-routers>=0.94.0,<1.0", "django-filter>=25.0,<26.0", "django-ratelimit>=4.1.0,<5.0.0", "drf-spectacular>=0.28.0,<1.0", "drf-spectacular-sidecar>=2025.8.0,<2026.0", "django-json-widget>=2.0.0,<3.0", "django-import-export>=4.3.0,<5.0", "django-extensions>=4.1.0,<5.0", "django-constance>=4.3.0,<5.0", "django-unfold>=0.64.0,<1.0", "django-redis>=6.0.0,<7.0", "redis>=6.4.0,<7.0", "hiredis>=2.0.0,<4.0", "dramatiq[redis]>=1.18.0,<2.0", "django-dramatiq>=0.14.0,<1.0", "pyTelegramBotAPI>=4.28.0,<5.0", "coolname>=2.2.0,<3.0", "django-admin-rangefilter>=0.13.0,<1.0", "python-json-logger>=3.3.0,<4.0", "requests>=2.32.0,<3.0", "tiktoken>=0.11.0,<1.0", "openai>=1.107.0,<2.0", "twilio>=9.8.0,<10.0", "sendgrid>=6.12.0,<7.0", "beautifulsoup4>=4.13.0,<5.0", "lxml>=6.0.0,<7.0", "pgvector>=0.4.0,<1.0", "tenacity>=9.1.2,<10.0.0", "mypy (>=1.18.2,<2.0.0)", "django-tailwind[reload] (>=4.2.0,<5.0.0)", "jinja2 (>=3.1.6,<4.0.0)", "django-axes[ipware] (>=8.0.0,<9.0.0)", "pydantic-settings (>=2.11.0,<3.0.0)", "pytz>=2025.1", "httpx>=0.28.1,<1.0",]
13
+ dependencies = [ "pydantic>=2.11.0,<3.0", "pydantic[email]>=2.11.0,<3.0", "PyYAML>=6.0,<7.0", "click>=8.2.0,<9.0", "questionary>=2.1.0,<3.0", "rich>=14.0.0,<15.0", "cloudflare>=4.3.0,<5.0", "loguru>=0.7.0,<1.0", "colorlog>=6.9.0,<7.0", "cachetools>=5.3.0,<7.0", "toml>=0.10.2,<0.11.0", "ngrok>=1.5.1; python_version>='3.12'", "psycopg[binary,pool]>=3.2.0,<4.0", "dj-database-url>=3.0.0,<4.0", "whitenoise>=6.8.0,<7.0", "django-cors-headers>=4.7.0,<5.0", "djangorestframework>=3.16.0,<4.0", "djangorestframework-simplejwt>=5.5.0,<6.0", "djangorestframework-simplejwt[token-blacklist]>=5.5.0,<6.0", "drf-nested-routers>=0.94.0,<1.0", "django-filter>=25.0,<26.0", "django-ratelimit>=4.1.0,<5.0.0", "drf-spectacular>=0.28.0,<1.0", "drf-spectacular-sidecar>=2025.8.0,<2026.0", "django-json-widget>=2.0.0,<3.0", "django-import-export>=4.3.0,<5.0", "django-extensions>=4.1.0,<5.0", "django-constance>=4.3.0,<5.0", "django-unfold>=0.64.0,<1.0", "django-redis>=6.0.0,<7.0", "redis>=6.4.0,<7.0", "hiredis>=2.0.0,<4.0", "rearq>=0.2.0,<1.0", "setuptools>=75.0.0; python_version>='3.13'", "pyTelegramBotAPI>=4.28.0,<5.0", "coolname>=2.2.0,<3.0", "django-admin-rangefilter>=0.13.0,<1.0", "python-json-logger>=3.3.0,<4.0", "requests>=2.32.0,<3.0", "tiktoken>=0.11.0,<1.0", "openai>=1.107.0,<2.0", "twilio>=9.8.0,<10.0", "sendgrid>=6.12.0,<7.0", "beautifulsoup4>=4.13.0,<5.0", "lxml>=6.0.0,<7.0", "pgvector>=0.4.0,<1.0", "tenacity>=9.1.2,<10.0.0", "mypy (>=1.18.2,<2.0.0)", "django-tailwind[reload] (>=4.2.0,<5.0.0)", "jinja2 (>=3.1.6,<4.0.0)", "django-axes[ipware] (>=8.0.0,<9.0.0)", "pydantic-settings (>=2.11.0,<3.0.0)", "pytz>=2025.1", "httpx>=0.28.1,<1.0",]
14
14
  [[project.authors]]
15
15
  name = "Django-CFG Team"
16
16
  email = "info@djangocfg.com"
@@ -49,7 +49,7 @@ CORE_REGISTRY = {
49
49
 
50
50
  # Task and queue models
51
51
  "TaskConfig": ("django_cfg.models.tasks.config", "TaskConfig"),
52
- "DramatiqConfig": ("django_cfg.models.tasks.config", "DramatiqConfig"),
52
+ "RearqConfig": ("django_cfg.models.tasks.config", "RearqConfig"),
53
53
 
54
54
  # Payment system models (BaseCfgAutoModule)
55
55
  "PaymentsConfig": ("django_cfg.models.payments.config", "PaymentsConfig"),
Binary file
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.4.107
3
+ Version: 1.4.109
4
4
  Summary: Modern Django framework with type-safe Pydantic v2 configuration, Next.js admin integration, real-time WebSockets, and 8 enterprise apps. Replace settings.py with validated models, 90% less code. Production-ready with AI agents, auto-generated TypeScript clients, and zero-config features.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://djangocfg.com
@@ -39,7 +39,6 @@ Requires-Dist: django-admin-rangefilter<1.0,>=0.13.0
39
39
  Requires-Dist: django-axes[ipware]<9.0.0,>=8.0.0
40
40
  Requires-Dist: django-constance<5.0,>=4.3.0
41
41
  Requires-Dist: django-cors-headers<5.0,>=4.7.0
42
- Requires-Dist: django-dramatiq<1.0,>=0.14.0
43
42
  Requires-Dist: django-extensions<5.0,>=4.1.0
44
43
  Requires-Dist: django-filter<26.0,>=25.0
45
44
  Requires-Dist: django-import-export<5.0,>=4.3.0
@@ -51,7 +50,6 @@ Requires-Dist: django-unfold<1.0,>=0.64.0
51
50
  Requires-Dist: djangorestframework-simplejwt<6.0,>=5.5.0
52
51
  Requires-Dist: djangorestframework-simplejwt[token-blacklist]<6.0,>=5.5.0
53
52
  Requires-Dist: djangorestframework<4.0,>=3.16.0
54
- Requires-Dist: dramatiq[redis]<2.0,>=1.18.0
55
53
  Requires-Dist: drf-nested-routers<1.0,>=0.94.0
56
54
  Requires-Dist: drf-spectacular-sidecar<2026.0,>=2025.8.0
57
55
  Requires-Dist: drf-spectacular<1.0,>=0.28.0
@@ -73,10 +71,12 @@ Requires-Dist: python-json-logger<4.0,>=3.3.0
73
71
  Requires-Dist: pytz>=2025.1
74
72
  Requires-Dist: pyyaml<7.0,>=6.0
75
73
  Requires-Dist: questionary<3.0,>=2.1.0
74
+ Requires-Dist: rearq<1.0,>=0.2.0
76
75
  Requires-Dist: redis<7.0,>=6.4.0
77
76
  Requires-Dist: requests<3.0,>=2.32.0
78
77
  Requires-Dist: rich<15.0,>=14.0.0
79
78
  Requires-Dist: sendgrid<7.0,>=6.12.0
79
+ Requires-Dist: setuptools>=75.0.0; python_version >= '3.13'
80
80
  Requires-Dist: tenacity<10.0.0,>=9.1.2
81
81
  Requires-Dist: tiktoken<1.0,>=0.11.0
82
82
  Requires-Dist: toml<0.11.0,>=0.10.2