django-cfg 1.4.114__py3-none-any.whl → 1.4.117__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.
- django_cfg/__init__.py +1 -1
- django_cfg/models/django/django_q2.py +15 -5
- django_cfg/pyproject.toml +2 -2
- {django_cfg-1.4.114.dist-info → django_cfg-1.4.117.dist-info}/METADATA +1 -2
- {django_cfg-1.4.114.dist-info → django_cfg-1.4.117.dist-info}/RECORD +8 -8
- {django_cfg-1.4.114.dist-info → django_cfg-1.4.117.dist-info}/WHEEL +0 -0
- {django_cfg-1.4.114.dist-info → django_cfg-1.4.117.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.4.114.dist-info → django_cfg-1.4.117.dist-info}/licenses/LICENSE +0 -0
django_cfg/__init__.py
CHANGED
|
@@ -204,6 +204,9 @@ class DjangoQ2ScheduleConfig(BaseModel):
|
|
|
204
204
|
Returns:
|
|
205
205
|
Dictionary for ORM.create() or schedule creation
|
|
206
206
|
"""
|
|
207
|
+
from django.utils import timezone
|
|
208
|
+
from datetime import timedelta
|
|
209
|
+
|
|
207
210
|
# Map our schedule types to Django-Q2 constants
|
|
208
211
|
type_mapping = {
|
|
209
212
|
"once": "O",
|
|
@@ -220,13 +223,18 @@ class DjangoQ2ScheduleConfig(BaseModel):
|
|
|
220
223
|
"name": self.name,
|
|
221
224
|
"func": self.func,
|
|
222
225
|
"schedule_type": type_mapping.get(self.schedule_type, self.schedule_type.upper()),
|
|
226
|
+
# Set next_run to NOW + 10 seconds for immediate execution on qcluster start
|
|
227
|
+
"next_run": timezone.now() + timedelta(seconds=10),
|
|
223
228
|
}
|
|
224
229
|
|
|
230
|
+
# Convert args list to tuple for Django-Q2 scheduler compatibility
|
|
231
|
+
# Django-Q2 scheduler.py:66-69 expects tuple format, not list
|
|
232
|
+
# If list is provided, scheduler wraps it: (list,) instead of converting list -> tuple
|
|
225
233
|
if self.args:
|
|
226
|
-
config["args"] =
|
|
234
|
+
config["args"] = tuple(self.args) if isinstance(self.args, list) else self.args
|
|
227
235
|
|
|
228
236
|
if self.kwargs:
|
|
229
|
-
config["kwargs"] =
|
|
237
|
+
config["kwargs"] = self.kwargs
|
|
230
238
|
|
|
231
239
|
if self.schedule_type == "cron" and self.cron:
|
|
232
240
|
config["cron"] = self.cron
|
|
@@ -459,10 +467,12 @@ class DjangoQ2Config(BaseModel):
|
|
|
459
467
|
"orm": "default",
|
|
460
468
|
}
|
|
461
469
|
|
|
462
|
-
#
|
|
470
|
+
# CRITICAL FIX: Django-Q2 uses 'redis' parameter, NOT 'broker'!
|
|
471
|
+
# The 'broker' parameter is ignored by django-q2.
|
|
472
|
+
# We must set 'redis' parameter to the broker_url string.
|
|
463
473
|
if self.broker_class == "redis":
|
|
464
|
-
#
|
|
465
|
-
|
|
474
|
+
# Set redis parameter to broker_url (Django-Q2 accepts redis:// URL string)
|
|
475
|
+
cluster_config["redis"] = broker_url
|
|
466
476
|
|
|
467
477
|
settings = {
|
|
468
478
|
"Q_CLUSTER": cluster_config
|
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.
|
|
7
|
+
version = "1.4.117"
|
|
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", "django-q2==1.8.0", "croniter>=6.0.0,<7.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)", "
|
|
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", "django-q2==1.8.0", "croniter>=6.0.0,<7.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)", "httpx>=0.28.1,<1.0", "mistune>=3.1.4,<4.0",]
|
|
14
14
|
[[project.authors]]
|
|
15
15
|
name = "Django-CFG Team"
|
|
16
16
|
email = "info@djangocfg.com"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: django-cfg
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.117
|
|
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
|
|
@@ -71,7 +71,6 @@ Requires-Dist: pydantic<3.0,>=2.11.0
|
|
|
71
71
|
Requires-Dist: pydantic[email]<3.0,>=2.11.0
|
|
72
72
|
Requires-Dist: pytelegrambotapi<5.0,>=4.28.0
|
|
73
73
|
Requires-Dist: python-json-logger<4.0,>=3.3.0
|
|
74
|
-
Requires-Dist: pytz>=2025.1
|
|
75
74
|
Requires-Dist: pyyaml<7.0,>=6.0
|
|
76
75
|
Requires-Dist: questionary<3.0,>=2.1.0
|
|
77
76
|
Requires-Dist: rearq<1.0,>=0.2.0
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
2
|
-
django_cfg/__init__.py,sha256=
|
|
2
|
+
django_cfg/__init__.py,sha256=a-zgNY8EXo7-I6ZParGfaJYes0Qu_GNrYhqILSkLhAU,1621
|
|
3
3
|
django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
|
|
4
4
|
django_cfg/config.py,sha256=xdwFE8bocOEnMjqDOwr1_M02oUgdaMG_2M6F_IuB9GQ,1351
|
|
5
5
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
|
@@ -644,7 +644,7 @@ django_cfg/models/django/__init__.py,sha256=J4VRl77vgXzfKcdUcX-sPxpBSOJ4qA-8RstP
|
|
|
644
644
|
django_cfg/models/django/axes.py,sha256=-4nk2gSfpj7lNY5vnm_2jHVLz8VAKoEd9yF2TuCR8O8,5624
|
|
645
645
|
django_cfg/models/django/constance.py,sha256=6x57bi40mDX0fKcKeQKgV2BO3WIVYPQllAchWsj4KvM,8847
|
|
646
646
|
django_cfg/models/django/crypto_fields.py,sha256=OguITidM4Mp564p_gbsokeNCZxjL9hrK1Vw0McuA3yo,4700
|
|
647
|
-
django_cfg/models/django/django_q2.py,sha256=
|
|
647
|
+
django_cfg/models/django/django_q2.py,sha256=le-Zjg2JjiFyfOJoHeODrjUylUBBm7eoneaGmVOmq1I,15067
|
|
648
648
|
django_cfg/models/django/environment.py,sha256=lBCHBs1lphv9tlu1BCTfLZeH_kUame0p66A_BIjBY7M,9440
|
|
649
649
|
django_cfg/models/django/openapi.py,sha256=avE3iapaCj8eyOqVUum_v2EExR3V-hwHrexqtXMHtTQ,3739
|
|
650
650
|
django_cfg/models/django/revolution_legacy.py,sha256=Z4SPUS7QSv62EuPAeFFoXGEgqLmdXnVEr7Ofk1IDtVc,8918
|
|
@@ -1060,9 +1060,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
|
|
|
1060
1060
|
django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
|
|
1061
1061
|
django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
|
|
1062
1062
|
django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1063
|
-
django_cfg/pyproject.toml,sha256=
|
|
1064
|
-
django_cfg-1.4.
|
|
1065
|
-
django_cfg-1.4.
|
|
1066
|
-
django_cfg-1.4.
|
|
1067
|
-
django_cfg-1.4.
|
|
1068
|
-
django_cfg-1.4.
|
|
1063
|
+
django_cfg/pyproject.toml,sha256=MwMh3DgYM1djCIx9K6E9rCngbKw5nVTDLWGmYMH6Ueo,8665
|
|
1064
|
+
django_cfg-1.4.117.dist-info/METADATA,sha256=Ll9z9f22ytdtCrn-anLFdvYpvVLBer0V7pqxnuefcFI,23876
|
|
1065
|
+
django_cfg-1.4.117.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
|
1066
|
+
django_cfg-1.4.117.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
|
1067
|
+
django_cfg-1.4.117.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
|
1068
|
+
django_cfg-1.4.117.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|