django-cfg 1.2.17__py3-none-any.whl → 1.2.18__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.
Files changed (81) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/models/__init__.py +68 -0
  3. django_cfg/apps/accounts/models/activity.py +34 -0
  4. django_cfg/apps/accounts/models/auth.py +50 -0
  5. django_cfg/apps/accounts/models/base.py +8 -0
  6. django_cfg/apps/accounts/models/choices.py +32 -0
  7. django_cfg/apps/accounts/models/integrations.py +75 -0
  8. django_cfg/apps/accounts/models/registration.py +52 -0
  9. django_cfg/apps/accounts/models/user.py +80 -0
  10. django_cfg/apps/maintenance/__init__.py +53 -24
  11. django_cfg/apps/maintenance/admin/__init__.py +7 -18
  12. django_cfg/apps/maintenance/admin/api_key_admin.py +185 -0
  13. django_cfg/apps/maintenance/admin/log_admin.py +156 -0
  14. django_cfg/apps/maintenance/admin/scheduled_admin.py +390 -0
  15. django_cfg/apps/maintenance/admin/site_admin.py +448 -0
  16. django_cfg/apps/maintenance/apps.py +9 -96
  17. django_cfg/apps/maintenance/management/commands/maintenance.py +193 -307
  18. django_cfg/apps/maintenance/management/commands/process_scheduled_maintenance.py +241 -0
  19. django_cfg/apps/maintenance/management/commands/sync_cloudflare.py +152 -111
  20. django_cfg/apps/maintenance/managers/__init__.py +7 -12
  21. django_cfg/apps/maintenance/managers/cloudflare_site_manager.py +192 -0
  22. django_cfg/apps/maintenance/managers/maintenance_log_manager.py +151 -0
  23. django_cfg/apps/maintenance/migrations/0001_initial.py +145 -705
  24. django_cfg/apps/maintenance/migrations/0002_cloudflaresite_maintenance_url.py +21 -0
  25. django_cfg/apps/maintenance/models/__init__.py +23 -21
  26. django_cfg/apps/maintenance/models/cloudflare_api_key.py +109 -0
  27. django_cfg/apps/maintenance/models/cloudflare_site.py +125 -0
  28. django_cfg/apps/maintenance/models/maintenance_log.py +131 -0
  29. django_cfg/apps/maintenance/models/scheduled_maintenance.py +307 -0
  30. django_cfg/apps/maintenance/services/__init__.py +37 -16
  31. django_cfg/apps/maintenance/services/bulk_operations_service.py +400 -0
  32. django_cfg/apps/maintenance/services/maintenance_service.py +230 -0
  33. django_cfg/apps/maintenance/services/scheduled_maintenance_service.py +381 -0
  34. django_cfg/apps/maintenance/services/site_sync_service.py +390 -0
  35. django_cfg/apps/maintenance/utils/__init__.py +12 -0
  36. django_cfg/apps/maintenance/utils/retry_utils.py +109 -0
  37. django_cfg/config.py +3 -0
  38. django_cfg/core/config.py +4 -6
  39. django_cfg/modules/django_unfold/dashboard.py +4 -5
  40. {django_cfg-1.2.17.dist-info → django_cfg-1.2.18.dist-info}/METADATA +52 -1
  41. {django_cfg-1.2.17.dist-info → django_cfg-1.2.18.dist-info}/RECORD +45 -55
  42. django_cfg/apps/maintenance/README.md +0 -305
  43. django_cfg/apps/maintenance/admin/deployments_admin.py +0 -251
  44. django_cfg/apps/maintenance/admin/events_admin.py +0 -374
  45. django_cfg/apps/maintenance/admin/monitoring_admin.py +0 -215
  46. django_cfg/apps/maintenance/admin/sites_admin.py +0 -464
  47. django_cfg/apps/maintenance/managers/deployments.py +0 -287
  48. django_cfg/apps/maintenance/managers/events.py +0 -374
  49. django_cfg/apps/maintenance/managers/monitoring.py +0 -301
  50. django_cfg/apps/maintenance/managers/sites.py +0 -335
  51. django_cfg/apps/maintenance/models/cloudflare.py +0 -316
  52. django_cfg/apps/maintenance/models/maintenance.py +0 -334
  53. django_cfg/apps/maintenance/models/monitoring.py +0 -393
  54. django_cfg/apps/maintenance/models/sites.py +0 -419
  55. django_cfg/apps/maintenance/serializers/__init__.py +0 -60
  56. django_cfg/apps/maintenance/serializers/actions.py +0 -310
  57. django_cfg/apps/maintenance/serializers/base.py +0 -44
  58. django_cfg/apps/maintenance/serializers/deployments.py +0 -209
  59. django_cfg/apps/maintenance/serializers/events.py +0 -210
  60. django_cfg/apps/maintenance/serializers/monitoring.py +0 -278
  61. django_cfg/apps/maintenance/serializers/sites.py +0 -213
  62. django_cfg/apps/maintenance/services/README.md +0 -168
  63. django_cfg/apps/maintenance/services/cloudflare_client.py +0 -441
  64. django_cfg/apps/maintenance/services/dns_manager.py +0 -497
  65. django_cfg/apps/maintenance/services/maintenance_manager.py +0 -504
  66. django_cfg/apps/maintenance/services/site_sync.py +0 -448
  67. django_cfg/apps/maintenance/services/sync_command_service.py +0 -330
  68. django_cfg/apps/maintenance/services/worker_manager.py +0 -264
  69. django_cfg/apps/maintenance/signals.py +0 -38
  70. django_cfg/apps/maintenance/urls.py +0 -36
  71. django_cfg/apps/maintenance/views/__init__.py +0 -18
  72. django_cfg/apps/maintenance/views/base.py +0 -61
  73. django_cfg/apps/maintenance/views/deployments.py +0 -175
  74. django_cfg/apps/maintenance/views/events.py +0 -204
  75. django_cfg/apps/maintenance/views/monitoring.py +0 -213
  76. django_cfg/apps/maintenance/views/sites.py +0 -338
  77. django_cfg/models/cloudflare.py +0 -316
  78. /django_cfg/apps/accounts/{models.py → __models.py} +0 -0
  79. {django_cfg-1.2.17.dist-info → django_cfg-1.2.18.dist-info}/WHEEL +0 -0
  80. {django_cfg-1.2.17.dist-info → django_cfg-1.2.18.dist-info}/entry_points.txt +0 -0
  81. {django_cfg-1.2.17.dist-info → django_cfg-1.2.18.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=_qyL0nrPR4GgCzpr82_vMcJ_-N4vKkBuRIDIOlPacrs,1631
2
+ django_cfg/__init__.py,sha256=EWehYNtzrQn-TdDCmqSZeh1RQ4-cNWFw9eYZVbORx9E,1631
3
3
  django_cfg/apps.py,sha256=k84brkeXJI7EgKZLEpTkM9YFZofKI4PzhFOn1cl9Msc,1656
4
- django_cfg/config.py,sha256=0cuRJVEnf03WzvEqhwzLvn9Zi1805C5KG1yk27ekABA,1190
4
+ django_cfg/config.py,sha256=QnUiFj_DN_J1-tLcbXFh1idsQtSj3su0-Ab9gsJQYks,1342
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/README.md,sha256=8_-6LEdffnIB7oX02-rSgoXlYoHgCzrGOIJcL0_ldyw,8671
204
- django_cfg/apps/maintenance/__init__.py,sha256=lR2bhLk0ZLrH_hnmBpbdzvDCxS_-PXqOejcGTc80YNM,851
205
- django_cfg/apps/maintenance/apps.py,sha256=6o4B2HsukXnH5LtK0osqT2r4agULm7UzBbuyBx1pduA,4083
206
- django_cfg/apps/maintenance/signals.py,sha256=Bw6tOEDtnEOf2-9UBGtWfSpBrW1AmqJCtGS1FpYmLws,1199
207
- django_cfg/apps/maintenance/urls.py,sha256=kHz9y5Eud_cx7jiKxxHIP0zlzqWH3kC1a1zkCDLOF9w,1306
208
- django_cfg/apps/maintenance/admin/__init__.py,sha256=4SL6mkxei-7PGFyfTloy2xrwhuNSau2BTvP3P_3ztb4,740
209
- django_cfg/apps/maintenance/admin/deployments_admin.py,sha256=goJGn716XH3kq9LEo7PcDMdeEJZHNQYFgN4qHJDIUpg,8566
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=sazsNB6n4yR9o17gD83v6SLJ-5GhBav9O_PIMriKdQY,13707
216
- django_cfg/apps/maintenance/management/commands/sync_cloudflare.py,sha256=eAWOLfXvBTeuB_89OzhrJhRUeCZHDFtDiQNz779Od4c,5755
217
- django_cfg/apps/maintenance/managers/__init__.py,sha256=u7lQGsD0eIrLMUXQ3EqgTheefXBPQ6-qDpTki2M6XtA,601
218
- django_cfg/apps/maintenance/managers/deployments.py,sha256=sDt9_fmw2MN_WfJn8K4amOgQ69MGaWz65xkuYVRrRXM,9851
219
- django_cfg/apps/maintenance/managers/events.py,sha256=Llr0FMQr861drqXHOKJv29Yhsfo02NNPhllVzgNIJhA,12236
220
- django_cfg/apps/maintenance/managers/monitoring.py,sha256=ZkRz3K8MZyH-hWuoEFvLo98Wi5L2X6S7lKO1pO4A4go,10651
221
- django_cfg/apps/maintenance/managers/sites.py,sha256=Srqooa3sRqPt51UIWU3B2NcD8Noy3bUb9yVxpg6fBnQ,11052
222
- django_cfg/apps/maintenance/migrations/0001_initial.py,sha256=9pLCklZ0y5VJ2yyMiveoaEuyVyjG-HYMLqUE0XjYPsI,36531
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=yExcE0IMXMJWFFEMK4pzI54ipA-vYKU42RXy1CwwT98,611
225
- django_cfg/apps/maintenance/models/cloudflare.py,sha256=hAB-xSrWkV4wFNlE2hfsW1STYNIEGNZtpxCWgsfun2g,11218
226
- django_cfg/apps/maintenance/models/maintenance.py,sha256=Eyk5uYE9LduM9gGdjkR4xI4inVAJKiG5c5UJEKHamG8,10529
227
- django_cfg/apps/maintenance/models/monitoring.py,sha256=qPEaEiQ5sMOe9nejD0lwyD58joQ8LQx39Tv6uofpXz4,12733
228
- django_cfg/apps/maintenance/models/sites.py,sha256=487MqqLK3rM5T1VvKhqGY4Xw7unaFEHmRUCzfVCI4l4,13396
229
- django_cfg/apps/maintenance/serializers/__init__.py,sha256=1GIRFpqo946wlHjZ30bRw0enTlhojWDDew5RYv7K5vA,1733
230
- django_cfg/apps/maintenance/serializers/actions.py,sha256=V9DG8zw8T3ptHAF6zemFwAEMLRjomA0q-eEqei6loxM,10541
231
- django_cfg/apps/maintenance/serializers/base.py,sha256=ia3l-sUAzCfdt-2CHJRRiuwkG7PAJh0b9zTfeISoN_k,1130
232
- django_cfg/apps/maintenance/serializers/deployments.py,sha256=W7tNq5Iioph8gD8EeykH64xJgzy5_Ws5_jONT_8rFVg,7385
233
- django_cfg/apps/maintenance/serializers/events.py,sha256=S6pjVnLO6Xq-1EwUtj2oq_hgAgsXaBaKbMGrPWZPGWc,7869
234
- django_cfg/apps/maintenance/serializers/monitoring.py,sha256=ihVnf7AHYfzajlJo8Yd1UvKku8wBPRdWckLILK7UOp0,10075
235
- django_cfg/apps/maintenance/serializers/sites.py,sha256=0zLa1a9rYiydmMAqBiPgX20O80g6pWfxPov8ntCmG8E,7648
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=YiiYU-Pu4eHg7nLPG3i3dLIp_eKsbk-dqbr3lX-0F-k,27682
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=b2XnczCVtcneAkgE0deTHsBM9x6kIhLgk3q6zHf1eMg,13605
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.17.dist-info/METADATA,sha256=SvYcorAk9Wkfijii-ChZG7bW6V86gZCbX9-g-gMTJsw,36444
516
- django_cfg-1.2.17.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
517
- django_cfg-1.2.17.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
518
- django_cfg-1.2.17.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
519
- django_cfg-1.2.17.dist-info/RECORD,,
505
+ django_cfg-1.2.18.dist-info/METADATA,sha256=cxQr7-01o3yn4D2m04Rqh0TQm9kTkeMTQOvbheg034o,38434
506
+ django_cfg-1.2.18.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
507
+ django_cfg-1.2.18.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
508
+ django_cfg-1.2.18.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
509
+ django_cfg-1.2.18.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.