Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog/479.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Allow unsetting optional relationship of cardinality one by setting its value to `None`
1 change: 1 addition & 0 deletions changelog/519.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Bump docs dependencies
1,865 changes: 939 additions & 926 deletions docs/package-lock.json

Large diffs are not rendered by default.

4 changes: 3 additions & 1 deletion infrahub_sdk/graphql.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,9 @@
VARIABLE_TYPE_MAPPING = ((str, "String!"), (int, "Int!"), (float, "Float!"), (bool, "Boolean!"))


def convert_to_graphql_as_string(value: str | bool | list | BaseModel | Enum | Any, convert_enum: bool = False) -> str: # noqa: PLR0911
def convert_to_graphql_as_string(value: Any, convert_enum: bool = False) -> str: # noqa: PLR0911
if value is None:
return "null"
if isinstance(value, str) and value.startswith("$"):
return value
if isinstance(value, Enum):
Expand Down
28 changes: 17 additions & 11 deletions infrahub_sdk/node/node.py
Original file line number Diff line number Diff line change
Expand Up @@ -234,15 +234,10 @@ def _generate_input_data( # noqa: C901

rel: RelatedNodeBase | RelationshipManagerBase = getattr(self, item_name)

# BLOCKED by https://github.com/opsmill/infrahub/issues/330
# if (
# item is None
# and item_name in self._relationships
# and self._schema.get_relationship(item_name).cardinality == "one"
# ):
# data[item_name] = None
# continue
# el
if rel_schema.cardinality == RelationshipCardinality.ONE and rel_schema.optional and not rel.initialized:
data[item_name] = None
continue

if rel is None or not rel.initialized:
continue

Expand Down Expand Up @@ -315,7 +310,16 @@ def _strip_unmodified_dict(data: dict, original_data: dict, variables: dict, ite
variables.pop(variable_key)

# TODO: I do not feel _great_ about this
if not data_item and data_item != [] and item in data:
# -> I don't even know who you are (but this is not great indeed) -- gmazoyer (quoting Thanos)
original_data_item = original_data.get(item)
original_data_item_is_none = original_data_item is None
if isinstance(original_data_item, dict):
if "node" in original_data_item:
original_data_item_is_none = original_data_item["node"] is None
elif "id" not in original_data_item:
original_data_item_is_none = True

if item in data and (data_item in ({}, []) or (data_item is None and original_data_item_is_none)):
data.pop(item)

def _strip_unmodified(self, data: dict, variables: dict) -> tuple[dict, dict]:
Expand All @@ -324,7 +328,9 @@ def _strip_unmodified(self, data: dict, variables: dict) -> tuple[dict, dict]:
relationship_property = getattr(self, relationship)
if not relationship_property or relationship not in data:
continue
if not relationship_property.initialized:
if not relationship_property.initialized and (
not isinstance(relationship_property, RelatedNodeBase) or not relationship_property.schema.optional
):
data.pop(relationship)
elif isinstance(relationship_property, RelationshipManagerBase) and not relationship_property.has_update:
data.pop(relationship)
Expand Down
Loading