FlowerPower 0.9.12.4__py3-none-any.whl → 1.0.0b1__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 (81) 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 -35
  12. flowerpower/cli/job_queue.py +878 -0
  13. flowerpower/cli/mqtt.py +49 -4
  14. flowerpower/cli/pipeline.py +576 -381
  15. flowerpower/cli/utils.py +55 -0
  16. flowerpower/flowerpower.py +12 -7
  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 +18 -142
  59. flowerpower/web/app.py +0 -0
  60. flowerpower-1.0.0b1.dist-info/METADATA +324 -0
  61. flowerpower-1.0.0b1.dist-info/RECORD +94 -0
  62. {flowerpower-0.9.12.4.dist-info → flowerpower-1.0.0b1.dist-info}/WHEEL +1 -1
  63. flowerpower/cfg/pipeline/tracker.py +0 -14
  64. flowerpower/cfg/project/open_telemetry.py +0 -8
  65. flowerpower/cfg/project/tracker.py +0 -11
  66. flowerpower/cfg/project/worker.py +0 -19
  67. flowerpower/cli/scheduler.py +0 -309
  68. flowerpower/event_handler.py +0 -23
  69. flowerpower/mqtt.py +0 -525
  70. flowerpower/pipeline.py +0 -2419
  71. flowerpower/scheduler.py +0 -680
  72. flowerpower/tui.py +0 -79
  73. flowerpower/utils/datastore.py +0 -186
  74. flowerpower/utils/eventbroker.py +0 -127
  75. flowerpower/utils/executor.py +0 -58
  76. flowerpower/utils/trigger.py +0 -140
  77. flowerpower-0.9.12.4.dist-info/METADATA +0 -575
  78. flowerpower-0.9.12.4.dist-info/RECORD +0 -70
  79. /flowerpower/{cfg/pipeline/params.py → cli/worker.py} +0 -0
  80. {flowerpower-0.9.12.4.dist-info → flowerpower-1.0.0b1.dist-info}/entry_points.txt +0 -0
  81. {flowerpower-0.9.12.4.dist-info → flowerpower-1.0.0b1.dist-info}/top_level.txt +0 -0
@@ -1,575 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: FlowerPower
3
- Version: 0.9.12.4
4
- Summary: A simple workflow framework. Hamilton + APScheduler = FlowerPower
5
- Author-email: "Volker L." <ligno.blades@gmail.com>
6
- Project-URL: Homepage, https://github.com/legout/flowerpower
7
- Project-URL: Bug Tracker, https://github.com/legout/flowerpower/issues
8
- Keywords: hamilton,workflow,pipeline,scheduler,apscheduler,dask,ray
9
- Requires-Python: >=3.11
10
- Description-Content-Type: text/markdown
11
- Requires-Dist: aiobotocore<2.18.0
12
- Requires-Dist: dill>=0.3.8
13
- Requires-Dist: fsspec>=2024.10.0
14
- Requires-Dist: munch>=4.0.0
15
- Requires-Dist: orjson>=3.10.15
16
- Requires-Dist: pendulum>=3.0.0
17
- Requires-Dist: pyarrow<19.0.0
18
- Requires-Dist: pydantic>=2.10.2
19
- Requires-Dist: python-dotenv>=1.0.1
20
- Requires-Dist: pyyaml>=6.0.1
21
- Requires-Dist: rich>=13.9.3
22
- Requires-Dist: s3fs>=2024.10.0
23
- Requires-Dist: sf-hamilton-sdk>=0.5.2
24
- Requires-Dist: sf-hamilton[rich,tqdm,visualization]>=1.69.0
25
- Requires-Dist: tqdm>=4.67.1
26
- Requires-Dist: typer>=0.12.3
27
- Provides-Extra: io
28
- Requires-Dist: adbc-driver-manager>=1.4.0; extra == "io"
29
- Requires-Dist: datafusion>=43.1.0; extra == "io"
30
- Requires-Dist: deltalake>=0.24.0; extra == "io"
31
- Requires-Dist: duckdb>=1.1.3; extra == "io"
32
- Requires-Dist: orjson>=3.10.12; extra == "io"
33
- Requires-Dist: pandas>=2.2.3; extra == "io"
34
- Requires-Dist: polars>=1.15.0; extra == "io"
35
- Requires-Dist: pyarrow>=18.1.0; extra == "io"
36
- Requires-Dist: pydala2>=0.9.4.5; extra == "io"
37
- Requires-Dist: redis>=5.2.1; extra == "io"
38
- Requires-Dist: sherlock>=0.4.1; extra == "io"
39
- Provides-Extra: io-legacy
40
- Requires-Dist: adbc-driver-manager>=1.4.0; extra == "io-legacy"
41
- Requires-Dist: datafusion>=43.1.0; extra == "io-legacy"
42
- Requires-Dist: deltalake>=0.24.0; extra == "io-legacy"
43
- Requires-Dist: duckdb>=1.1.3; extra == "io-legacy"
44
- Requires-Dist: orjson>=3.10.12; extra == "io-legacy"
45
- Requires-Dist: pandas>=2.2.3; extra == "io-legacy"
46
- Requires-Dist: polars-lts-cpu>=1.15.0; extra == "io-legacy"
47
- Requires-Dist: pyarrow>=18.1.0; extra == "io-legacy"
48
- Requires-Dist: pydala2>=0.9.4.5; extra == "io-legacy"
49
- Requires-Dist: redis>=5.2.1; extra == "io-legacy"
50
- Requires-Dist: sherlock>=0.4.1; extra == "io-legacy"
51
- Provides-Extra: mongodb
52
- Requires-Dist: pymongo>=4.7.2; extra == "mongodb"
53
- Provides-Extra: mqtt
54
- Requires-Dist: paho-mqtt>=2.1.0; extra == "mqtt"
55
- Requires-Dist: orjson>=3.10.11; extra == "mqtt"
56
- Provides-Extra: opentelemetry
57
- Requires-Dist: opentelemetry-api>=1.5.0; extra == "opentelemetry"
58
- Requires-Dist: opentelemetry-sdk>=1.5.0; extra == "opentelemetry"
59
- Requires-Dist: opentelemetry-exporter-jaeger>=1.21.0; extra == "opentelemetry"
60
- Provides-Extra: ray
61
- Requires-Dist: ray>=2.34.0; extra == "ray"
62
- Provides-Extra: redis
63
- Requires-Dist: redis>=5.0.4; extra == "redis"
64
- Provides-Extra: scheduler
65
- Requires-Dist: aiosqlite>=0.21.0; extra == "scheduler"
66
- Requires-Dist: apscheduler>=4.0.0a5; extra == "scheduler"
67
- Requires-Dist: asyncpg>=0.29.0; extra == "scheduler"
68
- Requires-Dist: greenlet>=3.0.3; extra == "scheduler"
69
- Requires-Dist: sqlalchemy>=2.0.30; extra == "scheduler"
70
- Provides-Extra: tui
71
- Requires-Dist: textual>=0.85.2; extra == "tui"
72
- Provides-Extra: ui
73
- Requires-Dist: sf-hamilton-ui>=0.0.11; extra == "ui"
74
- Provides-Extra: webserver
75
- Requires-Dist: sanic>=24.6.0; extra == "webserver"
76
- Requires-Dist: sanic-ext>=23.12.0; extra == "webserver"
77
- Requires-Dist: orjson>=3.10.11; extra == "webserver"
78
-
79
- <div align="center">
80
- <h1>FlowerPower</h1>
81
- <h3>Simple Workflow Framework - Hamilton + APScheduler = FlowerPower</h3>
82
- <img src="./image.png" alt="FlowerPower Logo" width="600" height="400">
83
- </div>
84
-
85
- ---
86
-
87
- ## 📚 Table of Contents
88
- 1. [Overview](#overview)
89
- 2. [Installation](#installation)
90
- 3. [Getting Started](#getting-started)
91
- - [Initialize Project](#initialize-project)
92
- - [Add Pipeline](#add-pipeline)
93
- - [Setup Pipeline](#setup-pipeline)
94
- - [Run Pipeline](#run-pipeline)
95
- - [Schedule Pipeline](#schedule-pipeline)
96
- - [Start Worker](#start-worker)
97
- - [Track Pipeline](#track-pipeline)
98
- 4. [Development](#development)
99
- - [Dev Services](#dev-services)
100
-
101
- ---
102
-
103
- ## 🔍 Overview
104
-
105
- FlowerPower is a simple workflow framework based on two fantastic Python libraries:
106
-
107
- - **[Hamilton](https://github.com/DAGWorks-Inc/hamilton)**: Creates DAGs from your pipeline functions
108
- - **[APScheduler](https://github.com/agronholm/apscheduler)**: Handles pipeline scheduling
109
-
110
- ### Key Features
111
-
112
- - 🔄 **Pipeline Workflows**: Create and execute complex DAG-based workflows
113
- - ⏰ **Scheduling**: Run pipelines at specific times or intervals
114
- - ⚙️ **Parameterization**: Easily configure pipeline parameters
115
- - 📊 **Tracking**: Monitor executions with Hamilton UI
116
- - 🛠️ **Flexible Configuration**: Simple YAML-based setup
117
- - 📡 **Distributed Execution**: Support for distributed environments
118
-
119
- [More details in Hamilton docs](https://hamilton.dagworks.io/en/latest/)
120
-
121
- ---
122
-
123
- ## 📦 Installation
124
-
125
- ```bash
126
- # Basic installation
127
- pip install flowerpower
128
-
129
- # With scheduling support
130
- pip install "flowerpower[scheduler]"
131
-
132
- # Additional components
133
- pip install "flowerpower[mqtt]" # MQTT broker
134
- pip install "flowerpower[redis]" # Redis broker
135
- pip install "flowerpower[mongodb]" # MongoDB store
136
- pip install "flowerpower[ray]" # Ray computing
137
- pip install "flowerpower[dask]" # Dask computing
138
- pip install "flowerpower[ui]" # Hamilton UI
139
- pip install "flowerpower[websever]" # Web server
140
- ```
141
-
142
- ---
143
-
144
- ## 🚀 Getting Started
145
-
146
- ### Initialize Project
147
-
148
- **Option 1: Command Line**
149
- ```bash
150
- flowerpower init new-project
151
- cd new-project
152
- ```
153
-
154
- **Option 2: Python**
155
- ```python
156
- from flowerpower import init
157
- init("new-project")
158
- ```
159
-
160
- This creates basic config files:
161
- - `conf/project.yml`
162
-
163
-
164
- ### 📦 Optional: Project Management with UV (Recommended)
165
-
166
- It is recommended to use the project manager `uv` to manage your project dependencies.
167
-
168
- **Installation**
169
- ```bash
170
- pip install uv
171
- ```
172
- > For more installation options, visit: https://docs.astral.sh/uv/getting-started/installation/
173
-
174
- **Project Initialization**
175
- ```bash
176
- uv init --app --no-readme --vcs git
177
- ```
178
- ---
179
-
180
- ### Pipeline Management
181
-
182
- #### Creating a New Pipeline
183
-
184
- **Option 1: Command Line**
185
- ```bash
186
- flowerpower new my_flow
187
- ```
188
-
189
- **Option 2: Python**
190
- ```python
191
- # Using PipelineManager
192
- from flowerpower.pipeline import PipelineManager
193
- pm = PipelineManager()
194
- pm.new("my_flow")
195
-
196
- # Or using the new function directly
197
- from flowerpower.pipeline import new
198
- new("my_flow")
199
- ```
200
-
201
- This creates the new pipeline and configuration file:
202
- - `pipelines/my_flow.py`
203
- - `conf/pipelines/my_flow.yml`
204
-
205
- #### Setting Up a Pipeline
206
-
207
- 1. **Add Pipeline Functions**
208
- Build your pipeline by adding the functions (nodes) to `pipelines/my_flow.py` that build the DAG, following the Hamilton paradigm.
209
-
210
- 2. **Parameterize Functions**
211
-
212
- You can parameterize functions in two ways:
213
-
214
- **Method 1: Default Values**
215
- ```python
216
- def add_int_col(
217
- df: pd.DataFrame,
218
- col_name: str = "foo",
219
- values: str = "bar"
220
- ) -> pd.DataFrame:
221
- return df.assign(**{col_name: values})
222
- ```
223
-
224
- **Method 2: Configuration File**
225
-
226
- In `conf/pipelines/my_flow.yml`:
227
- ```yaml
228
- ...
229
- func:
230
- add_int_col:
231
- col_name: foo
232
- values: bar
233
- ...
234
- ```
235
-
236
- Add the `@parameterize` decorator to the function in your pipeline file:
237
- ```python
238
- @parameterize(**PARAMS.add_int_col)
239
- def add_int_col(
240
- df: pd.DataFrame,
241
- col_name: str,
242
- values: int
243
- ) -> pd.DataFrame:
244
- return df.assign(**{col_name: values})
245
- ```
246
-
247
- ---
248
-
249
- ### Running Pipelines
250
-
251
- #### Configuration
252
-
253
- You can configure the pipeline parameters `inputs`, and `final_vars`, and other parameters in the pipeline
254
- configuration file `conf/pipelines/my_flow.yml` or directly in the pipeline execution function.
255
-
256
- #### Using the Pipeline Configuration
257
- ```yaml
258
- ...
259
- run:
260
- inputs:
261
- data_path: path/to/data.csv
262
- fs_protocol: local
263
- final_vars: [add_int_col, final_df]
264
- # optional parameters
265
- with_tracker: false
266
- executor: threadpool # or processpool, ray, dask
267
- ...
268
- ```
269
-
270
- #### Execution Methods
271
- There are three ways to execute a pipeline:
272
-
273
- 1. **Direct Execution**
274
- - Runs in current process
275
- - No data store required
276
-
277
- 2. **Job Execution**
278
- - Runs as APScheduler job
279
- - Returns job results
280
- - Requires data store and event broker
281
-
282
- 3. **Async Job Addition**
283
- - Adds to APScheduler
284
- - Returns job ID
285
- - Results retrievable from data store
286
-
287
-
288
- #### Command Line Usage
289
- ```bash
290
- # Note: add --inputs and --final-vars and other optional parameters if not specified in the config file
291
- # Direct execution
292
- flowerpower run my_flow
293
- # Job execution
294
- flowerpower run-job my_flow
295
-
296
- # Add as scheduled job
297
- flowerpower add-job my_flow
298
- ```
299
-
300
- You can also use the `--inputs` and `--final-vars` flags to override the configuration file parameters or if they are not specified in the configuration file.
301
-
302
- ```bash
303
- flowerpower run my_flow \
304
- --inputs data_path=path/to/data.csv,fs_protocol=local \
305
- --final-vars final_df \
306
- --executor threadpool
307
- --without-tracker
308
- ```
309
-
310
- #### Python Usage
311
- ```python
312
- from flowerpower.pipeline import Pipeline, run, run_job, add_job
313
-
314
- # Using Pipeline class
315
- p = Pipeline("my_flow")
316
- # Note: add inputs, final_vars, and other optional arguments if not specified in the config file
317
- result = p.run()
318
- result = p.run_job()
319
- job_id = p.add_job()
320
-
321
- # Using functions
322
- result = run("my_flow")
323
- result = run_job("my_flow")
324
- job_id = add_job("my_flow")
325
- ```
326
-
327
- You can also use the `inputs` and `final-vars` arguments to override the configuration file parameters or if they are not specified in the configuration file.
328
-
329
- ```python
330
- result = run(
331
- "my_flow",
332
- inputs={
333
- "data_path": "path/to/data.csv",
334
- "fs_protocol": "local"
335
- },
336
- final_vars=["final_df"],
337
- executor="threadpool",
338
- with_tracker=False
339
- )
340
- ```
341
-
342
- ---
343
- ## ⏰ Scheduling Pipelines
344
-
345
- ### Setting Up Schedules
346
-
347
- #### Command Line Options
348
-
349
- ```bash
350
- # Run every 30 seconds
351
- flowerpower schedule my_flow \
352
- --type interval \
353
- --interval-params seconds=30
354
-
355
- # Run at specific date/time
356
- flowerpower schedule my_flow \
357
- --type date \
358
- --date-params year=2022,month=1,day=1,hour=0,minute=0,second=0
359
-
360
- # Run with cron parameters
361
- flowerpower schedule my_flow \
362
- --type cron \
363
- --cron-params second=0,minute=0,hour=0,day=1,month=1,day_of_week=0
364
-
365
- # Run with crontab expression
366
- flowerpower schedule my_flow \
367
- --type cron \
368
- --crontab "0 0 1 1 0"
369
- ```
370
-
371
- #### Python Usage
372
- ```python
373
- from flowerpower.scheduler import schedule, Pipeline
374
-
375
- # Using Pipeline class
376
- p = Pipeline("my_flow")
377
- p.schedule("interval", seconds=30)
378
-
379
- # Using schedule function
380
- schedule("my_flow", "interval", seconds=30)
381
- ```
382
-
383
- ---
384
-
385
- ## 👷 Worker Management
386
-
387
- ### Starting a Worker
388
-
389
- **Command Line**
390
- ```bash
391
- flowerpower start-worker
392
- ```
393
-
394
- **Python**
395
- ```python
396
- # Using the SchedulerManager class
397
- from flowerpower.scheduler import SchedulerManager
398
- sm = SchedulerManager()
399
- sm.start_worker()
400
-
401
- # Using the start_worker function
402
- from flowerpower.scheduler import start_worker
403
- start_worker()
404
- ```
405
-
406
- ### Worker Configuration
407
-
408
- Configure your worker in `conf/project.yml`:
409
-
410
- ```yaml
411
- # PostgreSQL Configuration
412
- data_store:
413
- type: postgres
414
- uri: postgresql+asyncpq://user:password@localhost:5432/flowerpower
415
-
416
- # Redis Event Broker
417
- event_broker:
418
- type: redis
419
- uri: redis://localhost:6379
420
- # Alternative configuration:
421
- # host: localhost
422
- # port: 6379
423
- ```
424
-
425
- #### Alternative Data Store Options
426
-
427
- **SQLite**
428
- ```yaml
429
- data_store:
430
- type: sqlite
431
- uri: sqlite+aiosqlite:///flowerpower.db
432
- ```
433
-
434
- **MySQL**
435
- ```yaml
436
- data_store:
437
- type: mysql
438
- uri: mysql+aiomysql://user:password@localhost:3306/flowerpower
439
- ```
440
-
441
- **MongoDB**
442
- ```yaml
443
- data_store:
444
- type: mongodb
445
- uri: mongodb://localhost:27017/flowerpower
446
- ```
447
-
448
- **In-Memory**
449
- ```yaml
450
- data_store:
451
- type: memory
452
- ```
453
-
454
- #### Alternative Event Broker Options
455
-
456
- **MQTT**
457
- ```yaml
458
- event_broker:
459
- type: mqtt
460
- host: localhost
461
- port: 1883
462
- username: user # optional if required
463
- password: supersecret # optional if required
464
- ```
465
- **Redis**
466
- ```yaml
467
- event_broker:
468
- type: redis
469
- uri: redis://localhost:6379
470
- # Alternative configuration:
471
- # host: localhost
472
- # port: 6379
473
- ```
474
-
475
- **In-Memory**
476
- ```yaml
477
- event_broker:
478
- type: memory
479
- ```
480
-
481
- ---
482
-
483
- ## 📊 Pipeline Tracking
484
-
485
- ### Hamilton UI Setup
486
-
487
- #### Local Installation
488
- ```bash
489
- # Install UI package
490
- pip install "flowerpower[ui]"
491
-
492
- # Start UI server
493
- flowerpower hamilton-ui
494
- ```
495
- > Access the UI at: http://localhost:8241
496
-
497
- #### Docker Installation
498
- ```bash
499
- # Clone Hamilton repository
500
- git clone https://github.com/dagworks-inc/hamilton
501
- cd hamilton/ui
502
-
503
- # Start UI server
504
- ./run.sh
505
- ```
506
- > Access the UI at: http://localhost:8242
507
-
508
- ### Tracker Configuration
509
-
510
- Configure tracking in `conf/project.yml`:
511
-
512
- ```yaml
513
- username: my_email@example.com
514
- api_url: http://localhost:8241
515
- ui_url: http://localhost:8242
516
- api_key: optional_key
517
- ```
518
-
519
- And specify the `tracker` parameter in the pipeline configuration `conf/pipelines/my_flow.yml:
520
-
521
- ```yaml
522
- ...
523
- tracker:
524
- project_id: 1
525
- tags:
526
- environment: dev
527
- version: 1.0
528
- dag_name: my_flow_123
529
- ...
530
- ```
531
-
532
- ---
533
-
534
- ## 🛠️ Development Services
535
-
536
- ### Local Development Setup
537
-
538
- Download the docker-compose configuration:
539
- ```bash
540
- curl -O https://raw.githubusercontent.com/legout/flowerpower/main/docker/docker-compose.yml
541
- ```
542
-
543
- ### Starting Services
544
-
545
- ```bash
546
- # MQTT Broker (EMQX)
547
- docker-compose up mqtt -d
548
-
549
- # Redis
550
- docker-compose up redis -d
551
-
552
- # MongoDB
553
- docker-compose up mongodb -d
554
-
555
- # PostgreSQL
556
- docker-compose up postgres -d
557
- ```
558
-
559
- ---
560
-
561
- ## 📝 License
562
-
563
- [MIT License](LICENSE)
564
-
565
- ---
566
-
567
- ## 🤝 Contributing
568
-
569
- Contributions are welcome! Please feel free to submit a Pull Request.
570
-
571
- ---
572
-
573
- ## 📫 Support
574
-
575
- For support, please open an issue in the GitHub repository.
@@ -1,70 +0,0 @@
1
- flowerpower/__init__.py,sha256=eD08iJU0y6w8BMCvJou9HMbvH8I62ed9lUs30mh2wTA,134
2
- flowerpower/event_handler.py,sha256=JH1o_GUTlYemrwTgOD0291_SUynLeeReSAOk_oLWLYg,534
3
- flowerpower/flowerpower.py,sha256=NMbZrXO4jO8Tc9h1tYJA1awtxU_xJiRna3V6_Tn0IoI,3232
4
- flowerpower/mqtt.py,sha256=E_JLWDut_t5eSvKWDSLLqCjHIRhuN5MwrNQB99hT4vI,17785
5
- flowerpower/pipeline.py,sha256=nx2oluwf3Dwr5YQ_ehOWDLcHQ6_O0dHT4JxngaOaBYw,89366
6
- flowerpower/scheduler.py,sha256=ylYnrxec7i9nuCK0QvJlukz6GcnIxNPoiHi9jmelrPQ,20982
7
- flowerpower/tui.py,sha256=2ff_yOfOQnkFctIKKHV1RDW4M5AsX5FUAT0L6ygkvVU,2294
8
- flowerpower/cfg/__init__.py,sha256=YAn0DF2koQ47gACBTTo4PeDxXah20ndAVosutzHsZYk,7457
9
- flowerpower/cfg/base.py,sha256=JUhxWzC3XesnhEpBwHbyqOG6_dra-pEbsJsBbGX59dM,1291
10
- flowerpower/cfg/pipeline/params.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
11
- flowerpower/cfg/pipeline/run.py,sha256=Y3jU9dYYh3R5Us-xkbj2ol3oizlGvxTc_H8N88bhYdU,565
12
- flowerpower/cfg/pipeline/schedule.py,sha256=JAREhzvkYqPH6Op-FY8UuqTmGVqrl3yt8aByXscCkgk,2753
13
- flowerpower/cfg/pipeline/tracker.py,sha256=cew9F4UIEgkR9u6p12xRBW5aGN22hDRExKbnMEbA0EM,370
14
- flowerpower/cfg/project/open_telemetry.py,sha256=3tJQ92qgZHsS2tYQ3ZlHtpVREz5DA4NzhBVfjzyvxTU,185
15
- flowerpower/cfg/project/tracker.py,sha256=KcvSaJtLLOibQtgpIuUm-pe0ZgdV9HBfLNzSZlKKYio,303
16
- flowerpower/cfg/project/worker.py,sha256=5M2bUousYXLpLJGVnUyFrDB-vJp7b8VBhZhzISbszac,665
17
- flowerpower/cli/__init__.py,sha256=uv2YJeNYl-u-pqzvyd6RfR4lKhlWc-765cHhttTt-2Y,2419
18
- flowerpower/cli/cfg.py,sha256=B9yV6g9bTGRXOR1PewQTxf_XfcYbcsE3GeLAxlbE2qc,1530
19
- flowerpower/cli/mqtt.py,sha256=Pf7en5X4LrvSfPUwTSNsngsRs-92vID0blSdbW6dIXo,3909
20
- flowerpower/cli/pipeline.py,sha256=E9cAKWl3YKWMMYwpyCPJsiT0FcCAGlZpG49XP8AMXZk,19450
21
- flowerpower/cli/scheduler.py,sha256=1i-Qm5GF5Ra4hmXlKLXPveELo7frObXbhDzQsA9Iulc,8681
22
- flowerpower/cli/utils.py,sha256=YsanJhtYwlH8WfFx1GGgyW9Y0ArxdlMgsi_eQOCj9DM,3299
23
- flowerpower/fs/__init__.py,sha256=0vmjffXYEE5PnQtSOO07EOpMZgEG2QDmFlDn7G-ZTUg,216
24
- flowerpower/fs/base.py,sha256=vI6XFkzI_AeJ6_JtBnaMKjZE0-vjqHYvpDo1w4yCxl8,10523
25
- flowerpower/fs/ext.py,sha256=ipiwQX4fpdr_o_ywkim8d2CKAYnDIsRv8dH75Xzhph8,45186
26
- flowerpower/fs/storage_options.py,sha256=B-rCbwPookMqvzL2H4YPR3aOnpgaHusI2Zd-6d_z97Q,10667
27
- flowerpower/io/base.py,sha256=lDTwer9KgKcdOlr2hvswEXdBPgLgNC3iUEM6QsbG56U,75863
28
- flowerpower/io/metadata.py,sha256=_Q1gf8F8RMaSFEvMOozLtR0PmCO-4rJCH5Da9WLbGF8,7269
29
- flowerpower/io/loader/_duckdb.py,sha256=WB9CKI7H4eumcV3VKqiEXiiLSDkHmjjyzrUytQWf6Qc,10311
30
- flowerpower/io/loader/csv.py,sha256=2geJIMljENZGCvjUPg1CCBgnb4LN8TzUGXcPi9HWotQ,890
31
- flowerpower/io/loader/deltatable.py,sha256=6eNjO5tfGHoHpJg9hHFMxeWT4VClSrldgr1aWJ0ceRU,6564
32
- flowerpower/io/loader/duckdb.py,sha256=lRhPyRaOhDEFund3wm7Fd7MpatluoDakhwipltfANrY,486
33
- flowerpower/io/loader/json.py,sha256=wdhZhb4xO538c5SqDzNHB7U_Ao0E6MlLIHfSpGT-o2Y,802
34
- flowerpower/io/loader/mqtt.py,sha256=2eAnavk9KcapQcZqoKOi81FvUFGbhkeJWzB6y01-3Pc,5147
35
- flowerpower/io/loader/mssql.py,sha256=0nwa71KvdRLEUxDFnlFH7hIqWDRmZoVhfqt4ua8Xcqs,825
36
- flowerpower/io/loader/mysql.py,sha256=6zuOvBntZca6bQ25ReUTeLp8J9SnwuYcoQL5WRu3B_0,825
37
- flowerpower/io/loader/oracle.py,sha256=6YlIsim_XlDbBZ6Uje8FuxovxXXn6oPZ4Vmsp37KLrw,841
38
- flowerpower/io/loader/parquet.py,sha256=8bXmZuzVCA2eFsnrp-vupdyLihvzSpb2LYAIXuX0aXo,850
39
- flowerpower/io/loader/postgres.py,sha256=rb9HhbWG1mPxVU7ZhtpR-S3BMQ0DgE9Mj27_Me6Yeqc,853
40
- flowerpower/io/loader/pydala.py,sha256=17plL-oVi0hgrYGAfCW8vxM9d4zTjSKLOF9LJSVIbSo,438
41
- flowerpower/io/loader/sqlite.py,sha256=5SFeBfhgibjYemUhaPrMfg1XkFCAaIqu-B5gIcQjTN8,627
42
- flowerpower/io/saver/_duckdb.py,sha256=GMQohIkpNVUcwT7tUv4MqtaPhaIPCwGl1kkdtp9DocE,9274
43
- flowerpower/io/saver/csv.py,sha256=q6ndV12bobRWNJBibLaDbpvBiOsTcARmYMn8B1uegZk,799
44
- flowerpower/io/saver/deltatable.py,sha256=xPzLpdXz26x94_aiWy64awVB5Pv62iiGVsGt42lVc68,6947
45
- flowerpower/io/saver/duckdb.py,sha256=XNHgn8Qc2m7xovKZWOYEjNTf6CTQ4me5UToo1-kpzi0,433
46
- flowerpower/io/saver/json.py,sha256=Qx17Yghia7RmXYoee7MXQjc6uKdyHxqI-5JhCdkBKuA,789
47
- flowerpower/io/saver/mqtt.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
- flowerpower/io/saver/mssql.py,sha256=4oDblnkm99gOHMXkEeMTd91hqPNHjy7eVUYxZWMGN0A,758
49
- flowerpower/io/saver/mysql.py,sha256=l88MfCoMFdPtn5XlR4IlnLXpeYlQz4ljUJoljoJpw6I,758
50
- flowerpower/io/saver/oracle.py,sha256=8mw45vKDL7HeFcIhL95yvg2ODAwUBLPZIfnb5sWpjIk,774
51
- flowerpower/io/saver/parquet.py,sha256=IkYODtvcuwECjNlMdEogd0CkC3KEn00tgxQfvbzYXac,815
52
- flowerpower/io/saver/postgres.py,sha256=lDSGnN3Y6xDuqn5NjnSxAWk84QmOhwrYCTQhXMlABLo,784
53
- flowerpower/io/saver/pydala.py,sha256=0hcyFNWOVbdNlC_F0KbeVeTbgOZX2HbTvY1i6UU3kUw,478
54
- flowerpower/io/saver/sqlite.py,sha256=q7v3fWtiaGslfKbgHpdaV8p7WtXc2MMyx3yMxmW7G5s,625
55
- flowerpower/utils/datastore.py,sha256=LiAJlDLgHdKGzRdUwxvucjjTj8tF9gJR_dzj2qmLTEE,5468
56
- flowerpower/utils/eventbroker.py,sha256=lx19N5qqlPZX6JGG70MmM0Mu3V8jTCb30D0-CUynfRY,3819
57
- flowerpower/utils/executor.py,sha256=drX8Phew5K7d_Y3tkt30DaQcXHlq8um6dYLSYJrIIL0,2057
58
- flowerpower/utils/misc.py,sha256=a7Wnm0k3dOOSbX9zmZU1TiCF6a75x1xSraxcm2sIqf8,14404
59
- flowerpower/utils/monkey.py,sha256=VPl3yimoWhwD9kI05BFsjNvtyQiDyLfY4Q85Bb6Ma0w,2903
60
- flowerpower/utils/open_telemetry.py,sha256=fQWJWbIQFtKIxMBjAWeF12NGnqT0isO3A3j-DSOv_vE,949
61
- flowerpower/utils/polars.py,sha256=-b4SrVVtsS4g03rD1vdsd6vu7zQogua1p57fYGhe6vo,17739
62
- flowerpower/utils/scheduler.py,sha256=2zJ_xmLXpvXUQNF1XS2Gqm3Ogo907ctZ50GtvQB_rhE,9354
63
- flowerpower/utils/sql.py,sha256=lGcZEicPRIgwEzvBJmGau8PWzsVXUj5p0ozcVhCDagE,8709
64
- flowerpower/utils/templates.py,sha256=3MOy65S3vSV6g0WkmASQYNYWD6q0Ulr-cMUDRaSk8y4,4215
65
- flowerpower/utils/trigger.py,sha256=NU1hC9Azu2xH8pQ-nVt4DrqVDIs9bqGM3nXHvdwKCEM,3315
66
- flowerpower-0.9.12.4.dist-info/METADATA,sha256=8bDOnTWvzXkzdAzpId2eh10Xo7ueoESfDHn6wNEKrUU,13454
67
- flowerpower-0.9.12.4.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
68
- flowerpower-0.9.12.4.dist-info/entry_points.txt,sha256=61X11i5a2IwC9LBiP20XCDl5zMOigGCjMCx17B7bDbQ,52
69
- flowerpower-0.9.12.4.dist-info/top_level.txt,sha256=VraH4WtEUfSxs5L-rXwDQhzQb9eLHTUtgvmFZ2dAYnA,12
70
- flowerpower-0.9.12.4.dist-info/RECORD,,
File without changes