Skip to content

Commit 1dafac2

Browse files
authored
Set attr source when using values from template (#5875)
1 parent 1f077ba commit 1dafac2

File tree

3 files changed

+32
-10
lines changed

3 files changed

+32
-10
lines changed

backend/infrahub/core/node/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -308,7 +308,7 @@ async def handle_object_template(self, fields: dict, db: InfrahubDatabase, error
308308
for attribute_name in template._attributes:
309309
if attribute_name in list(fields) + [OBJECT_TEMPLATE_NAME_ATTR]:
310310
continue
311-
fields[attribute_name] = {"value": getattr(template, attribute_name).value}
311+
fields[attribute_name] = {"value": getattr(template, attribute_name).value, "source": template.id}
312312

313313
for relationship_name in template._relationships:
314314
relationship_schema = template._schema.get_relationship(name=relationship_name)

backend/infrahub/graphql/mutations/main.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from infrahub.core.constraint.node.runner import NodeConstraintRunner
1616
from infrahub.core.manager import NodeManager
1717
from infrahub.core.node import Node
18-
from infrahub.core.schema import NodeSchema, RelationshipSchema
18+
from infrahub.core.schema import MainSchemaTypes, NodeSchema, RelationshipSchema
1919
from infrahub.core.schema.generic_schema import GenericSchema
2020
from infrahub.core.schema.profile_schema import ProfileSchema
2121
from infrahub.core.schema.template_schema import TemplateSchema
@@ -232,7 +232,7 @@ async def _extract_peer_data(
232232
cls,
233233
db: InfrahubDatabase,
234234
template_peer: Node,
235-
obj_peer_schema,
235+
obj_peer_schema: MainSchemaTypes,
236236
parent_obj: Node,
237237
current_template: CoreObjectTemplate,
238238
) -> Mapping[str, Any]:
@@ -241,7 +241,7 @@ async def _extract_peer_data(
241241
for attr in template_peer.get_schema().attribute_names:
242242
if attr not in obj_peer_schema.attribute_names:
243243
continue
244-
obj_peer_data[attr] = {"value": getattr(template_peer, attr).value}
244+
obj_peer_data[attr] = {"value": getattr(template_peer, attr).value, "source": template_peer.id}
245245

246246
for rel in template_peer.get_schema().relationship_names:
247247
rel_manager: RelationshipManager = getattr(template_peer, rel)

backend/tests/unit/core/test_node.py

Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -747,18 +747,40 @@ async def test_node_create_with_object_template(
747747

748748
assert device.id
749749
assert device.db_id
750-
assert device.node_changelog.attributes["name"].value == "par-th2-br01"
750+
assert device.name.value == device.node_changelog.attributes["name"].value == "par-th2-br01"
751751
assert device.node_changelog.attributes["name"].value_update_status == DiffAction.ADDED
752-
assert device.node_changelog.attributes["manufacturer"].value == "Juniper"
752+
assert "source" not in device.node_changelog.attributes["name"].properties
753+
assert device.manufacturer.value == device.node_changelog.attributes["manufacturer"].value == "Juniper"
753754
assert device.node_changelog.attributes["manufacturer"].value_update_status == DiffAction.ADDED
754-
assert device.node_changelog.attributes["height"].value == 1
755+
assert (
756+
device.manufacturer.source_id
757+
== device.node_changelog.attributes["manufacturer"].properties["source"].value
758+
== template.id
759+
)
760+
assert device.height.value == device.node_changelog.attributes["height"].value == 1
755761
assert device.node_changelog.attributes["height"].value_update_status == DiffAction.ADDED
756-
assert device.node_changelog.attributes["weight"].value == 8
762+
assert (
763+
device.height.source_id == device.node_changelog.attributes["height"].properties["source"].value == template.id
764+
)
765+
assert device.weight.value == device.node_changelog.attributes["weight"].value == 8
757766
assert device.node_changelog.attributes["weight"].value_update_status == DiffAction.ADDED
758-
assert device.node_changelog.attributes["airflow"].value.value == "Front to rear"
767+
assert (
768+
device.weight.source_id == device.node_changelog.attributes["weight"].properties["source"].value == template.id
769+
)
770+
assert device.airflow.value.value == device.node_changelog.attributes["airflow"].value.value == "Front to rear"
759771
assert device.node_changelog.attributes["airflow"].value_update_status == DiffAction.ADDED
760-
assert device.node_changelog.attributes["part_number"].value == "MX204"
772+
assert (
773+
device.airflow.source_id
774+
== device.node_changelog.attributes["airflow"].properties["source"].value
775+
== template.id
776+
)
777+
assert device.part_number.value == device.node_changelog.attributes["part_number"].value == "MX204"
761778
assert device.node_changelog.attributes["part_number"].value_update_status == DiffAction.ADDED
779+
assert (
780+
device.part_number.source_id
781+
== device.node_changelog.attributes["part_number"].properties["source"].value
782+
== template.id
783+
)
762784

763785

764786
# --------------------------------------------------------------------------

0 commit comments

Comments
 (0)