some refactors

This commit is contained in:
collerek
2020-09-17 15:21:11 +02:00
parent 1cfd061e17
commit 12487e1089
5 changed files with 10 additions and 22 deletions

BIN
.coverage

Binary file not shown.

View File

@ -89,7 +89,7 @@ class Model(NewBaseModel):
return item return item
@classmethod @classmethod
def extract_prefixed_table_columns( # noqa CCR001 def extract_prefixed_table_columns( # noqa CCR001
cls, item: dict, row: sqlalchemy.engine.result.ResultProxy, table_prefix: str cls, item: dict, row: sqlalchemy.engine.result.ResultProxy, table_prefix: str
) -> dict: ) -> dict:
for column in cls.Meta.table.columns: for column in cls.Meta.table.columns:

View File

@ -1,5 +1,5 @@
import inspect import inspect
from typing import List, Optional, Set, TYPE_CHECKING, Type, TypeVar from typing import List, Optional, Set, TYPE_CHECKING, Type, TypeVar, Union
import ormar import ormar
from ormar.exceptions import RelationshipInstanceError from ormar.exceptions import RelationshipInstanceError
@ -94,7 +94,9 @@ class ModelTableProxy:
return name return name
@staticmethod @staticmethod
def resolve_relation_field(item: "Model", related: "Model") -> Type[Field]: def resolve_relation_field(
item: Union["Model", Type["Model"]], related: Union["Model", Type["Model"]]
) -> Type[Field]:
name = ModelTableProxy.resolve_relation_name(item, related) name = ModelTableProxy.resolve_relation_name(item, related)
to_field = item.Meta.model_fields.get(name) to_field = item.Meta.model_fields.get(name)
if not to_field: # pragma no cover if not to_field: # pragma no cover

View File

@ -4,8 +4,6 @@ import sqlalchemy
from sqlalchemy import text from sqlalchemy import text
import ormar # noqa I100 import ormar # noqa I100
from ormar.fields import BaseField
from ormar.fields.foreign_key import ForeignKeyField
from ormar.fields.many_to_many import ManyToManyField from ormar.fields.many_to_many import ManyToManyField
from ormar.queryset import FilterQuery, LimitQuery, OffsetQuery, OrderQuery from ormar.queryset import FilterQuery, LimitQuery, OffsetQuery, OrderQuery
from ormar.relations.alias_manager import AliasManager from ormar.relations.alias_manager import AliasManager
@ -95,11 +93,6 @@ class Query:
right_part = f"{previous_alias + '_' if previous_alias else ''}{from_clause}" right_part = f"{previous_alias + '_' if previous_alias else ''}{from_clause}"
return text(f"{left_part}={right_part}") return text(f"{left_part}={right_part}")
def _is_target_relation_key(
self, field: BaseField, target_model: Type["Model"]
) -> bool:
return issubclass(field, ForeignKeyField) and field.to.Meta == target_model.Meta
def _build_join_parameters( def _build_join_parameters(
self, part: str, join_params: JoinParameters, is_multi: bool = False self, part: str, join_params: JoinParameters, is_multi: bool = False
) -> JoinParameters: ) -> JoinParameters:
@ -157,14 +150,10 @@ class Query:
part: str, part: str,
) -> Tuple[str, str]: ) -> Tuple[str, str]:
if join_params.prev_model.Meta.model_fields[part].virtual or is_multi: if join_params.prev_model.Meta.model_fields[part].virtual or is_multi:
to_key = next( to_field = model_cls.resolve_relation_field(
( model_cls, join_params.prev_model
v )
for k, v in model_cls.Meta.model_fields.items() to_key = to_field.name
if self._is_target_relation_key(v, join_params.prev_model)
),
None,
).name
from_key = model_cls.Meta.pkname from_key = model_cls.Meta.pkname
else: else:
to_key = model_cls.Meta.pkname to_key = model_cls.Meta.pkname

View File

@ -2,10 +2,7 @@ import os
import databases import databases
assert "DATABASE_URL" in os.environ, "DATABASE_URL is not set." DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")
DATABASE_URL = os.environ['DATABASE_URL']
database_url = databases.DatabaseURL(DATABASE_URL) database_url = databases.DatabaseURL(DATABASE_URL)
if database_url.scheme == "postgresql+aiopg": # pragma no cover if database_url.scheme == "postgresql+aiopg": # pragma no cover
DATABASE_URL = str(database_url.replace(driver=None)) DATABASE_URL = str(database_url.replace(driver=None))
DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")