@@ -38,21 +38,18 @@ def update_orm_from_pydantic(
38
38
orm_conn : Connection , pydantic_conn : ConnectionBody , update_mask : list [str ] | None = None
39
39
):
40
40
"""Update ORM object from Pydantic object."""
41
- # Not all fields match and some need setters, therefore copy manually
42
- if not update_mask or "conn_type" in update_mask :
43
- orm_conn .conn_type = pydantic_conn .conn_type
44
- if not update_mask or "description" in update_mask :
45
- orm_conn .description = pydantic_conn .description
46
- if not update_mask or "host" in update_mask :
47
- orm_conn .host = pydantic_conn .host
48
- if not update_mask or "schema" in update_mask :
49
- orm_conn .schema = pydantic_conn .schema_
50
- if not update_mask or "login" in update_mask :
51
- orm_conn .login = pydantic_conn .login
41
+ # Not all fields match and some need setters, therefore copy partly manually via setters
42
+ non_update_fields = {"connection_id" , "conn_id" }
43
+ setter_fields = {"password" , "extra" }
44
+ fields_to_update = pydantic_conn .model_fields_set - non_update_fields - setter_fields
45
+ if update_mask :
46
+ fields_to_update = fields_to_update .intersection (update_mask )
47
+ conn_data = pydantic_conn .model_dump (include = fields_to_update , by_alias = True )
48
+ for key , val in conn_data .items ():
49
+ setattr (orm_conn , key , val )
50
+
52
51
if not update_mask or "password" in update_mask :
53
52
orm_conn .set_password (pydantic_conn .password )
54
- if not update_mask or "port" in update_mask :
55
- orm_conn .port = pydantic_conn .port
56
53
if not update_mask or "extra" in update_mask :
57
54
orm_conn .set_extra (pydantic_conn .extra )
58
55
0 commit comments