@@ -205,74 +205,6 @@ def get_field_metadata(field: Any) -> Any:
205205 return FakeMetadata ()
206206
207207
208- def sqlmodel_table_construct (
209- * ,
210- self_instance : _TSQLModel ,
211- values : dict [str , Any ],
212- _fields_set : set [str ] | None = None ,
213- ) -> _TSQLModel :
214- # Copy from Pydantic's BaseModel.construct()
215- # Ref: https://github.com/pydantic/pydantic/blob/v2.5.2/pydantic/main.py#L198
216- # Modified to not include everything, only the model fields, and to
217- # set relationships
218- # SQLModel override to get class SQLAlchemy __dict__ attributes and
219- # set them back in after creating the object
220- # new_obj = cls.__new__(cls)
221- cls = type (self_instance )
222- old_dict = self_instance .__dict__ .copy ()
223- # End SQLModel override
224-
225- fields_values : dict [str , Any ] = {}
226- defaults : dict [
227- str , Any
228- ] = {} # keeping this separate from `fields_values` helps us compute `_fields_set`
229- for name , field in cls .model_fields .items ():
230- if field .alias and field .alias in values :
231- fields_values [name ] = values .pop (field .alias )
232- elif name in values :
233- fields_values [name ] = values .pop (name )
234- elif not field .is_required ():
235- defaults [name ] = field .get_default (call_default_factory = True )
236- if _fields_set is None :
237- _fields_set = set (fields_values .keys ())
238- fields_values .update (defaults )
239-
240- _extra : dict [str , Any ] | None = None
241- if cls .model_config .get ("extra" ) == "allow" :
242- _extra = {}
243- for k , v in values .items ():
244- _extra [k ] = v
245- # SQLModel override, do not include everything, only the model fields
246- # else:
247- # fields_values.update(values)
248- # End SQLModel override
249- # SQLModel override
250- # Do not set __dict__, instead use setattr to trigger SQLAlchemy
251- # object.__setattr__(new_obj, "__dict__", fields_values)
252- # instrumentation
253- for key , value in {** old_dict , ** fields_values }.items ():
254- setattr (self_instance , key , value )
255- # End SQLModel override
256- object .__setattr__ (self_instance , "__pydantic_fields_set__" , _fields_set )
257- if not cls .__pydantic_root_model__ :
258- object .__setattr__ (self_instance , "__pydantic_extra__" , _extra )
259-
260- if cls .__pydantic_post_init__ :
261- self_instance .model_post_init (None )
262- elif not cls .__pydantic_root_model__ :
263- # Note: if there are any private attributes, cls.__pydantic_post_init__ would exist
264- # Since it doesn't, that means that `__pydantic_private__` should be set to None
265- object .__setattr__ (self_instance , "__pydantic_private__" , None )
266- # SQLModel override, set relationships
267- # Get and set any relationship objects
268- for key in self_instance .__sqlmodel_relationships__ :
269- value = values .get (key , Undefined )
270- if value is not Undefined :
271- setattr (self_instance , key , value )
272- # End SQLModel override
273- return self_instance
274-
275-
276208def sqlmodel_validate (
277209 cls : type [_TSQLModel ],
278210 obj : Any ,
0 commit comments