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

Method _extract_nested_models

ormar/models/newbasemodel.py:806–889  ·  view source on GitHub ↗

Traverse nested models and converts them into dictionaries. Calls itself recursively if needed. :param relation_map: map of the relations to follow to avoid circular deps :type relation_map: dict :param dict_instance: current instance dict :type dict

(  # noqa: CCR001, CFQ002
        self,
        relation_map: builtins.dict,
        dict_instance: builtins.dict,
        include: Optional[builtins.dict],
        exclude: Optional[builtins.dict],
        exclude_primary_keys: bool,
        exclude_through_models: bool,
        exclude_list: bool,
        flatten_map: Optional[FlattenMap] = None,
    )

Source from the content-addressed store, hash-verified

804 )
805
806 def _extract_nested_models( # noqa: CCR001, CFQ002
807 self,
808 relation_map: builtins.dict,
809 dict_instance: builtins.dict,
810 include: Optional[builtins.dict],
811 exclude: Optional[builtins.dict],
812 exclude_primary_keys: bool,
813 exclude_through_models: bool,
814 exclude_list: bool,
815 flatten_map: Optional[FlattenMap] = None,
816 ) -> builtins.dict:
817 """
818 Traverse nested models and converts them into dictionaries.
819 Calls itself recursively if needed.
820
821 :param relation_map: map of the relations to follow to avoid circular deps
822 :type relation_map: dict
823 :param dict_instance: current instance dict
824 :type dict_instance: dict
825 :param include: fields to include
826 :type include: Optional[dict]
827 :param exclude: fields to exclude
828 :type exclude: Optional[dict]
829 :param exclude_list: whether to exclude list-valued relations
830 :type exclude_list: bool
831 :param flatten_map: FlattenMap directing relations to render as pk values
832 :type flatten_map: Optional[FlattenMap]
833 :return: current model dict with child models converted to dictionaries
834 :rtype: dict
835 """
836 fields = filter_not_excluded_fields(
837 fields=self.extract_related_names(), include=include, exclude=exclude
838 )
839
840 for field in fields:
841 if not relation_map or field not in relation_map:
842 continue
843 try:
844 nested_model = getattr(self, field)
845 descent = self._resolve_field_descent(
846 field=field,
847 nested_model=nested_model,
848 flatten_map=flatten_map,
849 exclude_list=exclude_list,
850 relation_map=relation_map,
851 include=include,
852 exclude=exclude,
853 dict_instance=dict_instance,
854 )
855 if descent is None:
856 continue
857 if isinstance(nested_model, MutableSequence):
858 dict_instance[field] = self._extract_nested_models_from_list(
859 relation_map=descent.relation_map,
860 models=nested_model,
861 include=descent.include,
862 exclude=descent.exclude,
863 exclude_primary_keys=exclude_primary_keys,

Callers 1

model_dumpMethod · 0.95

Calls 6

extract_related_namesMethod · 0.80
model_dumpMethod · 0.80

Tested by

no test coverage detected