Skip to content

Commit 0510d52

Browse files
authored
Merge pull request #352 from opsmill/stable
Merge stable into develop
2 parents 30a5c24 + dabb7c9 commit 0510d52

File tree

5 files changed

+45
-6
lines changed

5 files changed

+45
-6
lines changed

CHANGELOG.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,14 @@ This project uses [*towncrier*](https://towncrier.readthedocs.io/) and the chang
1111

1212
<!-- towncrier release notes start -->
1313

14-
## [1.9.1](https://github.com/opsmill/infrahub-sdk-python/tree/v1.9.1) - 2025-04-04
14+
## [1.10.2](https://github.com/opsmill/infrahub-sdk-python/tree/v1.10.2) - 2025-04-11
15+
16+
### Fixed
17+
18+
- fix an issue where nodes attributes were not updated when setting the same value than the one used during node instantiation
19+
- fixes an issue where the default branch of the client store was not properly set in a generator
20+
21+
## [1.10.1](https://github.com/opsmill/infrahub-sdk-python/tree/v1.9.1) - 2025-04-04
1522

1623
### Changed
1724

infrahub_sdk/generator.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ def __init__(
4040
self.generator_instance = generator_instance
4141
self._init_client = client.clone()
4242
self._init_client.config.default_branch = self._init_client.default_branch = self.branch_name
43+
self._init_client.store._default_branch = self.branch_name
4344
self._client: InfrahubClient | None = None
4445
self._nodes: list[InfrahubNode] = []
4546
self._related_nodes: list[InfrahubNode] = []

infrahub_sdk/node.py

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -82,17 +82,18 @@ def __init__(self, name: str, schema: AttributeSchemaAPI, data: Any | dict):
8282

8383
self.id: str | None = data.get("id", None)
8484

85-
self.value: Any | None = data.get("value", None)
85+
self._value: Any | None = data.get("value", None)
86+
self.value_has_been_mutated = False
8687
self.is_default: bool | None = data.get("is_default", None)
8788
self.is_from_profile: bool | None = data.get("is_from_profile", None)
8889

89-
if self.value:
90+
if self._value:
9091
value_mapper: dict[str, Callable] = {
9192
"IPHost": ipaddress.ip_interface,
9293
"IPNetwork": ipaddress.ip_network,
9394
}
9495
mapper = value_mapper.get(schema.kind, lambda value: value)
95-
self.value = mapper(data.get("value"))
96+
self._value = mapper(data.get("value"))
9697

9798
self.is_inherited: bool | None = data.get("is_inherited", None)
9899
self.updated_at: str | None = data.get("updated_at", None)
@@ -107,6 +108,15 @@ def __init__(self, name: str, schema: AttributeSchemaAPI, data: Any | dict):
107108
if data.get(prop_name):
108109
setattr(self, prop_name, NodeProperty(data=data.get(prop_name))) # type: ignore[arg-type]
109110

111+
@property
112+
def value(self) -> Any:
113+
return self._value
114+
115+
@value.setter
116+
def value(self, value: Any) -> None:
117+
self._value = value
118+
self.value_has_been_mutated = True
119+
110120
def _generate_input_data(self) -> dict | None:
111121
data: dict[str, Any] = {}
112122
variables: dict[str, Any] = {}
@@ -975,7 +985,9 @@ def _strip_unmodified(self, data: dict, variables: dict) -> tuple[dict, dict]:
975985
for item in original_data.keys():
976986
if item in data.keys():
977987
if data[item] == original_data[item]:
978-
data.pop(item)
988+
if attr := getattr(self, item, None): # this should never be None, just a safety default value
989+
if not isinstance(attr, Attribute) or not attr.value_has_been_mutated:
990+
data.pop(item)
979991
continue
980992
if isinstance(original_data[item], dict):
981993
self._strip_unmodified_dict(data=data, original_data=original_data, variables=variables, item=item)

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[tool.poetry]
22
name = "infrahub-sdk"
3-
version = "1.10.1"
3+
version = "1.10.2"
44
description = "Python Client to interact with Infrahub"
55
authors = ["OpsMill <[email protected]>"]
66
readme = "README.md"

tests/integration/test_node.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,25 @@ async def test_node_create_with_relationships(
6363
assert node_after.name.value == node.name.value
6464
assert node_after.manufacturer.peer.id == manufacturer_mercedes.id
6565

66+
async def test_node_update_with_original_data(
67+
self,
68+
default_branch: str,
69+
client: InfrahubClient,
70+
initial_schema: None,
71+
):
72+
person_marina = await client.create(kind="TestingPerson", name="marina", age=20)
73+
await person_marina.save()
74+
75+
person_marina = await client.get(kind="TestingPerson", id=person_marina.id)
76+
77+
person_marina.age.value = 30
78+
await person_marina.save()
79+
80+
person_marina.age.value = 20
81+
await person_marina.save()
82+
node = await client.get(kind="TestingPerson", id=person_marina.id)
83+
assert node.age.value == 20, node.age.value
84+
6685
# async def test_node_update_payload_with_relationships(
6786
# self,
6887
# db: InfrahubDatabase,

0 commit comments

Comments
 (0)