MCPcopy Index your code
hub / github.com/fastapi/sqlmodel / sqlmodel_table_construct

Function sqlmodel_table_construct

sqlmodel/_compat.py:208–273  ·  view source on GitHub ↗
(
    *,
    self_instance: _TSQLModel,
    values: dict[str, Any],
    _fields_set: set[str] | None = None,
)

Source from the content-addressed store, hash-verified

206
207
208def 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)

Callers 1

sqlmodel_initFunction · 0.85

Calls 1

__setattr__Method · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…