Bidirectional converter between GoodData's declarative Logical Data Model (LDM) and the Apache Ossie semantic model specification.
import json import yaml from ossie_gooddata import gooddata_to_osi, osi_to_gooddata from ossie_gooddata.models import gd_model_from_dict, gd_model_to_dict # GoodData → Apache Ossie with open("gooddata_ldm.json") as f: gd_model = gd_model_from_dict(json.load(f)) osi_model = gooddata_to_osi(gd_model, model_name="my_model") with open("osi_model.yaml", "w") as f: yaml.dump(osi_model, f, default_flow_style=False) # Apache Ossie → GoodData with open("osi_model.yaml") as f: osi_data = yaml.safe_load(f) gd_model = osi_to_gooddata(osi_data, data_source_id="my_datasource") with open("gooddata_ldm.json", "w") as f: json.dump(gd_model_to_dict(gd_model), f, indent=2)
uv sync --group dev uv run pytest
| GoodData LDM | Ossie Semantic Model |
|---|---|
| Dataset | Dataset |
| Attribute (+ Labels) | Field with dimension metadata |
| Fact | Field without dimension metadata |
| Reference (FK) | Relationship |
| Date Instance | Dataset with GOODDATA custom_extension (date_dimension: true) |
| MAQL expression | Dialect entry (dialect: MAQL) |