django-cfg 1.5.1__py3-none-any.whl → 1.5.2__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.

Files changed (121) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/dashboard/TRANSACTION_FIX.md +73 -0
  3. django_cfg/apps/dashboard/serializers/__init__.py +0 -12
  4. django_cfg/apps/dashboard/serializers/activity.py +1 -1
  5. django_cfg/apps/dashboard/services/__init__.py +0 -2
  6. django_cfg/apps/dashboard/services/charts_service.py +4 -3
  7. django_cfg/apps/dashboard/services/statistics_service.py +11 -2
  8. django_cfg/apps/dashboard/services/system_health_service.py +64 -106
  9. django_cfg/apps/dashboard/urls.py +0 -2
  10. django_cfg/apps/dashboard/views/__init__.py +0 -2
  11. django_cfg/apps/dashboard/views/commands_views.py +3 -6
  12. django_cfg/apps/dashboard/views/overview_views.py +14 -13
  13. django_cfg/apps/knowbase/apps.py +2 -2
  14. django_cfg/apps/maintenance/admin/api_key_admin.py +2 -3
  15. django_cfg/apps/newsletter/admin/newsletter_admin.py +12 -11
  16. django_cfg/apps/rq/__init__.py +9 -0
  17. django_cfg/apps/rq/apps.py +80 -0
  18. django_cfg/apps/rq/management/__init__.py +1 -0
  19. django_cfg/apps/rq/management/commands/__init__.py +1 -0
  20. django_cfg/apps/rq/management/commands/rqscheduler.py +31 -0
  21. django_cfg/apps/rq/management/commands/rqstats.py +33 -0
  22. django_cfg/apps/rq/management/commands/rqworker.py +31 -0
  23. django_cfg/apps/rq/management/commands/rqworker_pool.py +27 -0
  24. django_cfg/apps/rq/serializers/__init__.py +40 -0
  25. django_cfg/apps/rq/serializers/health.py +60 -0
  26. django_cfg/apps/rq/serializers/job.py +100 -0
  27. django_cfg/apps/rq/serializers/queue.py +80 -0
  28. django_cfg/apps/rq/serializers/schedule.py +178 -0
  29. django_cfg/apps/rq/serializers/testing.py +139 -0
  30. django_cfg/apps/rq/serializers/worker.py +58 -0
  31. django_cfg/apps/rq/services/__init__.py +25 -0
  32. django_cfg/apps/rq/services/config_helper.py +233 -0
  33. django_cfg/apps/rq/services/models/README.md +417 -0
  34. django_cfg/apps/rq/services/models/__init__.py +30 -0
  35. django_cfg/apps/rq/services/models/event.py +123 -0
  36. django_cfg/apps/rq/services/models/job.py +99 -0
  37. django_cfg/apps/rq/services/models/queue.py +92 -0
  38. django_cfg/apps/rq/services/models/worker.py +104 -0
  39. django_cfg/apps/rq/services/rq_converters.py +183 -0
  40. django_cfg/apps/rq/tasks/__init__.py +23 -0
  41. django_cfg/apps/rq/tasks/demo_tasks.py +284 -0
  42. django_cfg/apps/rq/urls.py +54 -0
  43. django_cfg/apps/rq/views/__init__.py +19 -0
  44. django_cfg/apps/rq/views/jobs.py +882 -0
  45. django_cfg/apps/rq/views/monitoring.py +248 -0
  46. django_cfg/apps/rq/views/queues.py +261 -0
  47. django_cfg/apps/rq/views/schedule.py +400 -0
  48. django_cfg/apps/rq/views/testing.py +761 -0
  49. django_cfg/apps/rq/views/workers.py +195 -0
  50. django_cfg/apps/urls.py +6 -7
  51. django_cfg/core/base/config_model.py +10 -26
  52. django_cfg/core/builders/apps_builder.py +4 -11
  53. django_cfg/core/generation/integration_generators/__init__.py +3 -6
  54. django_cfg/core/generation/integration_generators/django_rq.py +80 -0
  55. django_cfg/core/generation/orchestrator.py +9 -19
  56. django_cfg/core/integration/display/startup.py +6 -20
  57. django_cfg/mixins/__init__.py +2 -0
  58. django_cfg/mixins/superadmin_api.py +59 -0
  59. django_cfg/models/__init__.py +3 -3
  60. django_cfg/models/django/__init__.py +3 -3
  61. django_cfg/models/django/django_rq.py +621 -0
  62. django_cfg/models/django/revolution_legacy.py +1 -1
  63. django_cfg/modules/base.py +4 -6
  64. django_cfg/modules/django_admin/config/background_task_config.py +4 -4
  65. django_cfg/modules/django_admin/utils/html/composition.py +9 -2
  66. django_cfg/modules/django_unfold/navigation.py +1 -26
  67. django_cfg/pyproject.toml +4 -4
  68. django_cfg/registry/core.py +4 -7
  69. django_cfg/static/frontend/admin.zip +0 -0
  70. django_cfg/templates/admin/constance/includes/results_list.html +73 -0
  71. django_cfg/templates/admin/index.html +187 -62
  72. django_cfg/templatetags/django_cfg.py +61 -1
  73. {django_cfg-1.5.1.dist-info → django_cfg-1.5.2.dist-info}/METADATA +5 -6
  74. {django_cfg-1.5.1.dist-info → django_cfg-1.5.2.dist-info}/RECORD +77 -82
  75. django_cfg/apps/dashboard/permissions.py +0 -48
  76. django_cfg/apps/dashboard/serializers/django_q2.py +0 -50
  77. django_cfg/apps/dashboard/services/django_q2_service.py +0 -159
  78. django_cfg/apps/dashboard/views/django_q2_views.py +0 -79
  79. django_cfg/apps/tasks/__init__.py +0 -64
  80. django_cfg/apps/tasks/admin/__init__.py +0 -4
  81. django_cfg/apps/tasks/admin/config.py +0 -98
  82. django_cfg/apps/tasks/admin/task_log.py +0 -238
  83. django_cfg/apps/tasks/apps.py +0 -15
  84. django_cfg/apps/tasks/filters/__init__.py +0 -10
  85. django_cfg/apps/tasks/filters/task_log.py +0 -121
  86. django_cfg/apps/tasks/migrations/0001_initial.py +0 -196
  87. django_cfg/apps/tasks/migrations/0002_delete_tasklog.py +0 -16
  88. django_cfg/apps/tasks/migrations/__init__.py +0 -0
  89. django_cfg/apps/tasks/models/__init__.py +0 -4
  90. django_cfg/apps/tasks/models/task_log.py +0 -246
  91. django_cfg/apps/tasks/serializers/__init__.py +0 -28
  92. django_cfg/apps/tasks/serializers/task_log.py +0 -249
  93. django_cfg/apps/tasks/services/__init__.py +0 -10
  94. django_cfg/apps/tasks/services/client/__init__.py +0 -7
  95. django_cfg/apps/tasks/services/client/client.py +0 -234
  96. django_cfg/apps/tasks/services/config_helper.py +0 -63
  97. django_cfg/apps/tasks/services/sync.py +0 -204
  98. django_cfg/apps/tasks/urls.py +0 -16
  99. django_cfg/apps/tasks/views/__init__.py +0 -10
  100. django_cfg/apps/tasks/views/task_log.py +0 -41
  101. django_cfg/apps/tasks/views/task_log_base.py +0 -41
  102. django_cfg/apps/tasks/views/task_log_overview.py +0 -100
  103. django_cfg/apps/tasks/views/task_log_related.py +0 -41
  104. django_cfg/apps/tasks/views/task_log_stats.py +0 -91
  105. django_cfg/apps/tasks/views/task_log_timeline.py +0 -81
  106. django_cfg/core/generation/integration_generators/django_q2.py +0 -133
  107. django_cfg/core/generation/integration_generators/tasks.py +0 -88
  108. django_cfg/models/django/django_q2.py +0 -514
  109. django_cfg/models/tasks/__init__.py +0 -49
  110. django_cfg/models/tasks/backends.py +0 -122
  111. django_cfg/models/tasks/config.py +0 -209
  112. django_cfg/models/tasks/utils.py +0 -162
  113. django_cfg/modules/django_q2/README.md +0 -140
  114. django_cfg/modules/django_q2/__init__.py +0 -8
  115. django_cfg/modules/django_q2/apps.py +0 -107
  116. django_cfg/modules/django_q2/management/__init__.py +0 -0
  117. django_cfg/modules/django_q2/management/commands/__init__.py +0 -0
  118. django_cfg/modules/django_q2/management/commands/sync_django_q_schedules.py +0 -74
  119. {django_cfg-1.5.1.dist-info → django_cfg-1.5.2.dist-info}/WHEEL +0 -0
  120. {django_cfg-1.5.1.dist-info → django_cfg-1.5.2.dist-info}/entry_points.txt +0 -0
  121. {django_cfg-1.5.1.dist-info → django_cfg-1.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,9 +1,9 @@
1
1
  django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- django_cfg/__init__.py,sha256=mpY7XOaDnNfCaqOu98wZDVwBaishlliqu2fYJgJQ2pU,1777
2
+ django_cfg/__init__.py,sha256=PudxEXvb3GDxrbmG7DoIY9H90ND0RL8UWFWp445sHm4,1777
3
3
  django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
4
4
  django_cfg/config.py,sha256=eIzEviUGuqgrwUqea7R2VUwmNmapbFYRXLzlRuenw4A,4446
5
5
  django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
6
- django_cfg/apps/urls.py,sha256=eV1OW1mGGo9JYqBK76tIW8S83Il92OwxDsLI3s2U7G4,6891
6
+ django_cfg/apps/urls.py,sha256=VxH9TYwDx7Jhgi6xPgpt-NvIrUkTkQ9yofG3WzXb9GA,6803
7
7
  django_cfg/apps/accounts/README.md,sha256=YkUYJ3iKMYTmm9ALK2PDnX75SDqZxgnkzNLCD5efxRs,8227
8
8
  django_cfg/apps/accounts/__init__.py,sha256=I9pq6H5oOFv59Du0VP-g7KsAUDhjKeUcP0spMvhtIjk,99
9
9
  django_cfg/apps/accounts/__models.py,sha256=fYhobXbGIYKnG4mZ_pwNePei8O-SHHqgBMhe6qhH3KQ,10075
@@ -193,36 +193,33 @@ django_cfg/apps/centrifugo/views/__init__.py,sha256=QdYKO9AY6t-2bwwy78Kw1mAOpe-t
193
193
  django_cfg/apps/centrifugo/views/admin_api.py,sha256=ECD7W7v0o6cvo4OShZ0K5OgluNxKqReRcNn9aIZjcg4,13888
194
194
  django_cfg/apps/centrifugo/views/monitoring.py,sha256=TPudsIR4fnGp2w9RteH6Tm8ckXr-FQN5q9-AjD4g9fw,14416
195
195
  django_cfg/apps/centrifugo/views/testing_api.py,sha256=sNBmYoRD7VBXZmoHEw9BmPbDa0BA5mnVZg6asqgKb8Y,16868
196
+ django_cfg/apps/dashboard/TRANSACTION_FIX.md,sha256=9YjD9O7G4rLLrsVwoLVtoqiJMI7KNPs85y-CufD-zfw,2236
196
197
  django_cfg/apps/dashboard/__init__.py,sha256=TirqQji7p39fA15jGBswWSt6ML2K1SP96Iq-7Sw7NFI,236
197
198
  django_cfg/apps/dashboard/apps.py,sha256=OvB_C5qTq-QcLvvrRpbBxJPL-DCtA-pGVK8ir2y-hKk,508
198
- django_cfg/apps/dashboard/permissions.py,sha256=LJGza0pjVfoR2rQjKYZWnkgGcyzSHr43RMYiCibrokQ,1360
199
- django_cfg/apps/dashboard/urls.py,sha256=4LYRy8AOVHD4e-E8K_KW4-nFpH21g-yEjYdL13Evr_E,1351
200
- django_cfg/apps/dashboard/serializers/__init__.py,sha256=QB31m7FxYlm1TEMp1zMvm6QgXaMGbI7PwlPgfcZzlrs,1837
201
- django_cfg/apps/dashboard/serializers/activity.py,sha256=eaimk1eI1-WPFa_b8oqF-xM5V6uoSBlS0mRR7TfMtrQ,1410
199
+ django_cfg/apps/dashboard/urls.py,sha256=5lmqi12lOe1MZQGDdcvEfZ4HwCQ3AjJ4iIFmBn_kid0,1261
200
+ django_cfg/apps/dashboard/serializers/__init__.py,sha256=MHwSrYz_CHYrmhuKrh1hIhYiKF8gMNqAisGkJqjUzWk,1543
201
+ django_cfg/apps/dashboard/serializers/activity.py,sha256=tl5P9b2GNqhW-Df5vVB35STrmHDPLMkYjI3kalYllqw,1429
202
202
  django_cfg/apps/dashboard/serializers/apizones.py,sha256=eeluzYPtrSXskpfFY2ykw3yM71BCr5_XoAomcU-zNqE,773
203
203
  django_cfg/apps/dashboard/serializers/base.py,sha256=-PRmxV3eApf-JfFVjgiL8ka0b07m69crkIECX-EK4IY,526
204
204
  django_cfg/apps/dashboard/serializers/charts.py,sha256=EPgIcQ2jPLp2-5IbVWyhP86p_puPU0TMxitFR3yPfDE,1425
205
205
  django_cfg/apps/dashboard/serializers/commands.py,sha256=qiRcSMNz7J72TcSVZLYD-oZxEAN3hmt_MZx9kkxlp7o,1925
206
- django_cfg/apps/dashboard/serializers/django_q2.py,sha256=sSCxaP_xwwNlY58lI6LooJ6JwHeaUwltXZkX2wtvloM,1735
207
206
  django_cfg/apps/dashboard/serializers/overview.py,sha256=ejFZV2l2GOTHLA8XQty8SayyXM-cL3VM2veY7YoMeWE,1373
208
207
  django_cfg/apps/dashboard/serializers/statistics.py,sha256=DrT3eDdsqSaeCE3GJ_7_o5Tl_WVc2NwNJ43fm-kPu2A,1664
209
208
  django_cfg/apps/dashboard/serializers/system.py,sha256=mDwqPVS2iBfyCcs4BcnT2_kZWRnbWCtLvoTievc7qkU,2093
210
- django_cfg/apps/dashboard/services/__init__.py,sha256=nDMZcwG036iLta9LsAGQ39W8NfvDC8vt6j8xlBLaQ2A,687
209
+ django_cfg/apps/dashboard/services/__init__.py,sha256=0NW_FUdDumd7CzRQL5cYgOBPGZPwT2icB51RyPf6k3c,617
211
210
  django_cfg/apps/dashboard/services/apizones_service.py,sha256=FVpdMgBzjTzK3G5zZb2ADKL8ZrjEmdclCRNOr4AdIGI,3955
212
- django_cfg/apps/dashboard/services/charts_service.py,sha256=QP4nWghSvkqTX-9ndQmmzdEDIsxVewGZj8Oy27kLoOA,8848
211
+ django_cfg/apps/dashboard/services/charts_service.py,sha256=4FdhlHWFKFEbMaQslVzKAVdHfwtfFxwQL2-QykYSASQ,8906
213
212
  django_cfg/apps/dashboard/services/commands_security.py,sha256=kFADVoYNbqb2DwzFfFBZ3Th2TdfL-1z2V-dnNXHU5Fw,7893
214
213
  django_cfg/apps/dashboard/services/commands_service.py,sha256=OnvZBUv2GDUWq3JA3UVrHu-gMc2eJm0-MT_WTdM27uk,11644
215
- django_cfg/apps/dashboard/services/django_q2_service.py,sha256=BalFPJhEDWPYv1fugYe123GQOSh0Gpdt6imJkNyQA1w,5113
216
214
  django_cfg/apps/dashboard/services/overview_service.py,sha256=Dl_y89_waG9onDC9PHGWx0ci7m3NOdrMoEKSdv3Fves,6382
217
- django_cfg/apps/dashboard/services/statistics_service.py,sha256=cX20DB0VrjDLaaLCp8YQUcBw_N34VzZKqY4Ly2Qal0M,14023
218
- django_cfg/apps/dashboard/services/system_health_service.py,sha256=oekgJva1T-WTMqrNnlKRvaVbJvPI2PtSfUAe4coGNlg,12695
219
- django_cfg/apps/dashboard/views/__init__.py,sha256=caP9Gt_4e_1kORhRLmWd2TJbIMbf86peKSXnf6ltFwE,629
215
+ django_cfg/apps/dashboard/services/statistics_service.py,sha256=DtW1v24pf7omjHWbD2fVyoD9ZxMln62g5ahYa6C8Ivk,14427
216
+ django_cfg/apps/dashboard/services/system_health_service.py,sha256=REQ9kV4PeNKG69t5jxzM4f7iOsIAflVS44rISiZmu5Q,11136
217
+ django_cfg/apps/dashboard/views/__init__.py,sha256=tgsvzkwnIr3bL35LOpZl8o-2aRLFSKbjfRFMqhZUPjA,561
220
218
  django_cfg/apps/dashboard/views/activity_views.py,sha256=UsGTnFABCJdZZID8kmG2J6grVRx18G9xSKfl7nKVz3w,2797
221
219
  django_cfg/apps/dashboard/views/apizones_views.py,sha256=FtEEeNQD7aFBejmuTfdtjvRCLwCJyjD7AWDR1ouBo2k,2329
222
220
  django_cfg/apps/dashboard/views/charts_views.py,sha256=XDV3lTfoP65UuW_HIgNnp_80k35DVcicXXPLzIB6neU,5514
223
- django_cfg/apps/dashboard/views/commands_views.py,sha256=eJw3U4CtLUMZn2YdENr3HwhzHcqygo8HW92vjRg1sYQ,6099
224
- django_cfg/apps/dashboard/views/django_q2_views.py,sha256=oQcMNDffZc0zB0Er-s2vUIRW_49yqKeEbxsyo9r32_U,2222
225
- django_cfg/apps/dashboard/views/overview_views.py,sha256=UZsGOUuZxYymziB0bPxBEfDaIHwFMGz6pCxNMLBRtsI,3680
221
+ django_cfg/apps/dashboard/views/commands_views.py,sha256=uunTSFBzAXrZOoLNAZrYgM9oqnVDAZ0PByIYD5Zi8-o,5856
222
+ django_cfg/apps/dashboard/views/overview_views.py,sha256=44VSNxGNZ0zsywexvDpMzjj_ekRx2gIcLG4KbnHMRiE,3872
226
223
  django_cfg/apps/dashboard/views/statistics_views.py,sha256=CISWM8A5lkIqTK2dWifTBJD4RdFI9Hu-_RCFl3kMoiA,3511
227
224
  django_cfg/apps/dashboard/views/system_views.py,sha256=PSEGZuHhexgBiKVOlrNlDV9_t2kEwS2arBT8h2KFxds,2459
228
225
  django_cfg/apps/frontend/JWT_AUTO_INJECTION.md,sha256=vw4M49mijxjd1ANlumPbye3d2XIaYuc_3jYRbmWsb-8,8018
@@ -270,7 +267,7 @@ django_cfg/apps/grpc/views/__init__.py,sha256=IZWj31gnice6VOBZ1hkunPnnA5pXwJFTdz
270
267
  django_cfg/apps/grpc/views/monitoring.py,sha256=sVulfX_r5TIITisRea-jzLTcql9PQPN4txXY3fNM9NE,18125
271
268
  django_cfg/apps/knowbase/README.md,sha256=HXt_J6WCN-LsMhA7p9mdvih07_vp_r_hkPdmqHhNEeo,3965
272
269
  django_cfg/apps/knowbase/__init__.py,sha256=XLhl7_wweUm1nqmA_xVlPxiCSuARxtCro-uY41JFQgs,1039
273
- django_cfg/apps/knowbase/apps.py,sha256=Y1n4ZoEP5oL-lDGLNRHtxhPClEcBElMX8iXFFS4OsPE,3052
270
+ django_cfg/apps/knowbase/apps.py,sha256=l6LJ4q6HxwKfNIwc3n8P4Qmw7xJzRaThP2ZQFLmzHn8,3070
274
271
  django_cfg/apps/knowbase/urls.py,sha256=r5Ak_fp1bWpW01hcstZsJK5F9RhuRFyhR6bUmuoJOA4,643
275
272
  django_cfg/apps/knowbase/urls_admin.py,sha256=fu6KG-nat8ay7buB8t255-Ye_5uiQYibZ1NzhNiyvtg,640
276
273
  django_cfg/apps/knowbase/urls_system.py,sha256=ZW7TOf_7Svt5V-83EBiN9qnm1Y4fQE5YspYRkAJFyVA,736
@@ -405,7 +402,7 @@ django_cfg/apps/maintenance/urls.py,sha256=wOd5n5Ky62gUx-TVaIC5OZcH9K6plsC2pCAJH
405
402
  django_cfg/apps/maintenance/urls_admin.py,sha256=E61etVCrwAzWZdPckWWX5yMDPsZzi3cQtAXn_zzZNL4,226
406
403
  django_cfg/apps/maintenance/admin/__init__.py,sha256=9EDtPitnC45uazpAky927lzo0jW7Qg-qfzv5LCxMW_I,463
407
404
  django_cfg/apps/maintenance/admin/actions.py,sha256=a2y5Gg7m806yAg8J4V_i-jxbFN6A47L5Qa7a1sYVZrg,5304
408
- django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=QIomApJZhzeFyxWrxw1vuMYiLbLXmatNH9RhYAI_I2A,5628
405
+ django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=SrYLkuhB_rgIBrM0e45Ts7TP9iU_LrYocJnKCjeRt2c,5638
409
406
  django_cfg/apps/maintenance/admin/log_admin.py,sha256=9Kb9IN95QATKVn0yVfFmn5VsvoxJ6B9BeQFUZ-HCd_Y,5551
410
407
  django_cfg/apps/maintenance/admin/scheduled_admin.py,sha256=Vn9qLlC7XjYntAfdSHJbchZ32t3913yZiC8dHjWAhjc,6630
411
408
  django_cfg/apps/maintenance/admin/site_admin.py,sha256=LDG2XXmoBmZnbkCpLX1yUXra8ibjZTK57exVVzm6y2c,8280
@@ -446,7 +443,7 @@ django_cfg/apps/newsletter/urls_admin.py,sha256=E61etVCrwAzWZdPckWWX5yMDPsZzi3cQ
446
443
  django_cfg/apps/newsletter/admin/__init__.py,sha256=IGjWzRtv8xLNJDFUW7pTHujJu1rHtRVVYUbIkZzyX4Q,830
447
444
  django_cfg/apps/newsletter/admin/actions.py,sha256=aHC2ACDREfkHscnLToMTdZBQ7orbE7sjB3f4V9-nsOE,3814
448
445
  django_cfg/apps/newsletter/admin/filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFEJDZst5Fhj5Sv5c,3675
449
- django_cfg/apps/newsletter/admin/newsletter_admin.py,sha256=k3Ila8KNdHnN3vd2yMycQ8Eay8NN75FOQ8aY5J60qLM,23081
446
+ django_cfg/apps/newsletter/admin/newsletter_admin.py,sha256=hLE1gddSx0vqAotEIUYYDbWn1CNvLVaUGD08nFa1NPM,23160
450
447
  django_cfg/apps/newsletter/admin/resources.py,sha256=KJfXZyG763ikhjGJvHE9wcx_k1dm111sg3id1QVFHrY,6808
451
448
  django_cfg/apps/newsletter/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
452
449
  django_cfg/apps/newsletter/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -508,6 +505,40 @@ django_cfg/apps/payments/services/providers/nowpayments/__init__.py,sha256=_AMqc
508
505
  django_cfg/apps/payments/services/providers/nowpayments/config.py,sha256=JjrCOG8N7whBW_DWM6ObX54yqD2Bo3Z5MeBKbLfYR8g,3603
509
506
  django_cfg/apps/payments/services/providers/nowpayments/parser.py,sha256=cTuZKhfUPsyWMxOoMVIhmsH1tius3AzPYcnvZGb5KRs,6521
510
507
  django_cfg/apps/payments/services/providers/nowpayments/provider.py,sha256=nafsOrUNd5WkDY3ipDi70ETDh3PhV-fMoDtwriZtRB8,12227
508
+ django_cfg/apps/rq/__init__.py,sha256=iyW7QkExvC2W8D5Q8I8bBe_bG3zGVIsf1RzW60EebZU,202
509
+ django_cfg/apps/rq/apps.py,sha256=psQRGNCrPZgpgsI8n9hA2Fk9yFcVutg2fI3EBmGGgqE,2463
510
+ django_cfg/apps/rq/urls.py,sha256=yMYiW-Du_wOCy4l8L7YujcnMl6xHnBpCE5mG4rzi-Zc,1616
511
+ django_cfg/apps/rq/management/__init__.py,sha256=i1gU5aI6Ib6bSbA4R0snjJayGpGLn-rSlTdkyaJInjE,53
512
+ django_cfg/apps/rq/management/commands/__init__.py,sha256=dxwH_9KU9Q1x8xZzj4ySfCFJ7q7hs2_D_nDNmQ8c670,52
513
+ django_cfg/apps/rq/management/commands/rqscheduler.py,sha256=J2726GV9z7Tx_BuGxBMUglDFbFU4doL6yiWP5msfPGw,906
514
+ django_cfg/apps/rq/management/commands/rqstats.py,sha256=IDz1wn5r6WesobVjA-xoDbKtQyKYGXJSPr9vkokeK18,941
515
+ django_cfg/apps/rq/management/commands/rqworker.py,sha256=FMtMpssvtCR_5k4YJjNGRommJOZBNJkMlAv5Pca3qPQ,1048
516
+ django_cfg/apps/rq/management/commands/rqworker_pool.py,sha256=ojJbu6cBCpc4tmc8F6QugOCgCJzH6KoAo6MQnaTHKs4,890
517
+ django_cfg/apps/rq/serializers/__init__.py,sha256=HMUNP2tcgkNaTdOOGp1vefJ1W1FdabcvndDHUc_GQ3g,1167
518
+ django_cfg/apps/rq/serializers/health.py,sha256=bqPbfvV1RM6FmerKOOrnju9i6g0ijEFxUpoYKCoomp0,2031
519
+ django_cfg/apps/rq/serializers/job.py,sha256=C99RLvJrp9kBfayxxGeiZ0Pgt45GcxgbkvcQuNb_PFk,3330
520
+ django_cfg/apps/rq/serializers/queue.py,sha256=1xhf6nc_dSMpwZwGeAofG5XU_Xf5IUJmkCSo-o9RFlE,2802
521
+ django_cfg/apps/rq/serializers/schedule.py,sha256=eBZmuKMkiXLcSis5iI_i6Jtt6sqpK8zu3rZDGqfBhBQ,5066
522
+ django_cfg/apps/rq/serializers/testing.py,sha256=OSvOdgDYo0HRFdeC4EeqoEIYErajjQYocrR-t41k1WQ,3879
523
+ django_cfg/apps/rq/serializers/worker.py,sha256=Yx_qz_7uJYu6nncwF18jMKcN_1UAIr3YuRCmtSTuczg,2183
524
+ django_cfg/apps/rq/services/__init__.py,sha256=D2XoavoGfs3OqzVwDeBIVjrU2iQrPbj2gr_Bmkq7lZw,516
525
+ django_cfg/apps/rq/services/config_helper.py,sha256=FbjIp2hNhCLi-z8lADYzx2av1YB8VytGeX4_tYTBrD0,7348
526
+ django_cfg/apps/rq/services/rq_converters.py,sha256=Wx88vGhT5dR2aEehb_KdB2fRmI_-KKeR3Hrjr0mWwRc,5800
527
+ django_cfg/apps/rq/services/models/README.md,sha256=6yIQ1QnPcqvXRwo5Cns1Ar7K8vw3VS0HoyL9PtOFKzw,11509
528
+ django_cfg/apps/rq/services/models/__init__.py,sha256=utd56sNx9gy_o6SmJduMx2CaE9svdg975JRj5M4k3Tw,650
529
+ django_cfg/apps/rq/services/models/event.py,sha256=YTalO6m1Ya7WL5Mm1JqHxFnbOzptsHbpXpV1h7oYlmg,3612
530
+ django_cfg/apps/rq/services/models/job.py,sha256=tcoFZQUkzaybwNdKmvhGjHlJEL1gevkJQ44dqVQqNSk,3347
531
+ django_cfg/apps/rq/services/models/queue.py,sha256=2wUtYH7NrtemNaVYrjVy380bqsapbJVj5LT2ECN8MDY,2928
532
+ django_cfg/apps/rq/services/models/worker.py,sha256=EDZQVRScRgwJveC78VSTotbdzyej0YkJk45L68noLwQ,3276
533
+ django_cfg/apps/rq/tasks/__init__.py,sha256=sCPVlradQ2PJYis17AWRudvlaFfF9xu37ahXniPL-v8,449
534
+ django_cfg/apps/rq/tasks/demo_tasks.py,sha256=xpM6P70iwJ169EbeIXEhdPstaMwG-sKYChpyJpJz9fQ,7278
535
+ django_cfg/apps/rq/views/__init__.py,sha256=Af4Zbr_Uc7cNkRPWZbk6EBrYmnO7dazHlSHMq76nl0s,415
536
+ django_cfg/apps/rq/views/jobs.py,sha256=5IMW5XYSAL-7sqtbgYu5JkOgTzV-034sNnSQrTfd6tw,33020
537
+ django_cfg/apps/rq/views/monitoring.py,sha256=ZuVc-0NAiePSOKD-a6UDT5AsxRlYE0eqQQ8pFMkYpjA,9270
538
+ django_cfg/apps/rq/views/queues.py,sha256=vXk0CdS3kXVgKPLQPLRfJuDf1glVrB5PJNEzTTllmAA,9111
539
+ django_cfg/apps/rq/views/schedule.py,sha256=eDAR_qnIAxbW7b6La9ojXh1QbfD2aML_d6Sny2eWrfE,15286
540
+ django_cfg/apps/rq/views/testing.py,sha256=fqE3W9LH_MwbExxyOAiKfLTyYM_uNmb8a2ehJsO0Itg,29416
541
+ django_cfg/apps/rq/views/workers.py,sha256=3Ej6fG9o_pDqp_g4v4Hlbc7KHb_C2TTP4-LJW1t4ADs,7076
511
542
  django_cfg/apps/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
512
543
  django_cfg/apps/support/admin.py,sha256=rAxgGyOKV3e5ihRyruR0f9LCCtETDmnzsTHqqdZ7qXo,8756
513
544
  django_cfg/apps/support/admin_filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
@@ -535,33 +566,6 @@ django_cfg/apps/support/views/__init__.py,sha256=0-6pYFqa2aDioxVImPt_-HHe4z_2x6N
535
566
  django_cfg/apps/support/views/admin.py,sha256=3bofdyoFWPhip0kia7WTFW_4y4-2FtOraOQSMElaemA,1585
536
567
  django_cfg/apps/support/views/api.py,sha256=8hHY-j6EZpSdYkT6JA8_yo7LJKPpSon3DVNWl6jfGRw,5506
537
568
  django_cfg/apps/support/views/chat.py,sha256=wbWR_UgvdgYBYlhHJBLJRPpVm7V44bNy5NZWHqBx2AE,3255
538
- django_cfg/apps/tasks/__init__.py,sha256=_k1_FJbPDmsKGXgaL6oFvZKj31u3uItDBR53kTUiuLM,1932
539
- django_cfg/apps/tasks/apps.py,sha256=jcl4NO8t37_RNHyaCh2GJXXlZqYIMLwpiAY26lnMO8M,459
540
- django_cfg/apps/tasks/urls.py,sha256=4KA6on-Hii-4mQLJaSQ58iPrYBZL4apSsvksLbyhzWU,344
541
- django_cfg/apps/tasks/admin/__init__.py,sha256=h4Hx8VGvbohLLS6nt0OFE7mi0JBx1pHA0lbjjcaXPgU,106
542
- django_cfg/apps/tasks/admin/config.py,sha256=SZ4gh2omc5sPEa3VLz7ewUjV-_O4qPFgHe_e0AkEm9c,2161
543
- django_cfg/apps/tasks/admin/task_log.py,sha256=a9XYEvdFfsLcMeaw12o66dLtww9tmv6VTYwDw785Uys,7604
544
- django_cfg/apps/tasks/filters/__init__.py,sha256=9H6dh9ryI_zJ0_tPENjsSS2V3Mx8MMcWze8hyHokfhc,151
545
- django_cfg/apps/tasks/filters/task_log.py,sha256=BY67R3jyzHR6XdhNty8gjGmLTC5VDTx2_tGeGODOJXE,4929
546
- django_cfg/apps/tasks/migrations/0001_initial.py,sha256=dVbEPP7umgjsJsubxaTYsrDq7dvwv2xf6_K8hfju-lE,7367
547
- django_cfg/apps/tasks/migrations/0002_delete_tasklog.py,sha256=HW1ovU2mwvUXPhrVFaRorJW-rC-SlBNT0qUg6hG6vPY,283
548
- django_cfg/apps/tasks/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
549
- django_cfg/apps/tasks/models/__init__.py,sha256=4tvTev7IYkcjBrll3eLUFLJCDNlyG9c_863qoe_Fzu0,72
550
- django_cfg/apps/tasks/models/task_log.py,sha256=PxcQ7D3LNwQPy9IYLaBYL08buMHeakbmmXyr4Vgaqa0,7967
551
- django_cfg/apps/tasks/serializers/__init__.py,sha256=VcsKMRI4fOE1zajh-IOC0X5NwK2e5ytFh18w-43lXl0,675
552
- django_cfg/apps/tasks/serializers/task_log.py,sha256=XEjWsnojxN2j55PYyoDw1KfXhb_-Ng8VnCeSJJDaL8w,7777
553
- django_cfg/apps/tasks/services/__init__.py,sha256=VRFnirt868_jFvCzvLD3vLNa2HFi4zqFQFXQG9Nm4Kg,268
554
- django_cfg/apps/tasks/services/config_helper.py,sha256=-Iv7EK1fNAydlk6IzvOFvk4TRBBp9IngYBt7tmansRI,1447
555
- django_cfg/apps/tasks/services/sync.py,sha256=wA-gRvqRsElfdP9XD6PosQIwOOJQwy6dUtQbIlb2W2o,5783
556
- django_cfg/apps/tasks/services/client/__init__.py,sha256=pQ6eJPbdj8P9q7qq4XcxtAgEisXjVrT1KTdoqHI5zMI,135
557
- django_cfg/apps/tasks/services/client/client.py,sha256=je4j4Yw0v3fR1PijajoAptAbP7Zx06yAykV21MxAMlQ,6437
558
- django_cfg/apps/tasks/views/__init__.py,sha256=nfwn_GtoZ-H83YeL2BvhWYn9VdBjPM3QiNIivzLiKUw,151
559
- django_cfg/apps/tasks/views/task_log.py,sha256=cyywdhBaLgEFpwc9YaxQSU7or1whSTfDnXA7l8P5iq8,1312
560
- django_cfg/apps/tasks/views/task_log_base.py,sha256=MJ1UzSpYzV75KyQBVSUHyQ0ejYe91h3douXt2osCPf8,1499
561
- django_cfg/apps/tasks/views/task_log_overview.py,sha256=ch7nPu6k9JCDOUh7Z8TQXGrqLGT1X6m-n9HhHFF32yY,3291
562
- django_cfg/apps/tasks/views/task_log_related.py,sha256=mXtDfzfkNpNc2vYPKRV9zNGlsOPV2MOx-xwj1-a6yik,1194
563
- django_cfg/apps/tasks/views/task_log_stats.py,sha256=UhoXFmIsb6utWIuighLuPnFjWcz0BPbkKCCfvHYJyrQ,3046
564
- django_cfg/apps/tasks/views/task_log_timeline.py,sha256=8tTAGNAbKseLmljx6SSr-ATDHuvnUZYQlcG51Wk73fs,2710
565
569
  django_cfg/cli/README.md,sha256=-fZmNv8OUc1OAwwiDnhkUmhTVhEEXX7CXwJQlSRwgQ8,2118
566
570
  django_cfg/cli/__init__.py,sha256=i3ksFngCqZCBvaimQcBD1P2_gr5PiM--4efLScCjvvU,152
567
571
  django_cfg/cli/main.py,sha256=GOmMubPoMpcA0XcRJn4VG2cX9tuhE0i_ioy_d3ujzRQ,883
@@ -577,16 +581,16 @@ django_cfg/core/validation.py,sha256=QmwGlNDa0MFG2OUmgykIUAaEotT55YNh-wAWSVxOAos
577
581
  django_cfg/core/backends/__init__.py,sha256=5Qfza7oKQ8_UIHOs4ibhYvwtgAjngUqLrlwjKl_q124,38
578
582
  django_cfg/core/backends/smtp.py,sha256=kWkNMG7UwLsHcFYSKRgrk1HbP9mU1fxzWYnalHXqoL8,2308
579
583
  django_cfg/core/base/__init__.py,sha256=Z3bZvxejxk4vvWqmqTBLUi9XJpo6A_5Bq4R0J8q81Y4,116
580
- django_cfg/core/base/config_model.py,sha256=WokIZUa-CPmDQUOqyi8UCO44e5BNfV3x5O1tZfNwFig,22016
584
+ django_cfg/core/base/config_model.py,sha256=vcADfj1dFIenIRf9fBynShG1cO0VIRQII8oSZKXrEjE,21513
581
585
  django_cfg/core/builders/__init__.py,sha256=jkInI7_jbxcjitapohw6QmbJPpacnnID6V1JovqtOFM,282
582
- django_cfg/core/builders/apps_builder.py,sha256=Ue6RQDVF4bZFkO3FXD-E48uo9Rc-zHczRbv9xGyv2dU,6917
586
+ django_cfg/core/builders/apps_builder.py,sha256=7wk_BDD8MgNNSAmI7UCj2SkwCMMbo_WuXYdN4NBv91E,6643
583
587
  django_cfg/core/builders/middleware_builder.py,sha256=OwqQRoJKYWlXsQNPFBfUvVMYdppUHCPw-UDczV_esYg,3101
584
588
  django_cfg/core/builders/security_builder.py,sha256=W8Lk9eTMi3PuNK5qH-BIHegeE0cbvmuHKTumLcwOAh8,23961
585
589
  django_cfg/core/environment/__init__.py,sha256=sMOIe9z1i51j8B1VGjpLHJMaeDsBfsgn1TmL03FIeNo,141
586
590
  django_cfg/core/environment/detector.py,sha256=bI9k4fdK8Nbfl61ZcQ3yNbm3WlmK-L0xB-g-aXKUdhA,8923
587
591
  django_cfg/core/generation/__init__.py,sha256=0cYgeQ5EDN6sscQuFnXsFCy6m1BKgv_izNz0a1TlYSc,1355
588
592
  django_cfg/core/generation/generation.py,sha256=uLLJnJ_9kq8zV_auySK05dXwZB-BJx920mID0Pm4RCo,2524
589
- django_cfg/core/generation/orchestrator.py,sha256=a6U4fsRlM1deKSBdcjoi-sWs7DwgmDugE3LyUVG8Z3Q,12526
593
+ django_cfg/core/generation/orchestrator.py,sha256=h3VcyKMvHbgmufifYQG4ITQfB5t3_9sqNzTJcIr7YlU,12057
590
594
  django_cfg/core/generation/protocols.py,sha256=9pqGsZD_Y5v3jdYp4YdkL-i--8feuvX_iKXxV-Cc4Bg,676
591
595
  django_cfg/core/generation/core_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
592
596
  django_cfg/core/generation/core_generators/settings.py,sha256=Rto9qjqQC-MeQJMNyoflS91RrNDS_lBNH4d4ZtgER-8,2632
@@ -595,13 +599,12 @@ django_cfg/core/generation/core_generators/templates.py,sha256=XeGKzF790_zKwFdRw
595
599
  django_cfg/core/generation/data_generators/__init__.py,sha256=O7cmt_k34hWRgrdaAzCRPudcaowaOwMgaoXmZY8HG54,298
596
600
  django_cfg/core/generation/data_generators/cache.py,sha256=UvBmkmiUMPTaA5PDuOdMH1RgpvUz7xvX7jlWe4GUCsg,4920
597
601
  django_cfg/core/generation/data_generators/database.py,sha256=mYR2mBvqWU93YP9XUUVlcZaQJtSNeAQ7Dk4Vj6Tu95k,3481
598
- django_cfg/core/generation/integration_generators/__init__.py,sha256=wPPiVQnmCEXKigp-d_jKznU2i1M6aP4P2YOVYipuMDk,737
602
+ django_cfg/core/generation/integration_generators/__init__.py,sha256=fN412Ytj-TY41tlwshvWOQNonvMlv9m3aN3tBgnRI3Q,638
599
603
  django_cfg/core/generation/integration_generators/api.py,sha256=Xsyu3mYyq9mje8QGNSU0Yp4tLbtF0ckq4lEf_Rj5pLc,11062
600
- django_cfg/core/generation/integration_generators/django_q2.py,sha256=ZRIApW0lQWHOizd9jvFBSckk_O-bhrgr7rCnKg7M8U0,4155
604
+ django_cfg/core/generation/integration_generators/django_rq.py,sha256=WqmEzGHhZtn2a5E4xg063TyCunb67_CoLQS1KSLQUYc,2367
601
605
  django_cfg/core/generation/integration_generators/grpc_generator.py,sha256=UpeumEd7ASWiWUUTsyWu35scOP3kVz14CDIxyc4AszU,10423
602
606
  django_cfg/core/generation/integration_generators/sessions.py,sha256=GbRC72Gny4dzj7oTIrbuhYyvhCQBoWI-0GxB8ZHTrEU,1644
603
607
  django_cfg/core/generation/integration_generators/tailwind.py,sha256=YgiV5c-l0DDJnMKx6mWcUtH5zyMdewAJXjLDwmHrSuc,1208
604
- django_cfg/core/generation/integration_generators/tasks.py,sha256=fMbuIdjRenuZQ6rfco7imLzDbCdX4WEO1aLslBpxjTQ,2253
605
608
  django_cfg/core/generation/integration_generators/third_party.py,sha256=ef3sdpfDIf6B_dRuRjoIYc9rlqMYoKgTH4luFvjy9UM,3971
606
609
  django_cfg/core/generation/security_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
607
610
  django_cfg/core/generation/security_generators/crypto_fields.py,sha256=CCNP4UxsSXMTRhB83KqAvtOyEGXb9qpooFg-gXwngYY,1980
@@ -621,7 +624,7 @@ django_cfg/core/integration/version_checker.py,sha256=VJo7CWjNjj_XYE2YqIWGSnxnos
621
624
  django_cfg/core/integration/display/__init__.py,sha256=8vvW7rdKEnPO9iVMHUazGmVCE0gwClsK10mDz6_FCt0,314
622
625
  django_cfg/core/integration/display/base.py,sha256=ElP8XtUGhtQm3LrSrLf-fgESi10G8EKevxku85nWyAU,5541
623
626
  django_cfg/core/integration/display/ngrok.py,sha256=IAuZzh1swfQwPl-wadVpooEvAqe085HYrTPSEGgYfr8,5899
624
- django_cfg/core/integration/display/startup.py,sha256=Ii29ic5ProXmgYgZJQuk7wkh2hjqCOnbqphnaUafGB0,34688
627
+ django_cfg/core/integration/display/startup.py,sha256=RaaetLTIVbStzIpAsHKSVJnp0fS5bf18bewotyQaJ98,34006
625
628
  django_cfg/core/services/__init__.py,sha256=Eb-F6qqQ-qkep1O-JkaT96IpuxxqtGdT_MIwGXafqSE,117
626
629
  django_cfg/core/services/config_service.py,sha256=leo6i6QDq25Bst8PIhBoRVIorPNupLHJub2IwhumAjo,3579
627
630
  django_cfg/core/state/__init__.py,sha256=0jAOD0WHpq_W8L5Gh2084D0V5nhb-RAB3t8Akr2SX8M,225
@@ -658,10 +661,11 @@ django_cfg/middleware/authentication.py,sha256=1deekm3lyAMJ2pK7Usd5q1FtUN1aDq_CG
658
661
  django_cfg/middleware/pagination.py,sha256=xnaFH1olDH_m4ecwpTTUyFWV6jKoF6IxJvagSZSJR0E,8603
659
662
  django_cfg/middleware/public_endpoints.py,sha256=p-VCjeu0k7B4OuQIe2OVUx7Onh9gsM2HweWcYNxEaRA,6775
660
663
  django_cfg/middleware/user_activity.py,sha256=bgftHXXeGBS-jCa8mLzTx4Gcz2fHTaQz_nbRCR5Yqio,5980
661
- django_cfg/mixins/__init__.py,sha256=1IErIlF4QWqt9VLFD8yoTiGWHobsDjLL6rqcEqMLbw4,211
664
+ django_cfg/mixins/__init__.py,sha256=3nJ5PySz233LJCKC5x5iqqh9P_C2n-KxNKxAEY5tVao,284
662
665
  django_cfg/mixins/admin_api.py,sha256=3GRfAty6YXGbZp4ZFsNFt1Gs_e5T4xBOLnRPoc5vaq0,1116
663
666
  django_cfg/mixins/client_api.py,sha256=KeGK_f2xR08l0ckGpMmXHHpVLDQ7SnSbZn4WP5bSsvI,1200
664
- django_cfg/models/__init__.py,sha256=H11Jdcv5CaKMq6ylk8o3s7Orc6Yr8wQJ6lL1n7EMiZI,2883
667
+ django_cfg/mixins/superadmin_api.py,sha256=B059W_nU0HsjqBUf-bD_2UlKpLba-P3Rh0Z-dc5Rut0,1856
668
+ django_cfg/models/__init__.py,sha256=HsH_4IQLHENFt3ljbbNTO0o_78LKf5IKX8F5TXqnC0o,2865
665
669
  django_cfg/models/api/__init__.py,sha256=VWkiYs38A7Tx5ZWePeBxL1lMiXKsonb5TQfoVRRCBac,605
666
670
  django_cfg/models/api/config.py,sha256=KzaDn2Ubc7SpZ_8xt6-Q-XxnZbf9Glu1xJhJWbAI--o,4455
667
671
  django_cfg/models/api/cors.py,sha256=kRDGD-HcCK39QhoyvKnn2yGcwzGFp2QIw50G7TNx78I,3467
@@ -678,14 +682,14 @@ django_cfg/models/api/grpc/config.py,sha256=YY0KKCzPiLxV3l-l7oXoKN-n-CbcH11Iala-
678
682
  django_cfg/models/base/__init__.py,sha256=f6sMVyd-YEFdLebmIKOOPviu1Ovn4BHGp7j7ZVNqFDo,271
679
683
  django_cfg/models/base/config.py,sha256=hfpf35yMR8oOE1J0SBPNNSBwXckK3F2-Iv0Vw6cNX4E,10114
680
684
  django_cfg/models/base/module.py,sha256=nxN1Y9J4l94kOfSXLQJ2eGgIGWTq8kyh7hUGvCQNyIs,2674
681
- django_cfg/models/django/__init__.py,sha256=J4VRl77vgXzfKcdUcX-sPxpBSOJ4qA-8RstPgJ5ChmA,511
685
+ django_cfg/models/django/__init__.py,sha256=inT3j1zEvsA_uKomx6MfNOdlIEAt_xWLZP1N5vkBOhA,493
682
686
  django_cfg/models/django/axes.py,sha256=-4nk2gSfpj7lNY5vnm_2jHVLz8VAKoEd9yF2TuCR8O8,5624
683
687
  django_cfg/models/django/constance.py,sha256=6x57bi40mDX0fKcKeQKgV2BO3WIVYPQllAchWsj4KvM,8847
684
688
  django_cfg/models/django/crypto_fields.py,sha256=OguITidM4Mp564p_gbsokeNCZxjL9hrK1Vw0McuA3yo,4700
685
- django_cfg/models/django/django_q2.py,sha256=G8m2hg0-IE-GLsGabaHetGVdbb_cNas8RCbZBBr-xz4,15564
689
+ django_cfg/models/django/django_rq.py,sha256=gjOq_UgR6H1xcLrgzQGprM_6HLsn5jbUd54nUVkRml4,18096
686
690
  django_cfg/models/django/environment.py,sha256=lBCHBs1lphv9tlu1BCTfLZeH_kUame0p66A_BIjBY7M,9440
687
691
  django_cfg/models/django/openapi.py,sha256=avE3iapaCj8eyOqVUum_v2EExR3V-hwHrexqtXMHtTQ,3739
688
- django_cfg/models/django/revolution_legacy.py,sha256=Z4SPUS7QSv62EuPAeFFoXGEgqLmdXnVEr7Ofk1IDtVc,8918
692
+ django_cfg/models/django/revolution_legacy.py,sha256=kXKavMKjwge2xqKSckmuIWfWxkvn9aW4dXuXnlKzwSU,8918
689
693
  django_cfg/models/infrastructure/__init__.py,sha256=VdOapoHa_yPtme8dLEJsmOlmT2klGs8G62W5CES8e2E,369
690
694
  django_cfg/models/infrastructure/cache.py,sha256=-eN2GjDJo-4Ta6b4hamG-AuBHNEKoYK_LqVOt_fJvZE,12012
691
695
  django_cfg/models/infrastructure/logging.py,sha256=dbbDJ0hjJKigKKTmqKnh7hkLzmipm3_abp-whaK1lOY,10314
@@ -706,12 +710,8 @@ django_cfg/models/services/__init__.py,sha256=K3mit3rKumqC4XiCUU0BziZC3143j1SM9j
706
710
  django_cfg/models/services/base.py,sha256=q_QggR8i_6qoiIvbAubddCklpfjVfeLP3Bv2bsdT4BQ,1607
707
711
  django_cfg/models/services/email.py,sha256=JigMJaJA26MT_Euc4q_OfmZYJYzaGyHb0JXsNFOS0uY,5119
708
712
  django_cfg/models/services/telegram.py,sha256=wrMqOGZCp1KAxRmCn5oxMU0BMBgbzsQD6o0Fi_7kfIY,4810
709
- django_cfg/models/tasks/__init__.py,sha256=1cZH-P022je3FGSaus6kwxSzMAKBLkIetZ8qp4Dy46I,1228
710
- django_cfg/models/tasks/backends.py,sha256=r5VcuAxyyxqd5grpktEd-0yJNvSJu2jv0IBgrK32ENs,3369
711
- django_cfg/models/tasks/config.py,sha256=0Tc7O2mVQLc8IYXMm__cdeP0ytYn_NucL2xyA95wyT4,5892
712
- django_cfg/models/tasks/utils.py,sha256=9TEbdxgd0N_O2T_7GGwkyPeDg4H7tSKLHoHG_n8edqg,4459
713
713
  django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
714
- django_cfg/modules/base.py,sha256=03SUBaSOduJjhJRdG5bUdmQrcgKxNtliSUd7mHSpTic,6684
714
+ django_cfg/modules/base.py,sha256=HoGNleQkBLca-oxF-C7PyNoXPOgSiXGZG2gWcV3Qshs,6615
715
715
  django_cfg/modules/django_admin/__init__.py,sha256=0g5SJPtmMhM57MMZG4msvhKbgDTqabf5r95_EsQMQuY,3370
716
716
  django_cfg/modules/django_admin/apps.py,sha256=xJjgIRgS_I1ehyq7ZbFpZY_L4umRa5ZPQP3mf0alUaU,526
717
717
  django_cfg/modules/django_admin/base/__init__.py,sha256=tzre09bnD_SlS-pA30WzYZRxyvch7eLq3q0wLEcZOmc,118
@@ -720,7 +720,7 @@ django_cfg/modules/django_admin/base/unfold_admin.py,sha256=iqpRWSkzW5HktXDuuG7G
720
720
  django_cfg/modules/django_admin/config/__init__.py,sha256=yhoZcTjgl40bDnaPe1MFdNLqYQj02cdE48aVrfGCmXU,968
721
721
  django_cfg/modules/django_admin/config/action_config.py,sha256=JjS01JxLT-FzUVq7RlKaB7L38wmVL8uibXO_iXZcljo,1668
722
722
  django_cfg/modules/django_admin/config/admin_config.py,sha256=L48YHLt-JyNyL-XOltqIZVh1ALoG4wXQsvi_WIbhuFw,5577
723
- django_cfg/modules/django_admin/config/background_task_config.py,sha256=7-8B1rhpeafanVxtjFQUx0mVjcA5xmxZIxqKzaBwMX0,1760
723
+ django_cfg/modules/django_admin/config/background_task_config.py,sha256=71RlnM7m381t9PPXA1EBPWrhl6PJtKRfbGBMnJmofFI,1765
724
724
  django_cfg/modules/django_admin/config/documentation_config.py,sha256=lI_gMSWCtyKmdyttLNdgbg_zbGgrwXA-QoLxVOXJj9A,14189
725
725
  django_cfg/modules/django_admin/config/field_config.py,sha256=J-CTdhJFP0CLw8T0cOb1FvYwTPpdawv9qVam69QbO4s,12638
726
726
  django_cfg/modules/django_admin/config/fieldset_config.py,sha256=5BPUWO_HvS6YhPU_vqQPzRT2y3OIPrBCioFuer5-mrA,1249
@@ -751,7 +751,7 @@ django_cfg/modules/django_admin/utils/html/__init__.py,sha256=22_xZ2Mlec5U-eSRZw
751
751
  django_cfg/modules/django_admin/utils/html/badges.py,sha256=fAEW_4U44xcrbQg7wvk3bQb1BYUAp-nWCbDFm8WNBOw,1769
752
752
  django_cfg/modules/django_admin/utils/html/base.py,sha256=HWhGTRy1pXFcK2v2Gds7psFDze1S-GS89HDlrmWLq3M,5302
753
753
  django_cfg/modules/django_admin/utils/html/code.py,sha256=yBhBjEWI0o9NlB-EJiHFmyxzPDh8wH3iJwv7kB6HDw8,3012
754
- django_cfg/modules/django_admin/utils/html/composition.py,sha256=BqKB1aiX2-iyDk-gS35hQZR9-X2y4BzcaEixfLJiqU8,7061
754
+ django_cfg/modules/django_admin/utils/html/composition.py,sha256=KrlRDdpKGosw9tUhGeS1Q7V86gCxYpKv4kGUS2R7jzg,7356
755
755
  django_cfg/modules/django_admin/utils/html/formatting.py,sha256=EeSHyObFGPr2Ie6KbySE8WBQtqUFT_BQfXf0oucigIU,8613
756
756
  django_cfg/modules/django_admin/utils/html/keyvalue.py,sha256=cBw2RPE3J_3kENYSYNxpm8eY56bwp5yityxBl6N4_q8,7299
757
757
  django_cfg/modules/django_admin/utils/html/markdown_integration.py,sha256=r28EyVtma9YfCnSoDDbBthWrZtT9LVmhcXSwe4OG4Ws,3372
@@ -1000,12 +1000,6 @@ django_cfg/modules/django_ngrok/service.py,sha256=Xkh9Gl6Rth32UcT0UYjD0ckROHFw6F
1000
1000
  django_cfg/modules/django_ngrok/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1001
1001
  django_cfg/modules/django_ngrok/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1002
1002
  django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py,sha256=urwO1nPjcBMPn7k8WXBzfWQpjzCsIKaiET2Gf5afYwk,6259
1003
- django_cfg/modules/django_q2/README.md,sha256=pyY0EqefXTJ47k_liMv22d0zx-9dHVPGFUSZS3aLQjE,4763
1004
- django_cfg/modules/django_q2/__init__.py,sha256=6Eu26O-4ddwE8qO27pTT6x13-iPc9eA2Pzq8_cRHZMc,186
1005
- django_cfg/modules/django_q2/apps.py,sha256=UoSbow-Wlkwriem5mEud1vrUD7_TnqANMzoajGLBVQs,3396
1006
- django_cfg/modules/django_q2/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1007
- django_cfg/modules/django_q2/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1008
- django_cfg/modules/django_q2/management/commands/sync_django_q_schedules.py,sha256=ik_4kmKp9RUTOaxewWK6KgwK_1_1wJcVZQ2LAdSG0Lo,2671
1009
1003
  django_cfg/modules/django_tailwind/README.md,sha256=tPQd4ir79MLFSVUKBGfPAF22LZWE0BcmzcNdQhJ4k7I,10804
1010
1004
  django_cfg/modules/django_tailwind/__init__.py,sha256=K0GbFxjemNixRUgexurSTDfN4kB--TmuFCk9n5DbLYc,186
1011
1005
  django_cfg/modules/django_tailwind/apps.py,sha256=CKNd0xDoLaQpe7SEfay0ZtWkjLUVRgofkB8FobKLXV8,313
@@ -1044,7 +1038,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
1044
1038
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
1045
1039
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
1046
1040
  django_cfg/modules/django_unfold/__init__.py,sha256=Uquez6xgPUIc8FBMP7qif-adRYQSjQ2dBHxnJPom3eQ,1337
1047
- django_cfg/modules/django_unfold/navigation.py,sha256=0iZnp5q1ghsFisur54HMCukaIzQGe7THZrB0W_aMgIE,15362
1041
+ django_cfg/modules/django_unfold/navigation.py,sha256=cPX9speejarL488CyAfBLkNHJnRbtV5hiQN7a2X8brI,14484
1048
1042
  django_cfg/modules/django_unfold/system_monitor.py,sha256=KcrTa5irstdB1pDKe3sC0zl4tz9LVjhp7xvbqUM4YVk,6781
1049
1043
  django_cfg/modules/django_unfold/tailwind.py,sha256=NY8nWcUdQw61oNmjPoPl7agcTb-r5IqcpFYy35MNsTM,9107
1050
1044
  django_cfg/modules/django_unfold/utils.py,sha256=5aFaceRc9B3eXfpOVyKRD2wWqFt8KcHxjQg54oD7Oyg,4482
@@ -1061,7 +1055,7 @@ django_cfg/modules/nextjs_admin/models/config.py,sha256=75iM81aaTlDQdhfvdlCzj6o9
1061
1055
  django_cfg/modules/nextjs_admin/templatetags/__init__.py,sha256=ChVBnJggCIY8rMhfyJFoA8k0qKo-8FtJknrk54Vx4wM,51
1062
1056
  django_cfg/modules/nextjs_admin/templatetags/nextjs_admin.py,sha256=aAekrlu3pvvx3I4uJGT3S2ie8QfF94umDBjgAF71EII,4483
1063
1057
  django_cfg/registry/__init__.py,sha256=CaiL9KwqPzXlIe5-4Qr7PQu5ZxAW1HtuDIXZ7-ktRQg,538
1064
- django_cfg/registry/core.py,sha256=LqqmWwaOo-0KivPD61yolBwxxigvKARZflOv6rLAcHM,3546
1058
+ django_cfg/registry/core.py,sha256=oHFEmCZDkPNP184mVKVKqD36nN0mJFrLc2q8MWbfSfk,3439
1065
1059
  django_cfg/registry/exceptions.py,sha256=b4pIakeRxhT1-ST3lbAnmAQaASRBARCoah_w6vb3VF0,399
1066
1060
  django_cfg/registry/modules.py,sha256=OXQ9Ls7KM28kmW2yjT_xPNA_3BsDQyXJFxCmmQpzL7s,2220
1067
1061
  django_cfg/registry/services.py,sha256=l0V2twGpF9BwVlo-TTfFu8dV7GVBS7XKCsScIZXWWbc,2457
@@ -1084,7 +1078,7 @@ django_cfg/static/admin/js/alpine/commands-section.js,sha256=8z2MQNwZF9Tx_2EK1AY
1084
1078
  django_cfg/static/admin/js/alpine/dashboard-tabs.js,sha256=ob8Q_I9lFLDv_hFERXgTyvqMDBspAGfzCxI_7slRur4,1354
1085
1079
  django_cfg/static/admin/js/alpine/system-metrics.js,sha256=m-Fg55K_vpHXToD46PXL9twl4OBF_V9MONvbSWbQqDw,440
1086
1080
  django_cfg/static/admin/js/alpine/toggle-section.js,sha256=T141NFmy0fRJyGGuuaCJRjJXwPam-xxtQNW1hi8BJbc,672
1087
- django_cfg/static/frontend/admin.zip,sha256=3ezv0j07V1jtVJA3wjxwr1T6Z4XoA3xRhRIFOAZCOm8,7647333
1081
+ django_cfg/static/frontend/admin.zip,sha256=6kj31ET88jIKeZRi5__JGr8wxBZGCHPPfef0G6R-SP8,7679198
1088
1082
  django_cfg/static/js/api-loader.mjs,sha256=boGqqRGnFR-Mzo_RQOjhAzNvsb7QxZddSwMKROzkk9Q,5163
1089
1083
  django_cfg/static/js/api/base.mjs,sha256=KUxZHHdELAV8mNnACpwJRvaQhdJxp-n5LFEQ4oUZxBo,4707
1090
1084
  django_cfg/static/js/api/index.mjs,sha256=_-Q04jjHcgwi4CGfiaLyiOR6NW7Yu1HBhJWp2J1cjpc,2538
@@ -1107,11 +1101,12 @@ django_cfg/static/js/api/tasks/client.mjs,sha256=tIy8K-finXzTUL9kOo_L4Q1kchDaHyu
1107
1101
  django_cfg/static/js/api/tasks/index.mjs,sha256=yCY1GzdD-RtFZ3pAfk1l0msgO1epyo0lsGCjH0g1Afc,294
1108
1102
  django_cfg/templates/__init__.py,sha256=IzLjt-a7VIJ0OutmAE1_-w0_LpL2u0MgGpnIabjZuW8,19
1109
1103
  django_cfg/templates/admin/DUAL_TAB_ARCHITECTURE.md,sha256=CL8E3K4rFpXeQiNgrYSMvCW1y-eFaoXxxsI58zPf9dY,17562
1110
- django_cfg/templates/admin/index.html,sha256=yWXkh2aIkwBguBQX7vpFwj-N9LCbqTz5yG1nvSbzq6s,28185
1104
+ django_cfg/templates/admin/index.html,sha256=j8WVCX-wlg11k9AWEfQQ46xzGiHV5sg2REAV0FKgQIg,37124
1105
+ django_cfg/templates/admin/constance/includes/results_list.html,sha256=Itzs1lGqOYg6ftJUjQ1jWmsbdXDKdov3cDtqMllxih8,3835
1111
1106
  django_cfg/templates/emails/base_email.html,sha256=TWcvYa2IHShlF_E8jf1bWZStRO0v8G4L_GexPxvz6XQ,8836
1112
1107
  django_cfg/templates/unfold/layouts/skeleton.html,sha256=2ArkcNZ34mFs30cOAsTQ1EZiDXcB0aVxkO71lJq9SLE,718
1113
1108
  django_cfg/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1114
- django_cfg/templatetags/django_cfg.py,sha256=65idOLq0uTSY2iKOwfRKFw28RdXEg2h_0zdD4JB_s7s,10698
1109
+ django_cfg/templatetags/django_cfg.py,sha256=7vAxJ56vggN9ZEFmV_pUNhSiWjX2nF_4IhaC0Mp82hI,12429
1115
1110
  django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
1116
1111
  django_cfg/utils/path_resolution.py,sha256=2n0I04lQkSssFaELu3A93YyMAl1K10KPdpxMt5k4Iy0,13341
1117
1112
  django_cfg/utils/smart_defaults.py,sha256=ZUj6K_Deq-fp5O0Dy_Emt257UWFn0f9bkgFv9YCR58U,9239
@@ -1119,9 +1114,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
1119
1114
  django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
1120
1115
  django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
1121
1116
  django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1122
- django_cfg/pyproject.toml,sha256=L1IZT2BI_W7lLh_LF4LiZhCIdxKtxTfj15zLIqh2gmc,8844
1123
- django_cfg-1.5.1.dist-info/METADATA,sha256=-BLq93lmM19G7ej38baJZOozOTDza884zWY7mI23yb4,24341
1124
- django_cfg-1.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1125
- django_cfg-1.5.1.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1126
- django_cfg-1.5.1.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1127
- django_cfg-1.5.1.dist-info/RECORD,,
1117
+ django_cfg/pyproject.toml,sha256=5c8SzNI9n0_JlxE_kHXuORaqIcSwkxXxUFiXgBh_r6U,8827
1118
+ django_cfg-1.5.2.dist-info/METADATA,sha256=8B_CGBByZaSqc2PxdJWqQ98LR7PSj0Sx_F4Aog4mJlg,24312
1119
+ django_cfg-1.5.2.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1120
+ django_cfg-1.5.2.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1121
+ django_cfg-1.5.2.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1122
+ django_cfg-1.5.2.dist-info/RECORD,,
@@ -1,48 +0,0 @@
1
- """
2
- Dashboard Permissions
3
-
4
- Custom permission classes for dashboard API endpoints.
5
- """
6
-
7
- from rest_framework.permissions import BasePermission
8
-
9
-
10
- class IsSuperAdmin(BasePermission):
11
- """
12
- Permission that allows access only to superusers.
13
-
14
- More restrictive than IsAdminUser - requires is_superuser flag.
15
- Use for sensitive operations like command execution.
16
- """
17
-
18
- def has_permission(self, request, view):
19
- """Check if user is authenticated and is a superuser."""
20
- return bool(
21
- request.user and
22
- request.user.is_authenticated and
23
- request.user.is_superuser
24
- )
25
-
26
-
27
- class IsStaffOrReadOnly(BasePermission):
28
- """
29
- Permission that allows read access to staff,
30
- but write access only to superusers.
31
- """
32
-
33
- def has_permission(self, request, view):
34
- """Check permissions based on request method."""
35
- # Read permissions are allowed to any staff user
36
- if request.method in ['GET', 'HEAD', 'OPTIONS']:
37
- return bool(
38
- request.user and
39
- request.user.is_authenticated and
40
- request.user.is_staff
41
- )
42
-
43
- # Write permissions are only allowed to superusers
44
- return bool(
45
- request.user and
46
- request.user.is_authenticated and
47
- request.user.is_superuser
48
- )
@@ -1,50 +0,0 @@
1
- """
2
- Django-Q2 Task Serializers
3
-
4
- Serializers for displaying Django-Q2 scheduled tasks and task history.
5
- """
6
-
7
- from rest_framework import serializers
8
-
9
-
10
- class DjangoQ2ScheduleSerializer(serializers.Serializer):
11
- """Serializer for Django-Q2 scheduled tasks."""
12
-
13
- id = serializers.IntegerField(read_only=True)
14
- name = serializers.CharField(max_length=255)
15
- func = serializers.CharField(max_length=512)
16
- schedule_type = serializers.CharField(max_length=24)
17
- repeats = serializers.IntegerField()
18
- next_run = serializers.DateTimeField(allow_null=True)
19
- last_run = serializers.DateTimeField(allow_null=True)
20
-
21
-
22
- class DjangoQ2TaskSerializer(serializers.Serializer):
23
- """Serializer for Django-Q2 task execution history."""
24
-
25
- id = serializers.CharField(max_length=32)
26
- name = serializers.CharField(max_length=255)
27
- func = serializers.CharField(max_length=512)
28
- started = serializers.DateTimeField()
29
- stopped = serializers.DateTimeField(allow_null=True)
30
- success = serializers.BooleanField()
31
- result = serializers.CharField(allow_null=True)
32
-
33
-
34
- class DjangoQ2StatusSerializer(serializers.Serializer):
35
- """Serializer for Django-Q2 cluster status."""
36
-
37
- cluster_running = serializers.BooleanField()
38
- total_schedules = serializers.IntegerField()
39
- active_schedules = serializers.IntegerField()
40
- recent_tasks = serializers.IntegerField()
41
- successful_tasks = serializers.IntegerField()
42
- failed_tasks = serializers.IntegerField()
43
-
44
-
45
- class DjangoQ2SummarySerializer(serializers.Serializer):
46
- """Summary serializer for Django-Q2 dashboard."""
47
-
48
- status = DjangoQ2StatusSerializer()
49
- schedules = DjangoQ2ScheduleSerializer(many=True)
50
- recent_tasks = DjangoQ2TaskSerializer(many=True)
@@ -1,159 +0,0 @@
1
- """
2
- Django-Q2 Service
3
-
4
- Business logic for collecting Django-Q2 task data.
5
- """
6
-
7
- from typing import Dict, List, Any
8
-
9
-
10
- class DjangoQ2Service:
11
- """Service for aggregating Django-Q2 task information."""
12
-
13
- @staticmethod
14
- def get_schedules() -> List[Dict[str, Any]]:
15
- """
16
- Get all scheduled tasks from Django-Q2.
17
-
18
- Returns:
19
- List of scheduled tasks with their configurations
20
- """
21
- try:
22
- from django_q.models import Schedule
23
-
24
- schedules = Schedule.objects.all().order_by('-next_run')
25
- return [
26
- {
27
- 'id': schedule.id,
28
- 'name': schedule.name,
29
- 'func': schedule.func,
30
- 'schedule_type': schedule.schedule_type,
31
- 'repeats': schedule.repeats,
32
- 'next_run': schedule.next_run,
33
- 'last_run': getattr(schedule, 'last_run', None),
34
- }
35
- for schedule in schedules
36
- ]
37
- except ImportError:
38
- # django-q2 not installed
39
- return []
40
- except Exception:
41
- # Database error or table doesn't exist yet
42
- return []
43
-
44
- @staticmethod
45
- def get_recent_tasks(limit: int = 20) -> List[Dict[str, Any]]:
46
- """
47
- Get recent task executions from Django-Q2.
48
-
49
- Args:
50
- limit: Maximum number of tasks to return
51
-
52
- Returns:
53
- List of recent task executions with their results
54
- """
55
- try:
56
- from django_q.models import Task
57
-
58
- tasks = Task.objects.all().order_by('-started')[:limit]
59
- return [
60
- {
61
- 'id': task.id,
62
- 'name': task.name,
63
- 'func': task.func,
64
- 'started': task.started,
65
- 'stopped': task.stopped,
66
- 'success': task.success,
67
- 'result': str(task.result) if task.result else None,
68
- }
69
- for task in tasks
70
- ]
71
- except ImportError:
72
- # django-q2 not installed
73
- return []
74
- except Exception:
75
- # Database error or table doesn't exist yet
76
- return []
77
-
78
- @staticmethod
79
- def get_cluster_status() -> Dict[str, Any]:
80
- """
81
- Get Django-Q2 cluster status.
82
-
83
- Returns:
84
- Dictionary with cluster status information
85
- """
86
- try:
87
- from django_q.models import Schedule, Task
88
- from django_q.cluster import Cluster
89
-
90
- # Count schedules
91
- total_schedules = Schedule.objects.count()
92
- active_schedules = Schedule.objects.filter(repeats__gt=0).count()
93
-
94
- # Count recent tasks (last 24 hours)
95
- from django.utils import timezone
96
- from datetime import timedelta
97
-
98
- last_24h = timezone.now() - timedelta(hours=24)
99
- recent_tasks = Task.objects.filter(started__gte=last_24h).count()
100
- successful_tasks = Task.objects.filter(
101
- started__gte=last_24h, success=True
102
- ).count()
103
- failed_tasks = Task.objects.filter(
104
- started__gte=last_24h, success=False
105
- ).count()
106
-
107
- # Check if cluster is running
108
- cluster_running = False
109
- try:
110
- # Check for recent task activity as proxy for cluster status
111
- recent_task = Task.objects.filter(
112
- started__gte=timezone.now() - timedelta(minutes=5)
113
- ).exists()
114
- cluster_running = recent_task
115
- except Exception:
116
- pass
117
-
118
- return {
119
- 'cluster_running': cluster_running,
120
- 'total_schedules': total_schedules,
121
- 'active_schedules': active_schedules,
122
- 'recent_tasks': recent_tasks,
123
- 'successful_tasks': successful_tasks,
124
- 'failed_tasks': failed_tasks,
125
- }
126
- except ImportError:
127
- # django-q2 not installed
128
- return {
129
- 'cluster_running': False,
130
- 'total_schedules': 0,
131
- 'active_schedules': 0,
132
- 'recent_tasks': 0,
133
- 'successful_tasks': 0,
134
- 'failed_tasks': 0,
135
- }
136
- except Exception:
137
- # Database error or table doesn't exist yet
138
- return {
139
- 'cluster_running': False,
140
- 'total_schedules': 0,
141
- 'active_schedules': 0,
142
- 'recent_tasks': 0,
143
- 'successful_tasks': 0,
144
- 'failed_tasks': 0,
145
- }
146
-
147
- @classmethod
148
- def get_summary(cls) -> Dict[str, Any]:
149
- """
150
- Get complete Django-Q2 summary for dashboard.
151
-
152
- Returns:
153
- Dictionary with status, schedules, and recent tasks
154
- """
155
- return {
156
- 'status': cls.get_cluster_status(),
157
- 'schedules': cls.get_schedules(),
158
- 'recent_tasks': cls.get_recent_tasks(limit=10),
159
- }