django-cfg 1.4.106__py3-none-any.whl → 1.4.108__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 (137) hide show
  1. django_cfg/__init__.py +1 -1
  2. django_cfg/apps/accounts/views/profile.py +19 -9
  3. django_cfg/apps/centrifugo/views/admin_api.py +4 -7
  4. django_cfg/apps/centrifugo/views/monitoring.py +3 -6
  5. django_cfg/apps/centrifugo/views/testing_api.py +3 -6
  6. django_cfg/apps/dashboard/services/system_health_service.py +16 -11
  7. django_cfg/apps/dashboard/views/activity_views.py +3 -5
  8. django_cfg/apps/dashboard/views/apizones_views.py +4 -5
  9. django_cfg/apps/dashboard/views/charts_views.py +4 -5
  10. django_cfg/apps/dashboard/views/overview_views.py +4 -5
  11. django_cfg/apps/dashboard/views/statistics_views.py +4 -5
  12. django_cfg/apps/dashboard/views/system_views.py +4 -5
  13. django_cfg/apps/knowbase/__init__.py +2 -2
  14. django_cfg/apps/knowbase/apps.py +2 -8
  15. django_cfg/apps/knowbase/views/base.py +9 -4
  16. django_cfg/apps/support/views/api.py +16 -7
  17. django_cfg/apps/tasks/__init__.py +61 -2
  18. django_cfg/apps/tasks/admin/__init__.py +3 -10
  19. django_cfg/apps/tasks/admin/config.py +98 -0
  20. django_cfg/apps/tasks/admin/task_log.py +265 -0
  21. django_cfg/apps/tasks/apps.py +7 -9
  22. django_cfg/apps/tasks/filters/__init__.py +10 -0
  23. django_cfg/apps/tasks/filters/task_log.py +121 -0
  24. django_cfg/apps/tasks/migrations/0001_initial.py +196 -0
  25. django_cfg/apps/tasks/models/__init__.py +4 -0
  26. django_cfg/apps/tasks/models/task_log.py +246 -0
  27. django_cfg/apps/tasks/serializers/__init__.py +28 -0
  28. django_cfg/apps/tasks/serializers/task_log.py +249 -0
  29. django_cfg/apps/tasks/services/__init__.py +10 -0
  30. django_cfg/apps/tasks/services/client/__init__.py +7 -0
  31. django_cfg/apps/tasks/services/client/client.py +234 -0
  32. django_cfg/apps/tasks/services/config_helper.py +63 -0
  33. django_cfg/apps/tasks/services/sync.py +204 -0
  34. django_cfg/apps/tasks/urls.py +7 -13
  35. django_cfg/apps/tasks/views/__init__.py +4 -10
  36. django_cfg/apps/tasks/views/task_log.py +41 -0
  37. django_cfg/apps/tasks/views/task_log_base.py +41 -0
  38. django_cfg/apps/tasks/views/task_log_overview.py +100 -0
  39. django_cfg/apps/tasks/views/task_log_related.py +41 -0
  40. django_cfg/apps/tasks/views/task_log_stats.py +91 -0
  41. django_cfg/apps/tasks/views/task_log_timeline.py +81 -0
  42. django_cfg/apps/urls.py +0 -1
  43. django_cfg/cli/commands/info.py +1 -1
  44. django_cfg/cli/utils.py +1 -1
  45. django_cfg/core/base/config_model.py +1 -1
  46. django_cfg/core/builders/apps_builder.py +1 -1
  47. django_cfg/core/generation/integration_generators/__init__.py +1 -1
  48. django_cfg/core/generation/integration_generators/tasks.py +14 -18
  49. django_cfg/core/generation/security_generators/crypto_fields.py +2 -1
  50. django_cfg/core/integration/display/startup.py +1 -1
  51. django_cfg/mixins/__init__.py +12 -0
  52. django_cfg/mixins/admin_api.py +37 -0
  53. django_cfg/mixins/client_api.py +39 -0
  54. django_cfg/models/django/constance.py +2 -8
  55. django_cfg/models/django/crypto_fields.py +13 -48
  56. django_cfg/models/tasks/__init__.py +8 -10
  57. django_cfg/models/tasks/backends.py +76 -207
  58. django_cfg/models/tasks/config.py +20 -127
  59. django_cfg/models/tasks/utils.py +17 -29
  60. django_cfg/modules/django_admin/RESOURCE_CONFIG_ENHANCEMENT.md +350 -0
  61. django_cfg/modules/django_admin/__init__.py +4 -0
  62. django_cfg/modules/django_admin/base/pydantic_admin.py +70 -15
  63. django_cfg/modules/django_admin/config/__init__.py +4 -0
  64. django_cfg/modules/django_admin/config/admin_config.py +13 -1
  65. django_cfg/modules/django_admin/config/background_task_config.py +76 -0
  66. django_cfg/modules/django_admin/config/resource_config.py +129 -0
  67. django_cfg/modules/django_client/management/commands/generate_client.py +13 -1
  68. django_cfg/modules/django_unfold/navigation.py +121 -22
  69. django_cfg/pyproject.toml +2 -2
  70. django_cfg/registry/core.py +1 -1
  71. django_cfg/static/frontend/admin.zip +0 -0
  72. {django_cfg-1.4.106.dist-info → django_cfg-1.4.108.dist-info}/METADATA +5 -3
  73. {django_cfg-1.4.106.dist-info → django_cfg-1.4.108.dist-info}/RECORD +77 -111
  74. django_cfg/apps/tasks/admin/actions.py +0 -29
  75. django_cfg/apps/tasks/admin/tasks_admin.py +0 -154
  76. django_cfg/apps/tasks/api/serializers.py +0 -82
  77. django_cfg/apps/tasks/api/views.py +0 -571
  78. django_cfg/apps/tasks/serializers.py +0 -82
  79. django_cfg/apps/tasks/static/tasks/css/dashboard-alpine.css +0 -299
  80. django_cfg/apps/tasks/static/tasks/css/dashboard.css +0 -120
  81. django_cfg/apps/tasks/static/tasks/js/alpine/README.md +0 -47
  82. django_cfg/apps/tasks/static/tasks/js/alpine/actions/index.js +0 -8
  83. django_cfg/apps/tasks/static/tasks/js/alpine/actions/management.js +0 -123
  84. django_cfg/apps/tasks/static/tasks/js/alpine/actions/pagination.js +0 -21
  85. django_cfg/apps/tasks/static/tasks/js/alpine/actions/tasks.js +0 -101
  86. django_cfg/apps/tasks/static/tasks/js/alpine/actions/workers.js +0 -59
  87. django_cfg/apps/tasks/static/tasks/js/alpine/computed.js +0 -35
  88. django_cfg/apps/tasks/static/tasks/js/alpine/index.js +0 -148
  89. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/index.js +0 -36
  90. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/overview.js +0 -37
  91. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/queues.js +0 -27
  92. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/tasks.js +0 -32
  93. django_cfg/apps/tasks/static/tasks/js/alpine/loaders/workers.js +0 -21
  94. django_cfg/apps/tasks/static/tasks/js/alpine/state.js +0 -36
  95. django_cfg/apps/tasks/static/tasks/js/alpine/utils/formatters.js +0 -42
  96. django_cfg/apps/tasks/static/tasks/js/alpine/utils/helpers.js +0 -68
  97. django_cfg/apps/tasks/static/tasks/js/dashboard-alpine.js +0 -725
  98. django_cfg/apps/tasks/tasks/__init__.py +0 -10
  99. django_cfg/apps/tasks/tasks/demo_tasks.py +0 -127
  100. django_cfg/apps/tasks/templates/tasks/components/management_actions.html +0 -71
  101. django_cfg/apps/tasks/templates/tasks/components/overview_content.html +0 -94
  102. django_cfg/apps/tasks/templates/tasks/components/queues_content.html +0 -44
  103. django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html +0 -45
  104. django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html +0 -151
  105. django_cfg/apps/tasks/templates/tasks/components/tasks_content.html +0 -61
  106. django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html +0 -269
  107. django_cfg/apps/tasks/templates/tasks/components/workers_content.html +0 -60
  108. django_cfg/apps/tasks/templates/tasks/layout/base.html +0 -20
  109. django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html +0 -168
  110. django_cfg/apps/tasks/templates/tasks/pages/dashboard.html +0 -77
  111. django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html +0 -40
  112. django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html +0 -40
  113. django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html +0 -86
  114. django_cfg/apps/tasks/templates/tasks/widgets/task_table.html +0 -90
  115. django_cfg/apps/tasks/urls_admin.py +0 -15
  116. django_cfg/apps/tasks/utils/__init__.py +0 -1
  117. django_cfg/apps/tasks/utils/simulator.py +0 -353
  118. django_cfg/apps/tasks/views/api.py +0 -571
  119. django_cfg/apps/tasks/views/dashboard.py +0 -89
  120. django_cfg/management/commands/rundramatiq.py +0 -24
  121. django_cfg/management/commands/rundramatiq_simulator.py +0 -22
  122. django_cfg/management/commands/task_clear.py +0 -25
  123. django_cfg/management/commands/task_status.py +0 -24
  124. django_cfg/modules/django_tasks/__init__.py +0 -29
  125. django_cfg/modules/django_tasks/dramatiq_setup.py +0 -20
  126. django_cfg/modules/django_tasks/factory.py +0 -127
  127. django_cfg/modules/django_tasks/management/commands/__init__.py +0 -0
  128. django_cfg/modules/django_tasks/management/commands/rundramatiq.py +0 -253
  129. django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py +0 -436
  130. django_cfg/modules/django_tasks/management/commands/task_clear.py +0 -226
  131. django_cfg/modules/django_tasks/management/commands/task_status.py +0 -257
  132. django_cfg/modules/django_tasks/service.py +0 -281
  133. django_cfg/modules/django_tasks/settings.py +0 -107
  134. /django_cfg/{modules/django_tasks/management → apps/tasks/migrations}/__init__.py +0 -0
  135. {django_cfg-1.4.106.dist-info → django_cfg-1.4.108.dist-info}/WHEEL +0 -0
  136. {django_cfg-1.4.106.dist-info → django_cfg-1.4.108.dist-info}/entry_points.txt +0 -0
  137. {django_cfg-1.4.106.dist-info → django_cfg-1.4.108.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=a9PJ3jnY_fzqDDHW2WT6IkYi7nMmZ7BbcBqBL7AtKfY,1621
2
+ django_cfg/__init__.py,sha256=IOva6NUiepfrbs-A0jIjuXF_Ukn76RAB97unffae6Tw,1621
3
3
  django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
4
4
  django_cfg/config.py,sha256=y4Z3rnYsHBE0TehpwAIPaxr---mkvyKrZGGsNwYso74,1398
5
5
  django_cfg/apps/__init__.py,sha256=JtDmEYt1OcleWM2ZaeX0LKDnRQzPOavfaXBWG4ECB5Q,26
6
- django_cfg/apps/urls.py,sha256=J9C92ra4iPVkm4k3Eu6JrJMd-htDeR3JUyYxqDf0pGY,6759
6
+ django_cfg/apps/urls.py,sha256=oUmBXmhZp6BwXUs8R_H9rYWskbpVTs1wQDqyGfMnIt4,6693
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
@@ -56,7 +56,7 @@ django_cfg/apps/accounts/templates/emails/welcome_email.txt,sha256=jVIr4O9_jOOSU
56
56
  django_cfg/apps/accounts/utils/notifications.py,sha256=6ex83E3Gm9t1qwWePxfFRhmoZDIXOLPT4_UfKoYYmjU,16875
57
57
  django_cfg/apps/accounts/views/__init__.py,sha256=rSrlJyZH8hXdURzwil49M7iJ_zmWHPAxPrezRDPbrBw,239
58
58
  django_cfg/apps/accounts/views/otp.py,sha256=PVAQYCEuAKo-kPVAFvgvehjJN5G7PWZP3LHBPj2EkTw,6798
59
- django_cfg/apps/accounts/views/profile.py,sha256=q4tDkl4chB6t1-EbDO0Y0NnkiDMGOzcIBFWT_D0UL8I,5478
59
+ django_cfg/apps/accounts/views/profile.py,sha256=4MHrhF9q4vyHQen1IaC2BGRiPpfNc7w9BgBbRZcvWnY,5589
60
60
  django_cfg/apps/accounts/views/webhook.py,sha256=F1Xtz_5hQXiMNCdVmwCz11WXwbXuM70dqXWTO6PftXc,10334
61
61
  django_cfg/apps/agents/README.md,sha256=CTK46bM6AgxoV8AkoH_t6HkGI6OUduL0oqrseQTCFeQ,3077
62
62
  django_cfg/apps/agents/__init__.py,sha256=GOtWo1RGWMrRmYKdjZFk5VTl5umuPz-kdypDvQML9fc,2003
@@ -190,9 +190,9 @@ django_cfg/apps/centrifugo/services/client/client.py,sha256=2WhzoYr__DP0eH70f4M3
190
190
  django_cfg/apps/centrifugo/services/client/config.py,sha256=udkAhLCq1J0GSCupta9N3LwAdSa1mGkZid1GFVjsc00,6952
191
191
  django_cfg/apps/centrifugo/services/client/exceptions.py,sha256=VsYExbk_H-qOaPa3iFUWBa1HMgw1IObil73JI1FhcDM,6263
192
192
  django_cfg/apps/centrifugo/views/__init__.py,sha256=QdYKO9AY6t-2bwwy78Kw1mAOpe-t3ZZX1KSs5NmrE8I,304
193
- django_cfg/apps/centrifugo/views/admin_api.py,sha256=4IUaPuzUSB9oN4wbpVUKsOZiYK6ZQGGWLmt-XfRvkfg,13970
194
- django_cfg/apps/centrifugo/views/monitoring.py,sha256=eFjoZDvnfwZh-Fw2OwFDii-SZTReHswi_hqAQeVOLk4,14502
195
- django_cfg/apps/centrifugo/views/testing_api.py,sha256=fOGc1I7XxOuRIIOnDQ9T1E0GwS5UuyR_YVJxw685UdE,16954
193
+ django_cfg/apps/centrifugo/views/admin_api.py,sha256=ECD7W7v0o6cvo4OShZ0K5OgluNxKqReRcNn9aIZjcg4,13888
194
+ django_cfg/apps/centrifugo/views/monitoring.py,sha256=TPudsIR4fnGp2w9RteH6Tm8ckXr-FQN5q9-AjD4g9fw,14416
195
+ django_cfg/apps/centrifugo/views/testing_api.py,sha256=sNBmYoRD7VBXZmoHEw9BmPbDa0BA5mnVZg6asqgKb8Y,16868
196
196
  django_cfg/apps/dashboard/__init__.py,sha256=TirqQji7p39fA15jGBswWSt6ML2K1SP96Iq-7Sw7NFI,236
197
197
  django_cfg/apps/dashboard/apps.py,sha256=OvB_C5qTq-QcLvvrRpbBxJPL-DCtA-pGVK8ir2y-hKk,508
198
198
  django_cfg/apps/dashboard/permissions.py,sha256=LJGza0pjVfoR2rQjKYZWnkgGcyzSHr43RMYiCibrokQ,1360
@@ -213,15 +213,15 @@ django_cfg/apps/dashboard/services/commands_security.py,sha256=kFADVoYNbqb2DwzFf
213
213
  django_cfg/apps/dashboard/services/commands_service.py,sha256=OnvZBUv2GDUWq3JA3UVrHu-gMc2eJm0-MT_WTdM27uk,11644
214
214
  django_cfg/apps/dashboard/services/overview_service.py,sha256=Dl_y89_waG9onDC9PHGWx0ci7m3NOdrMoEKSdv3Fves,6382
215
215
  django_cfg/apps/dashboard/services/statistics_service.py,sha256=cX20DB0VrjDLaaLCp8YQUcBw_N34VzZKqY4Ly2Qal0M,14023
216
- django_cfg/apps/dashboard/services/system_health_service.py,sha256=OUhy8iIWV6hURIkmP1t06hEZB6NF9iDQvPL9HeNNNqM,9188
216
+ django_cfg/apps/dashboard/services/system_health_service.py,sha256=NUTmZrqc9ifQqwRcD54zGQb5Hrv63pvTj6QsYeYeLvI,9406
217
217
  django_cfg/apps/dashboard/views/__init__.py,sha256=tgsvzkwnIr3bL35LOpZl8o-2aRLFSKbjfRFMqhZUPjA,561
218
- django_cfg/apps/dashboard/views/activity_views.py,sha256=3YBvsbQuUSFrcbE_Xr8GXg8Xpq0rjUH7IT2kMQXUXBI,2922
219
- django_cfg/apps/dashboard/views/apizones_views.py,sha256=SMqlsyMDNZXBiOOu5MYJxiIToxmOQ1sAZ6qMX3XKf_M,2453
220
- django_cfg/apps/dashboard/views/charts_views.py,sha256=FKUC6KMPDCI_r8abTqqrfoUSb3Dj3KOWqhrlhJpvLg8,5638
218
+ django_cfg/apps/dashboard/views/activity_views.py,sha256=UsGTnFABCJdZZID8kmG2J6grVRx18G9xSKfl7nKVz3w,2797
219
+ django_cfg/apps/dashboard/views/apizones_views.py,sha256=FtEEeNQD7aFBejmuTfdtjvRCLwCJyjD7AWDR1ouBo2k,2329
220
+ django_cfg/apps/dashboard/views/charts_views.py,sha256=XDV3lTfoP65UuW_HIgNnp_80k35DVcicXXPLzIB6neU,5514
221
221
  django_cfg/apps/dashboard/views/commands_views.py,sha256=eJw3U4CtLUMZn2YdENr3HwhzHcqygo8HW92vjRg1sYQ,6099
222
- django_cfg/apps/dashboard/views/overview_views.py,sha256=3HWHz-N76zRm0veKKX1Iize6N9nyhTY31C4mVqLaKwI,3217
223
- django_cfg/apps/dashboard/views/statistics_views.py,sha256=IfA_87tR4Rh6oNfuUHiIKpfT5xYPpzWl5P1f6oKBscg,3635
224
- django_cfg/apps/dashboard/views/system_views.py,sha256=KZ9L6WSYkgUNTKYmS61y3MP7fPAirnFD7rzssPYOJKk,2583
222
+ django_cfg/apps/dashboard/views/overview_views.py,sha256=sCGldHXoW-lgGSfFiAY9BNTBSmHiQznPlrlj_duoJDg,3093
223
+ django_cfg/apps/dashboard/views/statistics_views.py,sha256=CISWM8A5lkIqTK2dWifTBJD4RdFI9Hu-_RCFl3kMoiA,3511
224
+ django_cfg/apps/dashboard/views/system_views.py,sha256=PSEGZuHhexgBiKVOlrNlDV9_t2kEwS2arBT8h2KFxds,2459
225
225
  django_cfg/apps/frontend/JWT_AUTO_INJECTION.md,sha256=vw4M49mijxjd1ANlumPbye3d2XIaYuc_3jYRbmWsb-8,8018
226
226
  django_cfg/apps/frontend/__init__.py,sha256=QMFJM9mpjiPcU0e5EnuLZb6xpCWi3cbSnihyPS9U2Ik,394
227
227
  django_cfg/apps/frontend/apps.py,sha256=9eEK0Tq2nOsol7xSK5aobdwTDJTJrWx6Iy1I1DQb_Yk,391
@@ -231,8 +231,8 @@ django_cfg/apps/frontend/urls.py,sha256=Vz22_2i2w1J0KQYDCxHnTF5rUf32kUUSBDJZrP07
231
231
  django_cfg/apps/frontend/views.py,sha256=JPTJRPCGY3zLLiiz1F9CsZiLkXbQ5RfnViJZzBUpV7o,15023
232
232
  django_cfg/apps/frontend/templates/frontend/404.html,sha256=LCFig_dcgDDmYKhgOLu8R2KDs_aQS6Es6rAxLTAEXWs,2175
233
233
  django_cfg/apps/knowbase/README.md,sha256=HXt_J6WCN-LsMhA7p9mdvih07_vp_r_hkPdmqHhNEeo,3965
234
- django_cfg/apps/knowbase/__init__.py,sha256=cfGnxDQwjajPhUoleKkgvdabJcB0LdXEglnsBojKkPo,1045
235
- django_cfg/apps/knowbase/apps.py,sha256=GAYw98_rQdGHoak58xN-0vjdDcRNpJuND3kV-FfM1II,3290
234
+ django_cfg/apps/knowbase/__init__.py,sha256=XLhl7_wweUm1nqmA_xVlPxiCSuARxtCro-uY41JFQgs,1039
235
+ django_cfg/apps/knowbase/apps.py,sha256=Y1n4ZoEP5oL-lDGLNRHtxhPClEcBElMX8iXFFS4OsPE,3052
236
236
  django_cfg/apps/knowbase/urls.py,sha256=r5Ak_fp1bWpW01hcstZsJK5F9RhuRFyhR6bUmuoJOA4,643
237
237
  django_cfg/apps/knowbase/urls_admin.py,sha256=fu6KG-nat8ay7buB8t255-Ye_5uiQYibZ1NzhNiyvtg,640
238
238
  django_cfg/apps/knowbase/urls_system.py,sha256=ZW7TOf_7Svt5V-83EBiN9qnm1Y4fQE5YspYRkAJFyVA,736
@@ -340,7 +340,7 @@ django_cfg/apps/knowbase/utils/text_processing.py,sha256=t2PZn6roWd51oYMny0Q23Dp
340
340
  django_cfg/apps/knowbase/utils/validation.py,sha256=pubQwxNayuVvgybMuLdz0roSzMLKfHX-pMEwhuIa1uk,2452
341
341
  django_cfg/apps/knowbase/views/__init__.py,sha256=y0PbF5HnFVri6oWv59mMcJl3laMbOS2xSJzfc5DUuNI,493
342
342
  django_cfg/apps/knowbase/views/archive_views.py,sha256=r8HguQY7GNo49tFxTPbntxyJvIqSXuO59A21oXU-qEc,17176
343
- django_cfg/apps/knowbase/views/base.py,sha256=mq9vxxX9duaGcF9HKqmDA_TILlQjKP8WP_VylHBuFMg,1506
343
+ django_cfg/apps/knowbase/views/base.py,sha256=9w6pnAWanEM1gipvADksF9o5jSVwzgStkDNqFW8shxc,1601
344
344
  django_cfg/apps/knowbase/views/chat_views.py,sha256=UqRAo128dt03eSTU6d86GybTbEaYMWVVrZR1xROd7Ik,6793
345
345
  django_cfg/apps/knowbase/views/document_views.py,sha256=k4sAPAqgqGA1O-pZvZpAPwp-c57WXkZOXB9DAH9iyuk,6477
346
346
  django_cfg/apps/knowbase/views/public_views.py,sha256=0g__UAu7pJ1bQGXiNT3dfpo3EyxW2HyaJscGv_N324o,4508
@@ -495,66 +495,41 @@ django_cfg/apps/support/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5N
495
495
  django_cfg/apps/support/utils/support_email_service.py,sha256=x-RtNym5uqvILnmktR4UUK5QLv1edhehPf1Swj-K8A0,4943
496
496
  django_cfg/apps/support/views/__init__.py,sha256=0-6pYFqa2aDioxVImPt_-HHe4z_2x6N1SMf9Kw7Ooc0,447
497
497
  django_cfg/apps/support/views/admin.py,sha256=3bofdyoFWPhip0kia7WTFW_4y4-2FtOraOQSMElaemA,1585
498
- django_cfg/apps/support/views/api.py,sha256=0eLFTmHwC8uaELZ0SXVIwGcCI2rOP5WC4U5fNxWG-o4,5301
498
+ django_cfg/apps/support/views/api.py,sha256=8hHY-j6EZpSdYkT6JA8_yo7LJKPpSon3DVNWl6jfGRw,5506
499
499
  django_cfg/apps/support/views/chat.py,sha256=wbWR_UgvdgYBYlhHJBLJRPpVm7V44bNy5NZWHqBx2AE,3255
500
- django_cfg/apps/tasks/__init__.py,sha256=nY0Mp7b64LfuMB1Pbv_C6SBEdueMIYdfFvbORM81OQM,85
501
- django_cfg/apps/tasks/apps.py,sha256=t0IgHRz5W79hjC0N0IZQAZD3yWghteC6riKlBqMHOS8,375
502
- django_cfg/apps/tasks/serializers.py,sha256=zmh99EM2rkPW21vlnwUupruxLWFdehnq0H0joimUfBQ,2703
503
- django_cfg/apps/tasks/urls.py,sha256=Ht76XmUCzZhhr2OAUOFHIuhSKI8VEwgFvWOrbhxKoZw,514
504
- django_cfg/apps/tasks/urls_admin.py,sha256=qSKV-Oo1TRwS1i_f9tXLL7uU6HSxGFKrQx2O5hHsNzE,300
505
- django_cfg/apps/tasks/admin/__init__.py,sha256=vn7ddiQYGTl3HA9C_WixLmhmRF0W13Mtu2O9up1cGjc,208
506
- django_cfg/apps/tasks/admin/actions.py,sha256=csxHx2UALp4iiqlHPHf-QSovE3zkPYaEAy158tTQGGA,860
507
- django_cfg/apps/tasks/admin/tasks_admin.py,sha256=kzDA5hBULAZEBy8lQMxRxGsJOoa5tweTlY8UMoMv7TQ,6669
508
- django_cfg/apps/tasks/api/serializers.py,sha256=zmh99EM2rkPW21vlnwUupruxLWFdehnq0H0joimUfBQ,2703
509
- django_cfg/apps/tasks/api/views.py,sha256=ft8eaRoMYz_iStPxcHg7d_3dvjaNxNZyzyh0RJq8f1g,21869
510
- django_cfg/apps/tasks/static/tasks/css/dashboard-alpine.css,sha256=NKuZh8Qcq3zt_hoTiJyrpS2dh8p7q4A9MPpNwmq5PpQ,5242
511
- django_cfg/apps/tasks/static/tasks/css/dashboard.css,sha256=1ULA4LGX40dWrpiv86my0ATmixkyIpGLyRjMfPmqy-0,2166
512
- django_cfg/apps/tasks/static/tasks/js/dashboard-alpine.js,sha256=pw2vlekIdzsePW9x4_7Ybk7UcXM1d-tXVhzr09hHMJY,25506
513
- django_cfg/apps/tasks/static/tasks/js/alpine/README.md,sha256=swg362BNAZljHFy65k0ziEpYWKzjP0c6l0K6CHh8xus,2070
514
- django_cfg/apps/tasks/static/tasks/js/alpine/computed.js,sha256=KldC7f626gNvJYHUxGZdNNxSns0UGFjHIk8n8HvlF1I,1090
515
- django_cfg/apps/tasks/static/tasks/js/alpine/index.js,sha256=NHdNQXXR5M3wU8191ZEH7XlWTnUqdECMeZz9N9WYYHk,3163
516
- django_cfg/apps/tasks/static/tasks/js/alpine/state.js,sha256=3m7ZM-DxORqvMULWDmXuQbtsny7oKnNs4t98PbtDklg,670
517
- django_cfg/apps/tasks/static/tasks/js/alpine/actions/index.js,sha256=navMGnyjqjCHc1VZfMlffVLkky6kRV9h5LR7QYjUK54,155
518
- django_cfg/apps/tasks/static/tasks/js/alpine/actions/management.js,sha256=Ex5pM7o5BDnMJlVcWVYqxUtbjHl4zGyhhJNHZ6sY2tg,3916
519
- django_cfg/apps/tasks/static/tasks/js/alpine/actions/pagination.js,sha256=Ipg0ceenr9BuoOO4kMSn7IpGvKWWaHw1wmOAhsErtHo,418
520
- django_cfg/apps/tasks/static/tasks/js/alpine/actions/tasks.js,sha256=yDOSeutx5eP3j7zmsxvXf75Wmb3Vo-O8BuxQFSi5V5s,3346
521
- django_cfg/apps/tasks/static/tasks/js/alpine/actions/workers.js,sha256=rs5uoc0OCtfk1usaFSnhGp9ST-zvUreGvImPfevJUA0,1865
522
- django_cfg/apps/tasks/static/tasks/js/alpine/loaders/index.js,sha256=Te9GrAPxEZTe5r9tG1A1W06l6VgMU3quUCyJ8kIjRtE,982
523
- django_cfg/apps/tasks/static/tasks/js/alpine/loaders/overview.js,sha256=DZZiC38KBEnb8dTvY2Aij4eFCAXUWcYsMxIZ0W1kaek,1328
524
- django_cfg/apps/tasks/static/tasks/js/alpine/loaders/queues.js,sha256=qHwU-Xt1ThepK2lhaaDEHr0CeEowXJu8IYEaiWoYWyQ,818
525
- django_cfg/apps/tasks/static/tasks/js/alpine/loaders/tasks.js,sha256=vFaf9-Lm4CAYw27Q-zLCN9fpdkudY_CcAAUSVdclV1s,1120
526
- django_cfg/apps/tasks/static/tasks/js/alpine/loaders/workers.js,sha256=slDkfrOhphb39ENEqo9eUkXMnBNRuuN5QZALxCcY1HM,651
527
- django_cfg/apps/tasks/static/tasks/js/alpine/utils/formatters.js,sha256=ImJ_5R0hSTpoKcz6_Rnb3hlcErLzN20RUPEuYgo3CCQ,893
528
- django_cfg/apps/tasks/static/tasks/js/alpine/utils/helpers.js,sha256=uFxWWCexZwpyCRqxNBt8fwPYfMjP6RHX11Xp2jSks0g,1687
529
- django_cfg/apps/tasks/tasks/__init__.py,sha256=leHz5YglzX8Crk3vQvpmOysSwDNkVOjK9ibH5FON3uQ,229
530
- django_cfg/apps/tasks/tasks/demo_tasks.py,sha256=nd5KxNjNeuzKQnBKq-_yfZ050__OktiEtaV80mR0CZI,4451
531
- django_cfg/apps/tasks/templates/tasks/components/management_actions.html,sha256=WWK-m-I03XmMlCo8f2z9SQtXoqgUzDr21E6ALxgwhko,4330
532
- django_cfg/apps/tasks/templates/tasks/components/overview_content.html,sha256=pKe1KbBcLETQfydSRdfGZLlWpHVGHt8U_zgFNMofbic,5065
533
- django_cfg/apps/tasks/templates/tasks/components/queues_content.html,sha256=NDmOh1l52UajC0vc9NQ4brA15t7wQ70uXXPZXVS1AkY,2370
534
- django_cfg/apps/tasks/templates/tasks/components/tab_navigation.html,sha256=_Zl5PgKOIh8lUU1lFyXTL3EVknfzScGltDHwL0HW614,3141
535
- django_cfg/apps/tasks/templates/tasks/components/task_details_modal.html,sha256=x6LdkWSKKPVtw4NartiIzEtnXtl-o2Kf5NwWE9oWfs0,9664
536
- django_cfg/apps/tasks/templates/tasks/components/tasks_content.html,sha256=zCa2R7Xh_dzLDHIj3T1fRLhGwsxvi-MU12R0eByXphY,3070
537
- django_cfg/apps/tasks/templates/tasks/components/tasks_mjs_integration.html,sha256=uXBhajnDQzxGYY6nxbuWWD6nElAAVrolAb7KrD1yr5g,8718
538
- django_cfg/apps/tasks/templates/tasks/components/workers_content.html,sha256=okA_LvhSSHnBmYwpenLakI5k_haWBo57_uCItTqJxC4,3299
539
- django_cfg/apps/tasks/templates/tasks/layout/base.html,sha256=BI50z3QkGRAIR_HJg_U9l34E2-3-zrVOC36pk-S4Nv0,689
540
- django_cfg/apps/tasks/templates/tasks/pages/dashboard-improved.html,sha256=qhiDZjKUazA5Mzqt_Vg1Iap6JybYZrJa6D3_NIzpLbk,5313
541
- django_cfg/apps/tasks/templates/tasks/pages/dashboard.html,sha256=7DbczXKnscJ0082bFYqTYCTBvaF2GBrJiLTTn-aj-bs,2349
542
- django_cfg/apps/tasks/templates/tasks/partials/task_row_template.html,sha256=9XxjxDrveeR4ZE5hop0PsIA31hYyq-mVL1HBY54uu1c,1897
543
- django_cfg/apps/tasks/templates/tasks/widgets/task_filters.html,sha256=5md0X43X9EH3lnzOK7QN14KMVJVWBy0WZ9FGXNnEAT8,2090
544
- django_cfg/apps/tasks/templates/tasks/widgets/task_footer.html,sha256=CpXwOG_ZScT6TUp8cmrr274Qm1xHV6a2ySgpjDYv5Ls,5273
545
- django_cfg/apps/tasks/templates/tasks/widgets/task_table.html,sha256=QqVYAX10NFF38grz9zwwgp4FFDmUC-rhCCB0f3tIzss,4985
546
- django_cfg/apps/tasks/utils/__init__.py,sha256=42NlvFq4SYQ5ZEWUVvyU3A1_bQfYEn-m7VXeNus_X8s,18
547
- django_cfg/apps/tasks/utils/simulator.py,sha256=p-wcVDyI-EfqdjkNAHv8j06uXCoi5xc5s5wThtO9Dhk,13046
548
- django_cfg/apps/tasks/views/__init__.py,sha256=hQrAc5ZnJCxr3vSzF-txnpS3FDeaX-4bBVI-I21fCHw,344
549
- django_cfg/apps/tasks/views/api.py,sha256=hd6ficsmljDMrEtWyCMJIP2Op-RdMaRNyesEo-HWwB4,21870
550
- django_cfg/apps/tasks/views/dashboard.py,sha256=WmmbRMxpEw8-67tDWQv-Vy7vipm0FX1eIVGzuZ6FxMo,2474
500
+ django_cfg/apps/tasks/__init__.py,sha256=_k1_FJbPDmsKGXgaL6oFvZKj31u3uItDBR53kTUiuLM,1932
501
+ django_cfg/apps/tasks/apps.py,sha256=jcl4NO8t37_RNHyaCh2GJXXlZqYIMLwpiAY26lnMO8M,459
502
+ django_cfg/apps/tasks/urls.py,sha256=4KA6on-Hii-4mQLJaSQ58iPrYBZL4apSsvksLbyhzWU,344
503
+ django_cfg/apps/tasks/admin/__init__.py,sha256=h4Hx8VGvbohLLS6nt0OFE7mi0JBx1pHA0lbjjcaXPgU,106
504
+ django_cfg/apps/tasks/admin/config.py,sha256=SZ4gh2omc5sPEa3VLz7ewUjV-_O4qPFgHe_e0AkEm9c,2161
505
+ django_cfg/apps/tasks/admin/task_log.py,sha256=H7gv8k7J_1rd31jmbMU6TKuDkzH_mx2beNbju--VycQ,8255
506
+ django_cfg/apps/tasks/filters/__init__.py,sha256=9H6dh9ryI_zJ0_tPENjsSS2V3Mx8MMcWze8hyHokfhc,151
507
+ django_cfg/apps/tasks/filters/task_log.py,sha256=BY67R3jyzHR6XdhNty8gjGmLTC5VDTx2_tGeGODOJXE,4929
508
+ django_cfg/apps/tasks/migrations/0001_initial.py,sha256=dVbEPP7umgjsJsubxaTYsrDq7dvwv2xf6_K8hfju-lE,7367
509
+ django_cfg/apps/tasks/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
510
+ django_cfg/apps/tasks/models/__init__.py,sha256=4tvTev7IYkcjBrll3eLUFLJCDNlyG9c_863qoe_Fzu0,72
511
+ django_cfg/apps/tasks/models/task_log.py,sha256=PxcQ7D3LNwQPy9IYLaBYL08buMHeakbmmXyr4Vgaqa0,7967
512
+ django_cfg/apps/tasks/serializers/__init__.py,sha256=VcsKMRI4fOE1zajh-IOC0X5NwK2e5ytFh18w-43lXl0,675
513
+ django_cfg/apps/tasks/serializers/task_log.py,sha256=XEjWsnojxN2j55PYyoDw1KfXhb_-Ng8VnCeSJJDaL8w,7777
514
+ django_cfg/apps/tasks/services/__init__.py,sha256=VRFnirt868_jFvCzvLD3vLNa2HFi4zqFQFXQG9Nm4Kg,268
515
+ django_cfg/apps/tasks/services/config_helper.py,sha256=-Iv7EK1fNAydlk6IzvOFvk4TRBBp9IngYBt7tmansRI,1447
516
+ django_cfg/apps/tasks/services/sync.py,sha256=wA-gRvqRsElfdP9XD6PosQIwOOJQwy6dUtQbIlb2W2o,5783
517
+ django_cfg/apps/tasks/services/client/__init__.py,sha256=pQ6eJPbdj8P9q7qq4XcxtAgEisXjVrT1KTdoqHI5zMI,135
518
+ django_cfg/apps/tasks/services/client/client.py,sha256=je4j4Yw0v3fR1PijajoAptAbP7Zx06yAykV21MxAMlQ,6437
519
+ django_cfg/apps/tasks/views/__init__.py,sha256=nfwn_GtoZ-H83YeL2BvhWYn9VdBjPM3QiNIivzLiKUw,151
520
+ django_cfg/apps/tasks/views/task_log.py,sha256=cyywdhBaLgEFpwc9YaxQSU7or1whSTfDnXA7l8P5iq8,1312
521
+ django_cfg/apps/tasks/views/task_log_base.py,sha256=MJ1UzSpYzV75KyQBVSUHyQ0ejYe91h3douXt2osCPf8,1499
522
+ django_cfg/apps/tasks/views/task_log_overview.py,sha256=ch7nPu6k9JCDOUh7Z8TQXGrqLGT1X6m-n9HhHFF32yY,3291
523
+ django_cfg/apps/tasks/views/task_log_related.py,sha256=mXtDfzfkNpNc2vYPKRV9zNGlsOPV2MOx-xwj1-a6yik,1194
524
+ django_cfg/apps/tasks/views/task_log_stats.py,sha256=UhoXFmIsb6utWIuighLuPnFjWcz0BPbkKCCfvHYJyrQ,3046
525
+ django_cfg/apps/tasks/views/task_log_timeline.py,sha256=8tTAGNAbKseLmljx6SSr-ATDHuvnUZYQlcG51Wk73fs,2710
551
526
  django_cfg/cli/README.md,sha256=-fZmNv8OUc1OAwwiDnhkUmhTVhEEXX7CXwJQlSRwgQ8,2118
552
527
  django_cfg/cli/__init__.py,sha256=i3ksFngCqZCBvaimQcBD1P2_gr5PiM--4efLScCjvvU,152
553
528
  django_cfg/cli/main.py,sha256=GOmMubPoMpcA0XcRJn4VG2cX9tuhE0i_ioy_d3ujzRQ,883
554
- django_cfg/cli/utils.py,sha256=lh8SUvZgCMA-K8nmMljIzbMKRzz7VUU842CX_M4fnu0,5654
529
+ django_cfg/cli/utils.py,sha256=_R713bZ181qIXP0-nik3FXLsTcWRA9i_S7eEIqDiOa4,5648
555
530
  django_cfg/cli/commands/__init__.py,sha256=EKLXDAx-QttnGmdjsmVANAfhxWplxl2V_2I0SZaJOoI,98
556
531
  django_cfg/cli/commands/create_project.py,sha256=cENwRIG7zX_95lY7Kt_xKGULZWqfwni5HcL66JALBeM,7576
557
- django_cfg/cli/commands/info.py,sha256=8B59i-eOKDGiETkZCPCxG1E29UhRTQYZ57hGWB3yOC4,4797
532
+ django_cfg/cli/commands/info.py,sha256=JNLt9gUTZopR-D7FUDIeEyOQR9-2LTpHntHi_h-7Mho,4794
558
533
  django_cfg/core/__init__.py,sha256=bZ3hgN9SX6l3DXEN-cMyOGwwXMu4UFkWyR0ds_yEnVs,1784
559
534
  django_cfg/core/config.py,sha256=0xwXf0cPiRGM8paUPXjECHdYqwuRLy4WkunavWl9Igw,679
560
535
  django_cfg/core/constants.py,sha256=ool-h1MXDtgRKj8-e8aYcM6XY_Uzy1dgx-xLy0gsk10,2686
@@ -563,9 +538,9 @@ django_cfg/core/validation.py,sha256=QmwGlNDa0MFG2OUmgykIUAaEotT55YNh-wAWSVxOAos
563
538
  django_cfg/core/backends/__init__.py,sha256=5Qfza7oKQ8_UIHOs4ibhYvwtgAjngUqLrlwjKl_q124,38
564
539
  django_cfg/core/backends/smtp.py,sha256=kWkNMG7UwLsHcFYSKRgrk1HbP9mU1fxzWYnalHXqoL8,2308
565
540
  django_cfg/core/base/__init__.py,sha256=Z3bZvxejxk4vvWqmqTBLUi9XJpo6A_5Bq4R0J8q81Y4,116
566
- django_cfg/core/base/config_model.py,sha256=AmlI9ZJzMkJxXv77M685ovdrx9e5vyu8FUSQ9U8CWpk,21139
541
+ django_cfg/core/base/config_model.py,sha256=xaiLLBEH3MgQ2uIcahYz7WGYbdrFUAuTSrPfBZ2yqtE,21136
567
542
  django_cfg/core/builders/__init__.py,sha256=jkInI7_jbxcjitapohw6QmbJPpacnnID6V1JovqtOFM,282
568
- django_cfg/core/builders/apps_builder.py,sha256=AzcYnex96ZDfk7tZeTAU_BOHM0DqeuTQ_1UsN3zBOkQ,6512
543
+ django_cfg/core/builders/apps_builder.py,sha256=Bud1KkBnUblbbYvCyT46eYJ-HA_hbG636KC8j2SIOuA,6497
569
544
  django_cfg/core/builders/middleware_builder.py,sha256=OwqQRoJKYWlXsQNPFBfUvVMYdppUHCPw-UDczV_esYg,3101
570
545
  django_cfg/core/builders/security_builder.py,sha256=W8Lk9eTMi3PuNK5qH-BIHegeE0cbvmuHKTumLcwOAh8,23961
571
546
  django_cfg/core/environment/__init__.py,sha256=sMOIe9z1i51j8B1VGjpLHJMaeDsBfsgn1TmL03FIeNo,141
@@ -581,14 +556,14 @@ django_cfg/core/generation/core_generators/templates.py,sha256=XeGKzF790_zKwFdRw
581
556
  django_cfg/core/generation/data_generators/__init__.py,sha256=O7cmt_k34hWRgrdaAzCRPudcaowaOwMgaoXmZY8HG54,298
582
557
  django_cfg/core/generation/data_generators/cache.py,sha256=bdcbnaDarl_8UQ18gk7bIKrQ9PDZOhpDAVjCEgYVeUU,3840
583
558
  django_cfg/core/generation/data_generators/database.py,sha256=mYR2mBvqWU93YP9XUUVlcZaQJtSNeAQ7Dk4Vj6Tu95k,3481
584
- django_cfg/core/generation/integration_generators/__init__.py,sha256=-H4xlNAp_3yytmAnh7HuGJCloLL7C_WWlEJw3KZt4VY,599
559
+ django_cfg/core/generation/integration_generators/__init__.py,sha256=LCdlrvM6LDGtvtRYATvRIOYSqBwhqkoThDhfMxWLFiQ,596
585
560
  django_cfg/core/generation/integration_generators/api.py,sha256=Xsyu3mYyq9mje8QGNSU0Yp4tLbtF0ckq4lEf_Rj5pLc,11062
586
561
  django_cfg/core/generation/integration_generators/sessions.py,sha256=GbRC72Gny4dzj7oTIrbuhYyvhCQBoWI-0GxB8ZHTrEU,1644
587
562
  django_cfg/core/generation/integration_generators/tailwind.py,sha256=YgiV5c-l0DDJnMKx6mWcUtH5zyMdewAJXjLDwmHrSuc,1208
588
- django_cfg/core/generation/integration_generators/tasks.py,sha256=B-oeneUUdvjiE6N5MVC98imptlj4dkAxeoxfv50sbkM,2514
563
+ django_cfg/core/generation/integration_generators/tasks.py,sha256=fMbuIdjRenuZQ6rfco7imLzDbCdX4WEO1aLslBpxjTQ,2253
589
564
  django_cfg/core/generation/integration_generators/third_party.py,sha256=ef3sdpfDIf6B_dRuRjoIYc9rlqMYoKgTH4luFvjy9UM,3971
590
565
  django_cfg/core/generation/security_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
591
- django_cfg/core/generation/security_generators/crypto_fields.py,sha256=5HcvXM2NKW7t-yPGCaXGsKOlAv5SLbwu_agPrlYU7d8,1923
566
+ django_cfg/core/generation/security_generators/crypto_fields.py,sha256=CCNP4UxsSXMTRhB83KqAvtOyEGXb9qpooFg-gXwngYY,1980
592
567
  django_cfg/core/generation/utility_generators/__init__.py,sha256=6zbvaE2g8p42w0jHFeFHyIyPsDuoCuyeKm-Z74msmpo,593
593
568
  django_cfg/core/generation/utility_generators/email.py,sha256=444q8uMmvLdubjwqmTWGTBQcyHwMMhIZ4XNCsto3-Ak,1236
594
569
  django_cfg/core/generation/utility_generators/i18n.py,sha256=RhAD1Yw_gOHc2CHWWCR3-F-Xf4BUbxWyCEyC80ekW_Y,1533
@@ -605,7 +580,7 @@ django_cfg/core/integration/version_checker.py,sha256=VJo7CWjNjj_XYE2YqIWGSnxnos
605
580
  django_cfg/core/integration/display/__init__.py,sha256=8vvW7rdKEnPO9iVMHUazGmVCE0gwClsK10mDz6_FCt0,314
606
581
  django_cfg/core/integration/display/base.py,sha256=ElP8XtUGhtQm3LrSrLf-fgESi10G8EKevxku85nWyAU,5541
607
582
  django_cfg/core/integration/display/ngrok.py,sha256=IAuZzh1swfQwPl-wadVpooEvAqe085HYrTPSEGgYfr8,5899
608
- django_cfg/core/integration/display/startup.py,sha256=shMK9d4af9Wa9reqsI50zWZmwSmDuN7E6A-7_7aHtpM,34691
583
+ django_cfg/core/integration/display/startup.py,sha256=R2PhEJVBkxCM4SNtycEZZVOzi_64vRuYYqpFAAwGHpw,34688
609
584
  django_cfg/core/services/__init__.py,sha256=Eb-F6qqQ-qkep1O-JkaT96IpuxxqtGdT_MIwGXafqSE,117
610
585
  django_cfg/core/services/config_service.py,sha256=leo6i6QDq25Bst8PIhBoRVIorPNupLHJub2IwhumAjo,3579
611
586
  django_cfg/core/state/__init__.py,sha256=0jAOD0WHpq_W8L5Gh2084D0V5nhb-RAB3t8Akr2SX8M,225
@@ -625,15 +600,11 @@ django_cfg/management/commands/generate_clients.py,sha256=Ziyo1i9QGFVULPHf1iosp8
625
600
  django_cfg/management/commands/list_urls.py,sha256=d1JFz0eLGgJqT5hKxsbEyYc7LnyhyQbOof0biE-vukI,10901
626
601
  django_cfg/management/commands/migrate_all.py,sha256=mo9tpa4F19hoA0y4Z1x1KMvHfzEG2ux4hkXTq7Q3JMc,5380
627
602
  django_cfg/management/commands/migrator.py,sha256=-6CzwrfGbx4DbyxwCvZaTUv2VCfDc1mcUgZwmzhFo-Y,16376
628
- django_cfg/management/commands/rundramatiq.py,sha256=wr5UzCtF4k8olBwkpqVaj6yrxKbfFrnYweLzN835B84,597
629
- django_cfg/management/commands/rundramatiq_simulator.py,sha256=CFtSqr-pp5i9NmTApDYL9ahStY16dRaJ5-HOQGeWES0,527
630
603
  django_cfg/management/commands/runserver_ngrok.py,sha256=FEkYBkAssUNp9JPbJl6yCxaiM3xuFt12XMV8fA36Pnc,591
631
604
  django_cfg/management/commands/script.py,sha256=l7pjYMOiuSCbrR107Gd1LJPlR2SHytLH85MEqUT7VlM,17048
632
605
  django_cfg/management/commands/show_config.py,sha256=G40gyZb6R8GklRb55MAEIYaGBYXffaudnlbuZke5cOU,8777
633
606
  django_cfg/management/commands/show_urls.py,sha256=oTtx081JprbD0IJLMYrAg05bXxkQ6FMTi6ZemloNHb8,12606
634
607
  django_cfg/management/commands/superuser.py,sha256=RDgNyTW1wuEu4kdD-5UX0hv4wwAj2IobdEL-BHjIKBs,9544
635
- django_cfg/management/commands/task_clear.py,sha256=ZDmYkVfXepINmG18pHD_nXxx7_NykIjdqrVOcew-lQw,608
636
- django_cfg/management/commands/task_status.py,sha256=tRcZ-_nX6rHTLmgOa8vVu4FYRVY3I7pHY89lAzmj_QI,570
637
608
  django_cfg/management/commands/test_email.py,sha256=FpABZAMKuWACkYpQbBWrEXhzkp0ToOlVUDbF47vYnp0,611
638
609
  django_cfg/management/commands/test_telegram.py,sha256=aLnGM4oArXhQekNNWoPMU5vu6xU4b6NKEZGy7tRgagQ,570
639
610
  django_cfg/management/commands/test_twilio.py,sha256=Wn-vp9pI1gDyl1rmuvzk-s2NSarGaQOsyua53nJG6QI,632
@@ -646,6 +617,9 @@ django_cfg/middleware/authentication.py,sha256=1deekm3lyAMJ2pK7Usd5q1FtUN1aDq_CG
646
617
  django_cfg/middleware/pagination.py,sha256=xnaFH1olDH_m4ecwpTTUyFWV6jKoF6IxJvagSZSJR0E,8603
647
618
  django_cfg/middleware/public_endpoints.py,sha256=p-VCjeu0k7B4OuQIe2OVUx7Onh9gsM2HweWcYNxEaRA,6775
648
619
  django_cfg/middleware/user_activity.py,sha256=bgftHXXeGBS-jCa8mLzTx4Gcz2fHTaQz_nbRCR5Yqio,5980
620
+ django_cfg/mixins/__init__.py,sha256=1IErIlF4QWqt9VLFD8yoTiGWHobsDjLL6rqcEqMLbw4,211
621
+ django_cfg/mixins/admin_api.py,sha256=3GRfAty6YXGbZp4ZFsNFt1Gs_e5T4xBOLnRPoc5vaq0,1116
622
+ django_cfg/mixins/client_api.py,sha256=KeGK_f2xR08l0ckGpMmXHHpVLDQ7SnSbZn4WP5bSsvI,1200
649
623
  django_cfg/models/__init__.py,sha256=HNWzUAj19jtNtPMfgnJgcZCrvVWAIIlTMizkm5q8XiA,2762
650
624
  django_cfg/models/api/__init__.py,sha256=VWkiYs38A7Tx5ZWePeBxL1lMiXKsonb5TQfoVRRCBac,605
651
625
  django_cfg/models/api/config.py,sha256=KzaDn2Ubc7SpZ_8xt6-Q-XxnZbf9Glu1xJhJWbAI--o,4455
@@ -663,8 +637,8 @@ django_cfg/models/base/config.py,sha256=hfpf35yMR8oOE1J0SBPNNSBwXckK3F2-Iv0Vw6cN
663
637
  django_cfg/models/base/module.py,sha256=nxN1Y9J4l94kOfSXLQJ2eGgIGWTq8kyh7hUGvCQNyIs,2674
664
638
  django_cfg/models/django/__init__.py,sha256=xY_ts1oGmMROXfKHLuERqwG35dQf3EpsZxqj9DcRYwI,397
665
639
  django_cfg/models/django/axes.py,sha256=-4nk2gSfpj7lNY5vnm_2jHVLz8VAKoEd9yF2TuCR8O8,5624
666
- django_cfg/models/django/constance.py,sha256=E4U3HS_gFq5_q2nhI1R8inONGtD7IgvSwxOEGNGGrEI,9127
667
- django_cfg/models/django/crypto_fields.py,sha256=EritHX2V8q5zHoVznGIO0sX78GPYif6NQDS_CiXvSKo,6238
640
+ django_cfg/models/django/constance.py,sha256=6x57bi40mDX0fKcKeQKgV2BO3WIVYPQllAchWsj4KvM,8847
641
+ django_cfg/models/django/crypto_fields.py,sha256=OguITidM4Mp564p_gbsokeNCZxjL9hrK1Vw0McuA3yo,4700
668
642
  django_cfg/models/django/environment.py,sha256=lBCHBs1lphv9tlu1BCTfLZeH_kUame0p66A_BIjBY7M,9440
669
643
  django_cfg/models/django/openapi.py,sha256=avE3iapaCj8eyOqVUum_v2EExR3V-hwHrexqtXMHtTQ,3739
670
644
  django_cfg/models/django/revolution_legacy.py,sha256=Z4SPUS7QSv62EuPAeFFoXGEgqLmdXnVEr7Ofk1IDtVc,8918
@@ -688,23 +662,26 @@ django_cfg/models/services/__init__.py,sha256=K3mit3rKumqC4XiCUU0BziZC3143j1SM9j
688
662
  django_cfg/models/services/base.py,sha256=q_QggR8i_6qoiIvbAubddCklpfjVfeLP3Bv2bsdT4BQ,1607
689
663
  django_cfg/models/services/email.py,sha256=JigMJaJA26MT_Euc4q_OfmZYJYzaGyHb0JXsNFOS0uY,5119
690
664
  django_cfg/models/services/telegram.py,sha256=wrMqOGZCp1KAxRmCn5oxMU0BMBgbzsQD6o0Fi_7kfIY,4810
691
- django_cfg/models/tasks/__init__.py,sha256=6t33r91zv_nyve1NfZeEziF0_mwgfAFuJpsnm38Ps3k,1320
692
- django_cfg/models/tasks/backends.py,sha256=JH04ljOHe-2Tw5wZ58v-HQtlaelDZqAxoGEKdjbdSA8,6946
693
- django_cfg/models/tasks/config.py,sha256=dqDoiqMWsSdKJrLAyGcKyzBukZdjhz7kR5_LKFZBiss,9305
694
- django_cfg/models/tasks/utils.py,sha256=5CR_d6dD6vYZ9UpI3kKD9EJwuPdWWuqiA_hhxXzmogs,4811
665
+ django_cfg/models/tasks/__init__.py,sha256=1cZH-P022je3FGSaus6kwxSzMAKBLkIetZ8qp4Dy46I,1228
666
+ django_cfg/models/tasks/backends.py,sha256=r5VcuAxyyxqd5grpktEd-0yJNvSJu2jv0IBgrK32ENs,3369
667
+ django_cfg/models/tasks/config.py,sha256=0Tc7O2mVQLc8IYXMm__cdeP0ytYn_NucL2xyA95wyT4,5892
668
+ django_cfg/models/tasks/utils.py,sha256=9TEbdxgd0N_O2T_7GGwkyPeDg4H7tSKLHoHG_n8edqg,4459
695
669
  django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
696
670
  django_cfg/modules/base.py,sha256=Grmgxc5dvnAEM1sudWEWO4kv8L0Ks-y32nxTk2vwdjQ,6272
697
671
  django_cfg/modules/django_admin/CHANGELOG_CODE_METHODS.md,sha256=HfE_rUlovx1zX_1hkzQsjwghaFvIvUWjZ_Aume8lhIs,3823
698
672
  django_cfg/modules/django_admin/IMPORT_EXPORT_FIX.md,sha256=F8z4oHZk7jkRChxW8tKsVf0Q_OujjlBUs8UJNirn55Y,2055
699
- django_cfg/modules/django_admin/__init__.py,sha256=rWUY6Le2gO-szuuQyrUUP8sLIaTwkNDBexdK8Vbwzv0,3094
673
+ django_cfg/modules/django_admin/RESOURCE_CONFIG_ENHANCEMENT.md,sha256=MKUpRHMqM3KDEKZthWhul-4EoSnE75kkWd7IcEzwYDQ,8729
674
+ django_cfg/modules/django_admin/__init__.py,sha256=LYVFCVgN6Irr80dK8SkXgKQ-Xgg2MyRL5CgfOgmSt8A,3190
700
675
  django_cfg/modules/django_admin/base/__init__.py,sha256=tzre09bnD_SlS-pA30WzYZRxyvch7eLq3q0wLEcZOmc,118
701
- django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=srGVXDdlb0YIcP_VIpVFjLegIkg7vEKp8GlAidtoBc0,18639
676
+ django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=v2U-Tm_zWkDsh1CGmYL-xJdsVvHKX7MjUMrFwpY6wpw,20879
702
677
  django_cfg/modules/django_admin/base/unfold_admin.py,sha256=iqpRWSkzW5HktXDuuG7G3J6RoIfW48dWPMJTa7Yk08g,729
703
- django_cfg/modules/django_admin/config/__init__.py,sha256=UJGJMP1iAguzd33E1BgeIjWaooFYylku3aR_Arib-cg,604
678
+ django_cfg/modules/django_admin/config/__init__.py,sha256=IjD2pJBb_rboj9V4_4uzBmzIIzm4a5Xy8XIieL5myww,755
704
679
  django_cfg/modules/django_admin/config/action_config.py,sha256=JjS01JxLT-FzUVq7RlKaB7L38wmVL8uibXO_iXZcljo,1668
705
- django_cfg/modules/django_admin/config/admin_config.py,sha256=vX9CVjC8FgDLdkhUMHNqkpaoO9c1dhzR4mNltET12kM,4569
680
+ django_cfg/modules/django_admin/config/admin_config.py,sha256=7ozVnLqJcUrHu-UK-PdOfuX2UOvR1gkigThgQsfO0wY,5030
681
+ django_cfg/modules/django_admin/config/background_task_config.py,sha256=7-8B1rhpeafanVxtjFQUx0mVjcA5xmxZIxqKzaBwMX0,1760
706
682
  django_cfg/modules/django_admin/config/field_config.py,sha256=TXdmz1GHC0N7euzqgB9p5EhFCYzsEobb8VSgS4kG4ho,8928
707
683
  django_cfg/modules/django_admin/config/fieldset_config.py,sha256=5BPUWO_HvS6YhPU_vqQPzRT2y3OIPrBCioFuer5-mrA,1249
684
+ django_cfg/modules/django_admin/config/resource_config.py,sha256=6ELWSuHlrpNqV2wO2sL_o2mE2DXLd_solcsdN5O6eQg,3962
708
685
  django_cfg/modules/django_admin/icons/README.md,sha256=j-NUixSC1QJh7PqYKxLZpPrTxKrAnx0urQraXgv4JHI,5612
709
686
  django_cfg/modules/django_admin/icons/__init__.py,sha256=XrdQ3vmADQ1y2yNaL2jvffHCXjy3GjpoBbTsDPLD8Ko,198
710
687
  django_cfg/modules/django_admin/icons/constants.py,sha256=g5rrZOMLP4bT824pwksRavNQsW1I2AdWKvoGPtk5qQA,124554
@@ -862,7 +839,7 @@ django_cfg/modules/django_client/core/validation/rules/base.py,sha256=xVJli0eSEz
862
839
  django_cfg/modules/django_client/core/validation/rules/type_hints.py,sha256=hwjTMADillsTPruDvXZQeZMj4LVV443zxY9o0Gqgg6k,10200
863
840
  django_cfg/modules/django_client/management/__init__.py,sha256=mCTPP_bIOmqNnn0WAG2n4BuF6zwc9PTgdZr_dORfNDk,54
864
841
  django_cfg/modules/django_client/management/commands/__init__.py,sha256=CJ55pHUNYQ5h-QHUe3axeTtxzlUJv7wbEuZmGN21iCM,36
865
- django_cfg/modules/django_client/management/commands/generate_client.py,sha256=JShicezcxeUJ8_5l5HJtINbDwsdhoK_4gljyaPlfXGM,30910
842
+ django_cfg/modules/django_client/management/commands/generate_client.py,sha256=bChdPqqgklRV74s3Qr9xC5ZDX2QwYG4n4SFYimkzSXE,31357
866
843
  django_cfg/modules/django_client/management/commands/validate_openapi.py,sha256=IBKk7oRP3tMQzXjvZNIgQtMPk3k_mB2diNS7bkaSLz4,11011
867
844
  django_cfg/modules/django_client/spectacular/__init__.py,sha256=M8fG-odu2ltkG36aMMr0KDkCKGX676TwdrJO8vky2cI,345
868
845
  django_cfg/modules/django_client/spectacular/async_detection.py,sha256=S_pwGR7_2SIWHjZJyiu7SCfySF3Nr3P8eqjDyBSkkLs,5731
@@ -981,17 +958,6 @@ django_cfg/modules/django_tailwind/templates/django_tailwind/components/theme_to
981
958
  django_cfg/modules/django_tailwind/templates/django_tailwind/components/user_menu.html,sha256=uMr8QDfSJ_48CGjvSCbyclVxEBBwLhh7knFlQ_9vz-E,5704
982
959
  django_cfg/modules/django_tailwind/templatetags/__init__.py,sha256=LC6UNzB7KcoLsTIUMaiwb-D1tMCnTBYr3Ppmg9Cho7c,44
983
960
  django_cfg/modules/django_tailwind/templatetags/tailwind_info.py,sha256=v1HuLihRYsEtlDQ04UlZWvF3lmu29ttIrWSvkm0qSRM,4530
984
- django_cfg/modules/django_tasks/__init__.py,sha256=wqiXQtvL8TvkRuXd_e5XuCGnGsmrga_mbvu9yMk-F1Y,671
985
- django_cfg/modules/django_tasks/dramatiq_setup.py,sha256=0JJ2oO_ppWWM4KSh-2scFYQqNMGknPeKwwSsPIehNYE,548
986
- django_cfg/modules/django_tasks/factory.py,sha256=GtSCC02R_IwUSFDoGIviMTdxL5RMoXTsce07XTIwn04,4336
987
- django_cfg/modules/django_tasks/service.py,sha256=3Sht1YA3qo4VslKwFCBuFYO9bTC7D3c84CQFNWGL4Gg,10008
988
- django_cfg/modules/django_tasks/settings.py,sha256=03QWuBkI0-PQVjvW6W2atOBD9VBPoO-zdh-mZ1IFGVU,3728
989
- django_cfg/modules/django_tasks/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
990
- django_cfg/modules/django_tasks/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
991
- django_cfg/modules/django_tasks/management/commands/rundramatiq.py,sha256=i8JrUWI5RL2gn8YGmEiPk8wg6WlBasQYRSWtIIdT2nI,9098
992
- django_cfg/modules/django_tasks/management/commands/rundramatiq_simulator.py,sha256=OxDoK3BAEK78J364SEiKQj1hqm3JgdtMULbCna7Icng,15402
993
- django_cfg/modules/django_tasks/management/commands/task_clear.py,sha256=g9ptNweO6tstOGddlWo96gx37A4QtHGm1W8X5aF-HSg,7747
994
- django_cfg/modules/django_tasks/management/commands/task_status.py,sha256=4YSNpAOvoj6TDjcAd--pmPp2H6bqRJuNbBNpM5Neitw,8897
995
961
  django_cfg/modules/django_telegram/__init__.py,sha256=H92RqWPLMiuChlmc0wUtTG4uUvGJjfTyDVd5cVO2yhc,591
996
962
  django_cfg/modules/django_telegram/service.py,sha256=oPuz7sW6KetqPFqicq92TWbpICVCMMAKFP4rrPRziTg,14520
997
963
  django_cfg/modules/django_telegram/utils.py,sha256=O8kd7IPzbxr0-ypx3JFmBw1Pc38wX8dYpoieO4w8GJk,1575
@@ -1019,7 +985,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
1019
985
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
1020
986
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
1021
987
  django_cfg/modules/django_unfold/__init__.py,sha256=Uquez6xgPUIc8FBMP7qif-adRYQSjQ2dBHxnJPom3eQ,1337
1022
- django_cfg/modules/django_unfold/navigation.py,sha256=4lEFyL-qB0aYMYDsqSU24XOIuMGaBDHci6f6adbQjTU,11519
988
+ django_cfg/modules/django_unfold/navigation.py,sha256=MqMA7-sfQpaH3T8V3eI0fJY1gPKd5AVx1eJenqwJWNg,14428
1023
989
  django_cfg/modules/django_unfold/system_monitor.py,sha256=KcrTa5irstdB1pDKe3sC0zl4tz9LVjhp7xvbqUM4YVk,6781
1024
990
  django_cfg/modules/django_unfold/tailwind.py,sha256=NY8nWcUdQw61oNmjPoPl7agcTb-r5IqcpFYy35MNsTM,9107
1025
991
  django_cfg/modules/django_unfold/utils.py,sha256=5aFaceRc9B3eXfpOVyKRD2wWqFt8KcHxjQg54oD7Oyg,4482
@@ -1036,7 +1002,7 @@ django_cfg/modules/nextjs_admin/models/config.py,sha256=75iM81aaTlDQdhfvdlCzj6o9
1036
1002
  django_cfg/modules/nextjs_admin/templatetags/__init__.py,sha256=ChVBnJggCIY8rMhfyJFoA8k0qKo-8FtJknrk54Vx4wM,51
1037
1003
  django_cfg/modules/nextjs_admin/templatetags/nextjs_admin.py,sha256=aAekrlu3pvvx3I4uJGT3S2ie8QfF94umDBjgAF71EII,4483
1038
1004
  django_cfg/registry/__init__.py,sha256=CaiL9KwqPzXlIe5-4Qr7PQu5ZxAW1HtuDIXZ7-ktRQg,538
1039
- django_cfg/registry/core.py,sha256=Vn7Q1-1MzkKAWsWzkALr8jO7gQSFfAzz17h9ZR5OtSU,3346
1005
+ django_cfg/registry/core.py,sha256=muO6Klp4uoZ0yGar6zrZ7PIpPn-kvewXZ-6ZFZlXeAU,3340
1040
1006
  django_cfg/registry/exceptions.py,sha256=b4pIakeRxhT1-ST3lbAnmAQaASRBARCoah_w6vb3VF0,399
1041
1007
  django_cfg/registry/modules.py,sha256=DC9veh6DdnqOa_KPNwDhnxvvNKRNF0Um2isHn1XGoxU,1915
1042
1008
  django_cfg/registry/services.py,sha256=l0V2twGpF9BwVlo-TTfFu8dV7GVBS7XKCsScIZXWWbc,2457
@@ -1059,7 +1025,7 @@ django_cfg/static/admin/js/alpine/commands-section.js,sha256=8z2MQNwZF9Tx_2EK1AY
1059
1025
  django_cfg/static/admin/js/alpine/dashboard-tabs.js,sha256=ob8Q_I9lFLDv_hFERXgTyvqMDBspAGfzCxI_7slRur4,1354
1060
1026
  django_cfg/static/admin/js/alpine/system-metrics.js,sha256=m-Fg55K_vpHXToD46PXL9twl4OBF_V9MONvbSWbQqDw,440
1061
1027
  django_cfg/static/admin/js/alpine/toggle-section.js,sha256=T141NFmy0fRJyGGuuaCJRjJXwPam-xxtQNW1hi8BJbc,672
1062
- django_cfg/static/frontend/admin.zip,sha256=w-E-vlsWyPlx3PpmwTxPenibUWXNSlhN7Hu0oPlhFP8,15272375
1028
+ django_cfg/static/frontend/admin.zip,sha256=pLsFyDXNjsrLStXYZBYw820gPayTk8fYGZAy8_6kVtM,7645824
1063
1029
  django_cfg/static/js/api-loader.mjs,sha256=boGqqRGnFR-Mzo_RQOjhAzNvsb7QxZddSwMKROzkk9Q,5163
1064
1030
  django_cfg/static/js/api/base.mjs,sha256=KUxZHHdELAV8mNnACpwJRvaQhdJxp-n5LFEQ4oUZxBo,4707
1065
1031
  django_cfg/static/js/api/index.mjs,sha256=_-Q04jjHcgwi4CGfiaLyiOR6NW7Yu1HBhJWp2J1cjpc,2538
@@ -1094,9 +1060,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
1094
1060
  django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
1095
1061
  django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
1096
1062
  django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1097
- django_cfg/pyproject.toml,sha256=Azsm48lHmm_ksNBsj-MZGKqdiLerHiVMQ71jY8MldP8,8573
1098
- django_cfg-1.4.106.dist-info/METADATA,sha256=Dl1J5WrtjhAyxfHAWz64bAnAhjZ8JXz9djjDwg2-epg,23734
1099
- django_cfg-1.4.106.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1100
- django_cfg-1.4.106.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1101
- django_cfg-1.4.106.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1102
- django_cfg-1.4.106.dist-info/RECORD,,
1063
+ django_cfg/pyproject.toml,sha256=Ut3Yvuw83bf3FmZzYAJL24fp1zbblv_c2p61XF7318A,8614
1064
+ django_cfg-1.4.108.dist-info/METADATA,sha256=IOJxCR_vzoWD4SuFisznEMmiEkvpx-mg_ktcf-TB81U,23801
1065
+ django_cfg-1.4.108.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1066
+ django_cfg-1.4.108.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1067
+ django_cfg-1.4.108.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1068
+ django_cfg-1.4.108.dist-info/RECORD,,
@@ -1,29 +0,0 @@
1
- """
2
- Task admin actions.
3
- """
4
-
5
- from django.contrib import messages
6
-
7
-
8
- def retry_failed_tasks(modeladmin, request, queryset):
9
- """Retry selected failed tasks."""
10
- failed_tasks = queryset.filter(status='failed')
11
- count = failed_tasks.count()
12
-
13
- if count > 0:
14
- # Here you would implement the retry logic
15
- messages.success(request, f"Queued {count} tasks for retry.")
16
- else:
17
- messages.warning(request, "No failed tasks selected.")
18
-
19
-
20
- def cancel_pending_tasks(modeladmin, request, queryset):
21
- """Cancel selected pending tasks."""
22
- pending_tasks = queryset.filter(status='pending')
23
- count = pending_tasks.count()
24
-
25
- if count > 0:
26
- pending_tasks.update(status='cancelled')
27
- messages.success(request, f"Cancelled {count} pending tasks.")
28
- else:
29
- messages.warning(request, "No pending tasks selected.")
@@ -1,154 +0,0 @@
1
- """
2
- Tasks Admin v2.0 - NEW Declarative Pydantic Approach
3
-
4
- Enhanced Dramatiq task management with Material Icons and auto-generated displays.
5
- """
6
-
7
- import logging
8
- from django.contrib import admin, messages
9
- from django.contrib.admin.views.main import ChangeList
10
- from django.db.models import Count
11
-
12
- from django_cfg.modules.django_admin import (
13
- ActionConfig,
14
- AdminConfig,
15
- BadgeField,
16
- DateTimeField,
17
- FieldsetConfig,
18
- Icons,
19
- )
20
- from django_cfg.modules.django_admin.base import PydanticAdmin
21
- from django_cfg.modules.django_tasks import DjangoTasks
22
- from .actions import retry_failed_tasks, cancel_pending_tasks
23
-
24
- try:
25
- from django_dramatiq.admin import TaskAdmin as BaseDramatiqTaskAdmin
26
- from django_dramatiq.models import Task
27
- DRAMATIQ_AVAILABLE = True
28
- except ImportError:
29
- Task = None
30
- BaseDramatiqTaskAdmin = None
31
- DRAMATIQ_AVAILABLE = False
32
-
33
- if DRAMATIQ_AVAILABLE:
34
-
35
- class TaskQueueChangeList(ChangeList):
36
- """Custom changelist for task queue management."""
37
- def __init__(self, *args, **kwargs):
38
- super().__init__(*args, **kwargs)
39
- self.tasks_service = DjangoTasks()
40
-
41
- task_config = AdminConfig(
42
- model=Task,
43
- list_display=["id", "actor_name", "status", "queue_name", "created_at"],
44
- display_fields=[
45
- BadgeField(name="id", title="Task ID", variant="info", icon=Icons.TAG),
46
- BadgeField(name="actor_name", title="Actor", variant="secondary", icon=Icons.FUNCTIONS, empty_value="Unknown"),
47
- BadgeField(name="status", title="Status", label_map={
48
- "pending": "warning", "running": "info", "done": "success",
49
- "failed": "danger", "cancelled": "secondary"
50
- }),
51
- BadgeField(name="queue_name", title="Queue", variant="info", icon=Icons.QUEUE, empty_value="default"),
52
- DateTimeField(name="created_at", title="Created", ordering="created_at"),
53
- ],
54
- search_fields=["actor_name", "queue_name", "message_id"],
55
- list_filter=["status", "queue_name", "actor_name", "created_at", "updated_at"],
56
- readonly_fields=["id", "actor_name", "queue_name", "args_preview", "kwargs_preview",
57
- "result_preview", "created_at", "duration_display", "retries_display", "error_message_display"],
58
- fieldsets=[
59
- FieldsetConfig(title="Task Information", fields=["status", "actor_name", "queue_name"]),
60
- FieldsetConfig(title="Execution Details", fields=["args_preview", "kwargs_preview", "result_preview", "error_message_display"]),
61
- FieldsetConfig(title="Timing", fields=["created_at", "duration_display"]),
62
- FieldsetConfig(title="Retry Information", fields=["retries_display"]),
63
- ],
64
- actions=[
65
- ActionConfig(name="retry_failed_tasks", description="Retry failed tasks",
66
- variant="warning", handler=retry_failed_tasks),
67
- ActionConfig(name="cancel_pending_tasks", description="Cancel pending tasks",
68
- variant="danger", handler=cancel_pending_tasks),
69
- ],
70
- ordering=["-created_at"],
71
- )
72
-
73
- try:
74
- admin.site.unregister(Task)
75
- except admin.sites.NotRegistered:
76
- pass
77
-
78
- @admin.register(Task)
79
- class TaskAdmin(PydanticAdmin):
80
- """Enhanced admin for Dramatiq Task model."""
81
- config = task_config
82
-
83
- def has_add_permission(self, request):
84
- return False
85
-
86
- def has_delete_permission(self, request, obj=None):
87
- return False
88
-
89
- def get_changelist(self, request, **kwargs):
90
- return TaskQueueChangeList
91
-
92
- # Custom readonly methods (for detail view)
93
- def args_preview(self, obj):
94
- if hasattr(obj, 'args') and obj.args:
95
- args_text = str(obj.args)
96
- return args_text[:100] + "..." if len(args_text) > 100 else args_text
97
- return "No arguments"
98
- args_preview.short_description = "Arguments"
99
-
100
- def kwargs_preview(self, obj):
101
- if hasattr(obj, 'kwargs') and obj.kwargs:
102
- kwargs_text = str(obj.kwargs)
103
- return kwargs_text[:100] + "..." if len(kwargs_text) > 100 else kwargs_text
104
- return "No kwargs"
105
- kwargs_preview.short_description = "Keyword Arguments"
106
-
107
- def result_preview(self, obj):
108
- if hasattr(obj, 'result') and obj.result:
109
- result_text = str(obj.result)
110
- return result_text[:100] + "..." if len(result_text) > 100 else result_text
111
- return "No result"
112
- result_preview.short_description = "Result"
113
-
114
- def duration_display(self, obj):
115
- if obj.started_at and obj.finished_at:
116
- duration = obj.finished_at - obj.started_at
117
- return f"{duration.total_seconds():.2f}s"
118
- return "N/A"
119
- duration_display.short_description = "Duration"
120
-
121
- def retries_display(self, obj):
122
- return str(getattr(obj, 'retries', 0))
123
- retries_display.short_description = "Retries"
124
-
125
- def error_message_display(self, obj):
126
- if hasattr(obj, 'error') and obj.error:
127
- error_text = str(obj.error)
128
- return error_text[:100] + "..." if len(error_text) > 100 else error_text
129
- return "No error"
130
- error_message_display.short_description = "Error"
131
-
132
- def changelist_view(self, request, extra_context=None):
133
- extra_context = extra_context or {}
134
- try:
135
- total_tasks = self.get_queryset(request).count()
136
- status_stats = self.get_queryset(request).values('status').annotate(count=Count('id')).order_by('status')
137
- actor_stats = self.get_queryset(request).values('actor_name').annotate(count=Count('id')).order_by('-count')[:10]
138
- queue_stats = self.get_queryset(request).values('queue_name').annotate(count=Count('id')).order_by('-count')
139
- extra_context.update({
140
- 'task_statistics': {
141
- 'total_tasks': total_tasks,
142
- 'status_distribution': list(status_stats),
143
- 'top_actors': list(actor_stats),
144
- 'queue_distribution': list(queue_stats),
145
- }
146
- })
147
- except Exception as e:
148
- extra_context['task_error'] = str(e)
149
- return super().changelist_view(request, extra_context)
150
-
151
- else:
152
- class TaskAdmin:
153
- """Placeholder when django-dramatiq is not available."""
154
- pass