@@ -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 )
0 commit comments