Skip to content

Commit

Permalink
improved iterative models
Browse files Browse the repository at this point in the history
added slicing to the iterative models
  • Loading branch information
201st-Luka committed Jul 28, 2023
1 parent 928843a commit 3cc2456
Show file tree
Hide file tree
Showing 6 changed files with 32 additions and 9 deletions.
9 changes: 8 additions & 1 deletion pyclasher/bulk_requests/BulkRequestModel.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from asyncio import gather, get_running_loop, run

from Exceptions import RequestNotDone


class BulkRequestModel:
_request_model = ...
Expand Down Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions pyclasher/bulk_requests/BulkRequestModel.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Any, Coroutine, Iterator
from typing import Any, Coroutine, Iterator, Generator


class BulkRequestModel:
Expand Down Expand Up @@ -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]:
Expand Down
10 changes: 9 additions & 1 deletion pyclasher/models/BaseModels.py
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions pyclasher/models/BaseModels.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -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]:
Expand Down
10 changes: 9 additions & 1 deletion pyclasher/requests/RequestModels.py
Original file line number Diff line number Diff line change
Expand Up @@ -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'))
Expand Down
4 changes: 2 additions & 2 deletions pyclasher/requests/RequestModels.pyi
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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]:
Expand Down

0 comments on commit 3cc2456

Please sign in to comment.