django-cfg 1.4.63__py3-none-any.whl → 1.4.64__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 CHANGED
@@ -32,7 +32,7 @@ Example:
32
32
  default_app_config = "django_cfg.apps.DjangoCfgConfig"
33
33
 
34
34
  # Version information
35
- __version__ = "1.4.63"
35
+ __version__ = "1.4.64"
36
36
  __license__ = "MIT"
37
37
 
38
38
  # Import registry for organized lazy loading
@@ -15,7 +15,7 @@ class CentrifugoConfig(AppConfig):
15
15
  - Async client for publishing messages to Centrifugo
16
16
  - ACK tracking for delivery confirmation
17
17
  - Logging of all publish operations
18
- - Migration-friendly API (mirrors django-ipc patterns)
18
+ - Migration-friendly API (mirrors legacy WebSocket solution patterns)
19
19
  """
20
20
 
21
21
  default_auto_field = "django.db.models.BigAutoField"
@@ -50,7 +50,7 @@ def discover_rpc_methods_from_router(router: Any) -> List[RPCMethodInfo]:
50
50
  List of discovered method information
51
51
 
52
52
  Example:
53
- >>> from django_ipc.server.message_router import MessageRouter
53
+ >>> # Legacy router import removed
54
54
  >>> router = MessageRouter(connection_manager)
55
55
  >>>
56
56
  >>> @router.register("echo")
@@ -2,7 +2,7 @@
2
2
  Centrifugo Log Model.
3
3
 
4
4
  Django model for tracking Centrifugo publish operations.
5
- Mirrors django-ipc RPCLog patterns for easy migration.
5
+ Mirrors legacy WebSocket solution RPCLog patterns for easy migration.
6
6
  """
7
7
 
8
8
  from django.conf import settings
@@ -1,7 +1,7 @@
1
1
  """
2
2
  MessageRouter for Centrifugo RPC handlers.
3
3
 
4
- Compatible with django-ipc's MessageRouter interface for code generation.
4
+ Compatible with legacy WebSocket solution's MessageRouter interface for code generation.
5
5
  """
6
6
 
7
7
  import logging
@@ -14,7 +14,7 @@ class MessageRouter:
14
14
  """
15
15
  Message router for Centrifugo RPC handlers.
16
16
 
17
- Provides django-ipc compatible interface for handler registration
17
+ Provides legacy WebSocket solution compatible interface for handler registration
18
18
  and discovery by codegen system.
19
19
  """
20
20
 
@@ -4,7 +4,7 @@ Django-CFG Centrifugo Client.
4
4
  Async client enabling Django applications to publish messages
5
5
  to Centrifugo via Python Wrapper with ACK tracking.
6
6
 
7
- Mirrors DjangoCfgRPCClient interface for easy migration from django-ipc.
7
+ Mirrors DjangoCfgRPCClient interface for easy migration from legacy WebSocket solution.
8
8
  """
9
9
 
10
10
  import asyncio
@@ -83,6 +83,7 @@ class CentrifugoClient:
83
83
  http_timeout: int = 35,
84
84
  max_retries: int = 3,
85
85
  retry_delay: float = 1.0,
86
+ verify_ssl: bool = False,
86
87
  ):
87
88
  """
88
89
  Initialize Centrifugo client.
@@ -95,6 +96,7 @@ class CentrifugoClient:
95
96
  http_timeout: HTTP request timeout (seconds)
96
97
  max_retries: Maximum retry attempts
97
98
  retry_delay: Delay between retries (seconds)
99
+ verify_ssl: Whether to verify SSL certificates (default: False, allows self-signed certs)
98
100
  """
99
101
  self.wrapper_url = wrapper_url or self._get_wrapper_url_from_settings()
100
102
  self.wrapper_api_key = wrapper_api_key
@@ -103,6 +105,7 @@ class CentrifugoClient:
103
105
  self.http_timeout = http_timeout
104
106
  self.max_retries = max_retries
105
107
  self.retry_delay = retry_delay
108
+ self.verify_ssl = verify_ssl
106
109
 
107
110
  # Create HTTP client with connection pooling
108
111
  headers = {"Content-Type": "application/json"}
@@ -114,6 +117,7 @@ class CentrifugoClient:
114
117
  headers=headers,
115
118
  timeout=httpx.Timeout(self.http_timeout),
116
119
  limits=httpx.Limits(max_keepalive_connections=20, max_connections=50),
120
+ verify=self.verify_ssl,
117
121
  )
118
122
 
119
123
  logger.info(f"Centrifugo client initialized: {self.wrapper_url}")
@@ -567,6 +571,7 @@ def _create_client_from_settings() -> CentrifugoClient:
567
571
  http_timeout=cfg.http_timeout,
568
572
  max_retries=cfg.max_retries,
569
573
  retry_delay=cfg.retry_delay,
574
+ verify_ssl=cfg.verify_ssl,
570
575
  )
571
576
 
572
577
 
@@ -122,6 +122,12 @@ class DjangoCfgCentrifugoConfig(BaseModel):
122
122
  description="Delay between retries (seconds)",
123
123
  )
124
124
 
125
+ # SSL settings
126
+ verify_ssl: bool = Field(
127
+ default=False,
128
+ description="Verify SSL certificates for HTTPS connections (default: False for self-signed certs)",
129
+ )
130
+
125
131
  # Logging settings
126
132
  log_all_calls: bool = Field(
127
133
  default=False,
@@ -197,6 +203,7 @@ class DjangoCfgCentrifugoConfig(BaseModel):
197
203
  "HTTP_TIMEOUT": self.http_timeout,
198
204
  "MAX_RETRIES": self.max_retries,
199
205
  "RETRY_DELAY": self.retry_delay,
206
+ "VERIFY_SSL": self.verify_ssl,
200
207
  "LOG_ALL_CALLS": self.log_all_calls,
201
208
  "LOG_ONLY_WITH_ACK": self.log_only_with_ack,
202
209
  "LOG_LEVEL": self.log_level,
@@ -222,6 +229,7 @@ class DjangoCfgCentrifugoConfig(BaseModel):
222
229
  "http_timeout": self.http_timeout,
223
230
  "max_retries": self.max_retries,
224
231
  "retry_delay": self.retry_delay,
232
+ "verify_ssl": self.verify_ssl,
225
233
  }
226
234
 
227
235
 
@@ -2,7 +2,7 @@
2
2
  Custom Exceptions for Centrifugo Client.
3
3
 
4
4
  Provides specific exception types for better error handling and debugging.
5
- Mirrors django-ipc exception patterns for easy migration.
5
+ Mirrors legacy WebSocket solution exception patterns for easy migration.
6
6
  """
7
7
 
8
8
  from typing import Optional
@@ -2,7 +2,7 @@
2
2
  Centrifugo Logging helper for tracking publish operations.
3
3
 
4
4
  Provides async-safe logging of Centrifugo publishes to database.
5
- Mirrors RPCLogger patterns from django-ipc for easy migration.
5
+ Mirrors RPCLogger patterns from legacy WebSocket solution for easy migration.
6
6
  """
7
7
 
8
8
  import time
@@ -58,15 +58,21 @@ class CentrifugoAdminAPIViewSet(viewsets.ViewSet):
58
58
 
59
59
  headers = {"Content-Type": "application/json"}
60
60
  if config.centrifugo_api_key:
61
- headers["X-API-Key"] = config.centrifugo_api_key
61
+ # Centrifugo expects "Authorization: apikey <key>" header
62
+ headers["Authorization"] = f"apikey {config.centrifugo_api_key}"
63
+ logger.debug(f"Using Centrifugo API key: {config.centrifugo_api_key[:10]}...")
64
+ else:
65
+ logger.warning("No Centrifugo API key configured!")
62
66
 
63
67
  # Use base URL without /api suffix since we'll add it in requests
64
68
  base_url = config.centrifugo_api_url.rstrip('/api').rstrip('/')
69
+ logger.debug(f"Centrifugo API base URL: {base_url}")
65
70
 
66
71
  self._http_client = httpx.AsyncClient(
67
72
  base_url=base_url,
68
73
  headers=headers,
69
74
  timeout=httpx.Timeout(10.0),
75
+ verify=False, # Disable SSL verification for self-signed certs
70
76
  )
71
77
 
72
78
  return self._http_client
django_cfg/pyproject.toml CHANGED
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "django-cfg"
7
- version = "1.4.63"
7
+ version = "1.4.64"
8
8
  description = "Django AI framework with built-in agents, type-safe Pydantic v2 configuration, and 8 enterprise apps. Replace settings.py, validate at startup, 90% less code. Production-ready AI workflows for Django."
9
9
  readme = "README.md"
10
10
  keywords = [ "django", "configuration", "pydantic", "settings", "type-safety", "pydantic-settings", "django-environ", "startup-validation", "ide-autocomplete", "ai-agents", "enterprise-django", "django-settings", "type-safe-config",]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.4.63
3
+ Version: 1.4.64
4
4
  Summary: Django AI framework with built-in agents, type-safe Pydantic v2 configuration, and 8 enterprise apps. Replace settings.py, validate at startup, 90% less code. Production-ready AI workflows for Django.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://djangocfg.com
@@ -1,5 +1,5 @@
1
1
  django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- django_cfg/__init__.py,sha256=KtSF_ePcP4rgzVt83LnX3jCq3_xRRHqeFlQkclLeowI,1620
2
+ django_cfg/__init__.py,sha256=GvXegabjq71wrj3IiFpuA9KdBa3y-bteK912rbskxvc,1620
3
3
  django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
4
4
  django_cfg/config.py,sha256=y4Z3rnYsHBE0TehpwAIPaxr---mkvyKrZGGsNwYso74,1398
5
5
  django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
@@ -120,10 +120,10 @@ django_cfg/apps/api/health/serializers.py,sha256=Y_kn_RIn4MBRJWbsO2_DNEG_AqxnhuD
120
120
  django_cfg/apps/api/health/urls.py,sha256=eCTzgB4rv_H2W0NrixPO6qsh0pT2oUePrYAT5D35QIY,550
121
121
  django_cfg/apps/api/health/views.py,sha256=65oA6O3gaz2ECY2SiXlT3n4JpORt0nDufa_10um0nRw,8194
122
122
  django_cfg/apps/centrifugo/__init__.py,sha256=VeMqGhK9OgFikSbF3ZgBEqQJ8y7YvKzbWmXsxunJ7FI,1833
123
- django_cfg/apps/centrifugo/apps.py,sha256=tYkk58y0D6rHAJuXhamrQcvPRMi38cCY4g6KVrJHcGA,867
123
+ django_cfg/apps/centrifugo/apps.py,sha256=lsNkssW5QAk3IkjRxxck-Dvl8pD1NI4HLvQynuA7UhQ,882
124
124
  django_cfg/apps/centrifugo/decorators.py,sha256=J3KA0ll3lYwU_gLPKmfmB0HQ5vFnbSABbCNOjKm3y-Y,4174
125
125
  django_cfg/apps/centrifugo/registry.py,sha256=HRaBN39UlCMX6ZAysYhdCWMlzAx1scGTvgZLyl3MCjc,2819
126
- django_cfg/apps/centrifugo/router.py,sha256=eAcxyuMJy60fURI7GnfB2F3WOoy5rufiK2O_2JRU9V8,3086
126
+ django_cfg/apps/centrifugo/router.py,sha256=HyiJF0t3w085Upu9SPaTJ-qcSW8JYND71rXtuEFAt2g,3116
127
127
  django_cfg/apps/centrifugo/urls.py,sha256=wb7MwTmsZC1uewLQrUBpULpCVwzwh9YztUEgmMnLDQ4,902
128
128
  django_cfg/apps/centrifugo/urls_admin.py,sha256=Bo_T1Y2bL3FQxdE1nsvzApFrCl976hKdTGw5tqFf0ss,431
129
129
  django_cfg/apps/centrifugo/admin/__init__.py,sha256=JoDpJaJwT4f0ntWi8eNgNN5RRzWRty2fKdbDm-7PwEY,254
@@ -133,7 +133,7 @@ django_cfg/apps/centrifugo/codegen/IMPLEMENTATION_SUMMARY.md,sha256=8AGzxD-5i7au
133
133
  django_cfg/apps/centrifugo/codegen/README.md,sha256=2UUicvh_wVAyMoR9wZlO5F98TlN_Jx2imzKklYEiJQE,7149
134
134
  django_cfg/apps/centrifugo/codegen/USAGE.md,sha256=vjwW86vc-GDhmnafpOTewU_tvNwYkwbv0SWZRhee_o4,17159
135
135
  django_cfg/apps/centrifugo/codegen/__init__.py,sha256=FSaoEnPlaO-QudsL859D9Yht3NPHGVazmKuElnbh7Qk,392
136
- django_cfg/apps/centrifugo/codegen/discovery.py,sha256=n_hFjsgnvcsZr4e_Y6InTTS3KEEVFEXPEn584zuqQ6w,6931
136
+ django_cfg/apps/centrifugo/codegen/discovery.py,sha256=WHCKZ5cy0ampjfFNuIwmxZKOvR6n4IuOSvLUHQ9g2jQ,6903
137
137
  django_cfg/apps/centrifugo/codegen/generators/go_thin/__init__.py,sha256=aSOeGysELkxi6nzmmyfuUYAvve_erSnyfSRKGuRgVSc,104
138
138
  django_cfg/apps/centrifugo/codegen/generators/go_thin/generator.py,sha256=3_EFLLIIjz50tU_EE6ieEL9iGwRakKabWPZfkT7-BiA,5555
139
139
  django_cfg/apps/centrifugo/codegen/generators/go_thin/templates/README.md.j2,sha256=zkMemzXVwhYpjWEmUbPiKmnjran3lUJfxsg870HLDoI,4428
@@ -170,7 +170,7 @@ django_cfg/apps/centrifugo/managers/centrifugo_log.py,sha256=84nsM6DGJg4_OD8FYGv
170
170
  django_cfg/apps/centrifugo/migrations/0001_initial.py,sha256=heL0VqUxX1-UubK24U3qE4QLKdN55LljNTcnLfzjhzo,6130
171
171
  django_cfg/apps/centrifugo/migrations/__init__.py,sha256=DTK3Sbal03kPFHsmF1Ri6LKihhrcMlipmBgfXda4Z7o,31
172
172
  django_cfg/apps/centrifugo/models/__init__.py,sha256=vav0ToNcSDcwwpJ-7_npM1oBSbhIHCE6bfQ3XJl1U_I,165
173
- django_cfg/apps/centrifugo/models/centrifugo_log.py,sha256=XERtT8h9_ebY1qhwo_A54_prB7um3V3hVt-JGF9OmRo,5641
173
+ django_cfg/apps/centrifugo/models/centrifugo_log.py,sha256=VAUrfXZzPO7rR-6wbSySpKSnbMvCptOKlnTT2umF2KY,5656
174
174
  django_cfg/apps/centrifugo/serializers/__init__.py,sha256=AjNEgSrCqiRtI4_bbLnGeuwdB-84btJDyqYuunwLWBI,1161
175
175
  django_cfg/apps/centrifugo/serializers/admin_api.py,sha256=oKhMAes1GswpJnO9sXN7zPSyA1vtneeO8JYVO4dKodY,7769
176
176
  django_cfg/apps/centrifugo/serializers/channels.py,sha256=Oh0Otb5qdGduzSgE9ijsgXaWukLjUCmk5N87cixtVcE,864
@@ -180,11 +180,11 @@ django_cfg/apps/centrifugo/serializers/stats.py,sha256=po3sR0EGOWj9C8F8cFatGrDug
180
180
  django_cfg/apps/centrifugo/services/__init__.py,sha256=IKtNnDDRMOQdOhAP41GgUIDPpEspF1dW87IE9Jc80vI,247
181
181
  django_cfg/apps/centrifugo/services/config_helper.py,sha256=d2eT8AczcCRl-v2OqZUu0n-MvSt42GWJOD7tJTHKiSg,1583
182
182
  django_cfg/apps/centrifugo/services/dashboard_notifier.py,sha256=uagZMbykw4GjX-mqlekCYjR6tgLMifWe2c9mwIjYrLU,4793
183
- django_cfg/apps/centrifugo/services/logging.py,sha256=hUwUZY8EOkmsEzTCi3Of0q8EOmwk6Mxuy9Ff7ywravw,21825
183
+ django_cfg/apps/centrifugo/services/logging.py,sha256=_pNm0zW0jqAy9zAlB4wtGnwy3bt3zmbClTswEKMyCqI,21840
184
184
  django_cfg/apps/centrifugo/services/client/__init__.py,sha256=BiPchCB875BLN7Q7poCkQzIyFiQV1N5Y3vWyh0gUcBE,750
185
- django_cfg/apps/centrifugo/services/client/client.py,sha256=okkuQajaJoxfabchHVpkJyTcQIC3YOthifbBLL7lgAY,18679
186
- django_cfg/apps/centrifugo/services/client/config.py,sha256=v6j8J7rGTXLYdtDskYz1lGWHzF_ZQjrnUEHJL40PrX4,6675
187
- django_cfg/apps/centrifugo/services/client/exceptions.py,sha256=qLh5o2eoDCZGTgY-AwgQmJWa2-_S7bP0pHgNkgKLBK8,6248
185
+ django_cfg/apps/centrifugo/services/client/client.py,sha256=2WhzoYr__DP0eH70f4M3QSx8Se1WlFAFEjTqtQj4q6I,18938
186
+ django_cfg/apps/centrifugo/services/client/config.py,sha256=udkAhLCq1J0GSCupta9N3LwAdSa1mGkZid1GFVjsc00,6952
187
+ django_cfg/apps/centrifugo/services/client/exceptions.py,sha256=VsYExbk_H-qOaPa3iFUWBa1HMgw1IObil73JI1FhcDM,6263
188
188
  django_cfg/apps/centrifugo/static/django_cfg_centrifugo/css/dashboard.css,sha256=UK9KGtIlebjyv61mTMMcFDc7Blp2I-YYTOALr3hTMmY,4792
189
189
  django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_channels.mjs,sha256=QOctXgF4jAJYam4mY_JcacU-h-ibXqEJSKiNK4Cfc0E,12661
190
190
  django_cfg/apps/centrifugo/static/django_cfg_centrifugo/js/dashboard/live_testing.mjs,sha256=HUE1s9ax4s8t4HS1qU6t6PngFgrehiOanFnM4Krb-xA,28384
@@ -206,7 +206,7 @@ django_cfg/apps/centrifugo/templates/django_cfg_centrifugo/tags/connection_scrip
206
206
  django_cfg/apps/centrifugo/templatetags/__init__.py,sha256=W0mT4SMe7uZ3wInk88xVw1LP2vYWBsVV1U3EFt9uW7k,32
207
207
  django_cfg/apps/centrifugo/templatetags/centrifugo_tags.py,sha256=0t9cZjxBgKJ3JDh9moRwnPEFkaXwB7gnk2LLwofLgmE,1873
208
208
  django_cfg/apps/centrifugo/views/__init__.py,sha256=k4gAQehwJOF6RE-wqgEISdtTRjT4iMw9NoLqh4AeNqk,364
209
- django_cfg/apps/centrifugo/views/admin_api.py,sha256=Jv8jK5DJDHbd7ND9ILBKW25zS1kU6cGaqnn6p0mM74c,13552
209
+ django_cfg/apps/centrifugo/views/admin_api.py,sha256=N6rJx2cXo6IxkLdo2C9bpOGjTg-9ZQ7TaGLfJITVa6I,13968
210
210
  django_cfg/apps/centrifugo/views/dashboard.py,sha256=Xl8wseEy_NfdKl8ITe9AFOJSCpLxqEY70mouUGywgDI,423
211
211
  django_cfg/apps/centrifugo/views/monitoring.py,sha256=YVDMB-zsTgznijloxpRBZoyixTZZ99y5q003klo_y3A,10006
212
212
  django_cfg/apps/centrifugo/views/testing_api.py,sha256=li26QPSZIFwxrsoSZui02S8OI6GmWmYnke4lSNdnYZQ,14768
@@ -1103,9 +1103,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
1103
1103
  django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
1104
1104
  django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
1105
1105
  django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1106
- django_cfg/pyproject.toml,sha256=8OhfE7V-sA60Qzq7Gve-VxuE87O5RvF31Kf2u5dFxVk,8260
1107
- django_cfg-1.4.63.dist-info/METADATA,sha256=0tDINtoY1gkypvuWwzprGEoryzb32NzmOsxjC6G2QZ8,22589
1108
- django_cfg-1.4.63.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1109
- django_cfg-1.4.63.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1110
- django_cfg-1.4.63.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1111
- django_cfg-1.4.63.dist-info/RECORD,,
1106
+ django_cfg/pyproject.toml,sha256=o-zTVLYDc69aZfF57rOd6c06JM6WqQIMP175W_Hpjxc,8260
1107
+ django_cfg-1.4.64.dist-info/METADATA,sha256=XcmJeH3uqtBX_h-1KFRfx7cK4IwYkVLKNhCMzzqOcbc,22589
1108
+ django_cfg-1.4.64.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1109
+ django_cfg-1.4.64.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1110
+ django_cfg-1.4.64.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1111
+ django_cfg-1.4.64.dist-info/RECORD,,