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,133 +0,0 @@
1
- """
2
- Django-Q2 settings generator for django-cfg.
3
-
4
- Generates django-q2 settings and handles INSTALLED_APPS integration.
5
- """
6
-
7
- from typing import TYPE_CHECKING, Any, Dict, Optional
8
-
9
- from django_cfg.modules.django_logging import logger
10
-
11
- if TYPE_CHECKING:
12
- from django_cfg.models.django.django_q import DjangoQ2Config
13
-
14
-
15
- class DjangoQ2SettingsGenerator:
16
- """
17
- Generates task scheduling settings for django-q2.
18
-
19
- Automatically:
20
- - Generates Q_CLUSTER configuration
21
- - Adds django_q to INSTALLED_APPS if enabled
22
- - Configures broker, workers, and task settings
23
- - Provides schedule management via Django ORM
24
-
25
- Django-Q2 vs django-crontab:
26
- - No need to run 'crontab add' - schedules in database
27
- - Built-in admin interface for monitoring
28
- - Support for both cron and interval scheduling
29
- - Task retries and hooks
30
- - Async task support
31
- """
32
-
33
- def __init__(self, config: "DjangoQ2Config", parent_config: Optional[Any] = None):
34
- """
35
- Initialize with Django-Q2 configuration.
36
-
37
- Args:
38
- config: DjangoQ2Config instance
39
- parent_config: Optional parent DjangoConfig for accessing redis_url
40
- """
41
- self.config = config
42
- self.parent_config = parent_config
43
-
44
- def generate(self) -> Dict[str, Any]:
45
- """
46
- Generate Django-Q2 settings.
47
-
48
- Returns:
49
- Dictionary with Q_CLUSTER configuration
50
- """
51
- if not self.config or not self.config.enabled:
52
- return {}
53
-
54
- settings = self.config.to_django_settings(parent_config=self.parent_config)
55
-
56
- # Log configuration
57
- logger.info(
58
- f"✓ Configured Django-Q2 task queue "
59
- f"[broker: {self.config.broker_class}, workers: {self.config.workers}]"
60
- )
61
-
62
- enabled_schedules = self.config.get_enabled_schedules()
63
- if enabled_schedules:
64
- logger.info(
65
- f"✓ Found {len(enabled_schedules)} scheduled task(s) "
66
- f"[use admin or management commands to create schedules]"
67
- )
68
-
69
- # Log individual schedules in debug mode
70
- for schedule in enabled_schedules:
71
- logger.debug(
72
- f" - {schedule.name}: {schedule.schedule_type} → "
73
- f"{schedule.command if schedule.command else schedule.func}"
74
- )
75
-
76
- logger.info(
77
- "📝 To create schedules: python manage.py qcluster "
78
- "or use Django admin at /admin/django_q/schedule/"
79
- )
80
-
81
- return settings
82
-
83
- def generate_schedule_creation_code(self) -> str:
84
- """
85
- Generate Python code to create schedules programmatically.
86
-
87
- Returns:
88
- Python code string for creating schedules
89
-
90
- Example:
91
- ```python
92
- code = generator.generate_schedule_creation_code()
93
- # Use in management command or startup script
94
- ```
95
- """
96
- if not self.config or not self.config.enabled:
97
- return ""
98
-
99
- enabled_schedules = self.config.get_enabled_schedules()
100
- if not enabled_schedules:
101
- return ""
102
-
103
- lines = [
104
- "# Auto-generated Django-Q2 schedule creation",
105
- "from django_q.models import Schedule",
106
- "",
107
- "# Create or update schedules",
108
- ]
109
-
110
- for schedule in enabled_schedules:
111
- schedule_dict = schedule.to_django_q_format()
112
-
113
- lines.append("")
114
- lines.append(f"# {schedule.name}")
115
- lines.append("Schedule.objects.update_or_create(")
116
- lines.append(f" name='{schedule.name}',")
117
- lines.append(" defaults={")
118
-
119
- for key, value in schedule_dict.items():
120
- if key == "name":
121
- continue
122
- if isinstance(value, str):
123
- lines.append(f" '{key}': '{value}',")
124
- else:
125
- lines.append(f" '{key}': {value},")
126
-
127
- lines.append(" }")
128
- lines.append(")")
129
-
130
- return "\n".join(lines)
131
-
132
-
133
- __all__ = ["DjangoQ2SettingsGenerator"]
@@ -1,88 +0,0 @@
1
- """
2
- Background tasks generator.
3
-
4
- Handles ReArq task queue configuration.
5
- Size: ~100 lines (focused on task processing)
6
- """
7
-
8
- import logging
9
- from typing import TYPE_CHECKING, Any, Dict
10
-
11
- if TYPE_CHECKING:
12
- from ...base.config_model import DjangoConfig
13
-
14
- logger = logging.getLogger(__name__)
15
-
16
-
17
- class TasksSettingsGenerator:
18
- """
19
- Generates background task processing settings.
20
-
21
- Responsibilities:
22
- - Configure ReArq task queue
23
- - Auto-detect if tasks should be enabled
24
- - Set up task configuration
25
-
26
- Example:
27
- ```python
28
- generator = TasksSettingsGenerator(config)
29
- settings = generator.generate()
30
- ```
31
- """
32
-
33
- def __init__(self, config: "DjangoConfig"):
34
- """
35
- Initialize generator with configuration.
36
-
37
- Args:
38
- config: DjangoConfig instance
39
- """
40
- self.config = config
41
-
42
- def generate(self) -> Dict[str, Any]:
43
- """
44
- Generate task processing settings.
45
-
46
- Returns:
47
- Dictionary with ReArq configuration
48
-
49
- Example:
50
- >>> generator = TasksSettingsGenerator(config)
51
- >>> settings = generator.generate()
52
- """
53
- # Check if tasks should be enabled
54
- if not self.config.should_enable_tasks():
55
- logger.debug("⏭️ Tasks disabled")
56
- return {}
57
-
58
- try:
59
- return self._generate_rearq_settings()
60
- except ImportError as e:
61
- logger.warning(f"Failed to import ReArq: {e}")
62
- return {}
63
- except Exception as e:
64
- logger.error(f"Failed to generate ReArq settings: {e}")
65
- return {}
66
-
67
- def _generate_rearq_settings(self) -> Dict[str, Any]:
68
- """
69
- Generate ReArq-specific settings.
70
-
71
- Returns:
72
- Dictionary with ReArq configuration
73
- """
74
- from django_cfg.models.tasks import TaskConfig
75
-
76
- # Auto-initialize TaskConfig if needed
77
- task_config = TaskConfig.auto_initialize_if_needed()
78
- if task_config is None:
79
- return {}
80
-
81
- # Generate settings via standard method
82
- settings = task_config.to_django_settings()
83
-
84
- logger.info("✅ ReArq tasks enabled")
85
- return settings
86
-
87
-
88
- __all__ = ["TasksSettingsGenerator"]