Skip to content

Commit

Permalink
Merge pull request #54 from davidvlaminck/concrete_relations
Browse files Browse the repository at this point in the history
Concrete relations
  • Loading branch information
davidvlaminck authored Nov 21, 2024
2 parents 018edcf + 35770c8 commit 48b89af
Show file tree
Hide file tree
Showing 16 changed files with 5,509 additions and 2,830 deletions.
148 changes: 131 additions & 17 deletions UnitTests/GeneralTests/OTLObject_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
from pathlib import Path

import pytest
from otlmow_model.OtlmowModel.Classes.Onderdeel.Klimatisatie import Klimatisatie

from UnitTests.TestModel.OtlmowModel.Classes.ImplementatieElement.AIMObject import AIMObject
from UnitTests.TestModel.OtlmowModel.Classes.Onderdeel.AllCasesTestClass import AllCasesTestClass
Expand Down Expand Up @@ -1176,7 +1177,7 @@ def test_create_dict_from_asset_using_marked_for_clear_does_not_work():

d = instance.create_dict_from_asset()
expected = {'testComplexType': {'testBooleanField': True, 'testStringField': 'a'},
'typeURI': 'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass'}
'typeURI': 'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass'}
assert d == expected


Expand Down Expand Up @@ -1207,23 +1208,24 @@ def test_create_dict_from_asset_clear_value_complex_on_prim_attribute():

d = instance.create_dict_from_asset(rdf=True)
expected = {'@type': 'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass.testComplexType': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testBooleanField': '88888888',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testComplexType2': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testStringField': '88888888'},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testComplexType2MetKard': [
{
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass.testComplexType': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testBooleanField': '88888888',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testComplexType2': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testStringField': '88888888'},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testComplexType2MetKard': [
{
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testStringField': '88888888'}],
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType2.testStringField': '88888888'}],
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testKwantWrd': {
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0},
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testKwantWrdMetKard': [
{'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0}],
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testStringField': '88888888',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testStringFieldMetKard': '88888888'}}
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testKwantWrdMetKard': [
{
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#KwantWrdTest.waarde': 88888888.0}],
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testStringField': '88888888',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DtcTestComplexType.testStringFieldMetKard': '88888888'}}
assert d == expected


Expand Down Expand Up @@ -1607,3 +1609,115 @@ def test_from_dict_illegal_attributes():
'assetId': {'identificator': '88888888'}}
with pytest.raises(CanNotClearAttributeError):
instance = OTLObject.from_dict(d, model_directory=model_directory_path)


def test_get_all_concrete_relations_real_class():
kl = Klimatisatie()
relations = kl._get_all_concrete_relations()

assert list(relations) == [
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Cabine', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HSCabine', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Container', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Hulppostkast', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Montagekast', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Wegkantkast', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#IndoorKast', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Lockerkast', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/installatie#Gebouw', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/installatie#Lokaal', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Doorverbinddoos', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#TechnischePut', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HeeftAanvullendeGeometrie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AanvullendeGeometrie', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HeeftBetrokkene',
'http://purl.org/dc/terms/Agent', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HeeftBijlage',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Bijlage', '', '2.13.0'),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HeeftBijlage',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bijlage', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#HeeftToegangsprocedure',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Toegangsprocedure', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#LigtOp',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject',
'', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#LigtOp',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#SluitAanOp',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#SluitAanOp',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Sturing',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Sturing',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#IOKaart', 'Unspecified', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Voedt',
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject', '', ''),
(
'https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#Derdenobject',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Voedt',
'https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Klimatisatie', '', '')]
40 changes: 29 additions & 11 deletions UnitTests/TestModel/OtlmowModel/Helpers/generated_lists.py
Original file line number Diff line number Diff line change
@@ -1,19 +1,37 @@
import json
from pathlib import Path
from typing import Dict

global_relation_dict: Dict = {}
global_relation_dict: dict = {}
global_class_dict: dict = {}

ROOT_PATH = Path(__file__).parent
MODEL_ROOT_PATH = Path(__file__).parent.parent.parent


def get_hardcoded_relation_dict(relation_dict: Dict = None):
if relation_dict is None:
relation_dict = global_relation_dict
def get_hardcoded_relation_dict(model_directory: Path = None) -> dict:
global global_relation_dict
if global_relation_dict != {}:
return global_relation_dict

if relation_dict == {}:
# open json file
with open(ROOT_PATH.parent / 'generated_info.json', 'r') as f:
relation_dict = json.load(f)
if model_directory is None:
model_directory = MODEL_ROOT_PATH

return relation_dict
with open(model_directory / 'OtlmowModel' / 'generated_info.json', 'r') as f:
generated_info_dict = json.load(f)
global_relation_dict = generated_info_dict['relations']

return global_relation_dict


def get_hardcoded_class_dict(model_directory: Path = None) -> dict:
global global_class_dict
if global_class_dict != {}:
return global_class_dict

if model_directory is None:
model_directory = MODEL_ROOT_PATH

with open(model_directory / 'OtlmowModel' / 'generated_info.json', 'r') as f:
generated_info_dict = json.load(f)
global_class_dict = generated_info_dict['classes']

return global_class_dict
49 changes: 38 additions & 11 deletions UnitTests/TestModel/OtlmowModel/generated_info.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,67 +12,94 @@
"abstract": true,
"name": "AIMDBStatus",
"label": "AIM databank status",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#AIMObject",
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#RelatieObject"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#AIMObject": {
"abstract": true,
"name": "AIMObject",
"label": "AIM object",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass",
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AnotherTestClass",
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#DeprecatedTestClass"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#AIMToestand": {
"abstract": true,
"name": "AIMToestand",
"label": "AIM Toestand",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#AIMObject"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DirectioneleRelatie": {
"abstract": true,
"name": "DirectioneleRelatie",
"label": "Directionele relatie",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Voedt"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#NietDirectioneleRelatie": {
"abstract": true,
"name": "NietDirectioneleRelatie",
"label": "Niet-directionele relatie",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#RelatieObject": {
"abstract": true,
"name": "RelatieObject",
"label": "Relatieobject",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": [
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#DirectioneleRelatie",
"https://wegenenverkeer.data.vlaanderen.be/ns/implementatieelement#NietDirectioneleRelatie"
]
},
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AllCasesTestClass": {
"abstract": false,
"name": "AllCasesTestClass",
"label": "All Cases TestClass",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": []
},
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#AnotherTestClass": {
"abstract": false,
"name": "AnotherTestClass",
"label": "Another TestClass",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": []
},
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Bevestiging": {
"abstract": false,
"name": "Bevestiging",
"label": "Bevestiging",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": []
},
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#DeprecatedTestClass": {
"abstract": false,
"name": "DeprecatedTestClass",
"label": "Deprecated TestClass",
"deprecated_version": "2.0.0"
"deprecated_version": "2.0.0",
"direct_subclasses": []
},
"https://wegenenverkeer.data.vlaanderen.be/ns/onderdeel#Voedt": {
"abstract": false,
"name": "Voedt",
"label": "Voedt",
"deprecated_version": ""
"deprecated_version": "",
"direct_subclasses": []
}
}
}
Loading

0 comments on commit 48b89af

Please sign in to comment.