some refactors
This commit is contained in:
@ -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:
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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")
|
|
||||||
|
|||||||
Reference in New Issue
Block a user