FlowerPower 0.20.0__py3-none-any.whl → 0.30.0__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.
- flowerpower/__init__.py +2 -6
- flowerpower/cfg/__init__.py +4 -11
- flowerpower/cfg/base.py +29 -25
- flowerpower/cfg/pipeline/__init__.py +3 -3
- flowerpower/cfg/pipeline/_schedule.py +32 -0
- flowerpower/cfg/pipeline/adapter.py +0 -5
- flowerpower/cfg/pipeline/builder.py +377 -0
- flowerpower/cfg/pipeline/run.py +89 -0
- flowerpower/cfg/project/__init__.py +8 -21
- flowerpower/cfg/project/adapter.py +0 -12
- flowerpower/cli/__init__.py +2 -28
- flowerpower/cli/pipeline.py +10 -4
- flowerpower/flowerpower.py +275 -585
- flowerpower/pipeline/base.py +19 -10
- flowerpower/pipeline/io.py +52 -46
- flowerpower/pipeline/manager.py +149 -91
- flowerpower/pipeline/pipeline.py +159 -87
- flowerpower/pipeline/registry.py +68 -33
- flowerpower/pipeline/visualizer.py +4 -4
- flowerpower/plugins/{_io → io}/__init__.py +1 -1
- flowerpower/settings/__init__.py +0 -2
- flowerpower/settings/{backend.py → _backend.py} +0 -19
- flowerpower/settings/logging.py +1 -1
- flowerpower/utils/logging.py +24 -12
- flowerpower/utils/misc.py +17 -0
- flowerpower-0.30.0.dist-info/METADATA +451 -0
- flowerpower-0.30.0.dist-info/RECORD +42 -0
- flowerpower/cfg/pipeline/schedule.py +0 -74
- flowerpower/cfg/project/job_queue.py +0 -111
- flowerpower/cli/job_queue.py +0 -1329
- flowerpower/cli/mqtt.py +0 -174
- flowerpower/job_queue/__init__.py +0 -205
- flowerpower/job_queue/base.py +0 -611
- flowerpower/job_queue/rq/__init__.py +0 -10
- flowerpower/job_queue/rq/_trigger.py +0 -37
- flowerpower/job_queue/rq/concurrent_workers/gevent_worker.py +0 -226
- flowerpower/job_queue/rq/concurrent_workers/thread_worker.py +0 -228
- flowerpower/job_queue/rq/manager.py +0 -1893
- flowerpower/job_queue/rq/setup.py +0 -154
- flowerpower/job_queue/rq/utils.py +0 -69
- flowerpower/mqtt.py +0 -12
- flowerpower/plugins/mqtt/__init__.py +0 -12
- flowerpower/plugins/mqtt/cfg.py +0 -17
- flowerpower/plugins/mqtt/manager.py +0 -962
- flowerpower/settings/job_queue.py +0 -31
- flowerpower-0.20.0.dist-info/METADATA +0 -693
- flowerpower-0.20.0.dist-info/RECORD +0 -58
- {flowerpower-0.20.0.dist-info → flowerpower-0.30.0.dist-info}/WHEEL +0 -0
- {flowerpower-0.20.0.dist-info → flowerpower-0.30.0.dist-info}/entry_points.txt +0 -0
- {flowerpower-0.20.0.dist-info → flowerpower-0.30.0.dist-info}/licenses/LICENSE +0 -0
- {flowerpower-0.20.0.dist-info → flowerpower-0.30.0.dist-info}/top_level.txt +0 -0
@@ -1,111 +0,0 @@
|
|
1
|
-
import os
|
2
|
-
|
3
|
-
import msgspec
|
4
|
-
|
5
|
-
from ... import settings
|
6
|
-
from ...settings.backend import BACKEND_PROPERTIES
|
7
|
-
from ..base import BaseConfig
|
8
|
-
|
9
|
-
|
10
|
-
class JobQueueBackendConfig(BaseConfig):
|
11
|
-
"""
|
12
|
-
Job Queue backend configuration for FlowerPower.
|
13
|
-
Inherits from BaseConfig and adapts Redis logic.
|
14
|
-
"""
|
15
|
-
|
16
|
-
type: str | None = msgspec.field(default=None)
|
17
|
-
uri: str | None = msgspec.field(default=None)
|
18
|
-
username: str | None = msgspec.field(default=None)
|
19
|
-
password: str | None = msgspec.field(default=None)
|
20
|
-
host: str | None = msgspec.field(default=None)
|
21
|
-
port: int | None = msgspec.field(default=None)
|
22
|
-
database: int | None = msgspec.field(default=None)
|
23
|
-
ssl: bool = msgspec.field(default=False)
|
24
|
-
cert_file: str | None = msgspec.field(default=None)
|
25
|
-
key_file: str | None = msgspec.field(default=None)
|
26
|
-
ca_file: str | None = msgspec.field(default=None)
|
27
|
-
verify_ssl: bool = msgspec.field(default=False)
|
28
|
-
|
29
|
-
|
30
|
-
class RQBackendConfig(JobQueueBackendConfig):
|
31
|
-
type: str = msgspec.field(default="redis")
|
32
|
-
username: str | None = msgspec.field(default=settings.RQ_BACKEND_USERNAME)
|
33
|
-
password: str | None = msgspec.field(default=settings.RQ_BACKEND_PASSWORD)
|
34
|
-
host: str = msgspec.field(default=settings.RQ_BACKEND_HOST)
|
35
|
-
port: int = msgspec.field(default=settings.RQ_BACKEND_PORT)
|
36
|
-
database: int = msgspec.field(default=settings.RQ_BACKEND_DB)
|
37
|
-
queues: str | list[str] = msgspec.field(default_factory=lambda: settings.RQ_QUEUES)
|
38
|
-
# num_workers: int = msgspec.field(default=settings.RQ_NUM_WORKERS) # int in seconds
|
39
|
-
|
40
|
-
def update_from_settings(self):
|
41
|
-
if self.host == BACKEND_PROPERTIES[self.type]["default_host"]:
|
42
|
-
self.host = settings.RQ_BACKEND_HOST
|
43
|
-
if self.port == BACKEND_PROPERTIES[self.type]["default_port"]:
|
44
|
-
self.port = settings.RQ_BACKEND_PORT
|
45
|
-
if self.database == BACKEND_PROPERTIES[self.type]["default_database"]:
|
46
|
-
self.database = settings.RQ_BACKEND_DB
|
47
|
-
if self.username == BACKEND_PROPERTIES[self.type]["default_username"]:
|
48
|
-
self.username = settings.RQ_BACKEND_USERNAME
|
49
|
-
if self.password == BACKEND_PROPERTIES[self.type]["default_password"]:
|
50
|
-
self.password = settings.RQ_BACKEND_PASSWORD
|
51
|
-
|
52
|
-
def update_from_env(self):
|
53
|
-
if os.getenv("FP_RQ_BACKEND") is not None:
|
54
|
-
settings.RQ_BACKEND = os.getenv("FP_RQ_BACKEND")
|
55
|
-
if os.getenv("FP_RQ_BACKEND_USERNAME") is not None:
|
56
|
-
settings.RQ_BACKEND_USERNAME = os.getenv("FP_RQ_BACKEND_USERNAME")
|
57
|
-
if os.getenv("FP_RQ_BACKEND_PASSWORD") is not None:
|
58
|
-
settings.RQ_BACKEND_PASSWORD = os.getenv("FP_RQ_BACKEND_PASSWORD")
|
59
|
-
if os.getenv("FP_RQ_BACKEND_HOST") is not None:
|
60
|
-
settings.RQ_BACKEND_HOST = os.getenv("FP_RQ_BACKEND_HOST")
|
61
|
-
if os.getenv("FP_RQ_BACKEND_PORT") is not None:
|
62
|
-
settings.RQ_BACKEND_PORT = int(os.getenv("FP_RQ_BACKEND_PORT"))
|
63
|
-
if os.getenv("FP_RQ_BACKEND_DB") is not None:
|
64
|
-
settings.RQ_BACKEND_DB = int(os.getenv("FP_RQ_BACKEND_DB"))
|
65
|
-
self.update_from_settings()
|
66
|
-
|
67
|
-
def __post_init__(self):
|
68
|
-
if isinstance(self.queues, str):
|
69
|
-
self.queues = self.queues.replace(" ", "").split(",")
|
70
|
-
elif not isinstance(self.queues, list):
|
71
|
-
raise ValueError(
|
72
|
-
f"Invalid queues type: {type(self.queues)}. Must be a string or a list."
|
73
|
-
)
|
74
|
-
self.update_from_env()
|
75
|
-
|
76
|
-
|
77
|
-
class HueyBackendConfig(JobQueueBackendConfig):
|
78
|
-
pass
|
79
|
-
|
80
|
-
|
81
|
-
class JobQueueConfig(BaseConfig):
|
82
|
-
type: str | None = msgspec.field(default="rq")
|
83
|
-
backend: dict | None = msgspec.field(default=None)
|
84
|
-
num_workers: int | None = msgspec.field(default=None)
|
85
|
-
|
86
|
-
def __post_init__(self):
|
87
|
-
if self.type is not None:
|
88
|
-
self.type = self.type.lower()
|
89
|
-
if self.type == "rq":
|
90
|
-
self.backend = self.backend or RQBackendConfig()
|
91
|
-
|
92
|
-
if isinstance(self.backend, dict):
|
93
|
-
self.backend = RQBackendConfig.from_dict(self.backend)
|
94
|
-
elif isinstance(self.backend, RQBackendConfig):
|
95
|
-
pass
|
96
|
-
else:
|
97
|
-
raise ValueError(
|
98
|
-
f"Invalid backend type for RQ: {type(self.backend)}"
|
99
|
-
)
|
100
|
-
self.num_workers = self.num_workers or settings.RQ_NUM_WORKERS
|
101
|
-
|
102
|
-
else:
|
103
|
-
raise ValueError(
|
104
|
-
f"Invalid job queue type: {self.type}. Valid types: ['rq']"
|
105
|
-
)
|
106
|
-
|
107
|
-
def update_type(self, type: str):
|
108
|
-
if type != self.type:
|
109
|
-
self.type = type
|
110
|
-
self.backend = None
|
111
|
-
self.__post_init__()
|