@@ -70,7 +70,9 @@ def _inner(f: T) -> T:
7070
7171
7272class PreprocessedEntityDefinition (dict [str , t .Any ]):
73- pass
73+ def __init__ (self , / , * args : t .Any , _partial : bool , ** kwargs : t .Any ):
74+ super ().__init__ (* args , ** kwargs )
75+ self ._partial : bool = _partial
7476
7577
7678EntityDefinition = dict [str , t .Any ] | PreprocessedEntityDefinition
@@ -132,7 +134,8 @@ def preprocess_payload(payload: EntityDefinition) -> EntityDefinition:
132134 return payload
133135
134136 return PreprocessedEntityDefinition (
135- {key : _preprocess_value (value ) for key , value in payload .items () if value is not None }
137+ {key : _preprocess_value (value ) for key , value in payload .items () if value is not None },
138+ _partial = False ,
136139 )
137140
138141
@@ -957,6 +960,15 @@ def _preprocess_value(cls, key: str, value: t.Any) -> t.Any:
957960 return None
958961 return _preprocess_value (value )
959962
963+ def _preprocess_entity (self , body : EntityDefinition , partial : bool = False ) -> EntityDefinition :
964+ if isinstance (body , PreprocessedEntityDefinition ):
965+ assert body ._partial == partial
966+ return body
967+ else :
968+ return PreprocessedEntityDefinition (
969+ self .preprocess_entity (body , partial ), _partial = partial
970+ )
971+
960972 def preprocess_entity (self , body : EntityDefinition , partial : bool = False ) -> EntityDefinition :
961973 """
962974 Filter to prepare the body for a create or update call.
@@ -971,16 +983,11 @@ def preprocess_entity(self, body: EntityDefinition, partial: bool = False) -> En
971983 Returns:
972984 The body ready to be passed to `call`.
973985 """
974- if isinstance (body , PreprocessedEntityDefinition ):
975- return body
976-
977- return PreprocessedEntityDefinition (
978- {
979- key : self ._preprocess_value (key , value )
980- for key , value in body .items ()
981- if value is not None
982- }
983- )
986+ return {
987+ key : self ._preprocess_value (key , value )
988+ for key , value in body .items ()
989+ if value is not None
990+ }
984991
985992 def list_iterator (
986993 self ,
@@ -1123,7 +1130,7 @@ def create(
11231130 if parameters :
11241131 _parameters .update (parameters )
11251132 if body is not None :
1126- body = self .preprocess_entity (body , partial = False )
1133+ body = self ._preprocess_entity (body , partial = False )
11271134 if self .pulp_ctx .fake_mode :
11281135 body ["pulp_href" ] = "<FAKE ENTITY>"
11291136 self ._entity = body
@@ -1182,7 +1189,7 @@ def update(
11821189 if parameters :
11831190 _parameters .update (parameters )
11841191 if body is not None :
1185- body = self .preprocess_entity (body , partial = True )
1192+ body = self ._preprocess_entity (body , partial = True )
11861193 if self .pulp_ctx .fake_mode :
11871194 assert self ._entity is not None
11881195 if body is not None :
@@ -1370,14 +1377,14 @@ def converge(
13701377 return True , None , self .create (desired_entity )
13711378 else :
13721379 update_attributes = {}
1373- for k , v in self .preprocess_entity (desired_attributes , partial = True ).items ():
1380+ for k , v in self ._preprocess_entity (desired_attributes , partial = True ).items ():
13741381 if entity .get (k ) != v :
13751382 update_attributes [k ] = v
13761383 if update_attributes :
13771384 return (
13781385 True ,
13791386 entity ,
1380- self .update (PreprocessedEntityDefinition (update_attributes )),
1387+ self .update (PreprocessedEntityDefinition (update_attributes , _partial = True )),
13811388 )
13821389 return False , entity , entity
13831390
0 commit comments