diff --git a/.idea/misc.xml b/.idea/misc.xml index 026cd6b6472b4b8701a0fa65b37e9630f2952e27..b17488e195f3307b580d8f2630fd7fb7014ee9e9 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -3,5 +3,5 @@ <component name="Black"> <option name="sdkName" value="Poetry (mitm-support)" /> </component> - <component name="ProjectRootManager" version="2" project-jdk-name="Poetry (mitm-tooling)" project-jdk-type="Python SDK" /> + <component name="ProjectRootManager" version="2" project-jdk-name="uv (mitm-tooling)" project-jdk-type="Python SDK" /> </project> \ No newline at end of file diff --git a/.idea/mitm-tooling.iml b/.idea/mitm-tooling.iml index cef4abc4197d5f67219eb4c03cc2d6f04c3a68de..04cbc6e3e3cf62cd72d3d5e4138b50ce767789f0 100644 --- a/.idea/mitm-tooling.iml +++ b/.idea/mitm-tooling.iml @@ -3,8 +3,9 @@ <component name="NewModuleRootManager"> <content url="file://$MODULE_DIR$"> <sourceFolder url="file://$MODULE_DIR$/test" isTestSource="true" /> + <excludeFolder url="file://$MODULE_DIR$/.venv" /> </content> - <orderEntry type="jdk" jdkName="Poetry (mitm-tooling)" jdkType="Python SDK" /> + <orderEntry type="jdk" jdkName="uv (mitm-tooling)" jdkType="Python SDK" /> <orderEntry type="sourceFolder" forTests="false" /> </component> </module> \ No newline at end of file diff --git a/mitm_tooling/transformation/superset/definitions/__init__.py b/mitm_tooling/transformation/superset/definitions/__init__.py index e8bcb327683c31552434c8e0cfcfb7e9fe3bf573..b520dac2a31467bf575e7783a59069714117121e 100644 --- a/mitm_tooling/transformation/superset/definitions/__init__.py +++ b/mitm_tooling/transformation/superset/definitions/__init__.py @@ -1,8 +1,10 @@ -from .chart import * from .constants import * from .core import * -from .dashboard import * from .database import * from .dataset import * +from .chart import * +from .dashboard import * from .importable import * from .post_processing import * +from .mitm_dataset import * + diff --git a/mitm_tooling/transformation/superset/definitions/chart.py b/mitm_tooling/transformation/superset/definitions/chart.py index 442e4f218eec66ba054562f109352be859471e27..da401e64c251f4a4ef8a8ee611e11301267ad5eb 100644 --- a/mitm_tooling/transformation/superset/definitions/chart.py +++ b/mitm_tooling/transformation/superset/definitions/chart.py @@ -1,4 +1,10 @@ -from .core import * +from typing import Any, Literal + +import pydantic + +from .constants import StrUrl, StrUUID +from .core import FormData, DatasourceIdentifier, SupersetVizType, SupersetAdhocFilter, SupersetId, ColorScheme, \ + SupersetAdhocMetric, ColumnName, TimeGrain, AnnotationLayer, SupersetDefFile, QueryContext class ChartParams(FormData): diff --git a/mitm_tooling/transformation/superset/definitions/core.py b/mitm_tooling/transformation/superset/definitions/core.py index 21e175a83556fd8e4080c2ba52768f4516eae551..aa0f70e906dda1b3a17476757133ba1b28657adf 100644 --- a/mitm_tooling/transformation/superset/definitions/core.py +++ b/mitm_tooling/transformation/superset/definitions/core.py @@ -1,6 +1,6 @@ from typing import Any -from mitm_tooling.representation import ColumnName +from mitm_tooling.representation import ColumnName, TableName from .constants import * @@ -14,6 +14,7 @@ class DatasourceIdentifier(FrozenSupersetDefinition): def datasource_uid(self): return f'{self.id}__{self.type}' +DatasourceIdentifierMap = dict[TableName, DatasourceIdentifier] class SupersetPostProcessing(pydantic.BaseModel, ABC): operation: str @@ -26,7 +27,9 @@ class SupersetColumn(FrozenSupersetDefinition): is_dttm: bool = False is_active: bool = True type: str = str(MITMDataType.Text.sa_sql_type) - type_generic: GenericDataType = GenericDataType.STRING + # not permitted + # type_generic: GenericDataType = GenericDataType.STRING + # type_generic=GenericDataType.from_mitm_dt(dt) advanced_data_type: str | None = None groupby: bool = True filterable: bool = True @@ -178,3 +181,5 @@ class QueryContext(BaseSupersetDefinition): result_format: ChartDataResultFormat = ChartDataResultFormat.JSON force: bool = False custom_cache_timeout: int | None = None + + diff --git a/mitm_tooling/transformation/superset/definitions/dashboard.py b/mitm_tooling/transformation/superset/definitions/dashboard.py index 8bb9c1ebcf42cc28c439eb8abef2c83ba98b2b22..a693ded650dbbee2646585e20a68b44efcefd7fb 100644 --- a/mitm_tooling/transformation/superset/definitions/dashboard.py +++ b/mitm_tooling/transformation/superset/definitions/dashboard.py @@ -3,8 +3,8 @@ from typing import Literal import pydantic -from . import SupersetDefFile, StrUrl -from .constants import StrUUID +from .core import SupersetDefFile +from .constants import StrUUID, StrUrl DashboardInternalID = str diff --git a/mitm_tooling/transformation/superset/definitions/database.py b/mitm_tooling/transformation/superset/definitions/database.py index 32bc282eefd9a25625aa9c52d505389310585e65..f72c3686bb5666444237f78e52b4758be1281587 100644 --- a/mitm_tooling/transformation/superset/definitions/database.py +++ b/mitm_tooling/transformation/superset/definitions/database.py @@ -2,7 +2,7 @@ from typing import Any import pydantic -from mitm_tooling.transformation.superset.definitions import SupersetDefFile, StrUrl, StrUUID +from .core import SupersetDefFile, StrUrl, StrUUID class SupersetDatabaseDef(SupersetDefFile): diff --git a/mitm_tooling/transformation/superset/definitions/dataset.py b/mitm_tooling/transformation/superset/definitions/dataset.py index 150ea5953a112063be3a3911b504fdd5a9997609..6b6d3a0dd19fedcd537e8224d5efa8b3d010ce05 100644 --- a/mitm_tooling/transformation/superset/definitions/dataset.py +++ b/mitm_tooling/transformation/superset/definitions/dataset.py @@ -2,7 +2,7 @@ from typing import Any import pydantic -from mitm_tooling.transformation.superset.definitions import SupersetDefFile, StrUUID, SupersetMetric, SupersetColumn +from .core import SupersetDefFile, StrUUID, SupersetMetric, SupersetColumn class SupersetDatasetDef(SupersetDefFile): @@ -19,6 +19,8 @@ class SupersetDatasetDef(SupersetDefFile): sql: str | None = None params: Any = None template_params: Any = None + is_managed_externally: bool = True + external_url: str | None = None filter_select_enabled: bool = True fetch_values_predicate: str | None = None extra: dict[str, Any] = pydantic.Field(default_factory=dict) diff --git a/mitm_tooling/transformation/superset/definitions/importable.py b/mitm_tooling/transformation/superset/definitions/importable.py index 7ceb14858628cd9eab9a317106409b71150bc78a..26a339d19ca5692b4d65c9ce5c343ae5994cbc14 100644 --- a/mitm_tooling/transformation/superset/definitions/importable.py +++ b/mitm_tooling/transformation/superset/definitions/importable.py @@ -1,13 +1,17 @@ from collections import defaultdict -from datetime import UTC - -from .chart import * +from datetime import UTC, datetime +from enum import StrEnum +from abc import ABC, abstractmethod +from .constants import StrDatetime +from .core import BaseSupersetDefinition, SupersetDefFile +from .chart import SupersetChartDef from .dashboard import SupersetDashboardDef from .database import SupersetDatabaseDef from .dataset import SupersetDatasetDef from .mitm_dataset import SupersetMitMDatasetDef -from .post_processing import * - +from .post_processing import SupersetPostProcessing +import pydantic +from typing import Any class MetadataType(StrEnum): Database = 'Database' diff --git a/mitm_tooling/transformation/superset/definitions/post_processing.py b/mitm_tooling/transformation/superset/definitions/post_processing.py index 733cad4a6f2a5368a890491d88f2d0136a6b9499..ad8fd50deab3a8425200e67204174a19b09875b2 100644 --- a/mitm_tooling/transformation/superset/definitions/post_processing.py +++ b/mitm_tooling/transformation/superset/definitions/post_processing.py @@ -1,5 +1,6 @@ -from .core import * - +from .core import FrozenSupersetDefinition, SupersetPostProcessing, ColumnName +import pydantic +from typing import Literal class PivotOperator(FrozenSupersetDefinition): operator: str = 'mean' diff --git a/mitm_tooling/transformation/superset/factories/core.py b/mitm_tooling/transformation/superset/factories/core.py index 770772526d4e9da53cc1de8c2352a9f4bd63f6ae..db2d11bd42c2918f4bdc1400fd1c31703b6acf14 100644 --- a/mitm_tooling/transformation/superset/factories/core.py +++ b/mitm_tooling/transformation/superset/factories/core.py @@ -66,8 +66,7 @@ def mk_column(col: ColumnName, dt: MITMDataType, col_id: SupersetId | None = Non groupby=dt not in {MITMDataType.Json, MITMDataType.Numeric}, type=(dt.sa_sql_type or MITMDataType.Text.sa_sql_type).compile( - dialect=dialect), - type_generic=GenericDataType.from_mitm_dt(dt)) | kwargs + dialect=dialect)) | kwargs if col_id is not None: return IdentifiedSupersetColumn(**args, id=col_id) else: diff --git a/mitm_tooling/transformation/superset/factories/custom_charts.py b/mitm_tooling/transformation/superset/factories/custom_charts.py index 54865d3baf977300f3928c483e4da259d0bb1bbc..85e6afb578558fa202dd8f9aa23329e5c9066124 100644 --- a/mitm_tooling/transformation/superset/factories/custom_charts.py +++ b/mitm_tooling/transformation/superset/factories/custom_charts.py @@ -1,10 +1,9 @@ from typing import Literal from mitm_tooling.transformation.superset.definitions import SupersetChartDef, SupersetVizType, ChartParams, \ - DatasourceIdentifier -from mitm_tooling.transformation.superset.definitions.mitm_dataset import MitMDatasetIdentifier -from mitm_tooling.transformation.superset.factories.chart import mk_chart_def -from mitm_tooling.transformation.superset.factories.query import mk_query_object, mk_query_context + DatasourceIdentifier, MitMDatasetIdentifier +from .chart import mk_chart_def +from .query import mk_query_object, mk_query_context class MAEDCustomChartParams(ChartParams): diff --git a/mitm_tooling/transformation/superset/factories/importable.py b/mitm_tooling/transformation/superset/factories/importable.py index c601702a4c294ec77a2ca8e79e828016f112da7b..7ae04a7b8c3f683f889836f655d3a08e0afd66a0 100644 --- a/mitm_tooling/transformation/superset/factories/importable.py +++ b/mitm_tooling/transformation/superset/factories/importable.py @@ -1,6 +1,5 @@ from ..definitions import SupersetMetadataDef, SupersetDatabaseDef, SupersetDashboardDef, SupersetDatasetDef, \ - SupersetChartDef, SupersetMitMDatasetDef -from ..definitions.importable import MetadataType, SupersetAssetsImport, SupersetMitMDatasetImport + SupersetChartDef, SupersetMitMDatasetDef, MetadataType, SupersetAssetsImport, SupersetMitMDatasetImport def mk_metadata(metadata_type: MetadataType) -> SupersetMetadataDef: diff --git a/mitm_tooling/transformation/superset/factories/mitm_dataset.py b/mitm_tooling/transformation/superset/factories/mitm_dataset.py index 6d554bb3ac7dbe3432b30414a971cfb7500476e7..8a844ecbb3b1282ec9db05b7c810ec04857015fd 100644 --- a/mitm_tooling/transformation/superset/factories/mitm_dataset.py +++ b/mitm_tooling/transformation/superset/factories/mitm_dataset.py @@ -3,8 +3,7 @@ from uuid import UUID from mitm_tooling.definition import MITM from mitm_tooling.utilities.identifiers import mk_uuid, name_plus_uuid -from ..definitions import SupersetMitMDatasetDef -from ..definitions.mitm_dataset import RelatedTable, RelatedSlice, RelatedDashboard +from ..definitions import SupersetMitMDatasetDef, RelatedTable, RelatedSlice, RelatedDashboard def mk_related_obj(kind: Literal['table', 'slice', 'dashboard'], diff --git a/mitm_tooling/transformation/superset/from_intermediate.py b/mitm_tooling/transformation/superset/from_intermediate.py index a315f08f0cf89560c8f372aff832a654f02e3a40..5ef8f787208d7407c062b9e48d0600a9a601336d 100644 --- a/mitm_tooling/transformation/superset/from_intermediate.py +++ b/mitm_tooling/transformation/superset/from_intermediate.py @@ -1,22 +1,37 @@ +from uuid import UUID + from mitm_tooling.representation import Header from .asset_bundles.asset_bundles import SupersetDatasourceBundle, \ SupersetMitMDatasetBundle from .common import DBConnectionInfo +from .definitions import DatasourceIdentifierMap from .definitions.mitm_dataset import MitMDatasetIdentifier def header_into_superset_datasource_bundle(header: Header, - db_conn_info: DBConnectionInfo) -> SupersetDatasourceBundle: + db_conn_info: DBConnectionInfo, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetDatasourceBundle: from ..sql.from_intermediate import header_into_db_meta from .from_sql import db_meta_into_superset_datasource_bundle db_meta = header_into_db_meta(header) - return db_meta_into_superset_datasource_bundle(db_meta, db_conn_info) + return db_meta_into_superset_datasource_bundle(db_meta, + db_conn_info, + database_uuid=database_uuid, + ds_id_map=ds_id_map) def header_into_mitm_dataset_bundle(header: Header, db_conn_info: DBConnectionInfo, - dataset_identifier: MitMDatasetIdentifier) -> SupersetMitMDatasetBundle: + dataset_identifier: MitMDatasetIdentifier, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetMitMDatasetBundle: from ..sql.from_intermediate import header_into_db_meta from .from_sql import db_meta_into_mitm_dataset_bundle db_meta = header_into_db_meta(header) - return db_meta_into_mitm_dataset_bundle(db_meta, db_conn_info, dataset_identifier, header.mitm) + return db_meta_into_mitm_dataset_bundle(db_meta, + db_conn_info, + dataset_identifier, + header.mitm, + database_uuid=database_uuid, + ds_id_map=ds_id_map) diff --git a/mitm_tooling/transformation/superset/from_sql.py b/mitm_tooling/transformation/superset/from_sql.py index 9cf7822aded53a067869bd69242f592fc8e10c02..f5b28b006fb593c8118535950f705c525997765f 100644 --- a/mitm_tooling/transformation/superset/from_sql.py +++ b/mitm_tooling/transformation/superset/from_sql.py @@ -1,3 +1,6 @@ +from uuid import UUID + +from mitm_tooling.definition import MITM from mitm_tooling.extraction.sql.data_models import DBMetaInfo from mitm_tooling.extraction.sql.data_models.db_meta import DBMetaInfoBase from mitm_tooling.extraction.sql.db import connect_and_reflect @@ -5,26 +8,34 @@ from .asset_bundles import SupersetDatasourceBundle, \ SupersetMitMDatasetBundle from .common import DBConnectionInfo from .common import _mk_engine, SQLiteFileOrEngine +from .definitions import DatasourceIdentifierMap from .definitions.mitm_dataset import MitMDatasetIdentifier from .factories.database import mk_database from .factories.dataset import mk_dataset from .factories.mitm_dataset import mk_mitm_dataset -from ...definition import MITM def db_meta_into_superset_datasource_bundle(db_meta: DBMetaInfoBase, - db_conn_info: DBConnectionInfo) -> SupersetDatasourceBundle: + db_conn_info: DBConnectionInfo, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetDatasourceBundle: sqlalchemy_uri = db_conn_info.sql_alchemy_uri db_name = db_conn_info.db_name dialect = db_conn_info.dialect_cls() - database = mk_database(name=db_name, sqlalchemy_uri=sqlalchemy_uri, uniquify_name=True) + database = mk_database(name=db_name, sqlalchemy_uri=sqlalchemy_uri, uniquify_name=True, uuid=database_uuid) database_uuid = database.uuid datasets = [] + ds_id_map = ds_id_map or {} + + def ds_uuid(tn: str) -> UUID | None: + if (ds_id := ds_id_map.get(tn)) is not None: + return ds_id.uuid + for schema_name, schema_tables in db_meta.db_structure.items(): for table_name, tm in schema_tables.items(): - datasets.append(mk_dataset(tm, database_uuid, dialect=dialect)) + datasets.append(mk_dataset(tm, database_uuid, dialect=dialect, uuid=ds_uuid(table_name))) return SupersetDatasourceBundle(database=database, datasets=datasets) @@ -32,8 +43,13 @@ def db_meta_into_superset_datasource_bundle(db_meta: DBMetaInfoBase, def db_meta_into_mitm_dataset_bundle(db_meta: DBMetaInfoBase, db_conn_info: DBConnectionInfo, dataset_identifier: MitMDatasetIdentifier, - mitm: MITM) -> SupersetMitMDatasetBundle: - datasource_bundle = db_meta_into_superset_datasource_bundle(db_meta, db_conn_info) + mitm: MITM, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetMitMDatasetBundle: + datasource_bundle = db_meta_into_superset_datasource_bundle(db_meta, + db_conn_info, + database_uuid=database_uuid, + ds_id_map=ds_id_map) mitm_dataset = mk_mitm_dataset(dataset_identifier.dataset_name, mitm, uuid=dataset_identifier.uuid, database_uuid=datasource_bundle.database_uuid, table_uuids=datasource_bundle.dataset_uuids) @@ -41,20 +57,30 @@ def db_meta_into_mitm_dataset_bundle(db_meta: DBMetaInfoBase, def db_into_superset_datasource_bundle(arg: SQLiteFileOrEngine, - db_conn_info: DBConnectionInfo) -> SupersetDatasourceBundle: + db_conn_info: DBConnectionInfo, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetDatasourceBundle: engine = _mk_engine(arg) meta, _ = connect_and_reflect(engine, allowed_schemas=[db_conn_info.schema_name]) db_meta = DBMetaInfo.from_sa_meta(meta, default_schema=db_conn_info.schema_name) - return db_meta_into_superset_datasource_bundle(db_meta, db_conn_info) + return db_meta_into_superset_datasource_bundle(db_meta, + db_conn_info, + database_uuid=database_uuid, + ds_id_map=ds_id_map) def db_into_mitm_dataset_bundle(arg: SQLiteFileOrEngine, db_conn_info: DBConnectionInfo, dataset_identifier: MitMDatasetIdentifier, - mitm: MITM) -> SupersetMitMDatasetBundle: - datasource_bundle = db_into_superset_datasource_bundle(arg, db_conn_info) + mitm: MITM, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetMitMDatasetBundle: + datasource_bundle = db_into_superset_datasource_bundle(arg, + db_conn_info, + database_uuid=database_uuid, + ds_id_map=ds_id_map) mitm_dataset = mk_mitm_dataset(dataset_identifier.dataset_name, mitm, uuid=dataset_identifier.uuid, database_uuid=datasource_bundle.database_uuid, table_uuids=datasource_bundle.dataset_uuids) diff --git a/mitm_tooling/transformation/superset/interface.py b/mitm_tooling/transformation/superset/interface.py index 43c8de6896a3750575baece647b3552712c8271b..52dbf442ab421d7df970472df54fecf90ccc572f 100644 --- a/mitm_tooling/transformation/superset/interface.py +++ b/mitm_tooling/transformation/superset/interface.py @@ -1,17 +1,22 @@ from collections.abc import Iterable +from uuid import UUID from mitm_tooling.representation import Header from .asset_bundles.asset_bundles import SupersetDatasourceBundle, \ SupersetVisualizationBundle, SupersetMitMDatasetBundle from .common import DBConnectionInfo +from .definitions import DatasourceIdentifierMap from .definitions.mitm_dataset import MitMDatasetIdentifier from .from_intermediate import header_into_superset_datasource_bundle, header_into_mitm_dataset_bundle -from .visualizations.abstract import DatasourceIdentifierMap from .visualizations.registry import VisualizationType, mk_visualization -def mk_superset_datasource_bundle(header: Header, db_conn_info: DBConnectionInfo) -> SupersetDatasourceBundle: - return header_into_superset_datasource_bundle(header, db_conn_info) +def mk_superset_datasource_bundle(header: Header, db_conn_info: DBConnectionInfo, database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None) -> SupersetDatasourceBundle: + return header_into_superset_datasource_bundle(header, + db_conn_info, + database_uuid=database_uuid, + ds_id_map=ds_id_map) def mk_superset_visualization_bundle(header: Header, @@ -28,9 +33,15 @@ def mk_superset_visualization_bundle(header: Header, def mk_superset_mitm_dataset_bundle(header: Header, db_conn_info: DBConnectionInfo, mitm_dataset_identifier: MitMDatasetIdentifier, + database_uuid: UUID | None = None, + ds_id_map: DatasourceIdentifierMap | None = None, visualization_types: Iterable[ VisualizationType] | None = None) -> SupersetMitMDatasetBundle: - mitm_dataset_bundle = header_into_mitm_dataset_bundle(header, db_conn_info, mitm_dataset_identifier) + mitm_dataset_bundle = header_into_mitm_dataset_bundle(header, + db_conn_info, + mitm_dataset_identifier, + database_uuid=database_uuid, + ds_id_map=ds_id_map) if visualization_types is not None: mdi = mitm_dataset_bundle.mitm_dataset.identifier ds_id_map = mitm_dataset_bundle.datasource_bundle.placeholder_dataset_identifiers diff --git a/mitm_tooling/transformation/superset/visualizations/abstract.py b/mitm_tooling/transformation/superset/visualizations/abstract.py index a04671ddf248781fcb8d695a8a9b8cf8346c5545..cc19d5da871bbb67a7052296b52a65a56b63d51a 100644 --- a/mitm_tooling/transformation/superset/visualizations/abstract.py +++ b/mitm_tooling/transformation/superset/visualizations/abstract.py @@ -4,12 +4,11 @@ from typing import Self, Type, Callable from mitm_tooling.representation import TableName, Header from ..asset_bundles.asset_bundles import SupersetVisualizationBundle from ..definitions import DatasourceIdentifier, SupersetChartDef, \ - SupersetDashboardDef + SupersetDashboardDef, DatasourceIdentifierMap from ..definitions.mitm_dataset import MitMDatasetIdentifier ChartDefCollection = dict[str, SupersetChartDef] DashboardDefCollection = dict[str, SupersetDashboardDef] -DatasourceIdentifierMap = dict[TableName, DatasourceIdentifier] class ChartCreator(ABC): diff --git a/mitm_tooling/transformation/superset/visualizations/maed/charts.py b/mitm_tooling/transformation/superset/visualizations/maed/charts.py index 9ff69590e0ee8fdd98689bd41668549231e28a34..5b5895adff32013ea8b52738e4f8cb21d97fb742 100644 --- a/mitm_tooling/transformation/superset/visualizations/maed/charts.py +++ b/mitm_tooling/transformation/superset/visualizations/maed/charts.py @@ -4,8 +4,8 @@ from mitm_tooling.data_types import MITMDataType from mitm_tooling.definition import get_mitm_def, ConceptName, MITM, RelationName, TypeName from mitm_tooling.representation import SQLRepresentationSchema, Header, mk_sql_rep_schema from mitm_tooling.utilities.identifiers import naive_pluralize -from ..abstract import DatasourceIdentifierMap, ChartDefCollection, ChartCollectionCreator, ChartCreator -from ...definitions import FilterOperator, DatasourceIdentifier, SupersetChartDef +from ..abstract import ChartDefCollection, ChartCollectionCreator, ChartCreator +from ...definitions import FilterOperator, DatasourceIdentifier, SupersetChartDef, DatasourceIdentifierMap from ...factories.core import mk_adhoc_filter from ...factories.generic_charts import mk_pie_chart, mk_time_series_bar_chart, mk_avg_count_time_series_chart diff --git a/mitm_tooling/transformation/superset/visualizations/maed/dashboards.py b/mitm_tooling/transformation/superset/visualizations/maed/dashboards.py index 5866f36a90537aca18537d496537bf79334d2ba8..c4c7954fa1b9b5ea75b31e65cb79c200900688ae 100644 --- a/mitm_tooling/transformation/superset/visualizations/maed/dashboards.py +++ b/mitm_tooling/transformation/superset/visualizations/maed/dashboards.py @@ -1,10 +1,10 @@ from mitm_tooling.representation import Header, SQLRepresentationSchema, mk_sql_rep_schema -from mitm_tooling.transformation.superset.definitions import SupersetDashboardDef +from mitm_tooling.transformation.superset.definitions import SupersetDashboardDef, DatasourceIdentifierMap from mitm_tooling.transformation.superset.definitions.mitm_dataset import MitMDatasetIdentifier from mitm_tooling.transformation.superset.factories.custom_charts import mk_maed_custom_chart from mitm_tooling.transformation.superset.factories.dashboard import mk_dashboard_chart, mk_dashboard_def from mitm_tooling.transformation.superset.visualizations.abstract import DashboardCreator, \ - ChartCollectionCreator, ChartDefCollection, DatasourceIdentifierMap + ChartCollectionCreator, ChartDefCollection from mitm_tooling.transformation.superset.visualizations.maed.charts import BaselineMAEDCharts from mitm_tooling.utilities.python_utils import take_first diff --git a/mitm_tooling/transformation/superset/visualizations/registry.py b/mitm_tooling/transformation/superset/visualizations/registry.py index ece717ca0b491db131333c6490fb7f690932c679..957c299c5a5eb3228a1b4c226e1d9e15d2f5893b 100644 --- a/mitm_tooling/transformation/superset/visualizations/registry.py +++ b/mitm_tooling/transformation/superset/visualizations/registry.py @@ -4,7 +4,8 @@ from mitm_tooling.definition import MITM from mitm_tooling.representation import Header from .maed.registry import MAEDVisualizationType, maed_visualization_creators from ..definitions.mitm_dataset import MitMDatasetIdentifier -from ..visualizations.abstract import VisualizationCreator, DatasourceIdentifierMap, SupersetVisualizationBundle +from ..visualizations.abstract import VisualizationCreator, SupersetVisualizationBundle +from ..definitions import DatasourceIdentifierMap VisualizationType = MAEDVisualizationType | None diff --git a/pyproject.toml b/pyproject.toml index fde4501ba052aac727442cc359d90d6ce6753b35..d973f69aad1ca223b5a8d680691d4318da34201e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,44 +1,51 @@ -[tool.poetry] +[project] name = "mitm-tooling" -version = "0.4.8" +version = "0.4.9" description = "" -authors = ["Leah Tacke genannt Unterberg <leah.tgu@pads.rwth-aachen.de>"] +authors = [{ name = "Leah Tacke genannt Unterberg", email = "l.tgu@pads.rwth-aachen.de" }] +requires-python = ">=3.11,<3.14" readme = "README.md" -packages = [{ include = "mitm_tooling" }] - -[tool.poetry.dependencies] -python = ">=3.11,<3.14" -pydantic = "^2.9.2" -pyyaml = "6.0.2" -genson = "^1.3.0" - -sqlalchemy = { version = ">=2", extras = ["postgresql-psycopg", "postgresql"] } -sqlalchemy-utils = ">=0.38.0" -numpy = ">=2" -pandas = { version = ">=2.0", extras = ["performance", "excel", "hdf5", "output_formatting", "computation", "postgresql", "mysql", "sql-other", "plot", "compression"] } - -# visualization -matplotlib = "*" -seaborn = "*" -plotly = "*" - -[tool.poetry.extras] -analysis = ["polars"] -pm = ["pm4py"] - -[tool.poetry.group.dev.dependencies] -pytest = "*" -jupyter = "*" - -[[tool.poetry.source]] +dependencies = [ + "pydantic>=2.9.2", + "pyyaml==6.0.2", + "genson>=1.3.0", + "sqlalchemy[postgresql-psycopg, postgresql]>=2", + "sqlalchemy-utils>=0.38.0", + "numpy>=2", + "pandas[performance, excel, hdf5, output_formatting, computation, postgresql, mysql, sql-other, plot, compression]>=2.0", + "matplotlib", + "seaborn", + "plotly", +] + +[project.optional-dependencies] +analysis = [] +pm = [] + +[dependency-groups] +dev = [ + "pytest", + "jupyter", +] + +[tool.uv] + +[[tool.uv.index]] name = "testpypi" url = "https://test.pypi.org/" -priority = "explicit" +explicit = true -[[tool.poetry.source]] +[[tool.uv.index]] name = "PyPI" -priority = "primary" +url = "https://pypi.org/simple/" +default = true + +[tool.hatch.build.targets.sdist] +include = ["mitm_tooling"] + +[tool.hatch.build.targets.wheel] +include = ["mitm_tooling"] [build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" +requires = ["hatchling"] +build-backend = "hatchling.build"