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,209 +0,0 @@
1
- """
2
- Main task configuration models.
3
-
4
- Contains TaskConfig class (main entry point) and related enums.
5
- Size: ~250 lines (focused on main configuration)
6
- """
7
-
8
- import logging
9
- import os
10
- from enum import Enum
11
- from typing import Any, Dict, List, Optional
12
-
13
- from pydantic import BaseModel, Field, field_validator
14
-
15
- from django_cfg.models.base import BaseCfgAutoModule
16
-
17
- logger = logging.getLogger(__name__)
18
-
19
-
20
- class TaskBackend(str, Enum):
21
- """Supported task backends."""
22
- REARQ = "rearq"
23
-
24
-
25
- class QueuePriority(str, Enum):
26
- """Standard queue priorities."""
27
- CRITICAL = "critical"
28
- HIGH = "high"
29
- DEFAULT = "default"
30
- LOW = "low"
31
- BACKGROUND = "background"
32
-
33
-
34
- class TaskConfig(BaseModel, BaseCfgAutoModule):
35
- """
36
- High-level task system configuration.
37
-
38
- Main entry point for configuring background task processing in Django-CFG.
39
- Provides environment-aware defaults and automatic Redis integration.
40
-
41
- Example:
42
- ```python
43
- from django_cfg.models.tasks import TaskConfig
44
-
45
- tasks = TaskConfig(
46
- enabled=True,
47
- backend=TaskBackend.DRAMATIQ,
48
- )
49
- ```
50
- """
51
-
52
- # === Core Settings ===
53
- enabled: bool = Field(
54
- default=True,
55
- description="Enable background task processing"
56
- )
57
- backend: TaskBackend = Field(
58
- default=TaskBackend.REARQ,
59
- description="Task processing backend"
60
- )
61
-
62
- def __init__(self, **data):
63
- """Initialize TaskConfig with BaseCfgAutoModule support."""
64
- super().__init__(**data)
65
- # Initialize _config attribute for BaseCfgAutoModule
66
- self._config = None
67
-
68
- # === Backend-Specific Configuration ===
69
- rearq: 'RearqConfig' = Field(
70
- default_factory=lambda: None,
71
- description="ReArq-specific configuration"
72
- )
73
-
74
- def model_post_init(self, __context: Any) -> None:
75
- """Initialize backend configs with defaults after model creation."""
76
- if self.rearq is None:
77
- from .backends import RearqConfig
78
- self.rearq = RearqConfig()
79
-
80
- # === Environment-Specific Overrides ===
81
- dev_processes: Optional[int] = Field(
82
- default=2,
83
- description="Number of processes in development environment"
84
- )
85
- prod_processes: Optional[int] = Field(
86
- default=None,
87
- description="Number of processes in production environment"
88
- )
89
-
90
- # === Auto-Configuration ===
91
- auto_discover_tasks: bool = Field(
92
- default=True,
93
- description="Automatically discover tasks in Django apps"
94
- )
95
- task_modules: List[str] = Field(
96
- default=["tasks"],
97
- description="Module names to search for tasks"
98
- )
99
-
100
- @field_validator("enabled")
101
- @classmethod
102
- def validate_enabled_with_environment(cls, v: bool) -> bool:
103
- """Validate task system can be enabled in current environment."""
104
- if v:
105
- # Check if we're in a test environment
106
- if os.getenv("DJANGO_SETTINGS_MODULE", "").endswith("test"):
107
- logger.info("Task system disabled in test environment")
108
- return False
109
-
110
- # Additional environment checks can be added here
111
- # For example, checking if Redis is available
112
-
113
- return v
114
-
115
- def to_django_settings(self) -> Dict[str, Any]:
116
- """
117
- Generate Django settings for task system.
118
-
119
- Returns:
120
- Dictionary with task configuration for Django settings
121
-
122
- Example:
123
- >>> config = TaskConfig()
124
- >>> settings = config.to_django_settings()
125
- >>> "REARQ_REDIS_URL" in settings
126
- True
127
- """
128
- if not self.enabled:
129
- return {}
130
-
131
- if self.backend == TaskBackend.REARQ:
132
- return self.rearq.to_django_settings()
133
-
134
- return {}
135
-
136
- def get_smart_defaults(self):
137
- """
138
- Get smart default configuration for this module.
139
-
140
- Returns:
141
- TaskConfig with smart defaults based on environment
142
- """
143
- from .utils import get_default_task_config
144
-
145
- config = self.get_config()
146
- debug = getattr(config, 'debug', False) if config else False
147
- return get_default_task_config(debug=debug)
148
-
149
- def get_module_config(self):
150
- """
151
- Get the final configuration for this module.
152
-
153
- Returns:
154
- Self (TaskConfig instance)
155
- """
156
- return self
157
-
158
- @classmethod
159
- def auto_initialize_if_needed(cls) -> Optional['TaskConfig']:
160
- """
161
- Auto-initialize TaskConfig if needed based on config flags.
162
-
163
- Returns:
164
- TaskConfig instance if should be initialized, None otherwise
165
-
166
- Example:
167
- >>> task_config = TaskConfig.auto_initialize_if_needed()
168
- >>> if task_config:
169
- ... print("Tasks enabled")
170
- """
171
- # Get config through BaseCfgModule
172
- from django_cfg.modules import BaseCfgModule
173
- base_module = BaseCfgModule()
174
- config = base_module.get_config()
175
-
176
- if not config:
177
- return None
178
-
179
- # Check if TaskConfig already exists
180
- if hasattr(config, 'tasks') and config.tasks is not None:
181
- # Set config reference and return existing
182
- config.tasks.set_config(config)
183
- return config.tasks
184
-
185
- # Check if tasks should be enabled
186
- if config.should_enable_tasks():
187
- # Auto-initialize with smart defaults
188
- task_config = cls().get_smart_defaults()
189
- task_config.set_config(config)
190
- config.tasks = task_config
191
-
192
- logger.info("🚀 Auto-initialized TaskConfig (enabled by knowbase/agents/tasks flags)")
193
-
194
- return task_config
195
-
196
- return None
197
-
198
-
199
- # Resolve forward references for Pydantic v2
200
- from .backends import RearqConfig
201
-
202
- TaskConfig.model_rebuild()
203
-
204
- __all__ = [
205
- "TaskConfig",
206
- "TaskBackend",
207
- "QueuePriority",
208
- "RearqConfig",
209
- ]
@@ -1,162 +0,0 @@
1
- """
2
- Task configuration utilities.
3
-
4
- Contains utility functions for task configuration:
5
- - Smart queue detection
6
- - Environment-aware defaults
7
- - Configuration validation
8
-
9
- Size: ~120 lines (focused on utilities)
10
- """
11
-
12
- import logging
13
- from typing import TYPE_CHECKING, List, Optional
14
-
15
- if TYPE_CHECKING:
16
- from .config import TaskConfig
17
-
18
- logger = logging.getLogger(__name__)
19
-
20
-
21
- def get_smart_queues(debug: bool = False) -> List[str]:
22
- """
23
- Get smart default queues based on enabled modules.
24
-
25
- Automatically detects which django-cfg modules are enabled and adds
26
- their corresponding queues to the default queue list.
27
-
28
- Args:
29
- debug: Whether running in debug mode (affects base queues)
30
-
31
- Returns:
32
- List of queue names appropriate for enabled modules
33
-
34
- Example:
35
- >>> queues = get_smart_queues(debug=True)
36
- >>> "default" in queues
37
- True
38
- """
39
- # Base queues
40
- if debug:
41
- base_queues = ["default"]
42
- else:
43
- base_queues = ["critical", "high", "default", "low", "background"]
44
-
45
- # Try to detect enabled modules and add their queues
46
- try:
47
- from django_cfg.modules.base import BaseCfgModule
48
- base_module = BaseCfgModule()
49
-
50
- # Check for knowbase module (requires "knowbase" queue)
51
- if base_module.is_knowbase_enabled():
52
- if "knowbase" not in base_queues:
53
- base_queues.append("knowbase")
54
-
55
- # Check for payments module (requires "payments" queue)
56
- if base_module.is_payments_enabled():
57
- if "payments" not in base_queues:
58
- base_queues.append("payments")
59
-
60
- # Check for agents module (may require "agents" queue in future)
61
- if base_module.is_agents_enabled():
62
- if "agents" not in base_queues:
63
- base_queues.append("agents")
64
-
65
- logger.info(f"🎯 Smart queue detection: {base_queues}")
66
-
67
- except Exception as e:
68
- logger.warning(f"Failed to auto-detect queues, using defaults: {e}")
69
-
70
- return base_queues
71
-
72
-
73
- def get_default_task_config(debug: bool = False) -> 'TaskConfig':
74
- """
75
- Get default task configuration based on environment.
76
-
77
- Creates a TaskConfig with sensible defaults for development or production.
78
-
79
- Args:
80
- debug: Whether in debug/development mode
81
-
82
- Returns:
83
- TaskConfig with environment-appropriate defaults
84
-
85
- Example:
86
- >>> config = get_default_task_config(debug=True)
87
- >>> config.rearq.max_jobs
88
- 10
89
- """
90
- from .backends import RearqConfig
91
- from .config import TaskConfig
92
-
93
- if debug:
94
- # Development defaults
95
- return TaskConfig(
96
- rearq=RearqConfig(
97
- redis_url="redis://localhost:6379/0",
98
- db_url="sqlite://./rearq.db",
99
- max_jobs=5,
100
- job_timeout=300,
101
- )
102
- )
103
- else:
104
- # Production defaults
105
- return TaskConfig(
106
- rearq=RearqConfig(
107
- redis_url="redis://localhost:6379/0",
108
- db_url="postgresql://localhost/rearq",
109
- max_jobs=20,
110
- job_timeout=600,
111
- )
112
- )
113
-
114
-
115
- def validate_task_config(config: 'TaskConfig', redis_url: Optional[str] = None) -> bool:
116
- """
117
- Validate task configuration and dependencies.
118
-
119
- Checks if the task configuration is valid and all required dependencies are available.
120
-
121
- Args:
122
- config: TaskConfig to validate
123
- redis_url: Optional Redis URL to validate
124
-
125
- Returns:
126
- True if configuration is valid, False otherwise
127
-
128
- Example:
129
- >>> config = get_default_task_config()
130
- >>> validate_task_config(config, "redis://localhost:6379/0")
131
- True
132
- """
133
- if not config.enabled:
134
- return True
135
-
136
- # Check Redis URL if provided
137
- if redis_url:
138
- try:
139
- from urllib.parse import urlparse
140
- parsed = urlparse(redis_url)
141
- if not parsed.scheme.startswith("redis"):
142
- logger.error(f"Invalid Redis URL scheme: {parsed.scheme}")
143
- return False
144
- except Exception as e:
145
- logger.error(f"Invalid Redis URL: {e}")
146
- return False
147
-
148
- # Check if ReArq is available
149
- try:
150
- import rearq
151
- except ImportError as e:
152
- logger.error(f"ReArq dependencies not available: {e}")
153
- return False
154
-
155
- return True
156
-
157
-
158
- __all__ = [
159
- "get_smart_queues",
160
- "get_default_task_config",
161
- "validate_task_config",
162
- ]