Skip to content

Commit

Permalink
Merge pull request #29 from 201st-Luka/remove-non-async-support
Browse files Browse the repository at this point in the history
Remove non async support
  • Loading branch information
201st-Luka authored Aug 22, 2023
2 parents a84dccc + 60fad41 commit c8608a3
Show file tree
Hide file tree
Showing 63 changed files with 266 additions and 327 deletions.
2 changes: 1 addition & 1 deletion pyclasher/api/requests/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,6 @@
# labels
from .player_labels import PlayerLabelsRequest
from .player_rankings import PlayerRankingsRequest
from .request_models import RequestModel, IterRequestModel, request_id
from .abc import RequestModel, IterRequestModel, request_id
from .war_league import WarLeagueRequest
from .war_leagues import WarLeaguesRequest
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from asyncio import Future, get_running_loop
from asyncio import Future
from typing import Any
from urllib.parse import quote, urlencode

Expand All @@ -21,7 +21,11 @@ class for requesting
_url_kwargs = None
_len = None

def __init__(self, raw_url, kwargs=None, request_method=RequestMethods.REQUEST, **url_kwargs):
def __init__(self,
raw_url,
kwargs=None,
request_method=RequestMethods.REQUEST,
**url_kwargs):
"""
sets up all parameters for a request
:param raw_url: the url of the request
Expand All @@ -34,8 +38,7 @@ def __init__(self, raw_url, kwargs=None, request_method=RequestMethods.REQUEST,
global request_id

self._request_id = request_id
self.client = Client()
self.client.logger.info(f"request {self._request_id} initialised")
self.client = None

self._url = raw_url.format(**url_kwargs)
self.request_method = request_method
Expand All @@ -54,98 +57,105 @@ def to_dict(self):
def __make_request_url(self):
"""
method that returns the request url
:return request_url: full request url
:rtype: str
"""

self.client.logger.debug(f"making request url for request {self._request_id}")

request_url = "/".join((self.client.endpoint, quote(self._url)))
if self._url_kwargs is not None:
url_args = {key: value for key, value in self._url_kwargs.items() if value is not None}
url_args = {
key: value
for key, value in self._url_kwargs.items()
if value is not None
}
if url_args != {}:
request_url = f"{request_url}?{urlencode(url_args)}"

self.client.logger.debug(f"url for request {self._request_id} is {request_url}")
return request_url

async def _async_request(self):
def __get_properties(self):
return {
name: prop.__get__(self)
for name, prop in vars(self.__class__).items()
if isinstance(prop, property)
}

def _get_data(self, item):
if self._data is None:
return None
if self._data is MISSING:
raise RequestNotDone
if item in self._data:
return self._data[item]
else:
return MISSING

async def request(self):
"""
makes a request to the ClashOfClans API
"""
self.client = Client()

if not self.client.is_running:
raise ClientIsNotRunning

future, status, error = Future(), Future(), Future()

self.client.logger.debug(f"requesting {self._request_id}")

await self.client.queue.put(future, self.__make_request_url(), self.request_method, None, status, error)
await self.client.queue.put(
future, self.__make_request_url(),
self.request_method, None,
status,
error
)

self._data, req_status, req_error = await future, await status, await error
self._data, req_status, req_error = (await future,
await status,
await error)

if req_status != 200:
raise req_error.value

self.client.logger.debug(f"request {self._request_id} done")
return self

def __get_properties(self):
return {name: prop.__get__(self) for name, prop in vars(self.__class__).items() if isinstance(prop, property)}

def _get_data(self, item):
if self._data is None:
return None
if self._data is MISSING:
raise RequestNotDone
if item in self._data:
return self._data[item]
else:
return MISSING

def request(self):
try:
get_running_loop()
except RuntimeError:
return self.client.loop.run_until_complete(self._async_request())
else:
return self._async_request()

async def __aenter__(self):
return await self._async_request()
return await self.request()

async def __aexit__(self, exc_type, exc_val, exc_tb):
return

def __enter__(self):
return self.request()

def __exit__(self, exc_type, exc_val, exc_tb):
return

def __repr__(self):
if self.__class__.__name__ == "RequestModel":
return f"RequestModel(url={self._url}, url_kwargs={self._url_kwargs})"
else:
return f"{self.__class__.__name__}({', '.join(('='.join((key, str(value))) for key, value in self.__get_properties().items()))})"
props = ', '.join((
'='.join((key, str(value)))
for key, value in self.__get_properties().items())
)
return f"{self.__class__.__name__}({props})"

def __str__(self):
if self.__class__.__name__ == "RequestModel":
return f"RequestModel({self.__make_request_url()})"
else:
main_attr = ",".join(self._main_attribute) if isinstance(self._main_attribute, (list, tuple)) else self._main_attribute
return f"{self.__class__.__name__}({main_attr})"
return f"{self.__class__.__name__}()"


class IterRequestModel(RequestModel):
_iter_rtype: Any = ...
_list_rtype: Any = ...
_len = None

async def _async_request(self):
await super()._async_request()
def __init__(self,
raw_url,
kwargs=None,
request_method=RequestMethods.REQUEST,
**url_kwargs):
super().__init__(raw_url,
kwargs=kwargs,
request_method=request_method,
**url_kwargs)
self._len = None
return

async def request(self):
await super().request()
self._len = len(self._get_data('items'))
self._main_attribute = self._len
return self

@property
Expand Down
Original file line number Diff line number Diff line change
@@ -1,29 +1,33 @@
from abc import ABC
from logging import Logger
from typing import Any, Coroutine, Iterator, Generator

from ..models import Paging
from ...client import PyClasherClient, RequestMethods
from ...client import RequestMethods, Client
from ...exceptions import MISSING, Missing

request_id: int = 0


class RequestModel:
class RequestModel(ABC):
_data: dict = MISSING
_main_attribute: Any = None
_url: str = None
_url_kwargs: dict | None = None
_len: int = None

def __init__(self, raw_url: str, kwargs: dict = None, request_method: RequestMethods = RequestMethods.REQUEST, **url_kwargs) -> None:
global request_id

self._request_id = request_id
self.client = PyClasherClient()
self.client.logger.info(f"request {self._request_id} initialised")

self._url = raw_url.format(**url_kwargs)
self.request_method = request_method
self._url_kwargs = kwargs
def __init__(
self,
raw_url: str,
kwargs: dict = None,
request_method: RequestMethods = RequestMethods.REQUEST,
**url_kwargs
) -> None:
self._request_id = ...
self.client: Client | None = ...
self._url: str = ...
self.request_method: RequestMethods = ...
self._url_kwargs: dict = kwargs
...

def to_dict(self) -> None | Missing | dict:
Expand All @@ -32,16 +36,13 @@ class RequestModel:
def __make_request_url(self) -> str:
...

async def _async_request(self) -> RequestModel:
...

def __get_properties(self) -> dict:
...

def _get_data(self, item) -> dict:
...

def request(self) -> RequestModel | Coroutine[Any, Any, RequestModel]:
async def request(self) -> RequestModel:
...

async def __aenter__(self):
Expand All @@ -50,23 +51,25 @@ class RequestModel:
async def __aexit__(self, exc_type, exc_val, exc_tb) -> None:
...

def __enter__(self):
...

def __exit__(self, exc_type, exc_val, exc_tb) -> None:
...

def __repr__(self) -> str:
...

def __str__(self) -> str:
...


class IterRequestModel(RequestModel):
class IterRequestModel(RequestModel, ABC):
_iter_rtype: Any = ...
_list_rtype: Any = ...
_len = None

def __init__(
self,
raw_url: str,
kwargs: dict = None,
request_method: RequestMethods = RequestMethods.REQUEST,
**url_kwargs
) -> None:
self._len: None | int = ...

async def _async_request(self) -> IterRequestModel:
...
Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/builder_base_league.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import RequestModel
from .abc import RequestModel
from ..models import BuilderBaseLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/builder_base_league.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import RequestModel
from .abc import RequestModel
from ..models import BuilderBaseLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/builder_base_leagues.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import BuilderBaseLeagueList, BuilderBaseLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/builder_base_leagues.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterator

from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import BuilderBaseLeagueList, BuilderBaseLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/capital_league.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import RequestModel
from .abc import RequestModel
from ..models import CapitalLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/capital_league.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import RequestModel
from .abc import RequestModel
from ..models import CapitalLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/capital_league_seasons.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import CapitalLeagueList, CapitalLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/capital_league_seasons.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterator

from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import CapitalLeagueList, CapitalLeague


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from asyncio import get_running_loop, run

from .request_models import RequestModel
from .abc import RequestModel
from ..models import Clan, BaseClan


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan.pyi
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import RequestModel
from .abc import RequestModel
from ..models import Clan, BaseClan


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_builder_base_rankings.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import ClanBuilderBaseRanking, ClanBuilderBaseRankingList


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_builder_base_rankings.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterator

from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import ClanBuilderBaseRanking, ClanBuilderBaseRankingList, Location


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_capital_raid_seasons.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import ClanCapitalRaidSeasons, ClanCapitalRaidSeason


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_capital_raid_seasons.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Iterator

from .request_models import IterRequestModel
from .abc import IterRequestModel
from ..models import ClanCapitalRaidSeasons, ClanCapitalRaidSeason


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_current_war.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from asyncio import get_running_loop, run

from .request_models import RequestModel
from .abc import RequestModel
from ..models import ClanWar, BaseClan


Expand Down
2 changes: 1 addition & 1 deletion pyclasher/api/requests/clan_current_war.pyi
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
from typing import Coroutine, Any

from .request_models import RequestModel
from .abc import RequestModel
from ..models import ClanWar, BaseClan


Expand Down
Loading

0 comments on commit c8608a3

Please sign in to comment.