Skip to content

Commit

Permalink
Новые метод set_trade_mode (#35)
Browse files Browse the repository at this point in the history
* Уточнение ошибки в set_trade_link

* Добавлен set_trade_mode
  • Loading branch information
Bananchiki authored Aug 30, 2024
1 parent d1171b2 commit df43281
Show file tree
Hide file tree
Showing 6 changed files with 131 additions and 7 deletions.
4 changes: 2 additions & 2 deletions steam_trader/_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -653,7 +653,7 @@ def set_trade_link(self, trade_link: str) -> None:
Raises:
SaveFail: Не удалось сохранить ссылку обмена.
WrongTradeLink: Указана ссылка для обмена от другого Steam аккаунта.
WrongTradeLink: Указана ссылка для обмена от другого Steam аккаунта ИЛИ ссылка для обмена уже указана.
"""

url = self.base_url + 'settradelink/'
Expand All @@ -675,7 +675,7 @@ def set_trade_link(self, trade_link: str) -> None:
case 1:
raise SaveFail('Не удалось сохранить ссылку обмена.')
except KeyError:
raise WrongTradeLink('Указана ссылка для обмена от другого Steam аккаунта.')
raise WrongTradeLink('Указана ссылка для обмена от другого Steam аккаунта ИЛИ ссылка для обмена уже указана.')

@log
def remove_trade_link(self) -> None:
Expand Down
4 changes: 2 additions & 2 deletions steam_trader/_client_async.py
Original file line number Diff line number Diff line change
Expand Up @@ -655,7 +655,7 @@ async def set_trade_link(self, trade_link: str) -> None:
Raises:
SaveFail: Не удалось сохранить ссылку обмена.
WrongTradeLink: Указана ссылка для обмена от другого Steam аккаунта.
WrongTradeLink: Указана ссылка для обмена от другого Steam аккаунта ИЛИ ссылка для обмена уже указана.
"""

url = self.base_url + 'settradelink/'
Expand All @@ -678,7 +678,7 @@ async def set_trade_link(self, trade_link: str) -> None:
case 1:
raise SaveFail('Не удалось сохранить ссылку обмена')
except KeyError:
raise WrongTradeLink('Указана ссылка для обмена от другого Steam аккаунта.')
raise WrongTradeLink('Указана ссылка для обмена от другого Steam аккаунта ИЛИ ссылка для обмена уже указана.')

@log
async def remove_trade_link(self) -> None:
Expand Down
5 changes: 4 additions & 1 deletion steam_trader/ext/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@
from ._client_ext import ExtClient
from ._client_async_ext import ExtClientAsync

from ._misc import TradeMode

__all__ = [
'ExtClient',
'ExtClientAsync'
'ExtClientAsync',
'TradeMode'
]
32 changes: 31 additions & 1 deletion steam_trader/ext/_client_async_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import functools
from typing import Optional, Sequence, TypeVar, Callable, Any

from ._misc import TradeMode

from steam_trader.constants import SUPPORTED_APPIDS
from steam_trader.exceptions import UnsupportedAppID
from steam_trader import (
Expand Down Expand Up @@ -41,6 +43,7 @@ class ExtClientAsync(ClientAsync):
Новые методы:
multi_sell - Аналог multi_buy. В отличие от него, возвращает последовательность из результатов продаж, а не один объект.
set_trade_mode - Позволяет задать режим торговли. Данного метода нет в документации.
Raises:
BadRequestError: Неправильный запрос.
Expand Down Expand Up @@ -99,7 +102,7 @@ async def get_inventory(
raise UnsupportedAppID(f'Игра с AppID {gameid}, в данный момент не поддерживается.')

url = self.base_url + 'getinventory/'
params = {"gameid": gameid, "key": self.api_token}
params = {"gameid": gameid}

if status is not None:
for i, s in enumerate(status):
Expand Down Expand Up @@ -216,3 +219,30 @@ async def multi_sell(self, gameid: int, gid: int, price: float, count: int) -> S
results = await asyncio.gather(*tasks)

return results

@log
async def set_trade_mode(self, state: int) -> Optional['TradeMode']:
"""Задать режим торговли. Данного метода нет в документации.
Args:
state (:obj:`int`): Режим торговли.
0 - Торговля отключена.
1 - Торговля включена.
Returns:
:class:`steam_trader.ext.TradeMode`: Режим торговли.
Raises:
ValueError: Недопустимое значение state.
"""

if state not in range(2):
raise ValueError(f'Недопустимое значение state :: {state}')

url = self.base_url + 'startstoptrading/'
result = await self._async_client.get(
url,
params={"state": state},
headers=self.headers
).json()
return TradeMode.de_json(result, self)
32 changes: 31 additions & 1 deletion steam_trader/ext/_client_ext.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
import functools
from typing import Optional, Sequence, TypeVar, Callable, Any

from ._misc import TradeMode

from steam_trader.constants import SUPPORTED_APPIDS
from steam_trader.exceptions import UnsupportedAppID
from steam_trader import (
Expand Down Expand Up @@ -44,6 +46,7 @@ class ExtClient(Client):
Новые методы:
multi_sell - Аналог multi_buy. В отличие от него, возвращает последовательноасть из результатов продаж, а не один объект.
set_trade_mode - Позволяет задать режим торговли. Данного метода нет в документации.
Raises:
BadRequestError: Неправильный запрос.
Expand Down Expand Up @@ -102,7 +105,7 @@ def get_inventory(
raise UnsupportedAppID(f'Игра с AppID {gameid}, в данный момент не поддерживается.')

url = self.base_url + 'getinventory/'
params = {"gameid": gameid, "key": self.api_token}
params = {"gameid": gameid}

if status is not None:
for i, s in enumerate(status):
Expand Down Expand Up @@ -215,3 +218,30 @@ def multi_sell(self, gameid: int, gid: int, price: float, count: int) -> Sequenc
count -= 1

return results

@log
def set_trade_mode(self, state: int) -> Optional['TradeMode']:
"""Задать режим торговли. Данного метода нет в документации.
Args:
state (:obj:`int`): Режим торговли.
0 - Торговля отключена.
1 - Торговля включена.
Returns:
:class:`steam_trader.ext.TradeMode`: Режим торговли.
Raises:
ValueError: Недопустимое значение state.
"""

if state not in range(2):
raise ValueError(f'Недопустимое значение state :: {state}')

url = self.base_url + 'startstoptrading/'
result = (self._httpx_client or httpx).get(
url,
params={"state": state},
headers=self.headers
).json()
return TradeMode.de_json(result, self)
61 changes: 61 additions & 0 deletions steam_trader/ext/_misc.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
from dataclasses import dataclass
from collections.abc import Sequence
from typing import TYPE_CHECKING, Optional, Union

from steam_trader import TraderClientObject
from steam_trader import exceptions

if TYPE_CHECKING:
from ._client_ext import ExtClient
from ._client_async_ext import ExtClientAsync

@dataclass
class TradeMode(TraderClientObject):
"""Класс, представляющий режим торговли.
Attributes:
success (:obj:`bool`): Результат запроса.
state (:obj:`bool`): Режим обычной торговли.
p2p (:obj:`bool`): Режим p2p торговли.
client (Union[:class:`steam_trader.ExtClient`, :class:`steam_trader.ExtClientAsync`, :obj:`None`]):
Клиент Steam Trader.
"""

success: bool
state: bool
p2p: bool
client: Union['ExtClient', 'ExtClientAsync', None]

@classmethod
def de_json(
cls: dataclass,
data: dict,
client: Union['ExtClient', 'ExtClientAsync', None] = None
) -> Optional['TradeMode']:
"""Десериализация объекта.
Args:
data (:obj:`dict`): Поля и значения десериализуемого объекта.
client (Union[:class:`steam_trader.ExtClient`, :class:`steam_trader.ExtClientAsync`, :obj:`None`]):
Клиент Steam Trader.
Returns:
:class:`steam_trader.TradeMode`, optional: Режим торговли.
"""

if not cls.is_valid_model_data(data):
return

if not data['success']:
match data['code']:
case 400:
raise exceptions.BadRequestError('Неправильный запрос.')
case 401:
raise exceptions.Unauthorized('Неправильный api-токен.')
case 429:
raise exceptions.TooManyRequests('Вы отправили слишком много запросов.')

data = super(TradeMode, cls).de_json(data)

return cls(client=client, **data)

0 comments on commit df43281

Please sign in to comment.