From 12487e10891d593b86c8089f1de198b1911f5425 Mon Sep 17 00:00:00 2001 From: collerek Date: Thu, 17 Sep 2020 15:21:11 +0200 Subject: [PATCH] some refactors --- .coverage | Bin 53248 -> 53248 bytes ormar/models/model.py | 2 +- ormar/models/modelproxy.py | 6 ++++-- ormar/queryset/query.py | 19 ++++--------------- tests/settings.py | 5 +---- 5 files changed, 10 insertions(+), 22 deletions(-) diff --git a/.coverage b/.coverage index 458f78cb3fe329f127a13728c3a244d4965409a5..5c9ea5d2bcdc4ff651dc133eae0146c82fbc4b8c 100644 GIT binary patch delta 2781 zcmZ`*eQXow8TaKb_W8bE#|d#h{FM(I0wabrU_Wg~z)7`OuwYYj`dI`Qo}JDm)I zf8OVPp5O1D=eg(ZclVw+N1ixG{!Z^?Y&!HE^bNED*~W`ZJi@HUS?zUh-qN(Wv1wBS zDj+K@$AaNVkJP`VzM+2e4_pLg`(X?AdA@>P*&psXJP_Ht_we9AFfxG8dFu4Lv|R*W z@oXJeJ%y${Zn{i|{)XO0-$Sj)B77$NUWf``6N>oj{BQUp{5D?4&2T5V4sI>`UpB_R z#_nd#%r)khOo-Xc5XO&bYPReJip9pkK)ltpgRbR^>$L%sdZYMD-#J04D|GOYZuqsu-NJ$ ztWcwosKnB42R_-x;D@b7sv(P*G3PjWDzW3P4i90& zKkI0utPNxjuxzV3p{dH;G_*i53!(+hh2a&i!2j%A4>Bppw~rb%3yx*-J*WuvrQp2!_QYM}uMQ zYf+?4RAc)z#jJAhPkaKd*|#3Ff(QXpG*bKvBxt3>1v+5~4!_mq#3QYmND#r|{;md) z%3EDq2_vlQUiS+G4XtjW47rDC(-gtJ8i;5g7yXy>$mxQm3OACV3mDLhpQotYOl@4= z9g;B3if70|bQWeOKmJHGIrq3ZMTZo0AKgG7q4&{6^d>rqLZ}NhA%qOVittEyAlw%I zDEvxz4Spz+&?WeVox%peF6jA({9XPU|7-q7e28!1>-b_$0WrM8$z^VeFgCa+u6h&7 zz36muA*n8Jlrl}Sqr?TsdY6U_C3DC~iY%$sqP1Tv4mCqKIe0dy%-tMz)j+hp=KDZh z*frK7pG_>J7tbVaDs%IF(^unTG377f$U?fZ8fe?9kDXqUGc%(ziWHG&uSQ0ctDe~M z=LUNfpv_eiqp6_<>iXqQ+P|1hqO%86K_ zlPQHjX{mhc&GZegVGTH@HTI0P1U5}2*FDYYsiVg)M5MNr;khnVnZF-PFA*`1goCAlSw?r< zP*qG=4B%`s+`sKxRL9hRO{O!MrJ3kRoD}o`*!3NO^qe}MmYbPE@JkErx@DCxQm`+f zLZOhJBVk)X>UFc9sVd?Nz_S({8!b^XiZbFUBq*a%D9HYEgvZ!$%3F$>kr!=3b*LIu zq7uX-y`Tz@K{Rg*KCL9-c4v*tl{K}sSyNM!HPzKwQ&p8UPG{CQ99d(xXN}F4HCF5R zOJgx7=|(SN!xbnyfFyJf1<`j=C;B#e8MVVn^hGE;FL+5f;_)P$-*^(vWjqPzEuMs9 b6;D=ai&I-1+5*QLp0sI;6&5@g|LOk#`;^I= delta 1809 zcmZ9MZETZO6vxl)z3cOS@6(sH-8#B%DzM2`wy_rmPChUK?4^A^7hmv$R4|edfry|4iB1U#Q4@(TP0WOOpRu)LNt1i-Isfy2 z&Uv0+nm&cor|<{%psE4e#OhfQ)21Be4CTv0!SaS+O>Og<#^$;jX2X8()3MQHVra0w zy0*GzvJsJG&-L3SbOvbo4I;UdkSXjAybts3!SNG;YEj*Q1fQ_0xa z@aWL~l;~^rU^uW?AzGb0(^e@?Sr&q|?j;ud{Wb@3@h{ryi4()V`CcD!uONyt0EKo!_5Zhq>d4{;}9- zPE)7l4H-Ytp%WEDUv7i*9d6#*8RRn^ULxlwvh&(b7m+ZG8NrL~n!+w(!w}8c^@STY1y*xPK3wK7Jp z(>LiL#p-VLW!h+5(hnN18ePVt`tSNS{S&=J`&nC~y{BfiA@!VqBdFpK?&aU?@LHa( zC2089;DLpjAj3_HYjGl%5C|v>WEAnkJ06Uc2SX*kW}I3qcP|CQyAB^%ED$_6_?cag zTU~|iK_RE>?F7fM{{<4VS`_d`WKM+u$u&%{nP~Z7rVo5vai`k>>ZY7 z``LC@!OEDAF=nUt=uh;F0OdG6L=Vt@x|439Ep#O{1rk?`36Gy3rP}|U0{x|euL|>fonmP~Y1pi~$plh7?jOH2mdlb$R83dleu+~A z&CVO4mKg+fNDQ_9B!)W@z%!7U3^+u!#c|{IL@I+yMA51=0i>UW3>Lo<)9N;FtjJ=g z*}d8Y$lAtcBeD#LNX&W&yFesr1+;boNrn{}wMf#fK)*ojnh2=&d4(#@?P~Vk(bRs^ozh@(7(sfX=-33rGq*7uS_ilOM83wso1c!{`s((Ra89!eq0hearUYqJ zSRgK|3VtnztniyYkqQLvf-fMDK}vw^?3wui;ywtdSlm500RPP*#U^66Egp~CHAEDp u*bbNO%+9j8e-hRTY=-^K^~1FS1c^ dict: for column in cls.Meta.table.columns: diff --git a/ormar/models/modelproxy.py b/ormar/models/modelproxy.py index 2cd86a2..9052b71 100644 --- a/ormar/models/modelproxy.py +++ b/ormar/models/modelproxy.py @@ -1,5 +1,5 @@ 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 from ormar.exceptions import RelationshipInstanceError @@ -94,7 +94,9 @@ class ModelTableProxy: return name @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) to_field = item.Meta.model_fields.get(name) if not to_field: # pragma no cover diff --git a/ormar/queryset/query.py b/ormar/queryset/query.py index b1e8830..22578a7 100644 --- a/ormar/queryset/query.py +++ b/ormar/queryset/query.py @@ -4,8 +4,6 @@ import sqlalchemy from sqlalchemy import text 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.queryset import FilterQuery, LimitQuery, OffsetQuery, OrderQuery from ormar.relations.alias_manager import AliasManager @@ -95,11 +93,6 @@ class Query: right_part = f"{previous_alias + '_' if previous_alias else ''}{from_clause}" 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( self, part: str, join_params: JoinParameters, is_multi: bool = False ) -> JoinParameters: @@ -157,14 +150,10 @@ class Query: part: str, ) -> Tuple[str, str]: if join_params.prev_model.Meta.model_fields[part].virtual or is_multi: - to_key = next( - ( - v - for k, v in model_cls.Meta.model_fields.items() - if self._is_target_relation_key(v, join_params.prev_model) - ), - None, - ).name + to_field = model_cls.resolve_relation_field( + model_cls, join_params.prev_model + ) + to_key = to_field.name from_key = model_cls.Meta.pkname else: to_key = model_cls.Meta.pkname diff --git a/tests/settings.py b/tests/settings.py index 4cf7350..6d89f4e 100644 --- a/tests/settings.py +++ b/tests/settings.py @@ -2,10 +2,7 @@ import os import databases -assert "DATABASE_URL" in os.environ, "DATABASE_URL is not set." - -DATABASE_URL = os.environ['DATABASE_URL'] +DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db") database_url = databases.DatabaseURL(DATABASE_URL) if database_url.scheme == "postgresql+aiopg": # pragma no cover DATABASE_URL = str(database_url.replace(driver=None)) -DATABASE_URL = os.getenv("DATABASE_URL", "sqlite:///test.db")