django-cfg 1.1.67__py3-none-any.whl → 1.1.70__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_cfg/__init__.py +1 -1
- django_cfg/apps/accounts/admin/__init__.py +2 -0
- django_cfg/apps/accounts/admin/activity.py +9 -2
- django_cfg/apps/accounts/admin/filters.py +42 -0
- django_cfg/apps/accounts/admin/registration_source.py +8 -1
- django_cfg/apps/accounts/admin/resources.py +271 -0
- django_cfg/apps/accounts/admin/twilio_response.py +7 -1
- django_cfg/apps/accounts/admin/user.py +9 -1
- django_cfg/apps/accounts/migrations/0005_twilioresponse.py +43 -0
- django_cfg/apps/accounts/models.py +83 -0
- django_cfg/apps/leads/admin/__init__.py +9 -0
- django_cfg/apps/leads/{admin.py → admin/leads_admin.py} +10 -2
- django_cfg/apps/leads/admin/resources.py +119 -0
- django_cfg/apps/newsletter/admin/__init__.py +12 -0
- django_cfg/apps/newsletter/{admin.py → admin/newsletter_admin.py} +20 -5
- django_cfg/apps/newsletter/admin/resources.py +241 -0
- django_cfg/apps/support/admin/__init__.py +10 -0
- django_cfg/apps/support/admin/resources.py +183 -0
- django_cfg/apps/support/{admin.py → admin/support_admin.py} +16 -6
- django_cfg/apps/support/templates/support/chat/ticket_chat.html +1 -1
- django_cfg/apps/urls.py +1 -2
- django_cfg/archive/django_sample.zip +0 -0
- django_cfg/core/config.py +1 -0
- django_cfg/core/generation.py +2 -1
- django_cfg/integration.py +14 -16
- django_cfg/management/commands/migrator.py +49 -13
- django_cfg/utils/smart_defaults.py +11 -1
- {django_cfg-1.1.67.dist-info → django_cfg-1.1.70.dist-info}/METADATA +2 -1
- {django_cfg-1.1.67.dist-info → django_cfg-1.1.70.dist-info}/RECORD +34 -26
- /django_cfg/apps/newsletter/{admin_filters.py → admin/filters.py} +0 -0
- /django_cfg/apps/support/{admin_filters.py → admin/filters.py} +0 -0
- {django_cfg-1.1.67.dist-info → django_cfg-1.1.70.dist-info}/WHEEL +0 -0
- {django_cfg-1.1.67.dist-info → django_cfg-1.1.70.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.1.67.dist-info → django_cfg-1.1.70.dist-info}/licenses/LICENSE +0 -0
django_cfg/core/config.py
CHANGED
django_cfg/core/generation.py
CHANGED
django_cfg/integration.py
CHANGED
@@ -92,24 +92,22 @@ def get_django_cfg_urls_info() -> dict:
|
|
92
92
|
from django_cfg.modules.base import BaseModule
|
93
93
|
base_module = BaseModule()
|
94
94
|
|
95
|
-
#
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
95
|
+
# Support URLs - needed for admin interface
|
96
|
+
if base_module.is_support_enabled():
|
97
|
+
endpoints.append("cfg/support/")
|
98
|
+
|
99
|
+
if base_module.is_accounts_enabled():
|
100
|
+
endpoints.append("cfg/accounts/")
|
101
|
+
|
102
|
+
if base_module.is_newsletter_enabled():
|
103
|
+
endpoints.append("cfg/newsletter/")
|
104
|
+
|
105
|
+
if base_module.is_leads_enabled():
|
106
|
+
endpoints.append("cfg/leads/")
|
107
|
+
|
105
108
|
except Exception:
|
106
109
|
# Fallback: show all possible endpoints
|
107
|
-
|
108
|
-
"cfg/support/",
|
109
|
-
"cfg/accounts/",
|
110
|
-
"cfg/newsletter/",
|
111
|
-
"cfg/leads/",
|
112
|
-
])
|
110
|
+
pass
|
113
111
|
|
114
112
|
info = {
|
115
113
|
"django_cfg": {
|
@@ -265,19 +265,40 @@ class Command(BaseCommand):
|
|
265
265
|
self.stdout.write(self.style.ERROR(f"❌ Error getting Django config info: {e}"))
|
266
266
|
|
267
267
|
def get_apps_for_database(self, db_name: str):
|
268
|
-
"""Get apps for specific database
|
268
|
+
"""Get apps for specific database using Django-CFG configuration"""
|
269
|
+
try:
|
270
|
+
# Try to get Django-CFG config
|
271
|
+
from django_cfg.core.config import get_current_config
|
272
|
+
config = get_current_config()
|
273
|
+
|
274
|
+
if config and hasattr(config, 'databases'):
|
275
|
+
if db_name in config.databases:
|
276
|
+
db_config = config.databases[db_name]
|
277
|
+
if hasattr(db_config, 'apps') and db_config.apps:
|
278
|
+
return db_config.apps
|
279
|
+
|
280
|
+
# For default database, get all apps not in other databases
|
281
|
+
if db_name == "default":
|
282
|
+
all_apps = self.get_all_installed_apps()
|
283
|
+
apps_in_other_dbs = set()
|
284
|
+
|
285
|
+
# Collect apps from all non-default databases
|
286
|
+
for other_db_name, other_db_config in config.databases.items():
|
287
|
+
if other_db_name != "default" and hasattr(other_db_config, 'apps'):
|
288
|
+
apps_in_other_dbs.update(other_db_config.apps)
|
289
|
+
|
290
|
+
return [app for app in all_apps if app not in apps_in_other_dbs]
|
291
|
+
|
292
|
+
except Exception as e:
|
293
|
+
self.stdout.write(self.style.WARNING(f"⚠️ Could not get Django-CFG config: {e}"))
|
294
|
+
|
295
|
+
# Fallback to old routing rules method
|
296
|
+
routing_rules = getattr(settings, "DATABASE_ROUTING_RULES", {})
|
269
297
|
if db_name == "default":
|
270
|
-
# For default database, get all apps that are not in other databases
|
271
298
|
all_apps = self.get_all_installed_apps()
|
272
|
-
apps_in_other_dbs =
|
299
|
+
apps_in_other_dbs = set(routing_rules.keys())
|
273
300
|
return [app for app in all_apps if app not in apps_in_other_dbs]
|
274
301
|
else:
|
275
|
-
# For other databases, use configured apps from routing rules
|
276
|
-
routing_rules = getattr(settings, "DATABASE_ROUTING_RULES", {})
|
277
|
-
|
278
|
-
# Routing rules are now in Django settings
|
279
|
-
pass
|
280
|
-
|
281
302
|
return [app for app, db in routing_rules.items() if db == db_name]
|
282
303
|
|
283
304
|
def get_all_installed_apps(self):
|
@@ -304,11 +325,26 @@ class Command(BaseCommand):
|
|
304
325
|
|
305
326
|
def get_apps_in_other_databases(self) -> set:
|
306
327
|
"""Get all apps that are configured for non-default databases."""
|
328
|
+
try:
|
329
|
+
# Try to get Django-CFG config
|
330
|
+
from django_cfg.core.config import get_current_config
|
331
|
+
config = get_current_config()
|
332
|
+
|
333
|
+
if config and hasattr(config, 'databases'):
|
334
|
+
apps_in_other_dbs = set()
|
335
|
+
|
336
|
+
# Collect apps from all non-default databases
|
337
|
+
for db_name, db_config in config.databases.items():
|
338
|
+
if db_name != "default" and hasattr(db_config, 'apps'):
|
339
|
+
apps_in_other_dbs.update(db_config.apps)
|
340
|
+
|
341
|
+
return apps_in_other_dbs
|
342
|
+
|
343
|
+
except Exception:
|
344
|
+
pass
|
345
|
+
|
346
|
+
# Fallback to old routing rules method
|
307
347
|
routing_rules = getattr(settings, "DATABASE_ROUTING_RULES", {})
|
308
|
-
|
309
|
-
# Routing rules are now in Django settings
|
310
|
-
pass
|
311
|
-
|
312
348
|
return set(routing_rules.keys())
|
313
349
|
|
314
350
|
def get_all_database_names(self):
|
@@ -168,7 +168,8 @@ class SmartDefaults:
|
|
168
168
|
domains: List[str],
|
169
169
|
environment: Optional[str] = None,
|
170
170
|
debug: bool = False,
|
171
|
-
ssl_redirect: Optional[bool] = None
|
171
|
+
ssl_redirect: Optional[bool] = None,
|
172
|
+
cors_allow_headers: Optional[List[str]] = None
|
172
173
|
) -> Dict[str, Any]:
|
173
174
|
"""
|
174
175
|
Get security defaults based on environment and domains.
|
@@ -178,6 +179,7 @@ class SmartDefaults:
|
|
178
179
|
environment: Current environment
|
179
180
|
debug: Django DEBUG setting
|
180
181
|
ssl_redirect: Force SSL redirect on/off (None = auto based on domains)
|
182
|
+
cors_allow_headers: Custom CORS allowed headers
|
181
183
|
|
182
184
|
Returns:
|
183
185
|
Security settings dictionary
|
@@ -192,6 +194,10 @@ class SmartDefaults:
|
|
192
194
|
settings['CORS_ALLOW_ALL_ORIGINS'] = True
|
193
195
|
settings['CORS_ALLOW_CREDENTIALS'] = True
|
194
196
|
|
197
|
+
# Add custom headers if provided
|
198
|
+
if cors_allow_headers:
|
199
|
+
settings['CORS_ALLOW_HEADERS'] = cors_allow_headers
|
200
|
+
|
195
201
|
# For development, add ALL domains to CSRF trusted origins
|
196
202
|
# This allows testing with production domains in dev environment
|
197
203
|
csrf_trusted_origins = []
|
@@ -241,6 +247,10 @@ class SmartDefaults:
|
|
241
247
|
settings['CORS_ALLOWED_ORIGINS'] = allowed_origins
|
242
248
|
settings['CORS_ALLOW_CREDENTIALS'] = True
|
243
249
|
|
250
|
+
# Add custom headers if provided
|
251
|
+
if cors_allow_headers:
|
252
|
+
settings['CORS_ALLOW_HEADERS'] = cors_allow_headers
|
253
|
+
|
244
254
|
# Set CSRF trusted origins for HTTPS domains
|
245
255
|
if csrf_trusted_origins:
|
246
256
|
settings['CSRF_TRUSTED_ORIGINS'] = csrf_trusted_origins
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: django-cfg
|
3
|
-
Version: 1.1.
|
3
|
+
Version: 1.1.70
|
4
4
|
Summary: 🚀 Production-ready Django configuration framework with type-safe settings, smart automation, and modern developer experience
|
5
5
|
Project-URL: Homepage, https://github.com/markolofsen/django-cfg
|
6
6
|
Project-URL: Documentation, https://django-cfg.readthedocs.io
|
@@ -42,6 +42,7 @@ Requires-Dist: django-constance>=4.3.2
|
|
42
42
|
Requires-Dist: django-cors-headers>=4.7.0
|
43
43
|
Requires-Dist: django-extensions>=4.1
|
44
44
|
Requires-Dist: django-filter>=25.0
|
45
|
+
Requires-Dist: django-import-export<5.0.0,>=4.3.9
|
45
46
|
Requires-Dist: django-json-widget>=2.0.3
|
46
47
|
Requires-Dist: django-ratelimit<5.0.0,>=4.1.0
|
47
48
|
Requires-Dist: django-redis>=6.0.0
|
@@ -1,28 +1,29 @@
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
django_cfg/__init__.py,sha256=
|
2
|
+
django_cfg/__init__.py,sha256=fM4K_cJmlssCq5hJF4G4km8vWWQCG_4osKy8Y4OONms,14288
|
3
3
|
django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
|
4
4
|
django_cfg/exceptions.py,sha256=RTQEoU3PfR8lqqNNv5ayd_HY2yJLs3eioqUy8VM6AG4,10378
|
5
|
-
django_cfg/integration.py,sha256
|
5
|
+
django_cfg/integration.py,sha256=jUO-uZXLmBXy9iugqgsl_xnYA_xoH3LZg5RxZbobVrc,4988
|
6
6
|
django_cfg/pyproject.toml,sha256=l_JhZm2DDUtS_ekHMEflpnfRtqHek3W_ASHMFBmCx7k,9250
|
7
7
|
django_cfg/routers.py,sha256=O954Hm1BKMyN9-tIK2SByxTHafy_SGzbHLjCbBaf4lg,2622
|
8
8
|
django_cfg/version_check.py,sha256=jI4v3YMdQriUEeb_TvRl511sDghy6I75iKRDUaNpucs,4800
|
9
9
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
10
|
-
django_cfg/apps/urls.py,sha256=
|
10
|
+
django_cfg/apps/urls.py,sha256=U2WjXOsW0cOI2JtQBRe0IJZWYoNCWqXvsBZBjT0PryY,2052
|
11
11
|
django_cfg/apps/accounts/README.md,sha256=sXyAC_x46ymFRWnU86IWzLkUd62wJY90Ypxn-30WwwU,8262
|
12
12
|
django_cfg/apps/accounts/__init__.py,sha256=osecEQhMJVP8ejhZzElNsAqA1fX-GPD3K5_yNwDk6IE,100
|
13
13
|
django_cfg/apps/accounts/apps.py,sha256=Xd4XNpY1tw3zOqk_M9L6MR6oFdfFMYrfmrmbj0uelUs,492
|
14
|
-
django_cfg/apps/accounts/models.py,sha256=
|
14
|
+
django_cfg/apps/accounts/models.py,sha256=1tavqm0ICfGRggcplzU_GhrhR__hnoWOd8CYZWXtBSw,11631
|
15
15
|
django_cfg/apps/accounts/signals.py,sha256=AlFLAOF5OKUa5qnwoZQXvYhBsfEM1ISnde1Qrv7Or3U,5930
|
16
16
|
django_cfg/apps/accounts/urls.py,sha256=x3-0UMe8TKsuJ_GyC2hW0Un7wvnIVfuUSJ_x4HN5FWY,1334
|
17
|
-
django_cfg/apps/accounts/admin/__init__.py,sha256=
|
18
|
-
django_cfg/apps/accounts/admin/activity.py,sha256=
|
19
|
-
django_cfg/apps/accounts/admin/filters.py,sha256=
|
17
|
+
django_cfg/apps/accounts/admin/__init__.py,sha256=2bC4EGpUXbGGcWqDfASXPL10VPLvTv2RP9y-OU37kuY,515
|
18
|
+
django_cfg/apps/accounts/admin/activity.py,sha256=gyr7Z1FPLicourmIBPHhNgptgQcwTkAIqBe55YUx1Xw,3508
|
19
|
+
django_cfg/apps/accounts/admin/filters.py,sha256=MTlC031RYuYnv9rRo206CLV-KEM_3fCGp2MkkhVJGLk,4433
|
20
20
|
django_cfg/apps/accounts/admin/group.py,sha256=ga4SbJInm6ZFoQXj_oZDt-GYUgDT8xCW3U5fA-WRuFg,440
|
21
21
|
django_cfg/apps/accounts/admin/inlines.py,sha256=dIYktvTb1JoSfwGToyZ3Q92nRJkZedolLKgV2TxRpNU,4512
|
22
22
|
django_cfg/apps/accounts/admin/otp.py,sha256=tWnmgbsUDurdPqixHDNqyiL4N9h6cu0wxFqxXS46DaM,1581
|
23
|
-
django_cfg/apps/accounts/admin/registration_source.py,sha256=
|
24
|
-
django_cfg/apps/accounts/admin/
|
25
|
-
django_cfg/apps/accounts/admin/
|
23
|
+
django_cfg/apps/accounts/admin/registration_source.py,sha256=wu_vtYytlAee3lI6djO2Ga4TJNHjq0NowBOZRqwZBUg,3202
|
24
|
+
django_cfg/apps/accounts/admin/resources.py,sha256=ZCs8Yl6r_m8bQuYQuzmymCnd1IvKAtdQLneOFC1yBD4,7511
|
25
|
+
django_cfg/apps/accounts/admin/twilio_response.py,sha256=0K424Yn1Gle41i7xCuFs821GxYQnJ3NurFhazdH8NrQ,6950
|
26
|
+
django_cfg/apps/accounts/admin/user.py,sha256=h9c0wCZ4--_DLZ8rKNMPOtKECxHO8N_228TDnKLFdVA,10571
|
26
27
|
django_cfg/apps/accounts/management/commands/test_otp.py,sha256=NPlANZtGgq9kqOHWneaTyWUIsyvpIbrP6wM0jASSfhA,6980
|
27
28
|
django_cfg/apps/accounts/managers/__init__.py,sha256=NtY-cQl-6TUVum9HEVud4RKbR72xEiYzK14mbd9Y2Y0,50
|
28
29
|
django_cfg/apps/accounts/managers/user_manager.py,sha256=TVUgPIYh82f7HNu6tl446KGm65yWA9IFrzbb0fZprw4,14852
|
@@ -30,6 +31,7 @@ django_cfg/apps/accounts/migrations/0001_initial.py,sha256=j139MrNVgq7g7bpV5B14R
|
|
30
31
|
django_cfg/apps/accounts/migrations/0002_add_phone_otp_clean.py,sha256=z7FYr6BF_CCyZSjfJqlvcUH1Jfla4JN5uqmlkNyxO4A,1490
|
31
32
|
django_cfg/apps/accounts/migrations/0003_twilioresponse.py,sha256=KBeWBm8UJwqV5UG6KTl9Ugz3Mqe3yJ0ufzwdf8YE4Vo,3172
|
32
33
|
django_cfg/apps/accounts/migrations/0004_delete_twilioresponse.py,sha256=ounUBBUkukjCxdrfbaYO3nswGeluPfwzqKADJ3RUep0,311
|
34
|
+
django_cfg/apps/accounts/migrations/0005_twilioresponse.py,sha256=G0rrkn9CnlRJdkrJfoZ_qQk4jul80rqbKalUsRwSR6w,3174
|
33
35
|
django_cfg/apps/accounts/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
34
36
|
django_cfg/apps/accounts/serializers/__init__.py,sha256=ROvk50GAJY84w7hMCsB6XnnKd__k08SYsanZnONWks0,480
|
35
37
|
django_cfg/apps/accounts/serializers/otp.py,sha256=PrqldpMRlXfZ95HJKa2zgof5BeSJW-IMUqBT8Fg3k9c,4538
|
@@ -58,7 +60,6 @@ django_cfg/apps/api/health/urls.py,sha256=jd1UTpxPCRIh7veAlTB51mvBcQzdfC8MYcPik4
|
|
58
60
|
django_cfg/apps/api/health/views.py,sha256=CWbrq_ChAOHhsD4P2YdjKCzxuHb5xznnZxbZ2kN9p0s,8474
|
59
61
|
django_cfg/apps/leads/README.md,sha256=QjYHj_33zQyKzOtPeUqbkTy0fvLgIexKH7JxnzxEKTY,3444
|
60
62
|
django_cfg/apps/leads/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
61
|
-
django_cfg/apps/leads/admin.py,sha256=Zdl1-S3ScuoH2KgRiM_fjCl9cbqcFDIOxijQh1Y6KtU,2231
|
62
63
|
django_cfg/apps/leads/apps.py,sha256=YH2S1mFBZyemPereDgDUiDmblXbFTm-e1BFCcT2Pwvk,407
|
63
64
|
django_cfg/apps/leads/models.py,sha256=Eco7HrQIl8jK4N8I6yYgNckb4nM9Vkp0kHpx7vEW9OE,3059
|
64
65
|
django_cfg/apps/leads/serializers.py,sha256=dg-FmFmaKrOBQetJDs9Inoya6WqY5DZhvE6pVS14ONg,1569
|
@@ -66,17 +67,22 @@ django_cfg/apps/leads/signals.py,sha256=exZm9xhHs53a16jI6xTWsz0hDS7WYQppWKL-Qx24
|
|
66
67
|
django_cfg/apps/leads/tests.py,sha256=uM7qcaJfNT-fFjla5s4vr7hQiGzXf7CUzqyX1QDwwfE,10686
|
67
68
|
django_cfg/apps/leads/urls.py,sha256=KFCdB9x0LySJODeUElQ2c-dxcl_z79xzYNC_9i6vFPk,355
|
68
69
|
django_cfg/apps/leads/views.py,sha256=3tnnxAwEnD_ycIhZeIvTqzOyNaMTA00gxnbywtnPe8A,3212
|
70
|
+
django_cfg/apps/leads/admin/__init__.py,sha256=81WXUqQ5lACzV_G8n_PdPIoGeb95NKow_xcHv-Y13YM,111
|
71
|
+
django_cfg/apps/leads/admin/leads_admin.py,sha256=VGLYkXPln4ObaXaR2Y9GeUcELHDfG83iRuow9Fvng1U,2556
|
72
|
+
django_cfg/apps/leads/admin/resources.py,sha256=bJdydBmPMZ08N5_IylaZEtSY4JySs1-h9pJoKFm04BA,3742
|
69
73
|
django_cfg/apps/leads/migrations/0001_initial.py,sha256=mBDupgmgmaLQFO9bLaBOODN7pervwAnN_EfsS08MoB4,4876
|
70
74
|
django_cfg/apps/leads/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
71
75
|
django_cfg/apps/newsletter/README.md,sha256=cnNXnAUsCVtelMNGYc4a8qJsoiVb--J2OOSh_Jw8piA,3202
|
72
76
|
django_cfg/apps/newsletter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
73
|
-
django_cfg/apps/newsletter/admin.py,sha256=7uZIL-BVtB0l22vgsofQi02Lgub_kJ66RcB154uQunQ,8816
|
74
|
-
django_cfg/apps/newsletter/admin_filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFEJDZst5Fhj5Sv5c,3675
|
75
77
|
django_cfg/apps/newsletter/apps.py,sha256=TXrULqE2HbmEIHaLomw7z9bkC19le1rKwlUWhK1xrVo,566
|
76
78
|
django_cfg/apps/newsletter/models.py,sha256=tc5IEUJZUAdYbQOhT_XvfiGL86FIb5LvPAuq7TOPrAM,8930
|
77
79
|
django_cfg/apps/newsletter/serializers.py,sha256=Nse8ZmBDNdhzfgZu53LNp_JOR327rI1fSHpgdJtCoV8,4133
|
78
80
|
django_cfg/apps/newsletter/signals.py,sha256=0wkOxEXnwBnLA1B72sZ_nb_x2ycsvQSQ3jvMwYi92zk,2974
|
79
81
|
django_cfg/apps/newsletter/urls.py,sha256=Zfbgj0NZ06dMu503JOn4GGgmKpQ3tOjTIyUmEslaJdE,1609
|
82
|
+
django_cfg/apps/newsletter/admin/__init__.py,sha256=dXCym_3qp9HxT0sUV_LBGgEkKv1k_Mj3a0TTZYnH2yI,290
|
83
|
+
django_cfg/apps/newsletter/admin/filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFEJDZst5Fhj5Sv5c,3675
|
84
|
+
django_cfg/apps/newsletter/admin/newsletter_admin.py,sha256=QJ-28f7LW7E5F8xfihYtjbbzUBNu4kqiFhTwHWQcEaQ,9508
|
85
|
+
django_cfg/apps/newsletter/admin/resources.py,sha256=BGgKJSvUG5ZBOZiZ9YymAm2TE5BY8IXB8t-DgUHpbzA,6956
|
80
86
|
django_cfg/apps/newsletter/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
81
87
|
django_cfg/apps/newsletter/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
82
88
|
django_cfg/apps/newsletter/management/commands/test_newsletter.py,sha256=T6Jfhq6kx8UNLooEqbs5diWz6TQ6gOy_KRVM9EBrBkY,5870
|
@@ -93,20 +99,22 @@ django_cfg/apps/newsletter/views/newsletters.py,sha256=gb8skjDYxHd8R2DAVUhSe6z4l
|
|
93
99
|
django_cfg/apps/newsletter/views/subscriptions.py,sha256=marHLbRT6a6e8tMjKVtKG_0K6G_gcjKCU9LmMGihKwg,4774
|
94
100
|
django_cfg/apps/newsletter/views/tracking.py,sha256=EJlAltpASzc_0nslVPJt-6mnIqI_QCEmz3MQEGPKzmU,2481
|
95
101
|
django_cfg/apps/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
96
|
-
django_cfg/apps/support/admin.py,sha256=-fcegtqoCcwPiBXwyNLMftcYCTTbTRRBpWItyeNNkDY,8827
|
97
|
-
django_cfg/apps/support/admin_filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
|
98
102
|
django_cfg/apps/support/apps.py,sha256=t-MzsKjXx6ZXACkG72Wa8GSmRYOERxfhrZUwUwjqCak,304
|
99
103
|
django_cfg/apps/support/models.py,sha256=a_m4CWpfR7A2KlVRUYOGPdpNyNPJflD3Mq7EkiwzICA,2465
|
100
104
|
django_cfg/apps/support/serializers.py,sha256=N-PP8d1H00mHSWT6x5DwDYrJoR3PS3AKrUW80L4lncs,1385
|
101
105
|
django_cfg/apps/support/signals.py,sha256=z465Nr7xin7S82YA7v-E5bNlimpv3ewN7kLoJzlGxtQ,2816
|
102
106
|
django_cfg/apps/support/urls.py,sha256=t3r4wGRUqQS-BDCQgSXwSF9pbucyvr7lo7_pJ1uZ52Q,899
|
107
|
+
django_cfg/apps/support/admin/__init__.py,sha256=vVoUWfKj6qBHhwr6zG2ZH8ZpUegYNJvzuAxdFoHEo_0,153
|
108
|
+
django_cfg/apps/support/admin/filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
|
109
|
+
django_cfg/apps/support/admin/resources.py,sha256=8F0s_3Taz5LCUwlxdRPEcM9tkf08ZS0jBrHc2yHzXb4,5033
|
110
|
+
django_cfg/apps/support/admin/support_admin.py,sha256=UEz4f12VQ_fZeykpC2DG3qOuw101O-7Ptxbq5imTVOk,9237
|
103
111
|
django_cfg/apps/support/managers/message_manager.py,sha256=lwfhkuCksIRHL_6563irk6pS0IHvHma9VVVqBMVuq7s,1159
|
104
112
|
django_cfg/apps/support/managers/ticket_manager.py,sha256=SEoiGvesTNEZtrwS7HC76F_-fVbDqQrcL5zyO7Mpkl4,3058
|
105
113
|
django_cfg/apps/support/migrations/0001_initial.py,sha256=AUUXqMiRbv_bRhogBWKWdrxvHpCXxzS2Ku4O6pkq3nU,2986
|
106
114
|
django_cfg/apps/support/migrations/0002_alter_message_ticket.py,sha256=MxdjTW7hJ1B0yQloKR3sVOgujOzSA6eZp5YCmCuXht0,571
|
107
115
|
django_cfg/apps/support/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
108
116
|
django_cfg/apps/support/templates/support/chat/access_denied.html,sha256=QdVXR-61aUHmh9Vlag_zXGcS_BG7a807LesIbduqnag,1094
|
109
|
-
django_cfg/apps/support/templates/support/chat/ticket_chat.html,sha256=
|
117
|
+
django_cfg/apps/support/templates/support/chat/ticket_chat.html,sha256=Xz5Z0ADP9aZpiE_cJdcRP9UJpJhY32h1h1sLfI94zgU,14483
|
110
118
|
django_cfg/apps/support/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
111
119
|
django_cfg/apps/support/utils/support_email_service.py,sha256=0l4dXqAG6oN2UR7W3JzuRhlomaWa41IT7ceVcanluKs,5570
|
112
120
|
django_cfg/apps/support/views/__init__.py,sha256=E-Iqiy888SncfBTiSyXyGCjaNrMa5Klvapzb3ItYPXc,448
|
@@ -137,7 +145,7 @@ django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html,sha256=Sxb7
|
|
137
145
|
django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html,sha256=DeJjj3dxYcBEAj8Hv4Ii4koEMaNRVHta9_R25qZyK4w,6317
|
138
146
|
django_cfg/apps/tasks/templates/tasks/components/tasks_tab.html,sha256=Yd6SPgdQX1p_6miitu3nZHjdZOtbsXMhUP4DnXSntPs,1826
|
139
147
|
django_cfg/apps/tasks/templates/tasks/components/workers_tab.html,sha256=4Ud4QpG6bnxBsrBDKGXdy4GcIne43wC13Ch1szZzrbo,1580
|
140
|
-
django_cfg/archive/django_sample.zip,sha256=
|
148
|
+
django_cfg/archive/django_sample.zip,sha256=MDARugxPFDXNEj-BXdtK1HdNR8pZ35Wq7JtUoYM3_Lo,624971
|
141
149
|
django_cfg/cli/README.md,sha256=m0pkw3h-g_dJ4wU1N5eMxQP_ecGUDTM_3l0tDNDxByQ,11669
|
142
150
|
django_cfg/cli/__init__.py,sha256=i3ksFngCqZCBvaimQcBD1P2_gr5PiM--4efLScCjvvU,152
|
143
151
|
django_cfg/cli/main.py,sha256=6PfG3ec2AmPHLmUGYc472CId1gs8cRKYrHcvd3ECPxU,998
|
@@ -146,9 +154,9 @@ django_cfg/cli/commands/__init__.py,sha256=EKLXDAx-QttnGmdjsmVANAfhxWplxl2V_2I0S
|
|
146
154
|
django_cfg/cli/commands/create_project.py,sha256=bxgf_YCVAhaGx-mvpuJvcx8fjMJe-EPiuw7pbD4iNxA,21053
|
147
155
|
django_cfg/cli/commands/info.py,sha256=tLZmiZX2nEpwrcN9cUwrGKb95X7dasuoeePrqTmK2do,4932
|
148
156
|
django_cfg/core/__init__.py,sha256=eVK57qFOok9kTeHoNEMQ1BplkUOaQ7NB9kP9eQK1vg0,358
|
149
|
-
django_cfg/core/config.py,sha256=
|
157
|
+
django_cfg/core/config.py,sha256=J8SZhirJTw0nJ7Z6wkiUqFan4s7IXUmgB-QbvLAWd_k,27820
|
150
158
|
django_cfg/core/environment.py,sha256=AXNKVxcV_3_3gtlafDx3wFTnTPPMGQ9gl40vYm2w-Hg,9101
|
151
|
-
django_cfg/core/generation.py,sha256=
|
159
|
+
django_cfg/core/generation.py,sha256=i3c0RI4vUk3X2JZiULfoH5_H8ZjO7rOZTY83eJDfDYA,24715
|
152
160
|
django_cfg/core/validation.py,sha256=j0q57oJEJjI6ylb3AzvsgupmvBKsUcrxpmkfKF3ZRF4,6585
|
153
161
|
django_cfg/management/__init__.py,sha256=z8p1jlyajNUleDxRUXL3iXUI99xXWFYNtFAe5nKy1kA,43
|
154
162
|
django_cfg/management/commands/__init__.py,sha256=z8p1jlyajNUleDxRUXL3iXUI99xXWFYNtFAe5nKy1kA,43
|
@@ -157,7 +165,7 @@ django_cfg/management/commands/clear_constance.py,sha256=bSUhxEIKFLmXVilQGn3s9FZ
|
|
157
165
|
django_cfg/management/commands/create_token.py,sha256=beHtUTuyFZhG97F9vSkaX-u7tieAZW-C6pntujGw1C8,11796
|
158
166
|
django_cfg/management/commands/generate.py,sha256=w0BF7IMftxNjxTxFuY8cw5pNKGW-LmTScJ8kZpxHu_8,4248
|
159
167
|
django_cfg/management/commands/list_urls.py,sha256=D8ikInA3uE1LbQGLWmfdLnEqPg7wqrI3caQA6iTe_-0,11009
|
160
|
-
django_cfg/management/commands/migrator.py,sha256=
|
168
|
+
django_cfg/management/commands/migrator.py,sha256=swU9bA0eV4ILgcmrn0vJZrmKNYkrTZ7eYOf3qLdmyH8,17969
|
161
169
|
django_cfg/management/commands/rundramatiq.py,sha256=62l7PvtVabtfRtrdktj_5uBbXDXi8oEde0W4IsmoHXw,8980
|
162
170
|
django_cfg/management/commands/runserver_ngrok.py,sha256=mcTioDIzHgha6sGo5eazlJhdKr8y5-uEQIc3qG3AvCI,5237
|
163
171
|
django_cfg/management/commands/script.py,sha256=I6zOEQEGaED0HoLxl2EqKz39HwbKg9HhdxnGKybfH5s,16974
|
@@ -253,9 +261,9 @@ django_cfg/templates/admin/snippets/zones/zones_table.html,sha256=2oaiCXVof2F7Li
|
|
253
261
|
django_cfg/templates/emails/base_email.html,sha256=TWcvYa2IHShlF_E8jf1bWZStRO0v8G4L_GexPxvz6XQ,8836
|
254
262
|
django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
|
255
263
|
django_cfg/utils/path_resolution.py,sha256=eML-6-RIGTs5TePktIQN8nxfDUEFJ3JA0AzWBcihAbs,13894
|
256
|
-
django_cfg/utils/smart_defaults.py,sha256=
|
257
|
-
django_cfg-1.1.
|
258
|
-
django_cfg-1.1.
|
259
|
-
django_cfg-1.1.
|
260
|
-
django_cfg-1.1.
|
261
|
-
django_cfg-1.1.
|
264
|
+
django_cfg/utils/smart_defaults.py,sha256=H0Q3dzXOok3mNV7358lZLNYOJoiX_eIay8c83ugvygk,21049
|
265
|
+
django_cfg-1.1.70.dist-info/METADATA,sha256=9Vvp1wGezwIVA7mJ92DrD4jZxvFVGV5Xg0B0O3WvE5s,44134
|
266
|
+
django_cfg-1.1.70.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
267
|
+
django_cfg-1.1.70.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
268
|
+
django_cfg-1.1.70.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
269
|
+
django_cfg-1.1.70.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|