MCPcopy
hub / github.com/ormar-orm/ormar / __new__

Method __new__

ormar/models/metaclass.py:660–783  ·  view source on GitHub ↗

Metaclass used by ormar Models that performs configuration and build of ormar Models. Sets pydantic configuration. Extract model_fields and convert them to pydantic FieldInfo, updates class namespace. Extracts settings and fields from parent classe

(  # type: ignore # noqa: CCR001
        mcs: "ModelMetaclass",
        name: str,
        bases: Any,
        attrs: dict,
        __pydantic_generic_metadata__: Union[PydanticGenericMetadata, None] = None,
        __pydantic_reset_parent_namespace__: bool = True,
        _create_model_module: Union[str, None] = None,
        **kwargs,
    )

Source from the content-addressed store, hash-verified

658
659class ModelMetaclass(pydantic._internal._model_construction.ModelMetaclass):
660 def __new__( # type: ignore # noqa: CCR001
661 mcs: "ModelMetaclass",
662 name: str,
663 bases: Any,
664 attrs: dict,
665 __pydantic_generic_metadata__: Union[PydanticGenericMetadata, None] = None,
666 __pydantic_reset_parent_namespace__: bool = True,
667 _create_model_module: Union[str, None] = None,
668 **kwargs,
669 ) -> type:
670 """
671 Metaclass used by ormar Models that performs configuration
672 and build of ormar Models.
673
674
675 Sets pydantic configuration.
676 Extract model_fields and convert them to pydantic FieldInfo,
677 updates class namespace.
678
679 Extracts settings and fields from parent classes.
680 Fetches methods decorated with @computed_field decorator
681 to expose them later in dict().
682
683 Construct parent pydantic Metaclass/ Model.
684
685 If class has ormar_config declared (so actual ormar Models) it also:
686
687 * populate sqlalchemy columns, pkname and tables from model_fields
688 * register reverse relationships on related models
689 * registers all relations in alias manager that populates table_prefixes
690 * exposes alias manager on each Model
691 * creates QuerySet for each model and exposes it on a class
692 * sets custom serializers for relation models
693
694 :param name: name of current class
695 :type name: str
696 :param bases: base classes
697 :type bases: tuple
698 :param attrs: class namespace
699 :type attrs: dict
700 """
701 merge_or_generate_pydantic_config(attrs=attrs, name=name)
702 attrs["__name__"] = name
703 attrs, model_fields = extract_annotations_and_default_vals(attrs)
704 for base in reversed(bases):
705 mod = base.__module__
706 if mod.startswith("ormar.models.") or mod.startswith("pydantic."):
707 continue
708 attrs, model_fields = extract_from_parents_definition(
709 base_class=base, curr_class=mcs, attrs=attrs, model_fields=model_fields
710 )
711 if "ormar_config" in attrs:
712 attrs["model_config"]["ignored_types"] = (OrmarConfig,)
713 attrs["model_config"]["from_attributes"] = True
714 for field_name, field in model_fields.items():
715 if field.is_relation:
716 decorator = field_serializer(
717 field_name, mode="wrap", check_fields=False

Callers 2

_internal_constructMethod · 0.45
model_constructMethod · 0.45

Tested by

no test coverage detected