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,
)
| 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, |
no test coverage detected