more tests for excluding parent fields, finished docs

This commit is contained in:
collerek
2021-06-02 10:16:47 +02:00
parent af394de483
commit f52797fb06
9 changed files with 244 additions and 15 deletions

View File

@ -119,7 +119,7 @@ def get_potential_fields(attrs: Dict) -> Dict:
}
def remove_excluded_parent_fields(model: Type["Model"]):
def remove_excluded_parent_fields(model: Type["Model"]) -> None:
"""
Removes pydantic fields that should be excluded from parent models

View File

@ -1,5 +1,5 @@
import uuid
from typing import Callable, Collection, Dict, Optional, Set, TYPE_CHECKING, cast
from typing import Callable, Collection, Dict, List, Optional, Set, TYPE_CHECKING, cast
import ormar
from ormar.exceptions import ModelPersistenceError
@ -275,9 +275,7 @@ class SavePrepareMixin(RelationMixin, AliasMixin):
:rtype: int
"""
for field in fields_list:
values = getattr(self, field.name) or []
if not isinstance(values, list):
values = [values]
values = self._get_field_values(name=field.name)
for value in values:
if follow:
update_count = await value.save_related(
@ -299,3 +297,17 @@ class SavePrepareMixin(RelationMixin, AliasMixin):
update_count=update_count,
)
return update_count
def _get_field_values(self, name: str) -> List:
"""
Extract field values and ensures it is a list.
:param name: name of the field
:type name: str
:return: list of values
:rtype: List
"""
values = getattr(self, name) or []
if not isinstance(values, list):
values = [values]
return values

View File

@ -107,7 +107,7 @@ class Model(ModelRow):
await self.signals.post_save.send(sender=self.__class__, instance=self)
return self
async def save_related( # noqa: CCR001
async def save_related( # noqa: CCR001, CFQ002
self,
follow: bool = False,
save_all: bool = False,

View File

@ -552,7 +552,7 @@ class NewBaseModel(pydantic.BaseModel, ModelTableProxy, metaclass=ModelMetaclass
return items.get("__all__")
return items
def _extract_nested_models( # noqa: CCR001
def _extract_nested_models( # noqa: CCR001, CFQ002
self,
relation_map: Dict,
dict_instance: Dict,