FlowerPower 0.9.13.1__py3-none-any.whl → 1.0.0b2__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.
Files changed (85) hide show
  1. flowerpower/__init__.py +17 -2
  2. flowerpower/cfg/__init__.py +201 -149
  3. flowerpower/cfg/base.py +122 -24
  4. flowerpower/cfg/pipeline/__init__.py +254 -0
  5. flowerpower/cfg/pipeline/adapter.py +66 -0
  6. flowerpower/cfg/pipeline/run.py +40 -11
  7. flowerpower/cfg/pipeline/schedule.py +69 -79
  8. flowerpower/cfg/project/__init__.py +149 -0
  9. flowerpower/cfg/project/adapter.py +57 -0
  10. flowerpower/cfg/project/job_queue.py +165 -0
  11. flowerpower/cli/__init__.py +92 -37
  12. flowerpower/cli/job_queue.py +878 -0
  13. flowerpower/cli/mqtt.py +32 -1
  14. flowerpower/cli/pipeline.py +559 -406
  15. flowerpower/cli/utils.py +29 -18
  16. flowerpower/flowerpower.py +12 -8
  17. flowerpower/fs/__init__.py +20 -2
  18. flowerpower/fs/base.py +350 -26
  19. flowerpower/fs/ext.py +797 -216
  20. flowerpower/fs/storage_options.py +1097 -55
  21. flowerpower/io/base.py +13 -18
  22. flowerpower/io/loader/__init__.py +28 -0
  23. flowerpower/io/loader/deltatable.py +7 -10
  24. flowerpower/io/metadata.py +1 -0
  25. flowerpower/io/saver/__init__.py +28 -0
  26. flowerpower/io/saver/deltatable.py +4 -3
  27. flowerpower/job_queue/__init__.py +252 -0
  28. flowerpower/job_queue/apscheduler/__init__.py +11 -0
  29. flowerpower/job_queue/apscheduler/_setup/datastore.py +110 -0
  30. flowerpower/job_queue/apscheduler/_setup/eventbroker.py +93 -0
  31. flowerpower/job_queue/apscheduler/manager.py +1063 -0
  32. flowerpower/job_queue/apscheduler/setup.py +524 -0
  33. flowerpower/job_queue/apscheduler/trigger.py +169 -0
  34. flowerpower/job_queue/apscheduler/utils.py +309 -0
  35. flowerpower/job_queue/base.py +382 -0
  36. flowerpower/job_queue/rq/__init__.py +10 -0
  37. flowerpower/job_queue/rq/_trigger.py +37 -0
  38. flowerpower/job_queue/rq/concurrent_workers/gevent_worker.py +226 -0
  39. flowerpower/job_queue/rq/concurrent_workers/thread_worker.py +231 -0
  40. flowerpower/job_queue/rq/manager.py +1449 -0
  41. flowerpower/job_queue/rq/setup.py +150 -0
  42. flowerpower/job_queue/rq/utils.py +69 -0
  43. flowerpower/pipeline/__init__.py +5 -0
  44. flowerpower/pipeline/base.py +118 -0
  45. flowerpower/pipeline/io.py +407 -0
  46. flowerpower/pipeline/job_queue.py +505 -0
  47. flowerpower/pipeline/manager.py +1586 -0
  48. flowerpower/pipeline/registry.py +560 -0
  49. flowerpower/pipeline/runner.py +560 -0
  50. flowerpower/pipeline/visualizer.py +142 -0
  51. flowerpower/plugins/mqtt/__init__.py +12 -0
  52. flowerpower/plugins/mqtt/cfg.py +16 -0
  53. flowerpower/plugins/mqtt/manager.py +789 -0
  54. flowerpower/settings.py +110 -0
  55. flowerpower/utils/logging.py +21 -0
  56. flowerpower/utils/misc.py +57 -9
  57. flowerpower/utils/sql.py +122 -24
  58. flowerpower/utils/templates.py +2 -142
  59. flowerpower-1.0.0b2.dist-info/METADATA +324 -0
  60. flowerpower-1.0.0b2.dist-info/RECORD +94 -0
  61. flowerpower/_web/__init__.py +0 -61
  62. flowerpower/_web/routes/config.py +0 -103
  63. flowerpower/_web/routes/pipelines.py +0 -173
  64. flowerpower/_web/routes/scheduler.py +0 -136
  65. flowerpower/cfg/pipeline/tracker.py +0 -14
  66. flowerpower/cfg/project/open_telemetry.py +0 -8
  67. flowerpower/cfg/project/tracker.py +0 -11
  68. flowerpower/cfg/project/worker.py +0 -19
  69. flowerpower/cli/scheduler.py +0 -309
  70. flowerpower/cli/web.py +0 -44
  71. flowerpower/event_handler.py +0 -23
  72. flowerpower/mqtt.py +0 -609
  73. flowerpower/pipeline.py +0 -2499
  74. flowerpower/scheduler.py +0 -680
  75. flowerpower/tui.py +0 -79
  76. flowerpower/utils/datastore.py +0 -186
  77. flowerpower/utils/eventbroker.py +0 -127
  78. flowerpower/utils/executor.py +0 -58
  79. flowerpower/utils/trigger.py +0 -140
  80. flowerpower-0.9.13.1.dist-info/METADATA +0 -586
  81. flowerpower-0.9.13.1.dist-info/RECORD +0 -76
  82. /flowerpower/{cfg/pipeline/params.py → cli/worker.py} +0 -0
  83. {flowerpower-0.9.13.1.dist-info → flowerpower-1.0.0b2.dist-info}/WHEEL +0 -0
  84. {flowerpower-0.9.13.1.dist-info → flowerpower-1.0.0b2.dist-info}/entry_points.txt +0 -0
  85. {flowerpower-0.9.13.1.dist-info → flowerpower-1.0.0b2.dist-info}/top_level.txt +0 -0
flowerpower/cli/mqtt.py CHANGED
@@ -1,6 +1,6 @@
1
1
  import typer
2
2
  import sys
3
- from ..mqtt import (
3
+ from ..plugins.mqtt import (
4
4
  start_listener as start_listener_,
5
5
  run_pipeline_on_message as run_pipeline_on_message_,
6
6
  )
@@ -78,9 +78,16 @@ def run_pipeline_on_message(
78
78
  client_id: str | None = None,
79
79
  client_id_suffix: str | None = None,
80
80
  config_hook: str | None = None,
81
+ max_retries: int = typer.Option(3, help="Maximum number of retry attempts if pipeline execution fails"),
82
+ retry_delay: float = typer.Option(1.0, help="Base delay between retries in seconds"),
83
+ jitter_factor: float = typer.Option(0.1, help="Random factor (0-1) applied to delay for jitter"),
81
84
  ):
82
85
  """Run a pipeline on a message
83
86
 
87
+ This command sets up an MQTT listener that executes a pipeline whenever a message is
88
+ received on the specified topic. The pipeline can be configured to retry on failure
89
+ using exponential backoff with jitter for better resilience.
90
+
84
91
  Args:
85
92
  name: Name of the pipeline
86
93
  topic: MQTT topic to listen to
@@ -98,6 +105,27 @@ def run_pipeline_on_message(
98
105
  port: MQTT broker port
99
106
  username: MQTT broker username
100
107
  password: MQTT broker password
108
+ clean_session: Whether to start a clean session with the broker
109
+ qos: MQTT Quality of Service level (0, 1, or 2)
110
+ client_id: Custom MQTT client identifier
111
+ client_id_suffix: Optional suffix to append to client_id
112
+ config_hook: Function to process incoming messages into pipeline config
113
+ max_retries: Maximum number of retry attempts if pipeline execution fails
114
+ retry_delay: Base delay between retries in seconds
115
+ jitter_factor: Random factor (0-1) applied to delay for jitter
116
+
117
+ Examples:
118
+ # Basic usage with a specific topic
119
+ $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic sensors/data
120
+
121
+ # Configure retries for resilience
122
+ $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic sensors/data --max-retries 5 --retry-delay 2.0
123
+
124
+ # Run as a job with custom MQTT settings
125
+ $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic events/process --as-job --qos 2 --host mqtt.example.com
126
+
127
+ # Use a config hook to process messages
128
+ $ flowerpower mqtt run-pipeline-on-message my_pipeline --topic data/incoming --config-hook process_message
101
129
 
102
130
 
103
131
  """
@@ -134,4 +162,7 @@ def run_pipeline_on_message(
134
162
  client_id=client_id,
135
163
  client_id_suffix=client_id_suffix,
136
164
  config_hook=config_hook_function,
165
+ max_retries=max_retries,
166
+ retry_delay=retry_delay,
167
+ jitter_factor=jitter_factor,
137
168
  )