add relation fields overloads

This commit is contained in:
collerek
2021-03-22 16:16:26 +01:00
parent 68b692e11b
commit 4ba7055238
2 changed files with 48 additions and 8 deletions

View File

@ -3,7 +3,17 @@ import sys
import uuid import uuid
from dataclasses import dataclass from dataclasses import dataclass
from random import choices from random import choices
from typing import Any, Dict, List, Optional, TYPE_CHECKING, Tuple, Type, Union from typing import (
Any,
Dict,
List,
Optional,
TYPE_CHECKING,
Tuple,
Type,
Union,
overload,
)
import sqlalchemy import sqlalchemy
from pydantic import BaseModel, create_model from pydantic import BaseModel, create_model
@ -19,9 +29,9 @@ if TYPE_CHECKING: # pragma no cover
from ormar.fields import ManyToManyField from ormar.fields import ManyToManyField
if sys.version_info < (3, 7): if sys.version_info < (3, 7):
ToType = Type["Model"] ToType = Type["T"]
else: else:
ToType = Union[Type["Model"], "ForwardRef"] ToType = Union[Type["T"], "ForwardRef"]
def create_dummy_instance(fk: Type["T"], pk: Any = None) -> "T": def create_dummy_instance(fk: Type["T"], pk: Any = None) -> "T":
@ -168,8 +178,18 @@ class ForeignKeyConstraint:
onupdate: Optional[str] onupdate: Optional[str]
@overload
def ForeignKey(to: Type["T"], **kwargs: Any) -> "T":
...
@overload
def ForeignKey(to: ForwardRef, **kwargs: Any) -> "Model":
...
def ForeignKey( # noqa CFQ002 def ForeignKey( # noqa CFQ002
to: Type["T"], to: "ToType",
*, *,
name: str = None, name: str = None,
unique: bool = False, unique: bool = False,

View File

@ -1,5 +1,15 @@
import sys import sys
from typing import Any, List, Optional, TYPE_CHECKING, Tuple, Type, Union, cast from typing import (
Any,
List,
Optional,
TYPE_CHECKING,
Tuple,
Type,
Union,
cast,
overload,
)
from pydantic.typing import ForwardRef, evaluate_forwardref from pydantic.typing import ForwardRef, evaluate_forwardref
import ormar # noqa: I100 import ormar # noqa: I100
@ -12,9 +22,9 @@ if TYPE_CHECKING: # pragma no cover
from ormar.relations.relation_proxy import RelationProxy from ormar.relations.relation_proxy import RelationProxy
if sys.version_info < (3, 7): if sys.version_info < (3, 7):
ToType = Type["Model"] ToType = Type["T"]
else: else:
ToType = Union[Type["Model"], "ForwardRef"] ToType = Union[Type["T"], "ForwardRef"]
REF_PREFIX = "#/components/schemas/" REF_PREFIX = "#/components/schemas/"
@ -58,8 +68,18 @@ def populate_m2m_params_based_on_to_model(
return __type__, column_type return __type__, column_type
@overload
def ManyToMany(to: Type["T"], **kwargs: Any) -> "RelationProxy[T]":
...
@overload
def ManyToMany(to: ForwardRef, **kwargs: Any) -> "RelationProxy":
...
def ManyToMany( def ManyToMany(
to: Type["T"], to: "ToType",
through: Optional["ToType"] = None, through: Optional["ToType"] = None,
*, *,
name: str = None, name: str = None,