django-cfg 1.2.17__py3-none-any.whl → 1.2.19__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/models/__init__.py +68 -0
- django_cfg/apps/accounts/models/activity.py +34 -0
- django_cfg/apps/accounts/models/auth.py +50 -0
- django_cfg/apps/accounts/models/base.py +8 -0
- django_cfg/apps/accounts/models/choices.py +32 -0
- django_cfg/apps/accounts/models/integrations.py +75 -0
- django_cfg/apps/accounts/models/registration.py +52 -0
- django_cfg/apps/accounts/models/user.py +80 -0
- django_cfg/apps/maintenance/__init__.py +53 -24
- django_cfg/apps/maintenance/admin/__init__.py +7 -18
- django_cfg/apps/maintenance/admin/api_key_admin.py +185 -0
- django_cfg/apps/maintenance/admin/log_admin.py +156 -0
- django_cfg/apps/maintenance/admin/scheduled_admin.py +390 -0
- django_cfg/apps/maintenance/admin/site_admin.py +448 -0
- django_cfg/apps/maintenance/apps.py +9 -96
- django_cfg/apps/maintenance/management/commands/maintenance.py +193 -307
- django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +241 -0
- django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +152 -111
- django_cfg/apps/maintenance/managers/__init__.py +7 -12
- django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +192 -0
- django_cfg/apps/maintenance/managers/maintenance_log_manager.py +151 -0
- django_cfg/apps/maintenance/migrations/0001_initial.py +145 -705
- django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py +21 -0
- django_cfg/apps/maintenance/models/__init__.py +23 -21
- django_cfg/apps/maintenance/models/cloudflare_api_key.py +109 -0
- django_cfg/apps/maintenance/models/cloudflare_site.py +125 -0
- django_cfg/apps/maintenance/models/maintenance_log.py +131 -0
- django_cfg/apps/maintenance/models/scheduled_maintenance.py +307 -0
- django_cfg/apps/maintenance/services/__init__.py +37 -16
- django_cfg/apps/maintenance/services/bulk_operations_service.py +400 -0
- django_cfg/apps/maintenance/services/maintenance_service.py +230 -0
- django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +381 -0
- django_cfg/apps/maintenance/services/site_sync_service.py +390 -0
- django_cfg/apps/maintenance/utils/__init__.py +12 -0
- django_cfg/apps/maintenance/utils/retry_utils.py +109 -0
- django_cfg/config.py +4 -0
- django_cfg/core/config.py +4 -6
- django_cfg/modules/django_unfold/dashboard.py +4 -5
- {django_cfg-1.2.17.dist-info → django_cfg-1.2.19.dist-info}/METADATA +52 -1
- {django_cfg-1.2.17.dist-info → django_cfg-1.2.19.dist-info}/RECORD +45 -55
- django_cfg/apps/maintenance/README.md +0 -305
- django_cfg/apps/maintenance/admin/deployments_admin.py +0 -251
- django_cfg/apps/maintenance/admin/events_admin.py +0 -374
- django_cfg/apps/maintenance/admin/monitoring_admin.py +0 -215
- django_cfg/apps/maintenance/admin/sites_admin.py +0 -464
- django_cfg/apps/maintenance/managers/deployments.py +0 -287
- django_cfg/apps/maintenance/managers/events.py +0 -374
- django_cfg/apps/maintenance/managers/monitoring.py +0 -301
- django_cfg/apps/maintenance/managers/sites.py +0 -335
- django_cfg/apps/maintenance/models/cloudflare.py +0 -316
- django_cfg/apps/maintenance/models/maintenance.py +0 -334
- django_cfg/apps/maintenance/models/monitoring.py +0 -393
- django_cfg/apps/maintenance/models/sites.py +0 -419
- django_cfg/apps/maintenance/serializers/__init__.py +0 -60
- django_cfg/apps/maintenance/serializers/actions.py +0 -310
- django_cfg/apps/maintenance/serializers/base.py +0 -44
- django_cfg/apps/maintenance/serializers/deployments.py +0 -209
- django_cfg/apps/maintenance/serializers/events.py +0 -210
- django_cfg/apps/maintenance/serializers/monitoring.py +0 -278
- django_cfg/apps/maintenance/serializers/sites.py +0 -213
- django_cfg/apps/maintenance/services/README.md +0 -168
- django_cfg/apps/maintenance/services/cloudflare_client.py +0 -441
- django_cfg/apps/maintenance/services/dns_manager.py +0 -497
- django_cfg/apps/maintenance/services/maintenance_manager.py +0 -504
- django_cfg/apps/maintenance/services/site_sync.py +0 -448
- django_cfg/apps/maintenance/services/sync_command_service.py +0 -330
- django_cfg/apps/maintenance/services/worker_manager.py +0 -264
- django_cfg/apps/maintenance/signals.py +0 -38
- django_cfg/apps/maintenance/urls.py +0 -36
- django_cfg/apps/maintenance/views/__init__.py +0 -18
- django_cfg/apps/maintenance/views/base.py +0 -61
- django_cfg/apps/maintenance/views/deployments.py +0 -175
- django_cfg/apps/maintenance/views/events.py +0 -204
- django_cfg/apps/maintenance/views/monitoring.py +0 -213
- django_cfg/apps/maintenance/views/sites.py +0 -338
- django_cfg/models/cloudflare.py +0 -316
- /django_cfg/apps/accounts/{models.py → __models.py} +0 -0
- {django_cfg-1.2.17.dist-info → django_cfg-1.2.19.dist-info}/WHEEL +0 -0
- {django_cfg-1.2.17.dist-info → django_cfg-1.2.19.dist-info}/entry_points.txt +0 -0
- {django_cfg-1.2.17.dist-info → django_cfg-1.2.19.dist-info}/licenses/LICENSE +0 -0
@@ -1,14 +1,14 @@
|
|
1
1
|
django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
django_cfg/__init__.py,sha256=
|
2
|
+
django_cfg/__init__.py,sha256=b1RNTbnScj7sTzukOJA9T2KTrXM-s0tfkIq0JPjq-ig,1631
|
3
3
|
django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
|
4
|
-
django_cfg/config.py,sha256=
|
4
|
+
django_cfg/config.py,sha256=ME-JKaVzcdmaGhuc1YTkEWoMKSaUasNf1SBlNz-NfrM,1399
|
5
5
|
django_cfg/urls.py,sha256=bpRFjMonQuk4UCUMxx4ueBX3YDNB7HXKFwEghQ3KR3o,793
|
6
6
|
django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
|
7
7
|
django_cfg/apps/urls.py,sha256=y10rWxIMf70GIO_QPXv59reFArkQhkvknKXTILgdvs0,2346
|
8
8
|
django_cfg/apps/accounts/README.md,sha256=YkUYJ3iKMYTmm9ALK2PDnX75SDqZxgnkzNLCD5efxRs,8227
|
9
9
|
django_cfg/apps/accounts/__init__.py,sha256=osecEQhMJVP8ejhZzElNsAqA1fX-GPD3K5_yNwDk6IE,100
|
10
|
+
django_cfg/apps/accounts/__models.py,sha256=65AomWYd78ptQ60drPbodxf0Ue310vmJQpQOPHL6V3E,10161
|
10
11
|
django_cfg/apps/accounts/apps.py,sha256=Xd4XNpY1tw3zOqk_M9L6MR6oFdfFMYrfmrmbj0uelUs,492
|
11
|
-
django_cfg/apps/accounts/models.py,sha256=65AomWYd78ptQ60drPbodxf0Ue310vmJQpQOPHL6V3E,10161
|
12
12
|
django_cfg/apps/accounts/signals.py,sha256=oIMM0H4FySCWDsavcVeBYppokVghfWTND6YrPpWM5oo,6351
|
13
13
|
django_cfg/apps/accounts/urls.py,sha256=x3-0UMe8TKsuJ_GyC2hW0Un7wvnIVfuUSJ_x4HN5FWY,1334
|
14
14
|
django_cfg/apps/accounts/admin/__init__.py,sha256=6lzAXnF9vQJm0x1lvsq0O-IWMWluIKqbQTfdF7eDOMo,439
|
@@ -32,6 +32,14 @@ django_cfg/apps/accounts/migrations/0005_twilioresponse.py,sha256=G0rrkn9CnlRJdk
|
|
32
32
|
django_cfg/apps/accounts/migrations/0006_remove_twilioresponse_otp_secret_and_more.py,sha256=f7pHY7vNpAksPpjJnhBoYe_eQh1gY5UlRnCDiWXIJuw,1305
|
33
33
|
django_cfg/apps/accounts/migrations/0007_twilioresponse.py,sha256=-onPYnKR54_YI-LNmWOltYxVXW13lgg9nPe1GQx6CzY,5034
|
34
34
|
django_cfg/apps/accounts/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
35
|
+
django_cfg/apps/accounts/models/__init__.py,sha256=riqluOos44_VeUy_Pp24OBJuFCIHwsOznyqaJLjBPNU,1390
|
36
|
+
django_cfg/apps/accounts/models/activity.py,sha256=DjkboNegg9fZTFlP6hYXGlPTimUC3GQgJlho6U2RMJ4,1072
|
37
|
+
django_cfg/apps/accounts/models/auth.py,sha256=X9MqYaFK2KDBp3VJnWw11_VURmsZdc1hSiA6k59awHE,1365
|
38
|
+
django_cfg/apps/accounts/models/base.py,sha256=NArUYpKKmIvjCBfpng5oOATuV7BPwbFlAi7LZXBSvNE,195
|
39
|
+
django_cfg/apps/accounts/models/choices.py,sha256=Hk7B8ns-WCeQe_mCLA5Ex7IqHs9S8dyq7Ms9mVr7Hxg,971
|
40
|
+
django_cfg/apps/accounts/models/integrations.py,sha256=z3qGki0eluvy6RXivtIyjhqqLxYNuYpC9WOrOn1H4Oc,2965
|
41
|
+
django_cfg/apps/accounts/models/registration.py,sha256=tU7oJ_1mPlX877mK3nsuEOyIRt1PE_x6kdG0Vl4BuRE,2075
|
42
|
+
django_cfg/apps/accounts/models/user.py,sha256=xzOguKpCBzbX5tkWqvdhJU-debN8ppRFyJXbrNKgJjI,2554
|
35
43
|
django_cfg/apps/accounts/serializers/__init__.py,sha256=ROvk50GAJY84w7hMCsB6XnnKd__k08SYsanZnONWks0,480
|
36
44
|
django_cfg/apps/accounts/serializers/otp.py,sha256=bYcQ1x8AREHrtiLX9rlFmR5x9IpSFwWVsB3HYCqw95k,4699
|
37
45
|
django_cfg/apps/accounts/serializers/profile.py,sha256=QGPsYi7uxuEkvO88rqjC5FQ80MfmXvRNN-0VSEzXAiI,4863
|
@@ -200,53 +208,36 @@ django_cfg/apps/leads/admin/leads_admin.py,sha256=q1d1kmTWZUCUHxePOlDrwF9jJvgjN7
|
|
200
208
|
django_cfg/apps/leads/admin/resources.py,sha256=bJdydBmPMZ08N5_IylaZEtSY4JySs1-h9pJoKFm04BA,3742
|
201
209
|
django_cfg/apps/leads/migrations/0001_initial.py,sha256=mBDupgmgmaLQFO9bLaBOODN7pervwAnN_EfsS08MoB4,4876
|
202
210
|
django_cfg/apps/leads/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
203
|
-
django_cfg/apps/maintenance/
|
204
|
-
django_cfg/apps/maintenance/
|
205
|
-
django_cfg/apps/maintenance/
|
206
|
-
django_cfg/apps/maintenance/
|
207
|
-
django_cfg/apps/maintenance/
|
208
|
-
django_cfg/apps/maintenance/admin/
|
209
|
-
django_cfg/apps/maintenance/admin/
|
210
|
-
django_cfg/apps/maintenance/admin/events_admin.py,sha256=0EopccZ6wOHJeJLLRGtr1u6DjhLviaNTGbCoz-jBr9Q,12508
|
211
|
-
django_cfg/apps/maintenance/admin/monitoring_admin.py,sha256=tKU2V5OA9XqrRSnuOOz33pJnOBv1urkJRAmx34i7Bmc,7510
|
212
|
-
django_cfg/apps/maintenance/admin/sites_admin.py,sha256=EDMJtMW20sYl_O9vmD51N7C_hKeYSLpGhWnanOykDic,16470
|
211
|
+
django_cfg/apps/maintenance/__init__.py,sha256=4rqheQ1GUfXgQhlEhEGJ1EJLPeVR-w9qi66W0uymAps,2900
|
212
|
+
django_cfg/apps/maintenance/apps.py,sha256=XYcmnG1Yq0VWs5oy0j9JRmkjRIr0j_4OSzIvzQr_JkM,455
|
213
|
+
django_cfg/apps/maintenance/admin/__init__.py,sha256=TqusqIrLX50xapmtOALAkJ0hN-9-_lgvRfFBwdCuqmg,430
|
214
|
+
django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=l6LiLlw3M64tVssq1PFlmvahLYiq1VS-jHYJdZMrCus,5990
|
215
|
+
django_cfg/apps/maintenance/admin/log_admin.py,sha256=x0zAYGUXTckH2eS7wjW7bbGHSWlwqq1-jRz_UmSCoEI,4814
|
216
|
+
django_cfg/apps/maintenance/admin/scheduled_admin.py,sha256=Tbkah4TB0mLNLe4uZLMhYDULKRA6mnTiS3Dm6-2SaYA,14957
|
217
|
+
django_cfg/apps/maintenance/admin/site_admin.py,sha256=LAkUpcVWj6GUVtJP2jKA96YNIi9SCBSj49TRzPXBlR4,16216
|
213
218
|
django_cfg/apps/maintenance/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
214
219
|
django_cfg/apps/maintenance/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
215
|
-
django_cfg/apps/maintenance/management/commands/maintenance.py,sha256=
|
216
|
-
django_cfg/apps/maintenance/management/commands/
|
217
|
-
django_cfg/apps/maintenance/
|
218
|
-
django_cfg/apps/maintenance/managers/
|
219
|
-
django_cfg/apps/maintenance/managers/
|
220
|
-
django_cfg/apps/maintenance/managers/
|
221
|
-
django_cfg/apps/maintenance/
|
222
|
-
django_cfg/apps/maintenance/migrations/
|
220
|
+
django_cfg/apps/maintenance/management/commands/maintenance.py,sha256=I7ZpQEELSEC-itzK0U6G7HVrdtmpfHSN6ByTv4dc9pg,11557
|
221
|
+
django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py,sha256=-Tv96b0AqmjSZCZHARE01ETazBusVqXBafF-gRoF3P0,10337
|
222
|
+
django_cfg/apps/maintenance/management/commands/sync_cloudflare.py,sha256=cI_JDL3tAyuJDNOSqg-joubZkPyI5YXUNgFOQRiIbds,7844
|
223
|
+
django_cfg/apps/maintenance/managers/__init__.py,sha256=sMJ3ny9-xKSWdLVOLlnwzjij7EwKBM6FxxSBTvJrSkQ,397
|
224
|
+
django_cfg/apps/maintenance/managers/cloudflare_site_manager.py,sha256=Mr8_2u0wSRzeV_DT6tq-XloQ55mEK1VOIcOE8AJ-Um4,6209
|
225
|
+
django_cfg/apps/maintenance/managers/maintenance_log_manager.py,sha256=SEbEIy6yEWDHVtQAJE1fixU1nOown6ONPbWngKv878w,4736
|
226
|
+
django_cfg/apps/maintenance/migrations/0001_initial.py,sha256=_TY5VA_f_ozqRRhAGADiuuU6Gd1GmM5JzOTWiEgVeFE,14757
|
227
|
+
django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py,sha256=6-xOC2hsn2_TdrtB8k7wkrYJX4l3Vn6m780glGxNBHg,566
|
223
228
|
django_cfg/apps/maintenance/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
224
|
-
django_cfg/apps/maintenance/models/__init__.py,sha256=
|
225
|
-
django_cfg/apps/maintenance/models/
|
226
|
-
django_cfg/apps/maintenance/models/
|
227
|
-
django_cfg/apps/maintenance/models/
|
228
|
-
django_cfg/apps/maintenance/models/
|
229
|
-
django_cfg/apps/maintenance/
|
230
|
-
django_cfg/apps/maintenance/
|
231
|
-
django_cfg/apps/maintenance/
|
232
|
-
django_cfg/apps/maintenance/
|
233
|
-
django_cfg/apps/maintenance/
|
234
|
-
django_cfg/apps/maintenance/
|
235
|
-
django_cfg/apps/maintenance/
|
236
|
-
django_cfg/apps/maintenance/services/README.md,sha256=MlttVPZhzxHW7uckQ5YduV7dB40HjhLRbrp19less0g,4311
|
237
|
-
django_cfg/apps/maintenance/services/__init__.py,sha256=LByFDu_Vlqw4mYLXFtEEs2SH6F05D88htBaSWMNLgn8,572
|
238
|
-
django_cfg/apps/maintenance/services/cloudflare_client.py,sha256=FAcXwo6qTTLl-5x8-IUxmeUoOuYJSCzEvOSIiRZ3RJQ,14444
|
239
|
-
django_cfg/apps/maintenance/services/dns_manager.py,sha256=3OOCSvrOsr-0WizKHl1y4E64sasz9uUT2yzLCjCVo8k,16035
|
240
|
-
django_cfg/apps/maintenance/services/maintenance_manager.py,sha256=YWqjYmNSQrHY4ueAYOnToxosliJlnWIdmviiGQmK7I0,18171
|
241
|
-
django_cfg/apps/maintenance/services/site_sync.py,sha256=tyAL3psJW-PHW07afQYnqbuqU6ctk4fVWCukb_burzw,16458
|
242
|
-
django_cfg/apps/maintenance/services/sync_command_service.py,sha256=Ls1sWXsbW75hd3m6giWHH_0f_dO0vWHq-CCpqy8-Sfs,10774
|
243
|
-
django_cfg/apps/maintenance/services/worker_manager.py,sha256=BE91DA3ccElFxUCLD424IOkANq-zUUn8iIhZl2IGck4,8771
|
244
|
-
django_cfg/apps/maintenance/views/__init__.py,sha256=O69OstM_-D8y6hbBaTIdktze2NOSiJzIIqudspNMToM,458
|
245
|
-
django_cfg/apps/maintenance/views/base.py,sha256=q_acqStFw6wRSbD7LWpuXO4_3We2bk7nk05sCEZCVZ0,1893
|
246
|
-
django_cfg/apps/maintenance/views/deployments.py,sha256=ujZNI1w2mP9-OAel_6NT6JaiC9UmMNG1EBL6PNnise8,6720
|
247
|
-
django_cfg/apps/maintenance/views/events.py,sha256=N0iwCuW2vEMYlBuZHgw5FEdRx163aWMgRLR5fpHiQ7Q,7552
|
248
|
-
django_cfg/apps/maintenance/views/monitoring.py,sha256=q3xtJUExuPCV9w86_9PHUrMoxg7CcsJTJyWG6Em1Rzc,7795
|
249
|
-
django_cfg/apps/maintenance/views/sites.py,sha256=5BJCyKIBqoxOVl2p1s78mgu3ryYXTY90Q_LBShs93d0,13513
|
229
|
+
django_cfg/apps/maintenance/models/__init__.py,sha256=z8FpMPCBLAp8Ose2_fPSYhrbuHSI7tAtRbADwhd_hu4,1074
|
230
|
+
django_cfg/apps/maintenance/models/cloudflare_api_key.py,sha256=B5pkZD9Gu_Z1XXek2VY-7SdeH0ZnXK5cKhxnaCWcv2k,3366
|
231
|
+
django_cfg/apps/maintenance/models/cloudflare_site.py,sha256=YirWNZ63buvMAqHEFeC7Vc4vh7ukI5iHOdrE7XaJ5Mg,4030
|
232
|
+
django_cfg/apps/maintenance/models/maintenance_log.py,sha256=icqjQf37-EsjHWq8MsdgHHyuMNalH84R8f_z-BKIA2M,3922
|
233
|
+
django_cfg/apps/maintenance/models/scheduled_maintenance.py,sha256=J8-8efqZsZh2FQoW3b1MtXcNeuWWr7UkScRUL_YdbGg,10368
|
234
|
+
django_cfg/apps/maintenance/services/__init__.py,sha256=KdMiqVBVecJVzCh76j5ImRHa5qOLbZsyqY4ITmaCd0c,2584
|
235
|
+
django_cfg/apps/maintenance/services/bulk_operations_service.py,sha256=O3FCYhIuSNW7PE-86aBmA7nxPtbflye9Qv3WCgQ9s-A,15039
|
236
|
+
django_cfg/apps/maintenance/services/maintenance_service.py,sha256=MiHnDcTNAik-CWOJ_XWPsv14BZmUqVwQ46TUd6YrUzM,8641
|
237
|
+
django_cfg/apps/maintenance/services/scheduled_maintenance_service.py,sha256=X9xP13B7OPUcMsl8G_U5zUPmni7pO2ru8osASCiZcfE,15218
|
238
|
+
django_cfg/apps/maintenance/services/site_sync_service.py,sha256=F4k2NFz6dQp_sgyglFQUwyVItl_eC27uBXwLVt-5V7w,13712
|
239
|
+
django_cfg/apps/maintenance/utils/__init__.py,sha256=L6UhtM9MoN1L26-l9C_Nyjp8-S-EB5_VvtvcX_E0isc,221
|
240
|
+
django_cfg/apps/maintenance/utils/retry_utils.py,sha256=O55jtdDf9om_QOf9rIAFt7ZEUeE5Ttq-KRLmSA9Bkps,4091
|
250
241
|
django_cfg/apps/newsletter/README.md,sha256=cnNXnAUsCVtelMNGYc4a8qJsoiVb--J2OOSh_Jw8piA,3202
|
251
242
|
django_cfg/apps/newsletter/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
252
243
|
django_cfg/apps/newsletter/admin.py,sha256=7uZIL-BVtB0l22vgsofQi02Lgub_kJ66RcB154uQunQ,8816
|
@@ -332,7 +323,7 @@ django_cfg/cli/commands/__init__.py,sha256=EKLXDAx-QttnGmdjsmVANAfhxWplxl2V_2I0S
|
|
332
323
|
django_cfg/cli/commands/create_project.py,sha256=iuf965j8Yg7zxHcPb0GtFHEj73CYXC45ZJRmd6RbA9E,21025
|
333
324
|
django_cfg/cli/commands/info.py,sha256=o4S1xPJSHv2oEVqmH0X9RTF5f-8Wy9579yHkyd_PC3E,4923
|
334
325
|
django_cfg/core/__init__.py,sha256=eVK57qFOok9kTeHoNEMQ1BplkUOaQ7NB9kP9eQK1vg0,358
|
335
|
-
django_cfg/core/config.py,sha256=
|
326
|
+
django_cfg/core/config.py,sha256=Khn4-yrivGkovH06uUJ3_uen8lt3I54XMKT5lYk5l3Y,27636
|
336
327
|
django_cfg/core/environment.py,sha256=MAoEPqIPsLVhSANT2Bz4nnus2wmbMW0RCOQxhQfDrDc,9106
|
337
328
|
django_cfg/core/exceptions.py,sha256=RTQEoU3PfR8lqqNNv5ayd_HY2yJLs3eioqUy8VM6AG4,10378
|
338
329
|
django_cfg/core/generation.py,sha256=zq6QZRyE8vS_fZVk2SbqHsCC_43DSvAUU4T1pMf8gSs,25374
|
@@ -371,7 +362,6 @@ django_cfg/models/api.py,sha256=bCsQR3CVsAUs78m1Q1aFpPTNbvGtr1cq-fuxdCK2-JI,4596
|
|
371
362
|
django_cfg/models/base.py,sha256=Gy_B2dXSu-lYQjxlCaP6tkngFKhBFkCPeMNIpkkkKSU,10408
|
372
363
|
django_cfg/models/cache.py,sha256=oAiBPM89pZfLlruIzDVFmqNmHdOPk3a2KAgB9jubUPg,12133
|
373
364
|
django_cfg/models/cfg.py,sha256=P6YowmE-VOqp_L25Ijxj2hjjNhB9xtlm8G35DHWqTfk,2702
|
374
|
-
django_cfg/models/cloudflare.py,sha256=6frbEeGL7kPIoBX3E_aD7wnBOwPsXQZLs6KGSZczHWM,8896
|
375
365
|
django_cfg/models/constance.py,sha256=BqwoPvUx5vfrZT6qF2KR0prpsSM5VEYIYJUVlB50ewk,8936
|
376
366
|
django_cfg/models/cors.py,sha256=lozVoQJVehhNL1qzOhvAkd4ZpgwAdOJ-OUX7wkJp5W4,3567
|
377
367
|
django_cfg/models/database.py,sha256=LpcmEljjr-2pnR8UVSziUNSnucsojfh8PcgayhrWqK4,16875
|
@@ -429,7 +419,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
|
|
429
419
|
django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
|
430
420
|
django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
|
431
421
|
django_cfg/modules/django_unfold/__init__.py,sha256=Z91x1iGmkzlRbEb2L9OCFmYDKNAV9C4G3i15j5S0esc,1898
|
432
|
-
django_cfg/modules/django_unfold/dashboard.py,sha256=
|
422
|
+
django_cfg/modules/django_unfold/dashboard.py,sha256=DHQruZRtSLD786v2R3le4mmw_5YG5rI32ZL4qjBoAkQ,13426
|
433
423
|
django_cfg/modules/django_unfold/models.py,sha256=bY6QSSaH_-r9vOTkSQjxeIkl5RaED7XkxXkT8-W5stk,4014
|
434
424
|
django_cfg/modules/django_unfold/system_monitor.py,sha256=cznZqldRJqiSLSJbs4U7R2rX8ClzoIpqdfXdXqI2iQw,6955
|
435
425
|
django_cfg/modules/django_unfold/tailwind.py,sha256=X9o1K3QL0VwUISgJ26sLb6zkdK-00qiDuekqTw-fydc,10846
|
@@ -512,8 +502,8 @@ django_cfg/utils/path_resolution.py,sha256=C9As6p4Q9l3VeoVkFDRPQWGrzAWf8O8UxLVka
|
|
512
502
|
django_cfg/utils/smart_defaults.py,sha256=b6A1z7VO1NJGq0oUQXN5P97c3k_Ssgw6qUi0mK-4TlM,19786
|
513
503
|
django_cfg/utils/toolkit.py,sha256=Td8_iXNaftonF_xdZP4Y3uO65nuA_4_zditn5Q_Pfcw,23310
|
514
504
|
django_cfg/utils/version_check.py,sha256=jI4v3YMdQriUEeb_TvRl511sDghy6I75iKRDUaNpucs,4800
|
515
|
-
django_cfg-1.2.
|
516
|
-
django_cfg-1.2.
|
517
|
-
django_cfg-1.2.
|
518
|
-
django_cfg-1.2.
|
519
|
-
django_cfg-1.2.
|
505
|
+
django_cfg-1.2.19.dist-info/METADATA,sha256=yvMjdrDIOIqztqBJCz3OxOQV8DEC1xutxYmUQFMhAHI,38434
|
506
|
+
django_cfg-1.2.19.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
|
507
|
+
django_cfg-1.2.19.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
|
508
|
+
django_cfg-1.2.19.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
|
509
|
+
django_cfg-1.2.19.dist-info/RECORD,,
|
@@ -1,305 +0,0 @@
|
|
1
|
-
# 🔧 Django-CFG Maintenance Application
|
2
|
-
|
3
|
-
**Multi-site maintenance mode management with Cloudflare integration**
|
4
|
-
|
5
|
-
## 🎯 Overview
|
6
|
-
|
7
|
-
The Django-CFG Maintenance application provides a comprehensive solution for managing maintenance mode across multiple Cloudflare sites with an ORM-like interface and zero-configuration setup.
|
8
|
-
|
9
|
-
### Key Features
|
10
|
-
|
11
|
-
- ✅ **Zero-Configuration Setup** - Just provide API token and domain
|
12
|
-
- ✅ **Multi-Site Management** - Manage hundreds of sites with ORM-like queries
|
13
|
-
- ✅ **Bulk Operations** - Enable/disable maintenance for multiple sites at once
|
14
|
-
- ✅ **External Monitoring** - Automatic maintenance triggers on health check failures
|
15
|
-
- ✅ **Rich Admin Interface** - Full Django admin integration with bulk actions
|
16
|
-
- ✅ **CLI Management** - Powerful management commands for automation
|
17
|
-
- ✅ **Audit Trail** - Complete logging and event tracking
|
18
|
-
|
19
|
-
## 🚀 Quick Start
|
20
|
-
|
21
|
-
### 1. Enable in Configuration
|
22
|
-
|
23
|
-
```python
|
24
|
-
# settings.py or your DjangoConfig
|
25
|
-
class MyProjectConfig(DjangoConfig):
|
26
|
-
project_name = "My Project"
|
27
|
-
enable_maintenance = True # Enable maintenance app
|
28
|
-
|
29
|
-
# Optional: Zero-config Cloudflare setup
|
30
|
-
# Set these environment variables:
|
31
|
-
# CLOUDFLARE_API_TOKEN=your_token
|
32
|
-
# CLOUDFLARE_DOMAIN=example.com
|
33
|
-
```
|
34
|
-
|
35
|
-
### 2. Run Migrations
|
36
|
-
|
37
|
-
```bash
|
38
|
-
python manage.py migrate
|
39
|
-
```
|
40
|
-
|
41
|
-
### 3. Basic Usage
|
42
|
-
|
43
|
-
#### ORM-like Interface
|
44
|
-
|
45
|
-
```python
|
46
|
-
from django_cfg.apps.maintenance.services import multi_site_manager
|
47
|
-
|
48
|
-
# Get sites for user
|
49
|
-
sites = multi_site_manager.sites(user)
|
50
|
-
|
51
|
-
# Enable maintenance for all production sites
|
52
|
-
await sites.production().enable_maintenance(
|
53
|
-
reason="Database migration",
|
54
|
-
message="We're upgrading our database. Back in 30 minutes!"
|
55
|
-
)
|
56
|
-
|
57
|
-
# Disable maintenance for specific project
|
58
|
-
await sites.filter(project='ecommerce').disable_maintenance()
|
59
|
-
|
60
|
-
# Complex filtering
|
61
|
-
critical_sites = sites.filter(
|
62
|
-
environment='production',
|
63
|
-
tags__contains='critical'
|
64
|
-
).exclude(project='legacy')
|
65
|
-
|
66
|
-
await critical_sites.enable_maintenance(reason="Security patch")
|
67
|
-
```
|
68
|
-
|
69
|
-
#### CLI Management
|
70
|
-
|
71
|
-
```bash
|
72
|
-
# Enable maintenance for all production sites
|
73
|
-
python manage.py maintenance enable --environment production --reason "Database upgrade"
|
74
|
-
|
75
|
-
# Disable maintenance for specific project
|
76
|
-
python manage.py maintenance disable --project myproject
|
77
|
-
|
78
|
-
# Check status of all sites
|
79
|
-
python manage.py maintenance status
|
80
|
-
|
81
|
-
# Discover new sites from Cloudflare
|
82
|
-
python manage.py maintenance discover --api-token your_token
|
83
|
-
```
|
84
|
-
|
85
|
-
#### Django Admin
|
86
|
-
|
87
|
-
- Navigate to `/admin/maintenance/`
|
88
|
-
- Use bulk actions to manage multiple sites
|
89
|
-
- View comprehensive dashboard with statistics
|
90
|
-
- Monitor maintenance events and logs
|
91
|
-
|
92
|
-
## 📊 Models
|
93
|
-
|
94
|
-
### CloudflareSite
|
95
|
-
Individual Cloudflare site configuration with maintenance capabilities.
|
96
|
-
|
97
|
-
### SiteGroup
|
98
|
-
Logical grouping of sites for bulk operations.
|
99
|
-
|
100
|
-
### MaintenanceEvent
|
101
|
-
Tracks maintenance events with full audit trail.
|
102
|
-
|
103
|
-
### MaintenanceLog
|
104
|
-
Detailed logging for maintenance operations.
|
105
|
-
|
106
|
-
### MonitoringTarget
|
107
|
-
External monitoring configuration for automatic triggers.
|
108
|
-
|
109
|
-
### CloudflareDeployment
|
110
|
-
Tracks Cloudflare Worker deployments with rollback support.
|
111
|
-
|
112
|
-
## 🔧 Services
|
113
|
-
|
114
|
-
### CloudflareService
|
115
|
-
Core Cloudflare API v4 integration with proper error handling and retries.
|
116
|
-
|
117
|
-
### CloudflareAutoSetup
|
118
|
-
Zero-configuration setup service that automatically discovers and configures Cloudflare resources.
|
119
|
-
|
120
|
-
### MultiSiteManager
|
121
|
-
ORM-like interface for multi-site management with bulk operations.
|
122
|
-
|
123
|
-
### MonitoringService
|
124
|
-
External health check monitoring with automatic maintenance triggers.
|
125
|
-
|
126
|
-
## 🎛️ Admin Interface
|
127
|
-
|
128
|
-
Rich Django admin interface with:
|
129
|
-
|
130
|
-
- **Site Dashboard** - Overview of all sites with statistics
|
131
|
-
- **Bulk Operations** - Enable/disable maintenance for multiple sites
|
132
|
-
- **Status Monitoring** - Real-time site status checks
|
133
|
-
- **Event Tracking** - Complete audit trail of maintenance events
|
134
|
-
- **Log Viewing** - Detailed operation logs with filtering
|
135
|
-
|
136
|
-
## 📱 Management Commands
|
137
|
-
|
138
|
-
### `maintenance`
|
139
|
-
|
140
|
-
Comprehensive CLI for maintenance management:
|
141
|
-
|
142
|
-
```bash
|
143
|
-
# Actions
|
144
|
-
python manage.py maintenance enable|disable|status|list|discover
|
145
|
-
|
146
|
-
# Filters
|
147
|
-
--domain example.com
|
148
|
-
--environment production|staging|development|testing
|
149
|
-
--project myproject
|
150
|
-
--tag critical
|
151
|
-
--owner username
|
152
|
-
|
153
|
-
# Options
|
154
|
-
--reason "Custom reason"
|
155
|
-
--message "Custom maintenance message"
|
156
|
-
--dry-run # Preview without executing
|
157
|
-
--force # Skip confirmation
|
158
|
-
--verbose # Detailed output
|
159
|
-
```
|
160
|
-
|
161
|
-
## 🔍 Monitoring
|
162
|
-
|
163
|
-
### External Health Checks
|
164
|
-
|
165
|
-
The monitoring system performs external health checks and automatically triggers maintenance mode when sites become unavailable:
|
166
|
-
|
167
|
-
```python
|
168
|
-
# Configure monitoring target
|
169
|
-
target = MonitoringTarget.objects.create(
|
170
|
-
site=site,
|
171
|
-
check_url=f"https://{site.domain}/health/",
|
172
|
-
check_interval=60, # seconds
|
173
|
-
failure_threshold=3,
|
174
|
-
recovery_threshold=2,
|
175
|
-
auto_enable_maintenance=True,
|
176
|
-
auto_disable_maintenance=True
|
177
|
-
)
|
178
|
-
```
|
179
|
-
|
180
|
-
### Health Check Results
|
181
|
-
|
182
|
-
All health check results are stored with detailed information:
|
183
|
-
- Response time
|
184
|
-
- Status code
|
185
|
-
- Error messages
|
186
|
-
- Success/failure tracking
|
187
|
-
|
188
|
-
## 🌐 Zero-Configuration Setup
|
189
|
-
|
190
|
-
The auto-setup service automatically configures:
|
191
|
-
|
192
|
-
1. **Zone Discovery** - Finds Zone ID from domain name
|
193
|
-
2. **Account Discovery** - Extracts Account ID from zone data
|
194
|
-
3. **SSL Configuration** - Sets appropriate SSL/TLS mode
|
195
|
-
4. **DNS Records** - Creates missing DNS records if needed
|
196
|
-
5. **Worker Deployment** - Deploys maintenance mode Worker
|
197
|
-
6. **Monitoring Setup** - Configures health checks
|
198
|
-
|
199
|
-
```python
|
200
|
-
from django_cfg.models.cloudflare import CloudflareConfig
|
201
|
-
from django_cfg.apps.maintenance.services import CloudflareAutoSetup
|
202
|
-
|
203
|
-
config = CloudflareConfig(
|
204
|
-
api_token="your_token",
|
205
|
-
domain="example.com"
|
206
|
-
)
|
207
|
-
|
208
|
-
setup = CloudflareAutoSetup(config)
|
209
|
-
result = await setup.setup_complete_infrastructure()
|
210
|
-
|
211
|
-
if result.success:
|
212
|
-
print(f"✅ Setup completed in {result.get_duration_seconds():.2f}s")
|
213
|
-
else:
|
214
|
-
print(f"❌ Setup failed: {result.error_message}")
|
215
|
-
```
|
216
|
-
|
217
|
-
## 🔐 Security
|
218
|
-
|
219
|
-
- **API Token Security** - Tokens stored securely with proper field types
|
220
|
-
- **User Permissions** - Site-level access control with owner/shared model
|
221
|
-
- **Audit Trail** - Complete logging of all maintenance operations
|
222
|
-
- **Input Validation** - Comprehensive validation using Pydantic v2
|
223
|
-
|
224
|
-
## 📈 Scalability
|
225
|
-
|
226
|
-
- **Bulk Operations** - Handle hundreds of sites simultaneously
|
227
|
-
- **Async Processing** - Non-blocking operations with proper error handling
|
228
|
-
- **Rate Limiting** - Respects Cloudflare API rate limits
|
229
|
-
- **Retry Logic** - Exponential backoff for failed operations
|
230
|
-
- **Connection Pooling** - Efficient HTTP connection management
|
231
|
-
|
232
|
-
## 🧪 Testing
|
233
|
-
|
234
|
-
```bash
|
235
|
-
# Run maintenance app tests
|
236
|
-
python manage.py test django_cfg.apps.maintenance
|
237
|
-
|
238
|
-
# Test with coverage
|
239
|
-
coverage run --source='.' manage.py test django_cfg.apps.maintenance
|
240
|
-
coverage report
|
241
|
-
```
|
242
|
-
|
243
|
-
## 📚 API Reference
|
244
|
-
|
245
|
-
### Multi-Site Manager
|
246
|
-
|
247
|
-
```python
|
248
|
-
from django_cfg.apps.maintenance.services import multi_site_manager
|
249
|
-
|
250
|
-
# Get sites queryset
|
251
|
-
sites = multi_site_manager.sites(user)
|
252
|
-
|
253
|
-
# Filtering methods
|
254
|
-
sites.production() # Production sites
|
255
|
-
sites.staging() # Staging sites
|
256
|
-
sites.active() # Active sites
|
257
|
-
sites.in_maintenance() # Sites in maintenance
|
258
|
-
sites.by_project('name') # Filter by project
|
259
|
-
sites.with_tag('tag') # Filter by tag
|
260
|
-
|
261
|
-
# Bulk operations
|
262
|
-
await sites.enable_maintenance(reason, message, user, dry_run)
|
263
|
-
await sites.disable_maintenance(user, dry_run)
|
264
|
-
await sites.check_status()
|
265
|
-
|
266
|
-
# Analysis
|
267
|
-
sites.get_environment_summary() # Count by environment
|
268
|
-
sites.get_status_summary() # Count by status
|
269
|
-
sites.get_project_summary() # Count by project
|
270
|
-
```
|
271
|
-
|
272
|
-
### Cloudflare Service
|
273
|
-
|
274
|
-
```python
|
275
|
-
from django_cfg.apps.maintenance.services import CloudflareService
|
276
|
-
|
277
|
-
async with CloudflareService(api_token) as cf:
|
278
|
-
# Zone management
|
279
|
-
zones = await cf.get_zones()
|
280
|
-
zone = await cf.get_zone_by_name('example.com')
|
281
|
-
|
282
|
-
# Worker management
|
283
|
-
result = await cf.deploy_worker(zone_id, worker_name, script_content)
|
284
|
-
success = await cf.delete_worker(zone_id, worker_name)
|
285
|
-
|
286
|
-
# DNS management
|
287
|
-
record_id = await cf.create_dns_record(zone_id, 'A', 'www', '192.0.2.1')
|
288
|
-
records = await cf.list_dns_records(zone_id)
|
289
|
-
|
290
|
-
# SSL management
|
291
|
-
settings = await cf.get_ssl_settings(zone_id)
|
292
|
-
success = await cf.update_ssl_setting(zone_id, 'flexible')
|
293
|
-
```
|
294
|
-
|
295
|
-
## 🤝 Contributing
|
296
|
-
|
297
|
-
1. Follow CRITICAL_REQUIREMENTS.md for code standards
|
298
|
-
2. Use proper type hints and Pydantic models
|
299
|
-
3. Add comprehensive tests for new features
|
300
|
-
4. Update documentation for API changes
|
301
|
-
5. Follow django-cfg patterns and conventions
|
302
|
-
|
303
|
-
## 📄 License
|
304
|
-
|
305
|
-
Part of django-cfg package. See main package license.
|