FlowerPower 0.21.0__tar.gz → 0.30.0__tar.gz

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.
Files changed (50) hide show
  1. {flowerpower-0.21.0/src/FlowerPower.egg-info → flowerpower-0.30.0}/PKG-INFO +2 -14
  2. {flowerpower-0.21.0 → flowerpower-0.30.0}/pyproject.toml +5 -14
  3. {flowerpower-0.21.0 → flowerpower-0.30.0/src/FlowerPower.egg-info}/PKG-INFO +2 -14
  4. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/FlowerPower.egg-info/SOURCES.txt +0 -2
  5. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/FlowerPower.egg-info/requires.txt +1 -17
  6. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/pipeline/run.py +55 -2
  7. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cli/__init__.py +0 -7
  8. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/manager.py +0 -2
  9. flowerpower-0.21.0/src/flowerpower/cli/mqtt.py +0 -168
  10. flowerpower-0.21.0/src/flowerpower/plugins/mqtt/__init__.py +0 -8
  11. {flowerpower-0.21.0 → flowerpower-0.30.0}/LICENSE +0 -0
  12. {flowerpower-0.21.0 → flowerpower-0.30.0}/README.md +0 -0
  13. {flowerpower-0.21.0 → flowerpower-0.30.0}/setup.cfg +0 -0
  14. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/FlowerPower.egg-info/dependency_links.txt +0 -0
  15. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/FlowerPower.egg-info/entry_points.txt +0 -0
  16. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/FlowerPower.egg-info/top_level.txt +0 -0
  17. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/__init__.py +0 -0
  18. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/__init__.py +0 -0
  19. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/base.py +0 -0
  20. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/pipeline/__init__.py +0 -0
  21. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/pipeline/_schedule.py +0 -0
  22. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/pipeline/adapter.py +0 -0
  23. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/pipeline/builder.py +0 -0
  24. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/project/__init__.py +0 -0
  25. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cfg/project/adapter.py +0 -0
  26. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cli/cfg.py +0 -0
  27. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cli/pipeline.py +0 -0
  28. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/cli/utils.py +0 -0
  29. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/flowerpower.py +0 -0
  30. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/__init__.py +0 -0
  31. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/base.py +0 -0
  32. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/io.py +0 -0
  33. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/pipeline.py +0 -0
  34. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/registry.py +0 -0
  35. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/pipeline/visualizer.py +0 -0
  36. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/plugins/io/__init__.py +0 -0
  37. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/__init__.py +0 -0
  38. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/_backend.py +0 -0
  39. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/executor.py +0 -0
  40. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/general.py +0 -0
  41. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/hamilton.py +0 -0
  42. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/logging.py +0 -0
  43. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/settings/retry.py +0 -0
  44. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/callback.py +0 -0
  45. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/logging.py +0 -0
  46. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/misc.py +0 -0
  47. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/monkey.py +0 -0
  48. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/open_telemetry.py +0 -0
  49. {flowerpower-0.21.0 → flowerpower-0.30.0}/src/flowerpower/utils/templates.py +0 -0
  50. {flowerpower-0.21.0 → flowerpower-0.30.0}/tests/test_flowerpower_project.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: FlowerPower
3
- Version: 0.21.0
3
+ Version: 0.30.0
4
4
  Summary: A simple workflow framework for building and managing data processing pipelines
5
5
  Author-email: "Volker L." <ligno.blades@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/legout/flowerpower
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: duration-parser>=1.0.1
13
13
  Requires-Dist: fsspec>=2024.10.0
14
- Requires-Dist: fsspec-utils>=0.1.0
14
+ Requires-Dist: fsspec-utils[full]>=0.1.0
15
15
  Requires-Dist: humanize>=4.12.2
16
16
  Requires-Dist: msgspec>=0.19.0
17
17
  Requires-Dist: munch>=4.0.0
@@ -25,26 +25,14 @@ Provides-Extra: io
25
25
  Requires-Dist: flowerpower-io>=0.1.1; extra == "io"
26
26
  Provides-Extra: io-legacy
27
27
  Requires-Dist: flowerpower-io[legacy]>=0.1.1; extra == "io-legacy"
28
- Provides-Extra: mongodb
29
- Requires-Dist: pymongo>=4.7.2; extra == "mongodb"
30
- Provides-Extra: mqtt
31
- Requires-Dist: paho-mqtt>=2.1.0; extra == "mqtt"
32
- Requires-Dist: orjson>=3.10.11; extra == "mqtt"
33
- Requires-Dist: mmh3>=5.1.0; extra == "mqtt"
34
28
  Provides-Extra: opentelemetry
35
29
  Requires-Dist: opentelemetry-api>=1.5.0; extra == "opentelemetry"
36
30
  Requires-Dist: opentelemetry-sdk>=1.5.0; extra == "opentelemetry"
37
31
  Requires-Dist: opentelemetry-exporter-jaeger>=1.21.0; extra == "opentelemetry"
38
32
  Provides-Extra: ray
39
33
  Requires-Dist: ray>=2.34.0; extra == "ray"
40
- Provides-Extra: tui
41
- Requires-Dist: textual>=0.85.2; extra == "tui"
42
34
  Provides-Extra: ui
43
35
  Requires-Dist: sf-hamilton-ui>=0.0.11; extra == "ui"
44
- Provides-Extra: webserver
45
- Requires-Dist: sanic>=24.6.0; extra == "webserver"
46
- Requires-Dist: sanic-ext>=23.12.0; extra == "webserver"
47
- Requires-Dist: orjson>=3.10.11; extra == "webserver"
48
36
  Provides-Extra: openlineage
49
37
  Requires-Dist: openlineage-python>=1.32.0; extra == "openlineage"
50
38
  Dynamic: license-file
@@ -4,21 +4,14 @@ description = "A simple workflow framework for building and managing data proces
4
4
  authors = [{ name = "Volker L.", email = "ligno.blades@gmail.com" }]
5
5
  readme = "README.md"
6
6
  requires-python = ">= 3.11"
7
- version = "0.21.0"
8
- keywords = [
9
- "hamilton",
10
- "workflow",
11
- "pipeline",
12
- "scheduler",
13
- "dask",
14
- "ray",
15
- ]
7
+ version = "0.30.0"
8
+ keywords = ["hamilton", "workflow", "pipeline", "scheduler", "dask", "ray"]
16
9
 
17
10
  dependencies = [
18
11
  #'dill>=0.3.8',
19
12
  'duration-parser>=1.0.1',
20
13
  'fsspec>=2024.10.0',
21
- 'fsspec-utils>=0.1.0',
14
+ 'fsspec-utils[full]>=0.1.0',
22
15
  'humanize>=4.12.2',
23
16
  'msgspec>=0.19.0',
24
17
  'munch>=4.0.0',
@@ -44,17 +37,14 @@ flowerpower = "flowerpower.cli:app"
44
37
  [project.optional-dependencies]
45
38
  io = ["flowerpower-io>=0.1.1"]
46
39
  io-legacy = ["flowerpower-io[legacy]>=0.1.1"]
47
- mongodb = ["pymongo>=4.7.2"]
48
- mqtt = ["paho-mqtt>=2.1.0", "orjson>=3.10.11", "mmh3>=5.1.0"]
49
40
  opentelemetry = [
50
41
  "opentelemetry-api>=1.5.0",
51
42
  "opentelemetry-sdk>=1.5.0",
52
43
  "opentelemetry-exporter-jaeger>=1.21.0", #"sf-hamilton[opentelemetry]>=1.83.3"
53
44
  ]
54
45
  ray = ["ray>=2.34.0"]
55
- tui = ["textual>=0.85.2"]
56
46
  ui = ["sf-hamilton-ui>=0.0.11"]
57
- webserver = ["sanic>=24.6.0", "sanic-ext>=23.12.0", "orjson>=3.10.11"]
47
+
58
48
  openlineage = ["openlineage-python>=1.32.0"]
59
49
 
60
50
 
@@ -77,5 +67,6 @@ dev-dependencies = [
77
67
  "pymdown-extensions>=10.16.1",
78
68
  "mkdocstrings>=0.30.0",
79
69
  "mkdocstrings-python>=1.17.0",
70
+ "repomix>=0.3.4",
80
71
  ]
81
72
  package = true
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: FlowerPower
3
- Version: 0.21.0
3
+ Version: 0.30.0
4
4
  Summary: A simple workflow framework for building and managing data processing pipelines
5
5
  Author-email: "Volker L." <ligno.blades@gmail.com>
6
6
  Project-URL: Homepage, https://github.com/legout/flowerpower
@@ -11,7 +11,7 @@ Description-Content-Type: text/markdown
11
11
  License-File: LICENSE
12
12
  Requires-Dist: duration-parser>=1.0.1
13
13
  Requires-Dist: fsspec>=2024.10.0
14
- Requires-Dist: fsspec-utils>=0.1.0
14
+ Requires-Dist: fsspec-utils[full]>=0.1.0
15
15
  Requires-Dist: humanize>=4.12.2
16
16
  Requires-Dist: msgspec>=0.19.0
17
17
  Requires-Dist: munch>=4.0.0
@@ -25,26 +25,14 @@ Provides-Extra: io
25
25
  Requires-Dist: flowerpower-io>=0.1.1; extra == "io"
26
26
  Provides-Extra: io-legacy
27
27
  Requires-Dist: flowerpower-io[legacy]>=0.1.1; extra == "io-legacy"
28
- Provides-Extra: mongodb
29
- Requires-Dist: pymongo>=4.7.2; extra == "mongodb"
30
- Provides-Extra: mqtt
31
- Requires-Dist: paho-mqtt>=2.1.0; extra == "mqtt"
32
- Requires-Dist: orjson>=3.10.11; extra == "mqtt"
33
- Requires-Dist: mmh3>=5.1.0; extra == "mqtt"
34
28
  Provides-Extra: opentelemetry
35
29
  Requires-Dist: opentelemetry-api>=1.5.0; extra == "opentelemetry"
36
30
  Requires-Dist: opentelemetry-sdk>=1.5.0; extra == "opentelemetry"
37
31
  Requires-Dist: opentelemetry-exporter-jaeger>=1.21.0; extra == "opentelemetry"
38
32
  Provides-Extra: ray
39
33
  Requires-Dist: ray>=2.34.0; extra == "ray"
40
- Provides-Extra: tui
41
- Requires-Dist: textual>=0.85.2; extra == "tui"
42
34
  Provides-Extra: ui
43
35
  Requires-Dist: sf-hamilton-ui>=0.0.11; extra == "ui"
44
- Provides-Extra: webserver
45
- Requires-Dist: sanic>=24.6.0; extra == "webserver"
46
- Requires-Dist: sanic-ext>=23.12.0; extra == "webserver"
47
- Requires-Dist: orjson>=3.10.11; extra == "webserver"
48
36
  Provides-Extra: openlineage
49
37
  Requires-Dist: openlineage-python>=1.32.0; extra == "openlineage"
50
38
  Dynamic: license-file
@@ -20,7 +20,6 @@ src/flowerpower/cfg/project/__init__.py
20
20
  src/flowerpower/cfg/project/adapter.py
21
21
  src/flowerpower/cli/__init__.py
22
22
  src/flowerpower/cli/cfg.py
23
- src/flowerpower/cli/mqtt.py
24
23
  src/flowerpower/cli/pipeline.py
25
24
  src/flowerpower/cli/utils.py
26
25
  src/flowerpower/pipeline/__init__.py
@@ -31,7 +30,6 @@ src/flowerpower/pipeline/pipeline.py
31
30
  src/flowerpower/pipeline/registry.py
32
31
  src/flowerpower/pipeline/visualizer.py
33
32
  src/flowerpower/plugins/io/__init__.py
34
- src/flowerpower/plugins/mqtt/__init__.py
35
33
  src/flowerpower/settings/__init__.py
36
34
  src/flowerpower/settings/_backend.py
37
35
  src/flowerpower/settings/executor.py
@@ -1,6 +1,6 @@
1
1
  duration-parser>=1.0.1
2
2
  fsspec>=2024.10.0
3
- fsspec-utils>=0.1.0
3
+ fsspec-utils[full]>=0.1.0
4
4
  humanize>=4.12.2
5
5
  msgspec>=0.19.0
6
6
  munch>=4.0.0
@@ -17,14 +17,6 @@ flowerpower-io>=0.1.1
17
17
  [io-legacy]
18
18
  flowerpower-io[legacy]>=0.1.1
19
19
 
20
- [mongodb]
21
- pymongo>=4.7.2
22
-
23
- [mqtt]
24
- paho-mqtt>=2.1.0
25
- orjson>=3.10.11
26
- mmh3>=5.1.0
27
-
28
20
  [openlineage]
29
21
  openlineage-python>=1.32.0
30
22
 
@@ -36,13 +28,5 @@ opentelemetry-exporter-jaeger>=1.21.0
36
28
  [ray]
37
29
  ray>=2.34.0
38
30
 
39
- [tui]
40
- textual>=0.85.2
41
-
42
31
  [ui]
43
32
  sf-hamilton-ui>=0.0.11
44
-
45
- [webserver]
46
- sanic>=24.6.0
47
- sanic-ext>=23.12.0
48
- orjson>=3.10.11
@@ -39,8 +39,34 @@ class RunConfig(BaseConfig):
39
39
  project_adapter_cfg: dict | None = msgspec.field(default=None)
40
40
  adapter: dict[str, Any] | None = msgspec.field(default=None)
41
41
  reload: bool = msgspec.field(default=False)
42
- on_success: Callable | tuple[Callable, tuple | None, dict | None] | None = msgspec.field(default=None)
43
- on_failure: Callable | tuple[Callable, tuple | None, dict | None] | None = msgspec.field(default=None)
42
+
43
+
44
+ class CallbackSpec(msgspec.Struct):
45
+ """Specification for a callback function with optional arguments."""
46
+ func: Callable
47
+ args: tuple | None = None
48
+ kwargs: dict | None = None
49
+
50
+
51
+ class RunConfig(BaseConfig):
52
+ inputs: dict | None = msgspec.field(default_factory=dict)
53
+ final_vars: list[str] | None = msgspec.field(default_factory=list)
54
+ config: dict | None = msgspec.field(default_factory=dict)
55
+ cache: dict | bool | None = msgspec.field(default=False)
56
+ with_adapter: WithAdapterConfig = msgspec.field(default_factory=WithAdapterConfig)
57
+ executor: ExecutorConfig = msgspec.field(default_factory=ExecutorConfig)
58
+ log_level: str | None = msgspec.field(default="INFO")
59
+ max_retries: int = msgspec.field(default=3)
60
+ retry_delay: int | float = msgspec.field(default=1)
61
+ jitter_factor: float | None = msgspec.field(default=0.1)
62
+ retry_exceptions: list[str] = msgspec.field(default_factory=lambda: ["Exception"])
63
+ # New fields for comprehensive configuration
64
+ pipeline_adapter_cfg: dict | None = msgspec.field(default=None)
65
+ project_adapter_cfg: dict | None = msgspec.field(default=None)
66
+ adapter: dict[str, Any] | None = msgspec.field(default=None)
67
+ reload: bool = msgspec.field(default=False)
68
+ on_success: CallbackSpec | None = msgspec.field(default=None)
69
+ on_failure: CallbackSpec | None = msgspec.field(default=None)
44
70
 
45
71
  def __post_init__(self):
46
72
  if isinstance(self.inputs, dict):
@@ -81,3 +107,30 @@ class RunConfig(BaseConfig):
81
107
  else:
82
108
  converted_exceptions.append(Exception)
83
109
  self.retry_exceptions = converted_exceptions
110
+
111
+ # Handle callback conversions
112
+ if self.on_success is not None and not isinstance(self.on_success, CallbackSpec):
113
+ if callable(self.on_success):
114
+ self.on_success = CallbackSpec(func=self.on_success)
115
+ elif isinstance(self.on_success, tuple) and len(self.on_success) == 3:
116
+ func, args, kwargs = self.on_success
117
+ self.on_success = CallbackSpec(func=func, args=args, kwargs=kwargs)
118
+ else:
119
+ self.on_success = None
120
+ warnings.warn(
121
+ "Invalid on_success format, must be Callable or (Callable, args, kwargs)",
122
+ RuntimeWarning
123
+ )
124
+
125
+ if self.on_failure is not None and not isinstance(self.on_failure, CallbackSpec):
126
+ if callable(self.on_failure):
127
+ self.on_failure = CallbackSpec(func=self.on_failure)
128
+ elif isinstance(self.on_failure, tuple) and len(self.on_failure) == 3:
129
+ func, args, kwargs = self.on_failure
130
+ self.on_failure = CallbackSpec(func=func, args=args, kwargs=kwargs)
131
+ else:
132
+ self.on_failure = None
133
+ warnings.warn(
134
+ "Invalid on_failure format, must be Callable or (Callable, args, kwargs)",
135
+ RuntimeWarning
136
+ )
@@ -19,13 +19,6 @@ app.add_typer(
19
19
  )
20
20
 
21
21
 
22
- if importlib.util.find_spec("paho"):
23
- from .mqtt import app as mqtt_app
24
-
25
- app.add_typer(
26
- mqtt_app, name="mqtt", help="Connect pipelines to MQTT message brokers"
27
- )
28
-
29
22
 
30
23
  @app.command()
31
24
  def init(
@@ -40,13 +40,11 @@ class PipelineManager:
40
40
  - Configuration management and loading
41
41
  - Pipeline creation, deletion, and discovery
42
42
  - Pipeline execution via PipelineRunner
43
- - Job scheduling via PipelineScheduler
44
43
  - Visualization via PipelineVisualizer
45
44
  - Import/export operations via PipelineIOManager
46
45
 
47
46
  Attributes:
48
47
  registry (PipelineRegistry): Handles pipeline registration and discovery
49
- scheduler (PipelineScheduler): Manages job scheduling and execution
50
48
  visualizer (PipelineVisualizer): Handles pipeline visualization
51
49
  io (PipelineIOManager): Manages pipeline import/export operations
52
50
  project_cfg (ProjectConfig): Current project configuration
@@ -1,168 +0,0 @@
1
- import importlib
2
- import sys
3
-
4
- import typer
5
-
6
- from ..plugins.mqtt import run_pipeline_on_message as run_pipeline_on_message_
7
- from ..plugins.mqtt import start_listener as start_listener_
8
- from .utils import load_hook, parse_dict_or_list_param
9
-
10
- app = typer.Typer(help="MQTT management commands")
11
-
12
-
13
- @app.command()
14
- def start_listener(
15
- on_message: str,
16
- topic: str,
17
- base_dir: str,
18
- host: str = "localhost",
19
- port: int = 1883,
20
- username: str | None = None,
21
- password: str | None = None,
22
- ):
23
- """Start an MQTT client to listen to messages on a topic
24
-
25
- The connection to the MQTT broker is established using the provided configuration o a
26
- MQTT event broker defined in the project configuration file `conf/project.yml`.
27
- If not configuration is found, you have to provide the connection parameters,
28
- such as `host`, `port`, `username`, and `password`.
29
-
30
- The `on_message` module should contain a function `on_message` that will be called
31
- with the message payload as argument.
32
-
33
- Args:
34
- on_message: Name of the module containing the on_message function
35
- topic: MQTT topic to listen to
36
- base_dir: Base directory for the module
37
- host: MQTT broker host
38
- port: MQTT broker port
39
- username: MQTT broker username
40
- password: MQTT broker password
41
-
42
- Examples:
43
- $ flowerpower mqtt start_listener --on-message my_module --topic my_topic --base-dir /path/to/module
44
- """
45
- sys.path.append(base_dir)
46
- on_message_module = importlib.import_module(on_message)
47
- start_listener_(
48
- on_message=on_message_module.on_message,
49
- topic=topic,
50
- base_dir=base_dir,
51
- host=host,
52
- port=port,
53
- username=username,
54
- password=password,
55
- background=False,
56
- )
57
-
58
-
59
- @app.command()
60
- def run_pipeline_on_message(
61
- name: str,
62
- topic: str | None = None,
63
- executor: str | None = None,
64
- base_dir: str | None = None,
65
- inputs: str | None = None,
66
- final_vars: str | None = None,
67
- config: str | None = None,
68
- with_tracker: bool = False,
69
- with_opentelemetry: bool = False,
70
- with_progressbar: bool = False,
71
- storage_options: str | None = None,
72
- host: str | None = None,
73
- port: int | None = None,
74
- username: str | None = None,
75
- password: str | None = None,
76
- clean_session: bool = True,
77
- qos: int = 0,
78
- client_id: str | None = None,
79
- client_id_suffix: str | None = None,
80
- config_hook: str | None = None,
81
- max_retries: int = typer.Option(
82
- 3, help="Maximum number of retry attempts if pipeline execution fails"
83
- ),
84
- retry_delay: float = typer.Option(
85
- 1.0, help="Base delay between retries in seconds"
86
- ),
87
- jitter_factor: float = typer.Option(
88
- 0.1, help="Random factor (0-1) applied to delay for jitter"
89
- ),
90
- ):
91
- """Run a pipeline on a message
92
-
93
- This command sets up an MQTT listener that executes a pipeline whenever a message is
94
- received on the specified topic. The pipeline can be configured to retry on failure
95
- using exponential backoff with jitter for better resilience.
96
-
97
- Args:
98
- name: Name of the pipeline
99
- topic: MQTT topic to listen to
100
- executor: Name of the executor
101
- base_dir: Base directory for the pipeline
102
- inputs: Inputs as JSON or key=value pairs or dict string
103
- final_vars: Final variables as JSON or list
104
- config: Config for the hamilton pipeline executor
105
- with_tracker: Enable tracking with hamilton ui
106
- with_opentelemetry: Enable OpenTelemetry tracing
107
- with_progressbar: Enable progress bar
108
- storage_options: Storage options as JSON, dict string or key=value pairs
109
- host: MQTT broker host
110
- port: MQTT broker port
111
- username: MQTT broker username
112
- password: MQTT broker password
113
- clean_session: Whether to start a clean session with the broker
114
- qos: MQTT Quality of Service level (0, 1, or 2)
115
- client_id: Custom MQTT client identifier
116
- client_id_suffix: Optional suffix to append to client_id
117
- config_hook: Function to process incoming messages into pipeline config
118
- max_retries: Maximum number of retry attempts if pipeline execution fails
119
- retry_delay: Base delay between retries in seconds
120
- jitter_factor: Random factor (0-1) applied to delay for jitter
121
-
122
- Examples:
123
- # Basic usage with a specific topic
124
- $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic sensors/data
125
-
126
- # Configure retries for resilience
127
- $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic sensors/data --max-retries 5 --retry-delay 2.0
128
-
129
- # Use a config hook to process messages
130
- $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic data/incoming --config-hook process_message
131
-
132
-
133
- """
134
-
135
- parsed_inputs = parse_dict_or_list_param(inputs, "dict")
136
- parsed_config = parse_dict_or_list_param(config, "dict")
137
- parsed_final_vars = parse_dict_or_list_param(final_vars, "list")
138
- parsed_storage_options = parse_dict_or_list_param(storage_options, "dict")
139
-
140
- config_hook_function = None
141
- if config_hook:
142
- config_hook_function = load_hook(name, config_hook, base_dir, storage_options)
143
-
144
- run_pipeline_on_message_(
145
- name=name,
146
- topic=topic,
147
- executor=executor,
148
- base_dir=base_dir,
149
- inputs=parsed_inputs,
150
- final_vars=parsed_final_vars,
151
- config=parsed_config,
152
- with_tracker=with_tracker,
153
- with_opentelemetry=with_opentelemetry,
154
- with_progressbar=with_progressbar,
155
- storage_options=parsed_storage_options,
156
- host=host,
157
- port=port,
158
- username=username,
159
- password=password,
160
- clean_session=clean_session,
161
- qos=qos,
162
- client_id=client_id,
163
- client_id_suffix=client_id_suffix,
164
- config_hook=config_hook_function,
165
- max_retries=max_retries,
166
- retry_delay=retry_delay,
167
- jitter_factor=jitter_factor,
168
- )
@@ -1,8 +0,0 @@
1
- import warnings
2
-
3
- warnings.warn(
4
- "The flowerpower.plugins.mqtt module is deprecated. "
5
- "Please use 'flowerpower-mqtt' instead. Install it with 'pip install flowerpower-mqtt'.",
6
- DeprecationWarning,
7
- stacklevel=2,
8
- )
File without changes
File without changes
File without changes