From 7b8155e7b116fb2460246d3e81aa19547d801d17 Mon Sep 17 00:00:00 2001 From: Radoslav Georgiev Date: Sun, 20 Jan 2019 17:10:43 +0200 Subject: [PATCH] Add `types.py` with `QuerySetType` implementation --- README.md | 2 ++ types.py | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 types.py diff --git a/README.md b/README.md index 21ad5c1..663335e 100644 --- a/README.md +++ b/README.md @@ -695,6 +695,8 @@ class Payment(models.Model): **This is our selector:** +For implementation of `QuerySetType`, check `types.py`. + ```python from django.contrib.auth.models import User diff --git a/types.py b/types.py new file mode 100644 index 0000000..1f23463 --- /dev/null +++ b/types.py @@ -0,0 +1,49 @@ +from typing import Generic, Iterator, Any, TypeVar, Optional, Dict, Tuple +from collections import Iterable + + +DjangoModel = TypeVar('DjangoModel') + + +class QuerySetType(Generic[DjangoModel], extra=Iterable): + """ + This type represents django.db.models.QuerySet interface. + + Defined Types: + DjangoModel - model instance + QuerysetType[DjangoModel] - Queryset of DjangoModel instances + Iterator[DjangoModel] - Iterator of DjangoModel instances + """ + def __iter__(self) -> Iterator[DjangoModel]: ... + + def all(self) -> 'QuerySetType[DjangoModel]': ... + + def order_by(self, *args: Any) -> 'QuerySetType[DjangoModel]': ... + + def count(self) -> int: ... + + def filter(self, **kwargs: Any) -> 'QuerySetType[DjangoModel]': ... + + def exclude(self, **kwargs: Any) -> 'QuerySetType[DjangoModel]': ... + + def get(self, **kwargs: Any) -> DjangoModel: ... + + def annotate(self, **kwargs: Any) -> 'QuerySetType[DjangoModel]': ... + + def first(self) -> Optional[DjangoModel]: ... + + def update(self, **kwargs: Any) -> DjangoModel: ... + + def delete(self, **kwargs: Any) -> Tuple[int, Dict[str, int]]: ... + + def last(self) -> Optional[DjangoModel]: ... + + def exists(self) -> bool: ... + + def values(self, *args: Any) -> 'QuerySetType[DjangoModel]': ... + + def values_list(self, *args: Any) -> 'QuerySetType[DjangoModel]': ... + + def __getitem__(self, index: int) -> DjangoModel: ... + + def __len__(self) -> int: ...