|
39 | 39 | from pyld import jsonld |
40 | 40 |
|
41 | 41 | import osw.model.entity as model |
| 42 | + |
| 43 | +try: |
| 44 | + # Characteristics of the released opensemantic packages derive from this |
| 45 | + # class, not from the one in osw.model.entity. |
| 46 | + from opensemantic.core.v1 import ( |
| 47 | + CharacteristicType as _OpensemanticCharacteristicType, |
| 48 | + ) |
| 49 | +except ImportError: # pragma: no cover - optional dependency |
| 50 | + _OpensemanticCharacteristicType = None |
42 | 51 | from osw.defaults import params as default_params |
43 | 52 | from osw.utils.code_postprocessing import ( |
44 | 53 | remove_constraints_from_forward_refs, |
@@ -1788,12 +1797,15 @@ def __init__(self, **data): |
1788 | 1797 | if self.change_id is None: |
1789 | 1798 | self.change_id = str(uuid4()) |
1790 | 1799 | for entity in self.entities: |
1791 | | - if getattr(entity, "meta", None) is None: |
1792 | | - entity.meta = model.Meta() |
1793 | | - if entity.meta.change_id is None: |
1794 | | - entity.meta.change_id = [] |
1795 | | - if self.change_id not in entity.meta.change_id: |
1796 | | - entity.meta.change_id.append(self.change_id) |
| 1800 | + try: |
| 1801 | + if getattr(entity, "meta", None) is None: |
| 1802 | + entity.meta = model.Meta() |
| 1803 | + if entity.meta.change_id is None: |
| 1804 | + entity.meta.change_id = [] |
| 1805 | + if self.change_id not in entity.meta.change_id: |
| 1806 | + entity.meta.change_id.append(self.change_id) |
| 1807 | + except (ValueError, AttributeError): |
| 1808 | + pass # entity model doesn't have meta field |
1797 | 1809 | if len(self.entities) > 5 and self.parallel is None: |
1798 | 1810 | self.parallel = True |
1799 | 1811 | if self.parallel is None: |
@@ -2058,10 +2070,18 @@ def store_entity_( |
2058 | 2070 |
|
2059 | 2071 | mode = AggregateGeneratedSchemasParamMode.ROOT_LEVEL |
2060 | 2072 | # Put generated schema in definitions section, |
2061 | | - # currently only enabled for Characteristics |
2062 | | - if hasattr(model, "CharacteristicType") and isinstance( |
2063 | | - entity_, model.CharacteristicType |
2064 | | - ): |
| 2073 | + # currently only enabled for Characteristics. The class is |
| 2074 | + # either the locally generated one or the one shipped by the |
| 2075 | + # opensemantic packages, depending on where the model is from. |
| 2076 | + characteristic_types = tuple( |
| 2077 | + t |
| 2078 | + for t in ( |
| 2079 | + getattr(model, "CharacteristicType", None), |
| 2080 | + _OpensemanticCharacteristicType, |
| 2081 | + ) |
| 2082 | + if t is not None |
| 2083 | + ) |
| 2084 | + if characteristic_types and isinstance(entity_, characteristic_types): |
2065 | 2085 | mode = AggregateGeneratedSchemasParamMode.DEFINITIONS_SECTION |
2066 | 2086 |
|
2067 | 2087 | new_schema = aggregate_generated_schemas( |
|
0 commit comments