@@ -122,23 +122,24 @@ def validate_put_has_empty_keys(
122122 raise MockValidationException (msg .format (empty_key ))
123123
124124
125- def put_has_empty_attrs (field_updates : Dict [str , Any ], table : Table ) -> bool :
125+ def validate_put_has_empty_attrs (field_updates : Dict [str , Any ], table : Table ) -> None :
126126 # Example invalid attribute: [{'M': {'SS': {'NS': []}}}]
127- def _validate_attr (attr : Dict [str , Any ]) -> bool :
128- if "NS" in attr and attr ["NS" ] == []:
129- return True
127+ def _validate_attr (attr : Dict [str , Any ]) -> None :
128+ for set_type , error in [("NS" , "number" ), ("SS" , "string" )]:
129+ if set_type in attr and attr [set_type ] == []:
130+ raise MockValidationException (
131+ f"One or more parameter values were invalid: An { error } set may not be empty"
132+ )
133+
130134 else :
131- return any (
132- [ _validate_attr ( val ) for val in attr . values () if isinstance (val , dict )]
133- )
135+ for val in attr . values ():
136+ if isinstance (val , dict ):
137+ _validate_attr ( val )
134138
135139 if table :
136- key_names = table .attribute_keys
137- attrs_to_check = [
138- val for attr , val in field_updates .items () if attr not in key_names
139- ]
140- return any ([_validate_attr (attr ) for attr in attrs_to_check ])
141- return False
140+ for attr , val in field_updates .items ():
141+ if attr not in table .attribute_keys :
142+ _validate_attr (val )
142143
143144
144145def validate_put_has_gsi_keys_set_to_none (item : Dict [str , Any ], table : Table ) -> None :
@@ -475,10 +476,7 @@ def put_item(self) -> str:
475476
476477 table = self .dynamodb_backend .get_table (name )
477478 validate_put_has_empty_keys (item , table )
478- if put_has_empty_attrs (item , table ):
479- raise MockValidationException (
480- "One or more parameter values were invalid: An number set may not be empty"
481- )
479+ validate_put_has_empty_attrs (item , table )
482480 validate_put_has_gsi_keys_set_to_none (item , table )
483481
484482 overwrite = "Expected" not in self .body
0 commit comments