From 3cc2456b684561e3d4e6782e63433740c5e25bd3 Mon Sep 17 00:00:00 2001 From: 201st-Luka Date: Fri, 28 Jul 2023 16:06:06 +0200 Subject: [PATCH] improved iterative models added slicing to the iterative models --- pyclasher/bulk_requests/BulkRequestModel.py | 9 ++++++++- pyclasher/bulk_requests/BulkRequestModel.pyi | 4 ++-- pyclasher/models/BaseModels.py | 10 +++++++++- pyclasher/models/BaseModels.pyi | 4 ++-- pyclasher/requests/RequestModels.py | 10 +++++++++- pyclasher/requests/RequestModels.pyi | 4 ++-- 6 files changed, 32 insertions(+), 9 deletions(-) diff --git a/pyclasher/bulk_requests/BulkRequestModel.py b/pyclasher/bulk_requests/BulkRequestModel.py index 0425ef2..a79ab8c 100644 --- a/pyclasher/bulk_requests/BulkRequestModel.py +++ b/pyclasher/bulk_requests/BulkRequestModel.py @@ -1,5 +1,7 @@ from asyncio import gather, get_running_loop, run +from Exceptions import RequestNotDone + class BulkRequestModel: _request_model = ... @@ -34,7 +36,12 @@ def __len__(self): return len(self._requests) def __getitem__(self, item): - return self._requests[item] + self._requests[0].to_dict() # test if the `to_dict()` method raises `RequestNotDone` + if isinstance(item, int): + return self._requests[item] + if isinstance(item, slice): + return (self._requests[i] for i in range(*item.indices(len(self._requests)))) + raise NotImplementedError def __iter__(self): self._iter = iter(self._requests) diff --git a/pyclasher/bulk_requests/BulkRequestModel.pyi b/pyclasher/bulk_requests/BulkRequestModel.pyi index 1d8996a..f2fba2c 100644 --- a/pyclasher/bulk_requests/BulkRequestModel.pyi +++ b/pyclasher/bulk_requests/BulkRequestModel.pyi @@ -1,4 +1,4 @@ -from typing import Any, Coroutine, Iterator +from typing import Any, Coroutine, Iterator, Generator class BulkRequestModel: @@ -77,7 +77,7 @@ class BulkRequestModel: def __len__(self) -> int: ... - def __getitem__(self, item: int) -> _request_model: + def __getitem__(self, item: int | slice) -> Generator | _request_model: ... def __iter__(self) -> Iterator[_request_model]: diff --git a/pyclasher/models/BaseModels.py b/pyclasher/models/BaseModels.py index 0b4d995..62b03eb 100644 --- a/pyclasher/models/BaseModels.py +++ b/pyclasher/models/BaseModels.py @@ -69,7 +69,15 @@ def __len__(self): return self._len def __getitem__(self, item): - return self._iter_rtype(self._data[item]) + if self._data is MISSING: + raise RequestNotDone + if self._data is None: + return None + if isinstance(item, int): + return self._iter_rtype(self._data[item]) + if isinstance(item, slice): + return (self._iter_rtype(self._data[i]) for i in range(*item.indices(len(self._data)))) + raise NotImplementedError def __iter__(self): self._iter = iter(self._data) diff --git a/pyclasher/models/BaseModels.pyi b/pyclasher/models/BaseModels.pyi index df3a0b9..c3a319a 100644 --- a/pyclasher/models/BaseModels.pyi +++ b/pyclasher/models/BaseModels.pyi @@ -2,7 +2,7 @@ base models for this API wrapper client """ -from typing import Any, Iterator +from typing import Any, Iterator, Generator from ..Exceptions import MISSING, Missing @@ -123,7 +123,7 @@ class IterBaseModel: def __len__(self) -> int: ... - def __getitem__(self, item: int) -> _iter_rtype: + def __getitem__(self, item: int | slice) -> MISSING | Generator | _iter_rtype: ... def __iter__(self) -> Iterator[_iter_rtype]: diff --git a/pyclasher/requests/RequestModels.py b/pyclasher/requests/RequestModels.py index 239dd7b..5ca72b6 100644 --- a/pyclasher/requests/RequestModels.py +++ b/pyclasher/requests/RequestModels.py @@ -156,7 +156,15 @@ def paging(self): return Paging(self._get_data('paging')) def __getitem__(self, item): - return self._iter_rtype(self._get_data('items')[item]) + if self._data is MISSING: + raise RequestNotDone + if self._data is None: + return None + if isinstance(item, int): + return self.items[item] + if isinstance(item, slice): + return (self.items[i] for i in range(*item.indices(len(self)))) + raise NotImplementedError def __iter__(self): self._iter = iter(self._get_data('items')) diff --git a/pyclasher/requests/RequestModels.pyi b/pyclasher/requests/RequestModels.pyi index 8afb50c..8d7ccc7 100644 --- a/pyclasher/requests/RequestModels.pyi +++ b/pyclasher/requests/RequestModels.pyi @@ -1,4 +1,4 @@ -from typing import Any, Self, Coroutine, Iterator +from typing import Any, Self, Coroutine, Iterator, Generator from ..Exceptions import MISSING, Missing from ..client import PyClasherClient, RequestMethods @@ -79,7 +79,7 @@ class IterRequestModel(RequestModel): def paging(self) -> Paging: ... - def __getitem__(self, item: int) -> _iter_rtype: + def __getitem__(self, item: int | slice) -> Generator | _iter_rtype: ... def __iter__(self) -> Iterator[_iter_rtype]: