Skip to content

Commit 1d78e57

Browse files
Add setting typename, display_label, and kind if it exists when calling _init_relationships (#456)
* Add setting typename if it exists when calling _init_relationships on relationships that are already a RelatedNode * small unit test update * cover display_label and kind too * add changelog --------- Co-authored-by: Aaron McCarty <[email protected]>
1 parent b904ad5 commit 1d78e57

File tree

5 files changed

+41
-11
lines changed

5 files changed

+41
-11
lines changed

changelog/455.fixed.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Update InfrahubNode creation to include __typename, display_label, and kind from a RelatedNode

infrahub_sdk/node/node.py

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -507,11 +507,17 @@ def _init_relationships(self, data: dict | RelatedNode | None = None) -> None:
507507

508508
if rel_schema.cardinality == "one":
509509
if isinstance(rel_data, RelatedNode):
510-
peer_id_data: dict[str, Any] = {}
511-
if rel_data.id:
512-
peer_id_data["id"] = rel_data.id
513-
if rel_data.hfid:
514-
peer_id_data["hfid"] = rel_data.hfid
510+
peer_id_data: dict[str, Any] = {
511+
key: value
512+
for key, value in (
513+
("id", rel_data.id),
514+
("hfid", rel_data.hfid),
515+
("__typename", rel_data.typename),
516+
("kind", rel_data.kind),
517+
("display_label", rel_data.display_label),
518+
)
519+
if value is not None
520+
}
515521
if peer_id_data:
516522
rel_data = peer_id_data
517523
else:
@@ -1090,11 +1096,17 @@ def _init_relationships(self, data: dict | None = None) -> None:
10901096

10911097
if rel_schema.cardinality == "one":
10921098
if isinstance(rel_data, RelatedNodeSync):
1093-
peer_id_data: dict[str, Any] = {}
1094-
if rel_data.id:
1095-
peer_id_data["id"] = rel_data.id
1096-
if rel_data.hfid:
1097-
peer_id_data["hfid"] = rel_data.hfid
1099+
peer_id_data: dict[str, Any] = {
1100+
key: value
1101+
for key, value in (
1102+
("id", rel_data.id),
1103+
("hfid", rel_data.hfid),
1104+
("__typename", rel_data.typename),
1105+
("kind", rel_data.kind),
1106+
("display_label", rel_data.display_label),
1107+
)
1108+
if value is not None
1109+
}
10981110
if peer_id_data:
10991111
rel_data = peer_id_data
11001112
else:

infrahub_sdk/node/related_node.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ def __init__(self, branch: str, schema: RelationshipSchemaAPI, data: Any | dict,
3939
self._hfid: list[str] | None = None
4040
self._display_label: str | None = None
4141
self._typename: str | None = None
42+
self._kind: str | None = None
4243

4344
if isinstance(data, (CoreNodeBase)):
4445
self._peer = data
@@ -118,6 +119,12 @@ def typename(self) -> str | None:
118119
return self._peer.typename
119120
return self._typename
120121

122+
@property
123+
def kind(self) -> str | None:
124+
if self._peer:
125+
return self._peer.get_kind()
126+
return self._kind
127+
121128
def _generate_input_data(self, allocate_from_pool: bool = False) -> dict[str, Any]:
122129
data: dict[str, Any] = {}
123130

tests/integration/test_node.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ async def test_node_create_with_relationships_using_related_node(
8383
assert node_after.name.value == node.name.value
8484
assert node_after.manufacturer.peer.id == manufacturer_mercedes.id
8585
assert node_after.owner.peer.id == person_joe.id
86+
assert node_after.owner.peer.typename == "TestingPerson"
8687

8788
async def test_node_update_with_original_data(
8889
self,

tests/unit/sdk/test_node.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,13 @@ async def test_init_node_data_user_with_relationships(client, location_schema: N
196196

197197

198198
@pytest.mark.parametrize("client_type", client_types)
199-
@pytest.mark.parametrize("rel_data", [{"id": "pppppppp"}, {"hfid": ["pppp", "pppp"]}])
199+
@pytest.mark.parametrize(
200+
"rel_data",
201+
[
202+
{"id": "pppppppp", "__typename": "BuiltinTag"},
203+
{"hfid": ["pppp", "pppp"], "display_label": "mmmm", "kind": "BuiltinTag"},
204+
],
205+
)
200206
async def test_init_node_data_user_with_relationships_using_related_node(
201207
client, location_schema: NodeSchemaAPI, client_type, rel_data
202208
):
@@ -231,6 +237,9 @@ async def test_init_node_data_user_with_relationships_using_related_node(
231237
assert isinstance(node.primary_tag, RelatedNodeBase)
232238
assert node.primary_tag.id == rel_data.get("id")
233239
assert node.primary_tag.hfid == rel_data.get("hfid")
240+
assert node.primary_tag.typename == rel_data.get("__typename")
241+
assert node.primary_tag.kind == rel_data.get("kind")
242+
assert node.primary_tag.display_label == rel_data.get("display_label")
234243

235244
keys = dir(node)
236245
assert "name" in keys

0 commit comments

Comments
 (0)