sibi-flux 2026.1.2__tar.gz → 2026.1.4__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.
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/PKG-INFO +2 -4
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/pyproject.toml +6 -30
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/__init__.py +0 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/cli.py +29 -6
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/config/settings.py +20 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/_data_cube.py +1 -0
- sibi_flux-2026.1.4/src/sibi_flux/datacube/cli.py +2469 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/config_engine.py +36 -18
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/field_factory.py +72 -28
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/field_mapper.py +93 -69
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/field_registry.py +1 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/generator.py +255 -181
- sibi_flux-2026.1.4/src/sibi_flux/datacube/orchestrator.py +569 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/router.py +5 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/__init__.py +0 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_validator/_df_validator.py +1 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/core.py +93 -41
- sibi_flux-2026.1.4/src/sibi_flux/init/discovery_updater.py +153 -0
- sibi_flux-2026.1.4/src/sibi_flux/init/env.py +113 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/env_engine.py +83 -42
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/env_generator.py +336 -183
- sibi_flux-2026.1.4/src/sibi_flux/init/rule_generator.py +171 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/templates/discovery_params.yaml +9 -10
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/templates/gen_dc.py +74 -23
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/orchestration/__init__.py +0 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/storage/_storage_manager.py +0 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/date_utils/__init__.py +0 -1
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/date_utils/_business_days.py +0 -1
- sibi_flux-2026.1.2/src/sibi_flux/datacube/cli.py +0 -1247
- sibi_flux-2026.1.2/src/sibi_flux/datacube/orchestrator.py +0 -297
- sibi_flux-2026.1.2/src/sibi_flux/init/discovery_updater.py +0 -99
- sibi_flux-2026.1.2/src/sibi_flux/init/env.py +0 -86
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/README.md +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_dst/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/base.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/parquet.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/parquet_engine/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/parquet_engine/executor.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/parquet_engine/manifest.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/artifacts/parquet_engine/planner.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/config/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/config/manager.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/core/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/core/managed_resource/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/core/managed_resource/_managed_resource.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/core/type_maps/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/async_core.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/client_manager.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/core.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/exceptions.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dask_cluster/utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/datacube/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dataset/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dataset/_dataset.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/dataset/hybrid_loader.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/async_enricher.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/attacher.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/merger.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/specs.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_enricher/types.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/_df_helper.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/_params.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/_strategies.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/http/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/http/_http_config.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/parquet/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/parquet/_parquet_options.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_db_connection.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_db_gatekeeper.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_io_dask.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_load_from_db.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_model_registry.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/sqlalchemy/_sql_model_builder.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/backends/utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/core/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/core/_defaults.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/core/_filter_handler.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/core/_params_config.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_helper/core/_query_config.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/df_validator/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/templates/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/init/templates/property_template.yaml +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/logger/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/logger/_logger.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/mcp/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/mcp/client.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/mcp/router.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/orchestration/_artifact_orchestrator.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/orchestration/_pipeline_executor.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/osmnx_helper/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/osmnx_helper/_pbf_handler.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/osmnx_helper/graph_loader.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/osmnx_helper/utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/readers/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/readers/base.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/readers/parquet.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/saver/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/saver/_parquet_saver.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/parquet/saver/_write_gatekeeper.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/pipelines/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/pipelines/base.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/pipelines/template.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/py.typed +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/readers/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/readers/base.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/storage/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/storage/_fs_registry.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/storage/factory.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/clickhouse_writer/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/clickhouse_writer/_clickhouse_writer.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/common.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/dask_utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/data_utils/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/data_utils/_data_utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/dataframe_utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/date_utils/_date_utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/date_utils/_file_age_checker.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/file_utils.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/filepath_generator/__init__.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/filepath_generator/_filepath_generator.py +0 -0
- {sibi_flux-2026.1.2 → sibi_flux-2026.1.4}/src/sibi_flux/utils/retry.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: sibi-flux
|
|
3
|
-
Version: 2026.1.
|
|
3
|
+
Version: 2026.1.4
|
|
4
4
|
Summary: Sibi Toolkit: A collection of tools for Data Analysis/Engineering.
|
|
5
5
|
Author: Luis Valverde
|
|
6
6
|
Author-email: Luis Valverde <lvalverdeb@gmail.com>
|
|
@@ -29,8 +29,8 @@ Requires-Dist: opentelemetry-exporter-otlp>=1.38.0
|
|
|
29
29
|
Requires-Dist: opentelemetry-sdk>=1.38.0
|
|
30
30
|
Requires-Dist: deep-translator>=1.11.4
|
|
31
31
|
Requires-Dist: pyyaml>=6.0.3
|
|
32
|
+
Requires-Dist: distributed>=2025.11.0
|
|
32
33
|
Requires-Dist: sibi-flux[distributed,geospatial,mcp] ; extra == 'complete'
|
|
33
|
-
Requires-Dist: distributed>=2025.11.0 ; extra == 'distributed'
|
|
34
34
|
Requires-Dist: osmnx>=2.0.7 ; extra == 'geospatial'
|
|
35
35
|
Requires-Dist: geopandas>=1.1.2 ; extra == 'geospatial'
|
|
36
36
|
Requires-Dist: geopy>=2.4.1 ; extra == 'geospatial'
|
|
@@ -38,14 +38,12 @@ Requires-Dist: folium>=0.20.0 ; extra == 'geospatial'
|
|
|
38
38
|
Requires-Dist: osmium>=4.2.0 ; extra == 'geospatial'
|
|
39
39
|
Requires-Dist: shapely>=2.0.0 ; extra == 'geospatial'
|
|
40
40
|
Requires-Dist: networkx>=3.6.1 ; extra == 'geospatial'
|
|
41
|
-
Requires-Dist: sibi-flux[distributed] ; extra == 'mcp'
|
|
42
41
|
Requires-Dist: mcp>=1.1.2 ; extra == 'mcp'
|
|
43
42
|
Requires-Dist: fastapi>=0.127.0 ; extra == 'mcp'
|
|
44
43
|
Requires-Dist: uvicorn>=0.40.0 ; extra == 'mcp'
|
|
45
44
|
Requires-Dist: httpx>=0.28.1 ; extra == 'mcp'
|
|
46
45
|
Requires-Python: >=3.11
|
|
47
46
|
Provides-Extra: complete
|
|
48
|
-
Provides-Extra: distributed
|
|
49
47
|
Provides-Extra: geospatial
|
|
50
48
|
Provides-Extra: mcp
|
|
51
49
|
Description-Content-Type: text/markdown
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "sibi-flux"
|
|
3
|
-
version = "2026.1.
|
|
3
|
+
version = "2026.1.4"
|
|
4
4
|
description = "Sibi Toolkit: A collection of tools for Data Analysis/Engineering."
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
authors = [
|
|
@@ -35,14 +35,11 @@ dependencies = [
|
|
|
35
35
|
"opentelemetry-sdk>=1.38.0",
|
|
36
36
|
"deep-translator>=1.11.4",
|
|
37
37
|
"pyyaml>=6.0.3",
|
|
38
|
+
"distributed>=2025.11.0",
|
|
38
39
|
]
|
|
39
40
|
|
|
40
41
|
[project.optional-dependencies]
|
|
41
|
-
distributed = [
|
|
42
|
-
"distributed>=2025.11.0",
|
|
43
|
-
]
|
|
44
42
|
mcp = [
|
|
45
|
-
"sibi-flux[distributed]",
|
|
46
43
|
"mcp>=1.1.2",
|
|
47
44
|
"fastapi>=0.127.0",
|
|
48
45
|
"uvicorn>=0.40.0",
|
|
@@ -97,30 +94,9 @@ module-name = ["sibi_flux", "sibi_dst"]
|
|
|
97
94
|
[tool.uv.workspace]
|
|
98
95
|
members = [
|
|
99
96
|
"test-project-alpha",
|
|
100
|
-
"test-
|
|
101
|
-
"
|
|
102
|
-
"
|
|
103
|
-
"test-project-epsilon",
|
|
104
|
-
"test-project-zeta",
|
|
105
|
-
"test-project-eta",
|
|
106
|
-
"test-project-theta",
|
|
107
|
-
"test-project-iota",
|
|
108
|
-
"test-project-kappa",
|
|
109
|
-
"test-project-lambda",
|
|
110
|
-
"test-project-alpha/latest",
|
|
111
|
-
"test-project-mu",
|
|
112
|
-
"test-project-mu/latest",
|
|
113
|
-
"test-project-xi",
|
|
114
|
-
"test-project-xi/latest",
|
|
115
|
-
"test-project-omicron",
|
|
116
|
-
"test-project-omicron/latest",
|
|
117
|
-
"test-project-pi",
|
|
118
|
-
"test-project-pi/latest",
|
|
119
|
-
"test-project-rho",
|
|
120
|
-
"test-project-rho/latest",
|
|
121
|
-
"test-project-sigma",
|
|
122
|
-
"test-project-sigma/latest",
|
|
123
|
-
"test-project-tau",
|
|
97
|
+
"test-prj",
|
|
98
|
+
"test_prj",
|
|
99
|
+
"test_prj_verify",
|
|
124
100
|
]
|
|
125
101
|
|
|
126
102
|
[tool.pytest.ini_options]
|
|
@@ -141,7 +117,7 @@ uvicorn solutions.main:app
|
|
|
141
117
|
--env-file .env.linux
|
|
142
118
|
--workers 1
|
|
143
119
|
"""
|
|
144
|
-
test = { cmd = "pytest tests/"}
|
|
120
|
+
test = { cmd = "pytest tests/", env = { SIBI_FLUX_ROUTER_INTROSPECTION = "false" } }
|
|
145
121
|
lint = "black src/"
|
|
146
122
|
build = "uv build"
|
|
147
123
|
dc-sync = "python solutions/generators/datacubes/gen_dc.py sync"
|
|
@@ -7,39 +7,62 @@ from sibi_flux.init.core import initialize_project
|
|
|
7
7
|
app = typer.Typer(help="Sibi Flux CLI")
|
|
8
8
|
console = Console()
|
|
9
9
|
|
|
10
|
+
|
|
10
11
|
@app.callback()
|
|
11
12
|
def callback():
|
|
12
13
|
"""
|
|
13
14
|
Sibi Flux CLI
|
|
14
15
|
"""
|
|
15
16
|
|
|
17
|
+
|
|
16
18
|
@app.command()
|
|
17
19
|
def init(
|
|
18
20
|
project_name: str = typer.Argument(..., help="Name of the project to create"),
|
|
19
|
-
lib: bool = typer.Option(
|
|
20
|
-
|
|
21
|
+
lib: bool = typer.Option(
|
|
22
|
+
False, "--lib", help="Initialize as a library project (passed to uv init)"
|
|
23
|
+
),
|
|
24
|
+
app: bool = typer.Option(
|
|
25
|
+
False, "--app", help="Initialize as an application project (passed to uv init)"
|
|
26
|
+
),
|
|
21
27
|
):
|
|
22
28
|
"""
|
|
23
29
|
Initialize a new Sibi Flux project.
|
|
24
|
-
|
|
30
|
+
|
|
25
31
|
Creates a new directory <project_name>, initializes it with 'uv',
|
|
26
32
|
and adds 'sibi-flux' as a dependency.
|
|
27
33
|
"""
|
|
28
34
|
initialize_project(project_name, lib, app)
|
|
29
35
|
|
|
36
|
+
|
|
30
37
|
@app.command()
|
|
31
38
|
def env(
|
|
32
39
|
project_path: Path = typer.Argument(Path("."), help="Project root directory"),
|
|
33
|
-
env_file: Optional[Path] = typer.Option(
|
|
34
|
-
|
|
35
|
-
|
|
40
|
+
env_file: Optional[Path] = typer.Option(
|
|
41
|
+
None, "--env-file", "-e", help="Path to environment file (defaults to .env)"
|
|
42
|
+
),
|
|
43
|
+
cleanup: bool = typer.Option(
|
|
44
|
+
False, "--cleanup", help="Remove existing configuration files"
|
|
45
|
+
),
|
|
46
|
+
production: bool = typer.Option(
|
|
47
|
+
False,
|
|
48
|
+
"--production",
|
|
49
|
+
"-p",
|
|
50
|
+
help="Generate production skeleton (no hardcoded values)",
|
|
51
|
+
),
|
|
36
52
|
):
|
|
37
53
|
"""
|
|
38
54
|
Initialize configuration files (settings.py, credentials) based on .env
|
|
39
55
|
"""
|
|
40
56
|
from sibi_flux.init.env import init_env
|
|
57
|
+
|
|
41
58
|
init_env(project_path, env_file, cleanup=cleanup, production_mode=production)
|
|
42
59
|
|
|
43
60
|
|
|
61
|
+
# Mount Datacube CLI
|
|
62
|
+
from sibi_flux.datacube.cli import app as dc_app
|
|
63
|
+
|
|
64
|
+
app.add_typer(dc_app, name="dc", help="Datacube generation and management commands")
|
|
65
|
+
|
|
66
|
+
|
|
44
67
|
if __name__ == "__main__":
|
|
45
68
|
app()
|
|
@@ -9,7 +9,7 @@ class SibiBaseSettings(BaseSettings):
|
|
|
9
9
|
model_config = SettingsConfigDict(
|
|
10
10
|
env_file=".env", env_file_encoding="utf-8", extra="ignore"
|
|
11
11
|
)
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
conf_name: ClassVar[str] = ""
|
|
14
14
|
|
|
15
15
|
|
|
@@ -103,6 +103,25 @@ class DatabaseSettings(SibiBaseSettings):
|
|
|
103
103
|
}
|
|
104
104
|
|
|
105
105
|
|
|
106
|
+
class ClickhouseBaseSettings(SibiBaseSettings):
|
|
107
|
+
"""Base settings for ClickHouse connection."""
|
|
108
|
+
|
|
109
|
+
interface: str = "http"
|
|
110
|
+
host: str = "localhost"
|
|
111
|
+
port: int = 8123
|
|
112
|
+
database: str = "default"
|
|
113
|
+
username: str = "default"
|
|
114
|
+
password: SecretStr = SecretStr("")
|
|
115
|
+
|
|
116
|
+
def to_legacy_dict(self) -> dict[str, Any]:
|
|
117
|
+
return {
|
|
118
|
+
"interface": self.interface,
|
|
119
|
+
"host": self.host,
|
|
120
|
+
"port": self.port,
|
|
121
|
+
"database": self.database,
|
|
122
|
+
"username": self.username,
|
|
123
|
+
"password": self.password.get_secret_value() if self.password else None,
|
|
124
|
+
}
|
|
106
125
|
|
|
107
126
|
|
|
108
127
|
class RedisBaseSettings(SibiBaseSettings):
|