django-cfg 1.4.120__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 (182) hide show
  1. django_cfg/__init__.py +8 -4
  2. django_cfg/apps/centrifugo/admin/centrifugo_log.py +33 -71
  3. django_cfg/apps/dashboard/TRANSACTION_FIX.md +73 -0
  4. django_cfg/apps/dashboard/serializers/__init__.py +0 -12
  5. django_cfg/apps/dashboard/serializers/activity.py +1 -1
  6. django_cfg/apps/dashboard/services/__init__.py +0 -2
  7. django_cfg/apps/dashboard/services/charts_service.py +4 -3
  8. django_cfg/apps/dashboard/services/statistics_service.py +11 -2
  9. django_cfg/apps/dashboard/services/system_health_service.py +64 -106
  10. django_cfg/apps/dashboard/urls.py +0 -2
  11. django_cfg/apps/dashboard/views/__init__.py +0 -2
  12. django_cfg/apps/dashboard/views/commands_views.py +3 -6
  13. django_cfg/apps/dashboard/views/overview_views.py +14 -13
  14. django_cfg/apps/grpc/__init__.py +9 -0
  15. django_cfg/apps/grpc/admin/__init__.py +11 -0
  16. django_cfg/apps/{tasks → grpc}/admin/config.py +32 -41
  17. django_cfg/apps/grpc/admin/grpc_request_log.py +252 -0
  18. django_cfg/apps/grpc/apps.py +28 -0
  19. django_cfg/apps/grpc/auth/__init__.py +9 -0
  20. django_cfg/apps/grpc/auth/jwt_auth.py +295 -0
  21. django_cfg/apps/grpc/interceptors/__init__.py +19 -0
  22. django_cfg/apps/grpc/interceptors/errors.py +241 -0
  23. django_cfg/apps/grpc/interceptors/logging.py +270 -0
  24. django_cfg/apps/grpc/interceptors/metrics.py +306 -0
  25. django_cfg/apps/grpc/interceptors/request_logger.py +515 -0
  26. django_cfg/apps/grpc/management/__init__.py +1 -0
  27. django_cfg/apps/grpc/management/commands/rungrpc.py +302 -0
  28. django_cfg/apps/grpc/managers/__init__.py +10 -0
  29. django_cfg/apps/grpc/managers/grpc_request_log.py +310 -0
  30. django_cfg/apps/grpc/migrations/0001_initial.py +69 -0
  31. django_cfg/apps/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py +38 -0
  32. django_cfg/apps/grpc/models/__init__.py +9 -0
  33. django_cfg/apps/grpc/models/grpc_request_log.py +219 -0
  34. django_cfg/apps/grpc/serializers/__init__.py +23 -0
  35. django_cfg/apps/grpc/serializers/health.py +18 -0
  36. django_cfg/apps/grpc/serializers/requests.py +18 -0
  37. django_cfg/apps/grpc/serializers/services.py +50 -0
  38. django_cfg/apps/grpc/serializers/stats.py +22 -0
  39. django_cfg/apps/grpc/services/__init__.py +16 -0
  40. django_cfg/apps/grpc/services/base.py +375 -0
  41. django_cfg/apps/grpc/services/discovery.py +415 -0
  42. django_cfg/apps/grpc/urls.py +23 -0
  43. django_cfg/apps/grpc/utils/__init__.py +13 -0
  44. django_cfg/apps/grpc/utils/proto_gen.py +423 -0
  45. django_cfg/apps/grpc/views/__init__.py +9 -0
  46. django_cfg/apps/grpc/views/monitoring.py +497 -0
  47. django_cfg/apps/knowbase/apps.py +2 -2
  48. django_cfg/apps/maintenance/admin/api_key_admin.py +7 -9
  49. django_cfg/apps/maintenance/admin/site_admin.py +5 -4
  50. django_cfg/apps/newsletter/admin/newsletter_admin.py +12 -11
  51. django_cfg/apps/payments/admin/balance_admin.py +26 -36
  52. django_cfg/apps/payments/admin/payment_admin.py +65 -85
  53. django_cfg/apps/payments/admin/withdrawal_admin.py +65 -100
  54. django_cfg/apps/rq/__init__.py +9 -0
  55. django_cfg/apps/rq/apps.py +80 -0
  56. django_cfg/apps/rq/management/__init__.py +1 -0
  57. django_cfg/apps/rq/management/commands/__init__.py +1 -0
  58. django_cfg/apps/rq/management/commands/rqscheduler.py +31 -0
  59. django_cfg/apps/rq/management/commands/rqstats.py +33 -0
  60. django_cfg/apps/rq/management/commands/rqworker.py +31 -0
  61. django_cfg/apps/rq/management/commands/rqworker_pool.py +27 -0
  62. django_cfg/apps/rq/serializers/__init__.py +40 -0
  63. django_cfg/apps/rq/serializers/health.py +60 -0
  64. django_cfg/apps/rq/serializers/job.py +100 -0
  65. django_cfg/apps/rq/serializers/queue.py +80 -0
  66. django_cfg/apps/rq/serializers/schedule.py +178 -0
  67. django_cfg/apps/rq/serializers/testing.py +139 -0
  68. django_cfg/apps/rq/serializers/worker.py +58 -0
  69. django_cfg/apps/rq/services/__init__.py +25 -0
  70. django_cfg/apps/rq/services/config_helper.py +233 -0
  71. django_cfg/apps/rq/services/models/README.md +417 -0
  72. django_cfg/apps/rq/services/models/__init__.py +30 -0
  73. django_cfg/apps/rq/services/models/event.py +123 -0
  74. django_cfg/apps/rq/services/models/job.py +99 -0
  75. django_cfg/apps/rq/services/models/queue.py +92 -0
  76. django_cfg/apps/rq/services/models/worker.py +104 -0
  77. django_cfg/apps/rq/services/rq_converters.py +183 -0
  78. django_cfg/apps/rq/tasks/__init__.py +23 -0
  79. django_cfg/apps/rq/tasks/demo_tasks.py +284 -0
  80. django_cfg/apps/rq/urls.py +54 -0
  81. django_cfg/apps/rq/views/__init__.py +19 -0
  82. django_cfg/apps/rq/views/jobs.py +882 -0
  83. django_cfg/apps/rq/views/monitoring.py +248 -0
  84. django_cfg/apps/rq/views/queues.py +261 -0
  85. django_cfg/apps/rq/views/schedule.py +400 -0
  86. django_cfg/apps/rq/views/testing.py +761 -0
  87. django_cfg/apps/rq/views/workers.py +195 -0
  88. django_cfg/apps/urls.py +13 -8
  89. django_cfg/config.py +106 -0
  90. django_cfg/core/base/config_model.py +16 -26
  91. django_cfg/core/builders/apps_builder.py +7 -11
  92. django_cfg/core/generation/integration_generators/__init__.py +3 -6
  93. django_cfg/core/generation/integration_generators/django_rq.py +80 -0
  94. django_cfg/core/generation/integration_generators/grpc_generator.py +318 -0
  95. django_cfg/core/generation/orchestrator.py +15 -15
  96. django_cfg/core/integration/display/startup.py +6 -20
  97. django_cfg/mixins/__init__.py +2 -0
  98. django_cfg/mixins/superadmin_api.py +59 -0
  99. django_cfg/models/__init__.py +3 -3
  100. django_cfg/models/api/grpc/__init__.py +59 -0
  101. django_cfg/models/api/grpc/config.py +364 -0
  102. django_cfg/models/django/__init__.py +3 -3
  103. django_cfg/models/django/django_rq.py +621 -0
  104. django_cfg/models/django/revolution_legacy.py +1 -1
  105. django_cfg/modules/base.py +19 -6
  106. django_cfg/modules/django_admin/base/pydantic_admin.py +2 -2
  107. django_cfg/modules/django_admin/config/background_task_config.py +4 -4
  108. django_cfg/modules/django_admin/utils/__init__.py +41 -3
  109. django_cfg/modules/django_admin/utils/badges/__init__.py +13 -0
  110. django_cfg/modules/django_admin/utils/{badges.py → badges/status_badges.py} +3 -3
  111. django_cfg/modules/django_admin/utils/displays/__init__.py +13 -0
  112. django_cfg/modules/django_admin/utils/{displays.py → displays/data_displays.py} +2 -2
  113. django_cfg/modules/django_admin/utils/html/__init__.py +26 -0
  114. django_cfg/modules/django_admin/utils/html/badges.py +47 -0
  115. django_cfg/modules/django_admin/utils/html/base.py +167 -0
  116. django_cfg/modules/django_admin/utils/html/code.py +87 -0
  117. django_cfg/modules/django_admin/utils/html/composition.py +205 -0
  118. django_cfg/modules/django_admin/utils/html/formatting.py +231 -0
  119. django_cfg/modules/django_admin/utils/html/keyvalue.py +219 -0
  120. django_cfg/modules/django_admin/utils/html/markdown_integration.py +108 -0
  121. django_cfg/modules/django_admin/utils/html/progress.py +127 -0
  122. django_cfg/modules/django_admin/utils/html_builder.py +55 -408
  123. django_cfg/modules/django_admin/utils/markdown/__init__.py +21 -0
  124. django_cfg/modules/django_unfold/navigation.py +21 -18
  125. django_cfg/pyproject.toml +4 -6
  126. django_cfg/registry/core.py +4 -7
  127. django_cfg/registry/modules.py +6 -0
  128. django_cfg/static/frontend/admin.zip +0 -0
  129. django_cfg/templates/admin/constance/includes/results_list.html +73 -0
  130. django_cfg/templates/admin/index.html +187 -62
  131. django_cfg/templatetags/django_cfg.py +61 -1
  132. {django_cfg-1.4.120.dist-info → django_cfg-1.5.2.dist-info}/METADATA +12 -4
  133. {django_cfg-1.4.120.dist-info → django_cfg-1.5.2.dist-info}/RECORD +140 -96
  134. django_cfg/apps/dashboard/permissions.py +0 -48
  135. django_cfg/apps/dashboard/serializers/django_q2.py +0 -50
  136. django_cfg/apps/dashboard/services/django_q2_service.py +0 -159
  137. django_cfg/apps/dashboard/views/django_q2_views.py +0 -79
  138. django_cfg/apps/tasks/__init__.py +0 -64
  139. django_cfg/apps/tasks/admin/__init__.py +0 -4
  140. django_cfg/apps/tasks/admin/task_log.py +0 -265
  141. django_cfg/apps/tasks/apps.py +0 -15
  142. django_cfg/apps/tasks/filters/__init__.py +0 -10
  143. django_cfg/apps/tasks/filters/task_log.py +0 -121
  144. django_cfg/apps/tasks/migrations/0001_initial.py +0 -196
  145. django_cfg/apps/tasks/migrations/0002_delete_tasklog.py +0 -16
  146. django_cfg/apps/tasks/models/__init__.py +0 -4
  147. django_cfg/apps/tasks/models/task_log.py +0 -246
  148. django_cfg/apps/tasks/serializers/__init__.py +0 -28
  149. django_cfg/apps/tasks/serializers/task_log.py +0 -249
  150. django_cfg/apps/tasks/services/__init__.py +0 -10
  151. django_cfg/apps/tasks/services/client/__init__.py +0 -7
  152. django_cfg/apps/tasks/services/client/client.py +0 -234
  153. django_cfg/apps/tasks/services/config_helper.py +0 -63
  154. django_cfg/apps/tasks/services/sync.py +0 -204
  155. django_cfg/apps/tasks/urls.py +0 -16
  156. django_cfg/apps/tasks/views/__init__.py +0 -10
  157. django_cfg/apps/tasks/views/task_log.py +0 -41
  158. django_cfg/apps/tasks/views/task_log_base.py +0 -41
  159. django_cfg/apps/tasks/views/task_log_overview.py +0 -100
  160. django_cfg/apps/tasks/views/task_log_related.py +0 -41
  161. django_cfg/apps/tasks/views/task_log_stats.py +0 -91
  162. django_cfg/apps/tasks/views/task_log_timeline.py +0 -81
  163. django_cfg/core/generation/integration_generators/django_q2.py +0 -133
  164. django_cfg/core/generation/integration_generators/tasks.py +0 -88
  165. django_cfg/models/django/django_q2.py +0 -514
  166. django_cfg/models/tasks/__init__.py +0 -49
  167. django_cfg/models/tasks/backends.py +0 -122
  168. django_cfg/models/tasks/config.py +0 -209
  169. django_cfg/models/tasks/utils.py +0 -162
  170. django_cfg/modules/django_admin/utils/CODE_BLOCK_DOCS.md +0 -396
  171. django_cfg/modules/django_q2/README.md +0 -140
  172. django_cfg/modules/django_q2/__init__.py +0 -8
  173. django_cfg/modules/django_q2/apps.py +0 -107
  174. django_cfg/modules/django_q2/management/commands/__init__.py +0 -0
  175. django_cfg/modules/django_q2/management/commands/sync_django_q_schedules.py +0 -74
  176. /django_cfg/apps/{tasks/migrations → grpc/management/commands}/__init__.py +0 -0
  177. /django_cfg/{modules/django_q2/management → apps/grpc/migrations}/__init__.py +0 -0
  178. /django_cfg/modules/django_admin/utils/{mermaid_plugin.py → markdown/mermaid_plugin.py} +0 -0
  179. /django_cfg/modules/django_admin/utils/{markdown_renderer.py → markdown/renderer.py} +0 -0
  180. {django_cfg-1.4.120.dist-info → django_cfg-1.5.2.dist-info}/WHEEL +0 -0
  181. {django_cfg-1.4.120.dist-info → django_cfg-1.5.2.dist-info}/entry_points.txt +0 -0
  182. {django_cfg-1.4.120.dist-info → django_cfg-1.5.2.dist-info}/licenses/LICENSE +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: django-cfg
3
- Version: 1.4.120
3
+ Version: 1.5.2
4
4
  Summary: Modern Django framework with type-safe Pydantic v2 configuration, Next.js admin integration, real-time WebSockets, and 8 enterprise apps. Replace settings.py with validated models, 90% less code. Production-ready with AI agents, auto-generated TypeScript clients, and zero-config features.
5
5
  Project-URL: Homepage, https://djangocfg.com
6
6
  Project-URL: Documentation, https://djangocfg.com
@@ -34,7 +34,6 @@ Requires-Dist: click<9.0,>=8.2.0
34
34
  Requires-Dist: cloudflare<5.0,>=4.3.0
35
35
  Requires-Dist: colorlog<7.0,>=6.9.0
36
36
  Requires-Dist: coolname<3.0,>=2.2.0
37
- Requires-Dist: croniter<7.0,>=6.0.0
38
37
  Requires-Dist: dj-database-url<4.0,>=3.0.0
39
38
  Requires-Dist: django-admin-rangefilter<1.0,>=0.13.0
40
39
  Requires-Dist: django-axes[ipware]<9.0.0,>=8.0.0
@@ -44,9 +43,9 @@ Requires-Dist: django-extensions<5.0,>=4.1.0
44
43
  Requires-Dist: django-filter<26.0,>=25.0
45
44
  Requires-Dist: django-import-export<5.0,>=4.3.0
46
45
  Requires-Dist: django-json-widget<3.0,>=2.0.0
47
- Requires-Dist: django-q2==1.8.0
48
46
  Requires-Dist: django-ratelimit<5.0.0,>=4.1.0
49
47
  Requires-Dist: django-redis<7.0,>=6.0.0
48
+ Requires-Dist: django-rq<4.0,>=3.1.0
50
49
  Requires-Dist: django-tailwind[reload]<5.0.0,>=4.2.0
51
50
  Requires-Dist: django-unfold<1.0,>=0.64.0
52
51
  Requires-Dist: djangorestframework-simplejwt<6.0,>=5.5.0
@@ -73,10 +72,10 @@ Requires-Dist: pytelegrambotapi<5.0,>=4.28.0
73
72
  Requires-Dist: python-json-logger<4.0,>=3.3.0
74
73
  Requires-Dist: pyyaml<7.0,>=6.0
75
74
  Requires-Dist: questionary<3.0,>=2.1.0
76
- Requires-Dist: rearq<1.0,>=0.2.0
77
75
  Requires-Dist: redis<7.0,>=6.4.0
78
76
  Requires-Dist: requests<3.0,>=2.32.0
79
77
  Requires-Dist: rich<15.0,>=14.0.0
78
+ Requires-Dist: rq-scheduler<1.0,>=0.14.0
80
79
  Requires-Dist: sendgrid<7.0,>=6.12.0
81
80
  Requires-Dist: setuptools>=75.0.0; python_version >= '3.13'
82
81
  Requires-Dist: tenacity<10.0.0,>=9.1.2
@@ -119,14 +118,18 @@ Provides-Extra: full
119
118
  Requires-Dist: black<26.0,>=25.9; extra == 'full'
120
119
  Requires-Dist: build<2.0,>=1.3; extra == 'full'
121
120
  Requires-Dist: django<6.0,>=5.2; extra == 'full'
121
+ Requires-Dist: djangogrpcframework>=0.2.1; extra == 'full'
122
122
  Requires-Dist: factory-boy<4.0,>=3.3; extra == 'full'
123
123
  Requires-Dist: flake8<8.0,>=6.0.0; extra == 'full'
124
+ Requires-Dist: grpcio-tools<2.0,>=1.50.0; extra == 'full'
125
+ Requires-Dist: grpcio<2.0,>=1.50.0; extra == 'full'
124
126
  Requires-Dist: isort<7.0,>=6.0; extra == 'full'
125
127
  Requires-Dist: mkdocs-material<10.0,>=9.6; extra == 'full'
126
128
  Requires-Dist: mkdocs<2.0,>=1.6; extra == 'full'
127
129
  Requires-Dist: mkdocstrings[python]<1.0,>=0.30; extra == 'full'
128
130
  Requires-Dist: mypy<2.0,>=1.18; extra == 'full'
129
131
  Requires-Dist: pre-commit<5.0,>=4.3; extra == 'full'
132
+ Requires-Dist: protobuf<7.0,>=5.0; extra == 'full'
130
133
  Requires-Dist: pymdown-extensions<11.0,>=10.16; extra == 'full'
131
134
  Requires-Dist: pytest-cov<8.0,>=7.0; extra == 'full'
132
135
  Requires-Dist: pytest-django<5.0,>=4.11; extra == 'full'
@@ -138,6 +141,11 @@ Requires-Dist: redis<7.0,>=6.4.0; extra == 'full'
138
141
  Requires-Dist: rich<15.0,>=13.0.0; extra == 'full'
139
142
  Requires-Dist: tomlkit<1.0,>=0.13.3; extra == 'full'
140
143
  Requires-Dist: twine<7.0,>=6.2; extra == 'full'
144
+ Provides-Extra: grpc
145
+ Requires-Dist: djangogrpcframework>=0.2.1; extra == 'grpc'
146
+ Requires-Dist: grpcio-tools<2.0,>=1.50.0; extra == 'grpc'
147
+ Requires-Dist: grpcio<2.0,>=1.50.0; extra == 'grpc'
148
+ Requires-Dist: protobuf<7.0,>=5.0; extra == 'grpc'
141
149
  Provides-Extra: local
142
150
  Provides-Extra: tasks
143
151
  Requires-Dist: redis<7.0,>=6.4.0; extra == 'tasks'
@@ -1,9 +1,9 @@
1
1
  django_cfg/README.md,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- django_cfg/__init__.py,sha256=2aQpPujqEk1Kt4OCSixn0JVIQ-ppeqKrE6o-xJY4Ltg,1621
2
+ django_cfg/__init__.py,sha256=PudxEXvb3GDxrbmG7DoIY9H90ND0RL8UWFWp445sHm4,1777
3
3
  django_cfg/apps.py,sha256=72m3uuvyqGiLx6gOfE-BD3P61jddCCERuBOYpxTX518,1605
4
- django_cfg/config.py,sha256=xdwFE8bocOEnMjqDOwr1_M02oUgdaMG_2M6F_IuB9GQ,1351
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=oUmBXmhZp6BwXUs8R_H9rYWskbpVTs1wQDqyGfMnIt4,6693
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
@@ -131,7 +131,7 @@ django_cfg/apps/centrifugo/registry.py,sha256=HRaBN39UlCMX6ZAysYhdCWMlzAx1scGTvg
131
131
  django_cfg/apps/centrifugo/router.py,sha256=HyiJF0t3w085Upu9SPaTJ-qcSW8JYND71rXtuEFAt2g,3116
132
132
  django_cfg/apps/centrifugo/urls.py,sha256=wb7MwTmsZC1uewLQrUBpULpCVwzwh9YztUEgmMnLDQ4,902
133
133
  django_cfg/apps/centrifugo/admin/__init__.py,sha256=JoDpJaJwT4f0ntWi8eNgNN5RRzWRty2fKdbDm-7PwEY,254
134
- django_cfg/apps/centrifugo/admin/centrifugo_log.py,sha256=ME4MThn7dSTe26MHxmSJ37lzo98OO3_WGQu5Kz9TOqA,8096
134
+ django_cfg/apps/centrifugo/admin/centrifugo_log.py,sha256=1tcwB2bsJpklbVHOQOGR3vNwvGaSS94sRiZTjQiVzTE,6963
135
135
  django_cfg/apps/centrifugo/admin/config.py,sha256=W_2x55AY8X8xxDxn92UU2jdVzRDlHSu9p3l4VtSAy1M,2005
136
136
  django_cfg/apps/centrifugo/codegen/IMPLEMENTATION_SUMMARY.md,sha256=8AGzxD-5i7auP0OGIoCAwm5WSxzWvVaio6xNjatAT6s,13239
137
137
  django_cfg/apps/centrifugo/codegen/README.md,sha256=2UUicvh_wVAyMoR9wZlO5F98TlN_Jx2imzKklYEiJQE,7149
@@ -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
@@ -233,9 +230,44 @@ django_cfg/apps/frontend/test_routing.py,sha256=fshJOR9ln7m3gXY9EI1_ix_6E5xua6DR
233
230
  django_cfg/apps/frontend/urls.py,sha256=Vz22_2i2w1J0KQYDCxHnTF5rUf32kUUSBDJZrP07XgY,284
234
231
  django_cfg/apps/frontend/views.py,sha256=JPTJRPCGY3zLLiiz1F9CsZiLkXbQ5RfnViJZzBUpV7o,15023
235
232
  django_cfg/apps/frontend/templates/frontend/404.html,sha256=LCFig_dcgDDmYKhgOLu8R2KDs_aQS6Es6rAxLTAEXWs,2175
233
+ django_cfg/apps/grpc/__init__.py,sha256=Sen6KfKksoyO3ov9uguK4alr3oWZRyVuxxS2kIL4TvI,209
234
+ django_cfg/apps/grpc/apps.py,sha256=jrGDKmsZyfcRB15C9lJ0H_CCvKEF7ZIVkWOnTYwmoPc,649
235
+ django_cfg/apps/grpc/urls.py,sha256=GCkgA-dIIVpIb3_TjLamzssUrNtpE3k7_idDZacygus,478
236
+ django_cfg/apps/grpc/admin/__init__.py,sha256=ZdlCRR_RYyiFoRaEzeKqQLxWoW86DkczADf67ofIcwQ,202
237
+ django_cfg/apps/grpc/admin/config.py,sha256=_eJDj7IFChSpkShjD05UaXBRS_e7Iu49v3IT_DWoXNY,2330
238
+ django_cfg/apps/grpc/admin/grpc_request_log.py,sha256=rI2b3QjCOKGXn6sD0JWKkUqAukUWHEcIEK4TUsB8BfY,8524
239
+ django_cfg/apps/grpc/auth/__init__.py,sha256=iCw1EBiyfM_SfSTzQEM1wtTSFTX0Qi4ZiW26oz9J7X8,164
240
+ django_cfg/apps/grpc/auth/jwt_auth.py,sha256=sU_meAIiXipQUG8FYp0bzSiLTbQHnu_bIAK1sKznIfc,10277
241
+ django_cfg/apps/grpc/interceptors/__init__.py,sha256=Ahd1CW97P2NfBBTNhucbc1cBmSc4PlypMbcgljE_Aak,505
242
+ django_cfg/apps/grpc/interceptors/errors.py,sha256=IAH8si_bAmK90WISeNPZPX7HlMUvSEMj8FCCA3WreQU,7955
243
+ django_cfg/apps/grpc/interceptors/logging.py,sha256=w9IGyGFzg1xAbfEZovOC796M38xgWfzolxRtRaiHZek,9527
244
+ django_cfg/apps/grpc/interceptors/metrics.py,sha256=crWSL2i-F7aJK9LRT7G7Z6qvkvkMQf2bv_lY9w7-7AM,9843
245
+ django_cfg/apps/grpc/interceptors/request_logger.py,sha256=ciWKjx81i4c8rQvyAqlIIcP48GCx6slTn0OOj4y4rsI,16673
246
+ django_cfg/apps/grpc/management/__init__.py,sha256=qeaIQO1EY_-VkrUFRigi-UGbrHmN6U_0ZetCQkjDGvk,40
247
+ django_cfg/apps/grpc/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
248
+ django_cfg/apps/grpc/management/commands/rungrpc.py,sha256=mHCSgCn8abhA3pb4oefysEklKbEsgwXeSeGGbtEGbqw,9653
249
+ django_cfg/apps/grpc/managers/__init__.py,sha256=SsQkxSYpwIA1W9UOZxL51wiIHjqQVX8VLGVI0zNJx6I,189
250
+ django_cfg/apps/grpc/managers/grpc_request_log.py,sha256=QvRgXmPkSkJKdOOguiPIhwWzmXKx7gF30MfR52rVDfQ,9315
251
+ django_cfg/apps/grpc/migrations/0001_initial.py,sha256=UeDDdEQBEpW7-11bGaohVxVh9ii0ssUoj_59tLL0YmM,4549
252
+ django_cfg/apps/grpc/migrations/0002_rename_django_cfg__service_4c4a8e_idx_django_cfg__service_584308_idx_and_more.py,sha256=88Ox17gYjdhYEymiKbt8F8-clVoad56gm7xSaJCtNvQ,1179
253
+ django_cfg/apps/grpc/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
254
+ django_cfg/apps/grpc/models/__init__.py,sha256=epjZUfI7Q55e5RYnElxWuIM22FA7IS_jDiJ_hzQcz1k,112
255
+ django_cfg/apps/grpc/models/grpc_request_log.py,sha256=R_00D_WaxhFzCSMZQsCbmNJ6Oyce_DxZP8WKkuulWN8,5742
256
+ django_cfg/apps/grpc/serializers/__init__.py,sha256=wiXXMgDzj5WzA6FORqSNnPWTzFs3wvTPk3B1EAShcF0,544
257
+ django_cfg/apps/grpc/serializers/health.py,sha256=0xIXOBvD6uGmmm_KMqlR8JiQuhpOGsitp9ietTl3TIs,554
258
+ django_cfg/apps/grpc/serializers/requests.py,sha256=Z6xue882pmyjH_7tUFUS9OmbWNZSbDSzR74umMdWgII,600
259
+ django_cfg/apps/grpc/serializers/services.py,sha256=VlV2rMRj4dIC8_uxyU7CH90vHbxx3EYFbbDy3kkua40,1704
260
+ django_cfg/apps/grpc/serializers/stats.py,sha256=X41Vz3T0yQWCjgbhaurXTpHMysmtinMUoGkfq71NWEs,851
261
+ django_cfg/apps/grpc/services/__init__.py,sha256=dIVywzIvzbJNp7xaLhPsYI4Om2zDzL1WdpAKfjBkRLM,384
262
+ django_cfg/apps/grpc/services/base.py,sha256=U1VClr9pASuc0wdhZk8z6CR19G3qLoq-5PhHdCDyK8c,11135
263
+ django_cfg/apps/grpc/services/discovery.py,sha256=IkWtr-4LnvDMCSlqjxxL2lMQZXcd4W2ogXVbqp-rslA,13698
264
+ django_cfg/apps/grpc/utils/__init__.py,sha256=NX8vLgAVI5ymsL3awZiQhIRstYVxcSAErL4x18jqs3I,251
265
+ django_cfg/apps/grpc/utils/proto_gen.py,sha256=IDJHf8msoGzsTWCiblNwem_7eIRvZujAsuHlTl2vvwQ,12656
266
+ django_cfg/apps/grpc/views/__init__.py,sha256=IZWj31gnice6VOBZ1hkunPnnA5pXwJFTdzxuOk7OVAw,124
267
+ django_cfg/apps/grpc/views/monitoring.py,sha256=sVulfX_r5TIITisRea-jzLTcql9PQPN4txXY3fNM9NE,18125
236
268
  django_cfg/apps/knowbase/README.md,sha256=HXt_J6WCN-LsMhA7p9mdvih07_vp_r_hkPdmqHhNEeo,3965
237
269
  django_cfg/apps/knowbase/__init__.py,sha256=XLhl7_wweUm1nqmA_xVlPxiCSuARxtCro-uY41JFQgs,1039
238
- django_cfg/apps/knowbase/apps.py,sha256=Y1n4ZoEP5oL-lDGLNRHtxhPClEcBElMX8iXFFS4OsPE,3052
270
+ django_cfg/apps/knowbase/apps.py,sha256=l6LJ4q6HxwKfNIwc3n8P4Qmw7xJzRaThP2ZQFLmzHn8,3070
239
271
  django_cfg/apps/knowbase/urls.py,sha256=r5Ak_fp1bWpW01hcstZsJK5F9RhuRFyhR6bUmuoJOA4,643
240
272
  django_cfg/apps/knowbase/urls_admin.py,sha256=fu6KG-nat8ay7buB8t255-Ye_5uiQYibZ1NzhNiyvtg,640
241
273
  django_cfg/apps/knowbase/urls_system.py,sha256=ZW7TOf_7Svt5V-83EBiN9qnm1Y4fQE5YspYRkAJFyVA,736
@@ -370,10 +402,10 @@ django_cfg/apps/maintenance/urls.py,sha256=wOd5n5Ky62gUx-TVaIC5OZcH9K6plsC2pCAJH
370
402
  django_cfg/apps/maintenance/urls_admin.py,sha256=E61etVCrwAzWZdPckWWX5yMDPsZzi3cQtAXn_zzZNL4,226
371
403
  django_cfg/apps/maintenance/admin/__init__.py,sha256=9EDtPitnC45uazpAky927lzo0jW7Qg-qfzv5LCxMW_I,463
372
404
  django_cfg/apps/maintenance/admin/actions.py,sha256=a2y5Gg7m806yAg8J4V_i-jxbFN6A47L5Qa7a1sYVZrg,5304
373
- django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=uDiTmugMPhE8Cjw_XyuDBmcYKjl6EOQx98D39L-9JU8,5638
405
+ django_cfg/apps/maintenance/admin/api_key_admin.py,sha256=SrYLkuhB_rgIBrM0e45Ts7TP9iU_LrYocJnKCjeRt2c,5638
374
406
  django_cfg/apps/maintenance/admin/log_admin.py,sha256=9Kb9IN95QATKVn0yVfFmn5VsvoxJ6B9BeQFUZ-HCd_Y,5551
375
407
  django_cfg/apps/maintenance/admin/scheduled_admin.py,sha256=Vn9qLlC7XjYntAfdSHJbchZ32t3913yZiC8dHjWAhjc,6630
376
- django_cfg/apps/maintenance/admin/site_admin.py,sha256=BGxxZa3lS-tiYNraE7prbIxa2t2EtbUXiXlY0-EK2oA,8267
408
+ django_cfg/apps/maintenance/admin/site_admin.py,sha256=LDG2XXmoBmZnbkCpLX1yUXra8ibjZTK57exVVzm6y2c,8280
377
409
  django_cfg/apps/maintenance/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
378
410
  django_cfg/apps/maintenance/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
379
411
  django_cfg/apps/maintenance/management/commands/maintenance.py,sha256=axNv5oBR5_rncTddGT0Ued_YH4O84EQWe7dMz7G77ak,11008
@@ -411,7 +443,7 @@ django_cfg/apps/newsletter/urls_admin.py,sha256=E61etVCrwAzWZdPckWWX5yMDPsZzi3cQ
411
443
  django_cfg/apps/newsletter/admin/__init__.py,sha256=IGjWzRtv8xLNJDFUW7pTHujJu1rHtRVVYUbIkZzyX4Q,830
412
444
  django_cfg/apps/newsletter/admin/actions.py,sha256=aHC2ACDREfkHscnLToMTdZBQ7orbE7sjB3f4V9-nsOE,3814
413
445
  django_cfg/apps/newsletter/admin/filters.py,sha256=lPMtHULDOisTsN9_2BMoGu23ICkFEJDZst5Fhj5Sv5c,3675
414
- django_cfg/apps/newsletter/admin/newsletter_admin.py,sha256=k3Ila8KNdHnN3vd2yMycQ8Eay8NN75FOQ8aY5J60qLM,23081
446
+ django_cfg/apps/newsletter/admin/newsletter_admin.py,sha256=hLE1gddSx0vqAotEIUYYDbWn1CNvLVaUGD08nFa1NPM,23160
415
447
  django_cfg/apps/newsletter/admin/resources.py,sha256=KJfXZyG763ikhjGJvHE9wcx_k1dm111sg3id1QVFHrY,6808
416
448
  django_cfg/apps/newsletter/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
417
449
  django_cfg/apps/newsletter/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -436,13 +468,13 @@ django_cfg/apps/payments/urls.py,sha256=MGIK3zzYemgZd4sVuL6kUi8gXhsxZfMQF-g7_05U
436
468
  django_cfg/apps/payments/admin/__init__.py,sha256=7jmi4x7PqtdNdhw4ckhVZnHklh-L63x49J2Gl_Xmin0,985
437
469
  django_cfg/apps/payments/admin/actions.py,sha256=_uj30lTKLmQ1TfyF1Hj36tgSNz5axcS7LG7TY4Tv8tE,582
438
470
  django_cfg/apps/payments/admin/balance_actions.py,sha256=BGCwvXOETj0KN3EVIYicVqeXuOCsut-H5fT7og07iDg,422
439
- django_cfg/apps/payments/admin/balance_admin.py,sha256=Z5LnYvh_9_9CBLuweEPUr2rZXmEQ9TWhrr4apqJyhmg,9787
471
+ django_cfg/apps/payments/admin/balance_admin.py,sha256=24go6i5fF9lskTl9VPTtYV9KaJCxCoXZjxjxgoBDAyo,9420
440
472
  django_cfg/apps/payments/admin/currency_admin.py,sha256=NrmwaYwANESvcsW1ENLCR0H-e_MiawLkIzgc3xZAJCY,3073
441
473
  django_cfg/apps/payments/admin/filters.py,sha256=YA3zP8gxVNb50ObmGV5YRBybn5Sih4crJi9zFqHBSGs,7379
442
474
  django_cfg/apps/payments/admin/payment_actions.py,sha256=oAUtmRxJZVFktXmFUxDGfwVy0dxdbR2lyH_EzghhKtM,1677
443
- django_cfg/apps/payments/admin/payment_admin.py,sha256=kKrWp9k_xVxq68_CEwLXPVkJzF-qb8TGnSuna32Uvhw,9699
475
+ django_cfg/apps/payments/admin/payment_admin.py,sha256=Mq2PId7W3WhZu-3oBUDvR_KNE4hab8WnndEVNhEnxSo,8979
444
476
  django_cfg/apps/payments/admin/withdrawal_actions.py,sha256=Hhv6FXZfGAUTVmoWkmRLNOWTWK9e2X03rZtrGuZs02s,1873
445
- django_cfg/apps/payments/admin/withdrawal_admin.py,sha256=OelLCqdt61chNO1hKNto1ksyUcsWS75yz0T2GXSpqFE,10483
477
+ django_cfg/apps/payments/admin/withdrawal_admin.py,sha256=4CXq3p-Jl_90CiaqNPN8w7Fi3hRk15cQ4R6Es3l0qSM,9330
446
478
  django_cfg/apps/payments/api/__init__.py,sha256=GxB5Tn-W_Sr1Ki7OcCE6iq61or9ELOVMpLmd1nmni3w,78
447
479
  django_cfg/apps/payments/api/serializers.py,sha256=zjxIfekOJMJ5bEjeo_6Jc2YMHMQxMBshQlOb9rP-XOA,6640
448
480
  django_cfg/apps/payments/api/urls.py,sha256=TVimVX_ba-0YnqzNeNn9DRDzppT9snNzmAcikp_um-I,1085
@@ -473,6 +505,40 @@ django_cfg/apps/payments/services/providers/nowpayments/__init__.py,sha256=_AMqc
473
505
  django_cfg/apps/payments/services/providers/nowpayments/config.py,sha256=JjrCOG8N7whBW_DWM6ObX54yqD2Bo3Z5MeBKbLfYR8g,3603
474
506
  django_cfg/apps/payments/services/providers/nowpayments/parser.py,sha256=cTuZKhfUPsyWMxOoMVIhmsH1tius3AzPYcnvZGb5KRs,6521
475
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
476
542
  django_cfg/apps/support/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
477
543
  django_cfg/apps/support/admin.py,sha256=rAxgGyOKV3e5ihRyruR0f9LCCtETDmnzsTHqqdZ7qXo,8756
478
544
  django_cfg/apps/support/admin_filters.py,sha256=ZpKtetRxppRAMwIr-pwDbXAyh7qouDfTCEZoo1YJfFs,2179
@@ -500,33 +566,6 @@ django_cfg/apps/support/views/__init__.py,sha256=0-6pYFqa2aDioxVImPt_-HHe4z_2x6N
500
566
  django_cfg/apps/support/views/admin.py,sha256=3bofdyoFWPhip0kia7WTFW_4y4-2FtOraOQSMElaemA,1585
501
567
  django_cfg/apps/support/views/api.py,sha256=8hHY-j6EZpSdYkT6JA8_yo7LJKPpSon3DVNWl6jfGRw,5506
502
568
  django_cfg/apps/support/views/chat.py,sha256=wbWR_UgvdgYBYlhHJBLJRPpVm7V44bNy5NZWHqBx2AE,3255
503
- django_cfg/apps/tasks/__init__.py,sha256=_k1_FJbPDmsKGXgaL6oFvZKj31u3uItDBR53kTUiuLM,1932
504
- django_cfg/apps/tasks/apps.py,sha256=jcl4NO8t37_RNHyaCh2GJXXlZqYIMLwpiAY26lnMO8M,459
505
- django_cfg/apps/tasks/urls.py,sha256=4KA6on-Hii-4mQLJaSQ58iPrYBZL4apSsvksLbyhzWU,344
506
- django_cfg/apps/tasks/admin/__init__.py,sha256=h4Hx8VGvbohLLS6nt0OFE7mi0JBx1pHA0lbjjcaXPgU,106
507
- django_cfg/apps/tasks/admin/config.py,sha256=SZ4gh2omc5sPEa3VLz7ewUjV-_O4qPFgHe_e0AkEm9c,2161
508
- django_cfg/apps/tasks/admin/task_log.py,sha256=H7gv8k7J_1rd31jmbMU6TKuDkzH_mx2beNbju--VycQ,8255
509
- django_cfg/apps/tasks/filters/__init__.py,sha256=9H6dh9ryI_zJ0_tPENjsSS2V3Mx8MMcWze8hyHokfhc,151
510
- django_cfg/apps/tasks/filters/task_log.py,sha256=BY67R3jyzHR6XdhNty8gjGmLTC5VDTx2_tGeGODOJXE,4929
511
- django_cfg/apps/tasks/migrations/0001_initial.py,sha256=dVbEPP7umgjsJsubxaTYsrDq7dvwv2xf6_K8hfju-lE,7367
512
- django_cfg/apps/tasks/migrations/0002_delete_tasklog.py,sha256=HW1ovU2mwvUXPhrVFaRorJW-rC-SlBNT0qUg6hG6vPY,283
513
- django_cfg/apps/tasks/migrations/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
514
- django_cfg/apps/tasks/models/__init__.py,sha256=4tvTev7IYkcjBrll3eLUFLJCDNlyG9c_863qoe_Fzu0,72
515
- django_cfg/apps/tasks/models/task_log.py,sha256=PxcQ7D3LNwQPy9IYLaBYL08buMHeakbmmXyr4Vgaqa0,7967
516
- django_cfg/apps/tasks/serializers/__init__.py,sha256=VcsKMRI4fOE1zajh-IOC0X5NwK2e5ytFh18w-43lXl0,675
517
- django_cfg/apps/tasks/serializers/task_log.py,sha256=XEjWsnojxN2j55PYyoDw1KfXhb_-Ng8VnCeSJJDaL8w,7777
518
- django_cfg/apps/tasks/services/__init__.py,sha256=VRFnirt868_jFvCzvLD3vLNa2HFi4zqFQFXQG9Nm4Kg,268
519
- django_cfg/apps/tasks/services/config_helper.py,sha256=-Iv7EK1fNAydlk6IzvOFvk4TRBBp9IngYBt7tmansRI,1447
520
- django_cfg/apps/tasks/services/sync.py,sha256=wA-gRvqRsElfdP9XD6PosQIwOOJQwy6dUtQbIlb2W2o,5783
521
- django_cfg/apps/tasks/services/client/__init__.py,sha256=pQ6eJPbdj8P9q7qq4XcxtAgEisXjVrT1KTdoqHI5zMI,135
522
- django_cfg/apps/tasks/services/client/client.py,sha256=je4j4Yw0v3fR1PijajoAptAbP7Zx06yAykV21MxAMlQ,6437
523
- django_cfg/apps/tasks/views/__init__.py,sha256=nfwn_GtoZ-H83YeL2BvhWYn9VdBjPM3QiNIivzLiKUw,151
524
- django_cfg/apps/tasks/views/task_log.py,sha256=cyywdhBaLgEFpwc9YaxQSU7or1whSTfDnXA7l8P5iq8,1312
525
- django_cfg/apps/tasks/views/task_log_base.py,sha256=MJ1UzSpYzV75KyQBVSUHyQ0ejYe91h3douXt2osCPf8,1499
526
- django_cfg/apps/tasks/views/task_log_overview.py,sha256=ch7nPu6k9JCDOUh7Z8TQXGrqLGT1X6m-n9HhHFF32yY,3291
527
- django_cfg/apps/tasks/views/task_log_related.py,sha256=mXtDfzfkNpNc2vYPKRV9zNGlsOPV2MOx-xwj1-a6yik,1194
528
- django_cfg/apps/tasks/views/task_log_stats.py,sha256=UhoXFmIsb6utWIuighLuPnFjWcz0BPbkKCCfvHYJyrQ,3046
529
- django_cfg/apps/tasks/views/task_log_timeline.py,sha256=8tTAGNAbKseLmljx6SSr-ATDHuvnUZYQlcG51Wk73fs,2710
530
569
  django_cfg/cli/README.md,sha256=-fZmNv8OUc1OAwwiDnhkUmhTVhEEXX7CXwJQlSRwgQ8,2118
531
570
  django_cfg/cli/__init__.py,sha256=i3ksFngCqZCBvaimQcBD1P2_gr5PiM--4efLScCjvvU,152
532
571
  django_cfg/cli/main.py,sha256=GOmMubPoMpcA0XcRJn4VG2cX9tuhE0i_ioy_d3ujzRQ,883
@@ -542,16 +581,16 @@ django_cfg/core/validation.py,sha256=QmwGlNDa0MFG2OUmgykIUAaEotT55YNh-wAWSVxOAos
542
581
  django_cfg/core/backends/__init__.py,sha256=5Qfza7oKQ8_UIHOs4ibhYvwtgAjngUqLrlwjKl_q124,38
543
582
  django_cfg/core/backends/smtp.py,sha256=kWkNMG7UwLsHcFYSKRgrk1HbP9mU1fxzWYnalHXqoL8,2308
544
583
  django_cfg/core/base/__init__.py,sha256=Z3bZvxejxk4vvWqmqTBLUi9XJpo6A_5Bq4R0J8q81Y4,116
545
- django_cfg/core/base/config_model.py,sha256=fnmvjOs2fHTb8ifjFv0EsbVPFScG87ExikIqVAqpDZc,21810
584
+ django_cfg/core/base/config_model.py,sha256=vcADfj1dFIenIRf9fBynShG1cO0VIRQII8oSZKXrEjE,21513
546
585
  django_cfg/core/builders/__init__.py,sha256=jkInI7_jbxcjitapohw6QmbJPpacnnID6V1JovqtOFM,282
547
- django_cfg/core/builders/apps_builder.py,sha256=1C7M3Uq4aScuz4syuNGHyl3USus1h_FgULPfzKAerak,6810
586
+ django_cfg/core/builders/apps_builder.py,sha256=7wk_BDD8MgNNSAmI7UCj2SkwCMMbo_WuXYdN4NBv91E,6643
548
587
  django_cfg/core/builders/middleware_builder.py,sha256=OwqQRoJKYWlXsQNPFBfUvVMYdppUHCPw-UDczV_esYg,3101
549
588
  django_cfg/core/builders/security_builder.py,sha256=W8Lk9eTMi3PuNK5qH-BIHegeE0cbvmuHKTumLcwOAh8,23961
550
589
  django_cfg/core/environment/__init__.py,sha256=sMOIe9z1i51j8B1VGjpLHJMaeDsBfsgn1TmL03FIeNo,141
551
590
  django_cfg/core/environment/detector.py,sha256=bI9k4fdK8Nbfl61ZcQ3yNbm3WlmK-L0xB-g-aXKUdhA,8923
552
591
  django_cfg/core/generation/__init__.py,sha256=0cYgeQ5EDN6sscQuFnXsFCy6m1BKgv_izNz0a1TlYSc,1355
553
592
  django_cfg/core/generation/generation.py,sha256=uLLJnJ_9kq8zV_auySK05dXwZB-BJx920mID0Pm4RCo,2524
554
- django_cfg/core/generation/orchestrator.py,sha256=GdR5HBjuDE4Rxzj8q6_mm24XbIJd7cORncHGYgCCwkI,12046
593
+ django_cfg/core/generation/orchestrator.py,sha256=h3VcyKMvHbgmufifYQG4ITQfB5t3_9sqNzTJcIr7YlU,12057
555
594
  django_cfg/core/generation/protocols.py,sha256=9pqGsZD_Y5v3jdYp4YdkL-i--8feuvX_iKXxV-Cc4Bg,676
556
595
  django_cfg/core/generation/core_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
557
596
  django_cfg/core/generation/core_generators/settings.py,sha256=Rto9qjqQC-MeQJMNyoflS91RrNDS_lBNH4d4ZtgER-8,2632
@@ -560,12 +599,12 @@ django_cfg/core/generation/core_generators/templates.py,sha256=XeGKzF790_zKwFdRw
560
599
  django_cfg/core/generation/data_generators/__init__.py,sha256=O7cmt_k34hWRgrdaAzCRPudcaowaOwMgaoXmZY8HG54,298
561
600
  django_cfg/core/generation/data_generators/cache.py,sha256=UvBmkmiUMPTaA5PDuOdMH1RgpvUz7xvX7jlWe4GUCsg,4920
562
601
  django_cfg/core/generation/data_generators/database.py,sha256=mYR2mBvqWU93YP9XUUVlcZaQJtSNeAQ7Dk4Vj6Tu95k,3481
563
- 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
564
603
  django_cfg/core/generation/integration_generators/api.py,sha256=Xsyu3mYyq9mje8QGNSU0Yp4tLbtF0ckq4lEf_Rj5pLc,11062
565
- 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
605
+ django_cfg/core/generation/integration_generators/grpc_generator.py,sha256=UpeumEd7ASWiWUUTsyWu35scOP3kVz14CDIxyc4AszU,10423
566
606
  django_cfg/core/generation/integration_generators/sessions.py,sha256=GbRC72Gny4dzj7oTIrbuhYyvhCQBoWI-0GxB8ZHTrEU,1644
567
607
  django_cfg/core/generation/integration_generators/tailwind.py,sha256=YgiV5c-l0DDJnMKx6mWcUtH5zyMdewAJXjLDwmHrSuc,1208
568
- django_cfg/core/generation/integration_generators/tasks.py,sha256=fMbuIdjRenuZQ6rfco7imLzDbCdX4WEO1aLslBpxjTQ,2253
569
608
  django_cfg/core/generation/integration_generators/third_party.py,sha256=ef3sdpfDIf6B_dRuRjoIYc9rlqMYoKgTH4luFvjy9UM,3971
570
609
  django_cfg/core/generation/security_generators/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
571
610
  django_cfg/core/generation/security_generators/crypto_fields.py,sha256=CCNP4UxsSXMTRhB83KqAvtOyEGXb9qpooFg-gXwngYY,1980
@@ -585,7 +624,7 @@ django_cfg/core/integration/version_checker.py,sha256=VJo7CWjNjj_XYE2YqIWGSnxnos
585
624
  django_cfg/core/integration/display/__init__.py,sha256=8vvW7rdKEnPO9iVMHUazGmVCE0gwClsK10mDz6_FCt0,314
586
625
  django_cfg/core/integration/display/base.py,sha256=ElP8XtUGhtQm3LrSrLf-fgESi10G8EKevxku85nWyAU,5541
587
626
  django_cfg/core/integration/display/ngrok.py,sha256=IAuZzh1swfQwPl-wadVpooEvAqe085HYrTPSEGgYfr8,5899
588
- django_cfg/core/integration/display/startup.py,sha256=Ii29ic5ProXmgYgZJQuk7wkh2hjqCOnbqphnaUafGB0,34688
627
+ django_cfg/core/integration/display/startup.py,sha256=RaaetLTIVbStzIpAsHKSVJnp0fS5bf18bewotyQaJ98,34006
589
628
  django_cfg/core/services/__init__.py,sha256=Eb-F6qqQ-qkep1O-JkaT96IpuxxqtGdT_MIwGXafqSE,117
590
629
  django_cfg/core/services/config_service.py,sha256=leo6i6QDq25Bst8PIhBoRVIorPNupLHJub2IwhumAjo,3579
591
630
  django_cfg/core/state/__init__.py,sha256=0jAOD0WHpq_W8L5Gh2084D0V5nhb-RAB3t8Akr2SX8M,225
@@ -622,10 +661,11 @@ django_cfg/middleware/authentication.py,sha256=1deekm3lyAMJ2pK7Usd5q1FtUN1aDq_CG
622
661
  django_cfg/middleware/pagination.py,sha256=xnaFH1olDH_m4ecwpTTUyFWV6jKoF6IxJvagSZSJR0E,8603
623
662
  django_cfg/middleware/public_endpoints.py,sha256=p-VCjeu0k7B4OuQIe2OVUx7Onh9gsM2HweWcYNxEaRA,6775
624
663
  django_cfg/middleware/user_activity.py,sha256=bgftHXXeGBS-jCa8mLzTx4Gcz2fHTaQz_nbRCR5Yqio,5980
625
- django_cfg/mixins/__init__.py,sha256=1IErIlF4QWqt9VLFD8yoTiGWHobsDjLL6rqcEqMLbw4,211
664
+ django_cfg/mixins/__init__.py,sha256=3nJ5PySz233LJCKC5x5iqqh9P_C2n-KxNKxAEY5tVao,284
626
665
  django_cfg/mixins/admin_api.py,sha256=3GRfAty6YXGbZp4ZFsNFt1Gs_e5T4xBOLnRPoc5vaq0,1116
627
666
  django_cfg/mixins/client_api.py,sha256=KeGK_f2xR08l0ckGpMmXHHpVLDQ7SnSbZn4WP5bSsvI,1200
628
- 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
629
669
  django_cfg/models/api/__init__.py,sha256=VWkiYs38A7Tx5ZWePeBxL1lMiXKsonb5TQfoVRRCBac,605
630
670
  django_cfg/models/api/config.py,sha256=KzaDn2Ubc7SpZ_8xt6-Q-XxnZbf9Glu1xJhJWbAI--o,4455
631
671
  django_cfg/models/api/cors.py,sha256=kRDGD-HcCK39QhoyvKnn2yGcwzGFp2QIw50G7TNx78I,3467
@@ -637,17 +677,19 @@ django_cfg/models/api/drf/config.py,sha256=PXDfFtwcYh_QHG54FYLKynPhByT28fGr8hsCV
637
677
  django_cfg/models/api/drf/redoc.py,sha256=XNNWnMwkfIhtkCUt_KiPtc0-Nw0E3jvQOIjwcdie5a0,762
638
678
  django_cfg/models/api/drf/spectacular.py,sha256=UYBATiEY3qzx0IlTvCyhpymASO2Wej_j-gQsgL03Nec,5020
639
679
  django_cfg/models/api/drf/swagger.py,sha256=ku_eE7bWgHxjXD6Z2sEKSYE-bIzmZfAR0vQW9xqlG4Q,2127
680
+ django_cfg/models/api/grpc/__init__.py,sha256=-yX9qAaBalmaRj9f88lUzrAW55a2ghydHJvTEsZ8CNA,1510
681
+ django_cfg/models/api/grpc/config.py,sha256=YY0KKCzPiLxV3l-l7oXoKN-n-CbcH11Iala-s3A3bwI,9884
640
682
  django_cfg/models/base/__init__.py,sha256=f6sMVyd-YEFdLebmIKOOPviu1Ovn4BHGp7j7ZVNqFDo,271
641
683
  django_cfg/models/base/config.py,sha256=hfpf35yMR8oOE1J0SBPNNSBwXckK3F2-Iv0Vw6cNX4E,10114
642
684
  django_cfg/models/base/module.py,sha256=nxN1Y9J4l94kOfSXLQJ2eGgIGWTq8kyh7hUGvCQNyIs,2674
643
- django_cfg/models/django/__init__.py,sha256=J4VRl77vgXzfKcdUcX-sPxpBSOJ4qA-8RstPgJ5ChmA,511
685
+ django_cfg/models/django/__init__.py,sha256=inT3j1zEvsA_uKomx6MfNOdlIEAt_xWLZP1N5vkBOhA,493
644
686
  django_cfg/models/django/axes.py,sha256=-4nk2gSfpj7lNY5vnm_2jHVLz8VAKoEd9yF2TuCR8O8,5624
645
687
  django_cfg/models/django/constance.py,sha256=6x57bi40mDX0fKcKeQKgV2BO3WIVYPQllAchWsj4KvM,8847
646
688
  django_cfg/models/django/crypto_fields.py,sha256=OguITidM4Mp564p_gbsokeNCZxjL9hrK1Vw0McuA3yo,4700
647
- 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
648
690
  django_cfg/models/django/environment.py,sha256=lBCHBs1lphv9tlu1BCTfLZeH_kUame0p66A_BIjBY7M,9440
649
691
  django_cfg/models/django/openapi.py,sha256=avE3iapaCj8eyOqVUum_v2EExR3V-hwHrexqtXMHtTQ,3739
650
- django_cfg/models/django/revolution_legacy.py,sha256=Z4SPUS7QSv62EuPAeFFoXGEgqLmdXnVEr7Ofk1IDtVc,8918
692
+ django_cfg/models/django/revolution_legacy.py,sha256=kXKavMKjwge2xqKSckmuIWfWxkvn9aW4dXuXnlKzwSU,8918
651
693
  django_cfg/models/infrastructure/__init__.py,sha256=VdOapoHa_yPtme8dLEJsmOlmT2klGs8G62W5CES8e2E,369
652
694
  django_cfg/models/infrastructure/cache.py,sha256=-eN2GjDJo-4Ta6b4hamG-AuBHNEKoYK_LqVOt_fJvZE,12012
653
695
  django_cfg/models/infrastructure/logging.py,sha256=dbbDJ0hjJKigKKTmqKnh7hkLzmipm3_abp-whaK1lOY,10314
@@ -668,21 +710,17 @@ django_cfg/models/services/__init__.py,sha256=K3mit3rKumqC4XiCUU0BziZC3143j1SM9j
668
710
  django_cfg/models/services/base.py,sha256=q_QggR8i_6qoiIvbAubddCklpfjVfeLP3Bv2bsdT4BQ,1607
669
711
  django_cfg/models/services/email.py,sha256=JigMJaJA26MT_Euc4q_OfmZYJYzaGyHb0JXsNFOS0uY,5119
670
712
  django_cfg/models/services/telegram.py,sha256=wrMqOGZCp1KAxRmCn5oxMU0BMBgbzsQD6o0Fi_7kfIY,4810
671
- django_cfg/models/tasks/__init__.py,sha256=1cZH-P022je3FGSaus6kwxSzMAKBLkIetZ8qp4Dy46I,1228
672
- django_cfg/models/tasks/backends.py,sha256=r5VcuAxyyxqd5grpktEd-0yJNvSJu2jv0IBgrK32ENs,3369
673
- django_cfg/models/tasks/config.py,sha256=0Tc7O2mVQLc8IYXMm__cdeP0ytYn_NucL2xyA95wyT4,5892
674
- django_cfg/models/tasks/utils.py,sha256=9TEbdxgd0N_O2T_7GGwkyPeDg4H7tSKLHoHG_n8edqg,4459
675
713
  django_cfg/modules/__init__.py,sha256=Ip9WMpzImEwIAywpFwU056_v0O9oIGG7nCT1YSArxkw,316
676
- django_cfg/modules/base.py,sha256=Grmgxc5dvnAEM1sudWEWO4kv8L0Ks-y32nxTk2vwdjQ,6272
714
+ django_cfg/modules/base.py,sha256=HoGNleQkBLca-oxF-C7PyNoXPOgSiXGZG2gWcV3Qshs,6615
677
715
  django_cfg/modules/django_admin/__init__.py,sha256=0g5SJPtmMhM57MMZG4msvhKbgDTqabf5r95_EsQMQuY,3370
678
716
  django_cfg/modules/django_admin/apps.py,sha256=xJjgIRgS_I1ehyq7ZbFpZY_L4umRa5ZPQP3mf0alUaU,526
679
717
  django_cfg/modules/django_admin/base/__init__.py,sha256=tzre09bnD_SlS-pA30WzYZRxyvch7eLq3q0wLEcZOmc,118
680
- django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=xewt_ld40NntdjtZ-k-VwinhfDkIRk71nwu5DVDQzeQ,25364
718
+ django_cfg/modules/django_admin/base/pydantic_admin.py,sha256=mD8LWqRWZXiGO6QLVGmECsf-9UhvuJhmn4CMqzwVJBg,25382
681
719
  django_cfg/modules/django_admin/base/unfold_admin.py,sha256=iqpRWSkzW5HktXDuuG7G3J6RoIfW48dWPMJTa7Yk08g,729
682
720
  django_cfg/modules/django_admin/config/__init__.py,sha256=yhoZcTjgl40bDnaPe1MFdNLqYQj02cdE48aVrfGCmXU,968
683
721
  django_cfg/modules/django_admin/config/action_config.py,sha256=JjS01JxLT-FzUVq7RlKaB7L38wmVL8uibXO_iXZcljo,1668
684
722
  django_cfg/modules/django_admin/config/admin_config.py,sha256=L48YHLt-JyNyL-XOltqIZVh1ALoG4wXQsvi_WIbhuFw,5577
685
- 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
686
724
  django_cfg/modules/django_admin/config/documentation_config.py,sha256=lI_gMSWCtyKmdyttLNdgbg_zbGgrwXA-QoLxVOXJj9A,14189
687
725
  django_cfg/modules/django_admin/config/field_config.py,sha256=J-CTdhJFP0CLw8T0cOb1FvYwTPpdawv9qVam69QbO4s,12638
688
726
  django_cfg/modules/django_admin/config/fieldset_config.py,sha256=5BPUWO_HvS6YhPU_vqQPzRT2y3OIPrBCioFuer5-mrA,1249
@@ -702,14 +740,25 @@ django_cfg/modules/django_admin/templates/django_admin/documentation_block.html,
702
740
  django_cfg/modules/django_admin/templates/django_admin/markdown_docs_block.html,sha256=nO9oEyDYozYF-euaLzE0Cn_Yo_LGUlta-BsRgShDG10,1992
703
741
  django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_field.html,sha256=-Kd4twY0sav2M5x_0oDj8ElA7CBccToVHFiwGa2WF-w,2774
704
742
  django_cfg/modules/django_admin/templates/django_admin/widgets/encrypted_password.html,sha256=BdiM0CqRyBH1aHGf6iLSfSKOoADY5qaqetbC9AktzaI,2154
705
- django_cfg/modules/django_admin/utils/CODE_BLOCK_DOCS.md,sha256=rp5qMG-Ci30fIs6EyZctjEbhQwxfNq9e36B4CTZOnR0,9456
706
- django_cfg/modules/django_admin/utils/__init__.py,sha256=5V1Og6fpIpRqDIoqF7jYnBmPl9TjV5kByghzT6iOpPs,745
707
- django_cfg/modules/django_admin/utils/badges.py,sha256=eZ1UThdwvv2cHAIDc4vTrD5xAet7fmeb9h9yj4ZXJ-c,6328
743
+ django_cfg/modules/django_admin/utils/__init__.py,sha256=Y0c62CUe41GNsz6ibbYaj7rSOg5Cq8kHDUvAH4eySTo,1712
708
744
  django_cfg/modules/django_admin/utils/decorators.py,sha256=s4jTcgPklY4T4xjXsMHpShd71K_LzgKogem9JKBgNzk,8371
709
- django_cfg/modules/django_admin/utils/displays.py,sha256=f-FT1mD-X56X6xLDJ9FuCi4oz_UYirdLosYrXnJP3hI,7862
710
- django_cfg/modules/django_admin/utils/html_builder.py,sha256=E0ysbbImpZqSr7YFw3FYryG0jjJfffIOqFzefk-HMl8,14500
711
- django_cfg/modules/django_admin/utils/markdown_renderer.py,sha256=eMYde8cDo9y5CO5qNjy7juYe_OPpSpFB1-d84ylpbk4,14324
712
- django_cfg/modules/django_admin/utils/mermaid_plugin.py,sha256=37x_0FQE5IyR6TiaDZDrQQHeQmAsPtlZBnq5N8eAKqA,8889
745
+ django_cfg/modules/django_admin/utils/html_builder.py,sha256=Xm0U0kn02Et8Ml1c1AXAEFpPCvXeIerpiSnVcQbiMBs,2190
746
+ django_cfg/modules/django_admin/utils/badges/__init__.py,sha256=_S5uUxavLG0ouUWrsVqBF1CSLrcxWTb5GlRmTuev_l0,250
747
+ django_cfg/modules/django_admin/utils/badges/status_badges.py,sha256=kOShlu3MZv7kjhtpxPgub0t91CBMb8Mm3ZZvTMh_Gyo,6331
748
+ django_cfg/modules/django_admin/utils/displays/__init__.py,sha256=q0N2kForOp2IRhnMTmj2tJRx7P1ekTu425vHHZ63UI8,258
749
+ django_cfg/modules/django_admin/utils/displays/data_displays.py,sha256=NFy94qaJJER_BhXSifsAFKuHAZFVUDtbmTSGjLrRrGk,7864
750
+ django_cfg/modules/django_admin/utils/html/__init__.py,sha256=22_xZ2Mlec5U-eSRZw1T2j2eo2ahTTRana0VuDtX_zg,646
751
+ django_cfg/modules/django_admin/utils/html/badges.py,sha256=fAEW_4U44xcrbQg7wvk3bQb1BYUAp-nWCbDFm8WNBOw,1769
752
+ django_cfg/modules/django_admin/utils/html/base.py,sha256=HWhGTRy1pXFcK2v2Gds7psFDze1S-GS89HDlrmWLq3M,5302
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=KrlRDdpKGosw9tUhGeS1Q7V86gCxYpKv4kGUS2R7jzg,7356
755
+ django_cfg/modules/django_admin/utils/html/formatting.py,sha256=EeSHyObFGPr2Ie6KbySE8WBQtqUFT_BQfXf0oucigIU,8613
756
+ django_cfg/modules/django_admin/utils/html/keyvalue.py,sha256=cBw2RPE3J_3kENYSYNxpm8eY56bwp5yityxBl6N4_q8,7299
757
+ django_cfg/modules/django_admin/utils/html/markdown_integration.py,sha256=r28EyVtma9YfCnSoDDbBthWrZtT9LVmhcXSwe4OG4Ws,3372
758
+ django_cfg/modules/django_admin/utils/html/progress.py,sha256=gAqvZd4bLw7CRJf4f_5UbHHkEzIJrGj_2Ygn8SdNLBk,4348
759
+ django_cfg/modules/django_admin/utils/markdown/__init__.py,sha256=2wA0orNx13WBAy26yJ8d88FGFWDiuu9pmO0ZIdey7To,419
760
+ django_cfg/modules/django_admin/utils/markdown/mermaid_plugin.py,sha256=37x_0FQE5IyR6TiaDZDrQQHeQmAsPtlZBnq5N8eAKqA,8889
761
+ django_cfg/modules/django_admin/utils/markdown/renderer.py,sha256=eMYde8cDo9y5CO5qNjy7juYe_OPpSpFB1-d84ylpbk4,14324
713
762
  django_cfg/modules/django_admin/widgets/__init__.py,sha256=SVVytNURG_TlWePwhws9FYeDe_xp4Ob_CYVA88Y08es,256
714
763
  django_cfg/modules/django_admin/widgets/encrypted_field_widget.py,sha256=h4bSAI2sLjKuBFDufWhtQQQ-eMIAqUzsUezi1p0ERuM,2146
715
764
  django_cfg/modules/django_admin/widgets/registry.py,sha256=P2kQiB3eYXhjRiCXlcImHAoCDyQjZNNoF_-FyQyBZ1w,6864
@@ -951,12 +1000,6 @@ django_cfg/modules/django_ngrok/service.py,sha256=Xkh9Gl6Rth32UcT0UYjD0ckROHFw6F
951
1000
  django_cfg/modules/django_ngrok/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
952
1001
  django_cfg/modules/django_ngrok/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
953
1002
  django_cfg/modules/django_ngrok/management/commands/runserver_ngrok.py,sha256=urwO1nPjcBMPn7k8WXBzfWQpjzCsIKaiET2Gf5afYwk,6259
954
- django_cfg/modules/django_q2/README.md,sha256=pyY0EqefXTJ47k_liMv22d0zx-9dHVPGFUSZS3aLQjE,4763
955
- django_cfg/modules/django_q2/__init__.py,sha256=6Eu26O-4ddwE8qO27pTT6x13-iPc9eA2Pzq8_cRHZMc,186
956
- django_cfg/modules/django_q2/apps.py,sha256=UoSbow-Wlkwriem5mEud1vrUD7_TnqANMzoajGLBVQs,3396
957
- django_cfg/modules/django_q2/management/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
958
- django_cfg/modules/django_q2/management/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
959
- django_cfg/modules/django_q2/management/commands/sync_django_q_schedules.py,sha256=ik_4kmKp9RUTOaxewWK6KgwK_1_1wJcVZQ2LAdSG0Lo,2671
960
1003
  django_cfg/modules/django_tailwind/README.md,sha256=tPQd4ir79MLFSVUKBGfPAF22LZWE0BcmzcNdQhJ4k7I,10804
961
1004
  django_cfg/modules/django_tailwind/__init__.py,sha256=K0GbFxjemNixRUgexurSTDfN4kB--TmuFCk9n5DbLYc,186
962
1005
  django_cfg/modules/django_tailwind/apps.py,sha256=CKNd0xDoLaQpe7SEfay0ZtWkjLUVRgofkB8FobKLXV8,313
@@ -995,7 +1038,7 @@ django_cfg/modules/django_twilio/templates/guide.md,sha256=nZfwx-sgWyK5NApm93zOe
995
1038
  django_cfg/modules/django_twilio/templates/sendgrid_otp_email.html,sha256=sXR6_D9hmOFfk9CrfPizpLddVhkRirBWpZd_ioEsxVk,6671
996
1039
  django_cfg/modules/django_twilio/templates/sendgrid_test_data.json,sha256=fh1VyuSiDELHsS_CIz9gp7tlsMAEjaDOoqbAPSZ3yyo,339
997
1040
  django_cfg/modules/django_unfold/__init__.py,sha256=Uquez6xgPUIc8FBMP7qif-adRYQSjQ2dBHxnJPom3eQ,1337
998
- django_cfg/modules/django_unfold/navigation.py,sha256=MqMA7-sfQpaH3T8V3eI0fJY1gPKd5AVx1eJenqwJWNg,14428
1041
+ django_cfg/modules/django_unfold/navigation.py,sha256=cPX9speejarL488CyAfBLkNHJnRbtV5hiQN7a2X8brI,14484
999
1042
  django_cfg/modules/django_unfold/system_monitor.py,sha256=KcrTa5irstdB1pDKe3sC0zl4tz9LVjhp7xvbqUM4YVk,6781
1000
1043
  django_cfg/modules/django_unfold/tailwind.py,sha256=NY8nWcUdQw61oNmjPoPl7agcTb-r5IqcpFYy35MNsTM,9107
1001
1044
  django_cfg/modules/django_unfold/utils.py,sha256=5aFaceRc9B3eXfpOVyKRD2wWqFt8KcHxjQg54oD7Oyg,4482
@@ -1012,9 +1055,9 @@ django_cfg/modules/nextjs_admin/models/config.py,sha256=75iM81aaTlDQdhfvdlCzj6o9
1012
1055
  django_cfg/modules/nextjs_admin/templatetags/__init__.py,sha256=ChVBnJggCIY8rMhfyJFoA8k0qKo-8FtJknrk54Vx4wM,51
1013
1056
  django_cfg/modules/nextjs_admin/templatetags/nextjs_admin.py,sha256=aAekrlu3pvvx3I4uJGT3S2ie8QfF94umDBjgAF71EII,4483
1014
1057
  django_cfg/registry/__init__.py,sha256=CaiL9KwqPzXlIe5-4Qr7PQu5ZxAW1HtuDIXZ7-ktRQg,538
1015
- django_cfg/registry/core.py,sha256=LqqmWwaOo-0KivPD61yolBwxxigvKARZflOv6rLAcHM,3546
1058
+ django_cfg/registry/core.py,sha256=oHFEmCZDkPNP184mVKVKqD36nN0mJFrLc2q8MWbfSfk,3439
1016
1059
  django_cfg/registry/exceptions.py,sha256=b4pIakeRxhT1-ST3lbAnmAQaASRBARCoah_w6vb3VF0,399
1017
- django_cfg/registry/modules.py,sha256=DC9veh6DdnqOa_KPNwDhnxvvNKRNF0Um2isHn1XGoxU,1915
1060
+ django_cfg/registry/modules.py,sha256=OXQ9Ls7KM28kmW2yjT_xPNA_3BsDQyXJFxCmmQpzL7s,2220
1018
1061
  django_cfg/registry/services.py,sha256=l0V2twGpF9BwVlo-TTfFu8dV7GVBS7XKCsScIZXWWbc,2457
1019
1062
  django_cfg/registry/third_party.py,sha256=YPcj0IsxEmh_gpJAcPvIFa21ZWnoFjcreHlXtS4UR-I,2239
1020
1063
  django_cfg/routing/__init__.py,sha256=94No0CWltLJJvKDwqFfKU5CHo_S1OynghWqpx7PsyBY,272
@@ -1035,7 +1078,7 @@ django_cfg/static/admin/js/alpine/commands-section.js,sha256=8z2MQNwZF9Tx_2EK1AY
1035
1078
  django_cfg/static/admin/js/alpine/dashboard-tabs.js,sha256=ob8Q_I9lFLDv_hFERXgTyvqMDBspAGfzCxI_7slRur4,1354
1036
1079
  django_cfg/static/admin/js/alpine/system-metrics.js,sha256=m-Fg55K_vpHXToD46PXL9twl4OBF_V9MONvbSWbQqDw,440
1037
1080
  django_cfg/static/admin/js/alpine/toggle-section.js,sha256=T141NFmy0fRJyGGuuaCJRjJXwPam-xxtQNW1hi8BJbc,672
1038
- django_cfg/static/frontend/admin.zip,sha256=3ezv0j07V1jtVJA3wjxwr1T6Z4XoA3xRhRIFOAZCOm8,7647333
1081
+ django_cfg/static/frontend/admin.zip,sha256=6kj31ET88jIKeZRi5__JGr8wxBZGCHPPfef0G6R-SP8,7679198
1039
1082
  django_cfg/static/js/api-loader.mjs,sha256=boGqqRGnFR-Mzo_RQOjhAzNvsb7QxZddSwMKROzkk9Q,5163
1040
1083
  django_cfg/static/js/api/base.mjs,sha256=KUxZHHdELAV8mNnACpwJRvaQhdJxp-n5LFEQ4oUZxBo,4707
1041
1084
  django_cfg/static/js/api/index.mjs,sha256=_-Q04jjHcgwi4CGfiaLyiOR6NW7Yu1HBhJWp2J1cjpc,2538
@@ -1058,11 +1101,12 @@ django_cfg/static/js/api/tasks/client.mjs,sha256=tIy8K-finXzTUL9kOo_L4Q1kchDaHyu
1058
1101
  django_cfg/static/js/api/tasks/index.mjs,sha256=yCY1GzdD-RtFZ3pAfk1l0msgO1epyo0lsGCjH0g1Afc,294
1059
1102
  django_cfg/templates/__init__.py,sha256=IzLjt-a7VIJ0OutmAE1_-w0_LpL2u0MgGpnIabjZuW8,19
1060
1103
  django_cfg/templates/admin/DUAL_TAB_ARCHITECTURE.md,sha256=CL8E3K4rFpXeQiNgrYSMvCW1y-eFaoXxxsI58zPf9dY,17562
1061
- 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
1062
1106
  django_cfg/templates/emails/base_email.html,sha256=TWcvYa2IHShlF_E8jf1bWZStRO0v8G4L_GexPxvz6XQ,8836
1063
1107
  django_cfg/templates/unfold/layouts/skeleton.html,sha256=2ArkcNZ34mFs30cOAsTQ1EZiDXcB0aVxkO71lJq9SLE,718
1064
1108
  django_cfg/templatetags/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
1065
- django_cfg/templatetags/django_cfg.py,sha256=65idOLq0uTSY2iKOwfRKFw28RdXEg2h_0zdD4JB_s7s,10698
1109
+ django_cfg/templatetags/django_cfg.py,sha256=7vAxJ56vggN9ZEFmV_pUNhSiWjX2nF_4IhaC0Mp82hI,12429
1066
1110
  django_cfg/utils/__init__.py,sha256=64wwXJuXytvwt8Ze_erSR2HmV07nGWJ6DV5wloRBvYE,435
1067
1111
  django_cfg/utils/path_resolution.py,sha256=2n0I04lQkSssFaELu3A93YyMAl1K10KPdpxMt5k4Iy0,13341
1068
1112
  django_cfg/utils/smart_defaults.py,sha256=ZUj6K_Deq-fp5O0Dy_Emt257UWFn0f9bkgFv9YCR58U,9239
@@ -1070,9 +1114,9 @@ django_cfg/utils/version_check.py,sha256=WO51J2m2e-wVqWCRwbultEwu3q1lQasV67Mw2aa
1070
1114
  django_cfg/CHANGELOG.md,sha256=jtT3EprqEJkqSUh7IraP73vQ8PmKUMdRtznQsEnqDZk,2052
1071
1115
  django_cfg/CONTRIBUTING.md,sha256=DU2kyQ6PU0Z24ob7O_OqKWEYHcZmJDgzw-lQCmu6uBg,3041
1072
1116
  django_cfg/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1073
- django_cfg/pyproject.toml,sha256=620u5Gcr1JnM0aTc2dDPlLe4epX8WqX5tLTogwr_CrE,8665
1074
- django_cfg-1.4.120.dist-info/METADATA,sha256=3deYIU64Wm0FWERqzn5Q8ICvGOqOVsC68azVQtUww1k,23876
1075
- django_cfg-1.4.120.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
1076
- django_cfg-1.4.120.dist-info/entry_points.txt,sha256=Ucmde4Z2wEzgb4AggxxZ0zaYDb9HpyE5blM3uJ0_VNg,56
1077
- django_cfg-1.4.120.dist-info/licenses/LICENSE,sha256=xHuytiUkSZCRG3N11nk1X6q1_EGQtv6aL5O9cqNRhKE,1071
1078
- django_cfg-1.4.120.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
- )