sibi-flux 2026.1.2__tar.gz → 2026.1.3__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 (129) hide show
  1. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/PKG-INFO +2 -4
  2. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/pyproject.toml +5 -29
  3. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/__init__.py +0 -1
  4. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/cli.py +29 -6
  5. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/config/settings.py +1 -3
  6. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/_data_cube.py +1 -0
  7. sibi_flux-2026.1.3/src/sibi_flux/datacube/cli.py +2469 -0
  8. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/config_engine.py +36 -18
  9. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/field_factory.py +71 -28
  10. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/field_mapper.py +93 -69
  11. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/field_registry.py +1 -1
  12. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/generator.py +255 -181
  13. sibi_flux-2026.1.3/src/sibi_flux/datacube/orchestrator.py +569 -0
  14. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/__init__.py +0 -1
  15. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/core.py +93 -41
  16. sibi_flux-2026.1.3/src/sibi_flux/init/discovery_updater.py +153 -0
  17. sibi_flux-2026.1.3/src/sibi_flux/init/env.py +113 -0
  18. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/env_engine.py +83 -42
  19. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/env_generator.py +336 -183
  20. sibi_flux-2026.1.3/src/sibi_flux/init/rule_generator.py +171 -0
  21. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/templates/discovery_params.yaml +9 -10
  22. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/templates/gen_dc.py +74 -23
  23. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/orchestration/__init__.py +0 -1
  24. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/storage/_storage_manager.py +0 -1
  25. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/date_utils/__init__.py +0 -1
  26. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/date_utils/_business_days.py +0 -1
  27. sibi_flux-2026.1.2/src/sibi_flux/datacube/cli.py +0 -1247
  28. sibi_flux-2026.1.2/src/sibi_flux/datacube/orchestrator.py +0 -297
  29. sibi_flux-2026.1.2/src/sibi_flux/init/discovery_updater.py +0 -99
  30. sibi_flux-2026.1.2/src/sibi_flux/init/env.py +0 -86
  31. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/README.md +0 -0
  32. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_dst/__init__.py +0 -0
  33. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/__init__.py +0 -0
  34. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/base.py +0 -0
  35. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/parquet.py +0 -0
  36. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/parquet_engine/__init__.py +0 -0
  37. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/parquet_engine/executor.py +0 -0
  38. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/parquet_engine/manifest.py +0 -0
  39. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/artifacts/parquet_engine/planner.py +0 -0
  40. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/config/__init__.py +0 -0
  41. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/config/manager.py +0 -0
  42. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/core/__init__.py +0 -0
  43. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/core/managed_resource/__init__.py +0 -0
  44. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/core/managed_resource/_managed_resource.py +0 -0
  45. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/core/type_maps/__init__.py +0 -0
  46. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/__init__.py +0 -0
  47. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/async_core.py +0 -0
  48. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/client_manager.py +0 -0
  49. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/core.py +0 -0
  50. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/exceptions.py +0 -0
  51. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dask_cluster/utils.py +0 -0
  52. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/__init__.py +0 -0
  53. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/datacube/router.py +0 -0
  54. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dataset/__init__.py +0 -0
  55. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dataset/_dataset.py +0 -0
  56. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/dataset/hybrid_loader.py +0 -0
  57. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/__init__.py +0 -0
  58. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/async_enricher.py +0 -0
  59. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/attacher.py +0 -0
  60. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/merger.py +0 -0
  61. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/specs.py +0 -0
  62. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_enricher/types.py +0 -0
  63. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/__init__.py +0 -0
  64. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/_df_helper.py +0 -0
  65. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/_params.py +0 -0
  66. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/_strategies.py +0 -0
  67. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/http/__init__.py +0 -0
  68. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/http/_http_config.py +0 -0
  69. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/parquet/__init__.py +0 -0
  70. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/parquet/_parquet_options.py +0 -0
  71. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/__init__.py +0 -0
  72. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_db_connection.py +0 -0
  73. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_db_gatekeeper.py +0 -0
  74. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_io_dask.py +0 -0
  75. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_load_from_db.py +0 -0
  76. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_model_registry.py +0 -0
  77. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/sqlalchemy/_sql_model_builder.py +0 -0
  78. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/backends/utils.py +0 -0
  79. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/core/__init__.py +0 -0
  80. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/core/_defaults.py +0 -0
  81. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/core/_filter_handler.py +0 -0
  82. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/core/_params_config.py +0 -0
  83. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_helper/core/_query_config.py +0 -0
  84. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_validator/__init__.py +0 -0
  85. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/df_validator/_df_validator.py +0 -0
  86. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/__init__.py +0 -0
  87. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/templates/__init__.py +0 -0
  88. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/init/templates/property_template.yaml +0 -0
  89. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/logger/__init__.py +0 -0
  90. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/logger/_logger.py +0 -0
  91. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/mcp/__init__.py +0 -0
  92. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/mcp/client.py +0 -0
  93. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/mcp/router.py +0 -0
  94. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/orchestration/_artifact_orchestrator.py +0 -0
  95. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/orchestration/_pipeline_executor.py +0 -0
  96. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/osmnx_helper/__init__.py +0 -0
  97. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/osmnx_helper/_pbf_handler.py +0 -0
  98. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/osmnx_helper/graph_loader.py +0 -0
  99. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/osmnx_helper/utils.py +0 -0
  100. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/__init__.py +0 -0
  101. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/readers/__init__.py +0 -0
  102. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/readers/base.py +0 -0
  103. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/readers/parquet.py +0 -0
  104. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/saver/__init__.py +0 -0
  105. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/saver/_parquet_saver.py +0 -0
  106. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/parquet/saver/_write_gatekeeper.py +0 -0
  107. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/pipelines/__init__.py +0 -0
  108. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/pipelines/base.py +0 -0
  109. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/pipelines/template.py +0 -0
  110. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/py.typed +0 -0
  111. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/readers/__init__.py +0 -0
  112. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/readers/base.py +0 -0
  113. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/storage/__init__.py +0 -0
  114. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/storage/_fs_registry.py +0 -0
  115. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/storage/factory.py +0 -0
  116. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/__init__.py +0 -0
  117. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/clickhouse_writer/__init__.py +0 -0
  118. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/clickhouse_writer/_clickhouse_writer.py +0 -0
  119. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/common.py +0 -0
  120. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/dask_utils.py +0 -0
  121. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/data_utils/__init__.py +0 -0
  122. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/data_utils/_data_utils.py +0 -0
  123. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/dataframe_utils.py +0 -0
  124. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/date_utils/_date_utils.py +0 -0
  125. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/date_utils/_file_age_checker.py +0 -0
  126. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/file_utils.py +0 -0
  127. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/filepath_generator/__init__.py +0 -0
  128. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/src/sibi_flux/utils/filepath_generator/_filepath_generator.py +0 -0
  129. {sibi_flux-2026.1.2 → sibi_flux-2026.1.3}/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.2
3
+ Version: 2026.1.3
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.2"
3
+ version = "2026.1.3"
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-project-beta",
101
- "test-project-gamma",
102
- "test-project-delta",
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]
@@ -28,7 +28,6 @@ from sibi_flux import dask_cluster
28
28
  from sibi_flux.utils import clickhouse_writer
29
29
  from sibi_flux import parquet
30
30
 
31
-
32
31
  __all__ = [
33
32
  "__version__",
34
33
  "Logger",
@@ -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(False, "--lib", help="Initialize as a library project (passed to uv init)"),
20
- app: bool = typer.Option(False, "--app", help="Initialize as an application project (passed to uv init)")
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(None, "--env-file", "-e", help="Path to environment file (defaults to .env)"),
34
- cleanup: bool = typer.Option(False, "--cleanup", help="Remove existing configuration files"),
35
- production: bool = typer.Option(False, "--production", "-p", help="Generate production skeleton (no hardcoded values)"),
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,8 +103,6 @@ class DatabaseSettings(SibiBaseSettings):
103
103
  }
104
104
 
105
105
 
106
-
107
-
108
106
  class RedisBaseSettings(SibiBaseSettings):
109
107
  """Base settings for Redis connection."""
110
108
 
@@ -210,6 +210,7 @@ class Datacube(DfHelper):
210
210
  Offloads synchronous validation (CPU bound) to a thread.
211
211
  """
212
212
  import asyncio
213
+
213
214
  return await asyncio.to_thread(self.validate_data, df)
214
215
 
215
216
  def get_ddl(self, table_name: Optional[str] = None) -> str: