gengineapi 0.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gengineapi/__init__.py +43 -0
- gengineapi/client.py +121 -0
- gengineapi/config.py +242 -0
- gengineapi/exceptions.py +125 -0
- gengineapi/http.py +540 -0
- gengineapi/modules/__init__.py +23 -0
- gengineapi/modules/auth.py +46 -0
- gengineapi/modules/base.py +196 -0
- gengineapi/modules/currencies.py +54 -0
- gengineapi/modules/finances.py +81 -0
- gengineapi/modules/payments.py +115 -0
- gengineapi/modules/transactions.py +70 -0
- gengineapi/modules/users.py +100 -0
- gengineapi-0.1.0.dist-info/METADATA +274 -0
- gengineapi-0.1.0.dist-info/RECORD +17 -0
- gengineapi-0.1.0.dist-info/WHEEL +5 -0
- gengineapi-0.1.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,196 @@
|
|
1
|
+
"""
|
2
|
+
Базовый класс для всех модулей API G-Engine.
|
3
|
+
|
4
|
+
Содержит общие методы и функциональность, используемые всеми модулями.
|
5
|
+
"""
|
6
|
+
import logging
|
7
|
+
from abc import ABC
|
8
|
+
from typing import Any, Dict, List, Optional, Union
|
9
|
+
|
10
|
+
from ..http import AsyncHttpClient
|
11
|
+
|
12
|
+
|
13
|
+
class BaseApiModule(ABC):
|
14
|
+
"""
|
15
|
+
Базовый класс для всех модулей API.
|
16
|
+
|
17
|
+
Attributes:
|
18
|
+
http_client: HTTP-клиент для выполнения запросов
|
19
|
+
logger: Логгер для записи информации
|
20
|
+
"""
|
21
|
+
|
22
|
+
def __init__(
|
23
|
+
self,
|
24
|
+
http_client: AsyncHttpClient,
|
25
|
+
logger: Optional[logging.Logger] = None,
|
26
|
+
) -> None:
|
27
|
+
"""
|
28
|
+
Инициализация базового класса модуля API.
|
29
|
+
|
30
|
+
Args:
|
31
|
+
http_client: HTTP-клиент для выполнения запросов
|
32
|
+
logger: Логгер для записи информации (опционально)
|
33
|
+
"""
|
34
|
+
self.http_client = http_client
|
35
|
+
self.logger = logger or logging.getLogger(f"{__name__}.{self.__class__.__name__}")
|
36
|
+
|
37
|
+
async def _get(
|
38
|
+
self,
|
39
|
+
endpoint: str,
|
40
|
+
params: Optional[Dict[str, Any]] = None,
|
41
|
+
**kwargs,
|
42
|
+
) -> Any:
|
43
|
+
"""
|
44
|
+
Выполняет GET-запрос.
|
45
|
+
|
46
|
+
Args:
|
47
|
+
endpoint: Конечная точка API
|
48
|
+
params: Параметры запроса (опционально)
|
49
|
+
**kwargs: Дополнительные параметры для HTTP-клиента
|
50
|
+
|
51
|
+
Returns:
|
52
|
+
Any: Данные из ответа API
|
53
|
+
"""
|
54
|
+
return await self.http_client.get(endpoint, params=params, **kwargs)
|
55
|
+
|
56
|
+
async def _post(
|
57
|
+
self,
|
58
|
+
endpoint: str,
|
59
|
+
data: Optional[Dict[str, Any]] = None,
|
60
|
+
params: Optional[Dict[str, Any]] = None,
|
61
|
+
**kwargs,
|
62
|
+
) -> Any:
|
63
|
+
"""
|
64
|
+
Выполняет POST-запрос.
|
65
|
+
|
66
|
+
Args:
|
67
|
+
endpoint: Конечная точка API
|
68
|
+
data: Данные для отправки (опционально)
|
69
|
+
params: Параметры запроса (опционально)
|
70
|
+
**kwargs: Дополнительные параметры для HTTP-клиента
|
71
|
+
|
72
|
+
Returns:
|
73
|
+
Any: Данные из ответа API
|
74
|
+
"""
|
75
|
+
return await self.http_client.post(endpoint, json_data=data, params=params, **kwargs)
|
76
|
+
|
77
|
+
async def _put(
|
78
|
+
self,
|
79
|
+
endpoint: str,
|
80
|
+
data: Optional[Dict[str, Any]] = None,
|
81
|
+
params: Optional[Dict[str, Any]] = None,
|
82
|
+
**kwargs,
|
83
|
+
) -> Any:
|
84
|
+
"""
|
85
|
+
Выполняет PUT-запрос.
|
86
|
+
|
87
|
+
Args:
|
88
|
+
endpoint: Конечная точка API
|
89
|
+
data: Данные для отправки (опционально)
|
90
|
+
params: Параметры запроса (опционально)
|
91
|
+
**kwargs: Дополнительные параметры для HTTP-клиента
|
92
|
+
|
93
|
+
Returns:
|
94
|
+
Any: Данные из ответа API
|
95
|
+
"""
|
96
|
+
return await self.http_client.put(endpoint, json_data=data, params=params, **kwargs)
|
97
|
+
|
98
|
+
async def _delete(
|
99
|
+
self,
|
100
|
+
endpoint: str,
|
101
|
+
params: Optional[Dict[str, Any]] = None,
|
102
|
+
data: Optional[Dict[str, Any]] = None,
|
103
|
+
**kwargs,
|
104
|
+
) -> Any:
|
105
|
+
"""
|
106
|
+
Выполняет DELETE-запрос.
|
107
|
+
|
108
|
+
Args:
|
109
|
+
endpoint: Конечная точка API
|
110
|
+
params: Параметры запроса (опционально)
|
111
|
+
data: Данные для отправки (опционально)
|
112
|
+
**kwargs: Дополнительные параметры для HTTP-клиента
|
113
|
+
|
114
|
+
Returns:
|
115
|
+
Any: Данные из ответа API
|
116
|
+
"""
|
117
|
+
return await self.http_client.delete(endpoint, params=params, json_data=data, **kwargs)
|
118
|
+
|
119
|
+
async def _patch(
|
120
|
+
self,
|
121
|
+
endpoint: str,
|
122
|
+
data: Optional[Dict[str, Any]] = None,
|
123
|
+
params: Optional[Dict[str, Any]] = None,
|
124
|
+
**kwargs,
|
125
|
+
) -> Any:
|
126
|
+
"""
|
127
|
+
Выполняет PATCH-запрос.
|
128
|
+
|
129
|
+
Args:
|
130
|
+
endpoint: Конечная точка API
|
131
|
+
data: Данные для отправки (опционально)
|
132
|
+
params: Параметры запроса (опционально)
|
133
|
+
**kwargs: Дополнительные параметры для HTTP-клиента
|
134
|
+
|
135
|
+
Returns:
|
136
|
+
Any: Данные из ответа API
|
137
|
+
"""
|
138
|
+
return await self.http_client.patch(endpoint, json_data=data, params=params, **kwargs)
|
139
|
+
|
140
|
+
@staticmethod
|
141
|
+
def extract_data(response: Dict[str, Any]) -> Any:
|
142
|
+
"""
|
143
|
+
Извлекает данные из стандартного формата ответа API.
|
144
|
+
|
145
|
+
Обрабатывает общую структуру ответа G-Engine API:
|
146
|
+
{
|
147
|
+
"success": true,
|
148
|
+
"message": "...",
|
149
|
+
"data": { ... }
|
150
|
+
}
|
151
|
+
|
152
|
+
Args:
|
153
|
+
response: Ответ от API
|
154
|
+
|
155
|
+
Returns:
|
156
|
+
Any: Извлеченные данные или исходный ответ, если не удалось извлечь
|
157
|
+
"""
|
158
|
+
if isinstance(response, dict):
|
159
|
+
# Для стандартного формата ответа G-Engine API
|
160
|
+
if "success" in response and "data" in response:
|
161
|
+
return response["data"]
|
162
|
+
return response
|
163
|
+
|
164
|
+
@staticmethod
|
165
|
+
def remove_none_values(data: Dict[str, Any]) -> Dict[str, Any]:
|
166
|
+
"""
|
167
|
+
Удаляет значения None из словаря.
|
168
|
+
|
169
|
+
Args:
|
170
|
+
data: Исходный словарь
|
171
|
+
|
172
|
+
Returns:
|
173
|
+
Dict[str, Any]: Словарь без значений None
|
174
|
+
"""
|
175
|
+
return {k: v for k, v in data.items() if v is not None}
|
176
|
+
|
177
|
+
@staticmethod
|
178
|
+
def format_date_param(date_value: Any) -> Optional[str]:
|
179
|
+
"""
|
180
|
+
Форматирует параметр даты для API.
|
181
|
+
|
182
|
+
Args:
|
183
|
+
date_value: Значение даты (может быть строкой, объектом datetime или date)
|
184
|
+
|
185
|
+
Returns:
|
186
|
+
Optional[str]: Форматированная дата или None, если значение не было предоставлено
|
187
|
+
"""
|
188
|
+
if date_value is None:
|
189
|
+
return None
|
190
|
+
|
191
|
+
if hasattr(date_value, "strftime"):
|
192
|
+
# Если это datetime или date объект
|
193
|
+
return date_value.strftime("%Y-%m-%d")
|
194
|
+
|
195
|
+
# Предполагаем, что это уже строка
|
196
|
+
return str(date_value)
|
@@ -0,0 +1,54 @@
|
|
1
|
+
"""
|
2
|
+
Модуль для работы с курсами валют в API G-Engine.
|
3
|
+
|
4
|
+
Предоставляет методы для получения актуальных курсов валют.
|
5
|
+
"""
|
6
|
+
from typing import Any, Dict, Literal, Optional, Union
|
7
|
+
|
8
|
+
from .base import BaseApiModule
|
9
|
+
|
10
|
+
|
11
|
+
# Типы для параметров API
|
12
|
+
RateSource = Literal["cb_rf", "steam"]
|
13
|
+
CurrencyPair = Literal["USD:RUB", "EUR:RUB"]
|
14
|
+
|
15
|
+
|
16
|
+
class CurrenciesModule(BaseApiModule):
|
17
|
+
"""
|
18
|
+
Модуль для работы с курсами валют.
|
19
|
+
|
20
|
+
Предоставляет методы для получения актуальных курсов валют.
|
21
|
+
"""
|
22
|
+
|
23
|
+
async def get_rate(
|
24
|
+
self,
|
25
|
+
source: RateSource,
|
26
|
+
pair: CurrencyPair,
|
27
|
+
) -> Dict[str, Any]:
|
28
|
+
"""
|
29
|
+
Получает актуальный курс валют.
|
30
|
+
|
31
|
+
Args:
|
32
|
+
source: Источник курса валют ("cb_rf" или "steam")
|
33
|
+
pair: Валютная пара ("USD:RUB" или "EUR:RUB")
|
34
|
+
|
35
|
+
Returns:
|
36
|
+
Dict[str, Any]: Информация о курсе валют
|
37
|
+
|
38
|
+
Examples:
|
39
|
+
>>> async with Client(...) as client:
|
40
|
+
>>> rate = await client.currencies.get_rate(
|
41
|
+
>>> source="cb_rf",
|
42
|
+
>>> pair="USD:RUB"
|
43
|
+
>>> )
|
44
|
+
>>> print(f"Курс USD:RUB по ЦБ РФ: {rate['currency_rate']}")
|
45
|
+
"""
|
46
|
+
params = {
|
47
|
+
"source": source,
|
48
|
+
"pair": pair,
|
49
|
+
}
|
50
|
+
|
51
|
+
self.logger.info(f"Получение курса валют: источник {source}, пара {pair}")
|
52
|
+
response = await self._get("currencies", params=params)
|
53
|
+
|
54
|
+
return self.extract_data(response)
|
@@ -0,0 +1,81 @@
|
|
1
|
+
"""
|
2
|
+
Модуль для работы с финансами в API G-Engine.
|
3
|
+
|
4
|
+
Предоставляет методы для получения данных о финансах по кошелькам пользователей.
|
5
|
+
"""
|
6
|
+
from datetime import date
|
7
|
+
from typing import Any, Dict, List, Optional, Union
|
8
|
+
|
9
|
+
from .base import BaseApiModule
|
10
|
+
|
11
|
+
|
12
|
+
class FinancesModule(BaseApiModule):
|
13
|
+
"""
|
14
|
+
Модуль для работы с финансами.
|
15
|
+
|
16
|
+
Предоставляет методы для получения финансовой информации по кошелькам пользователей.
|
17
|
+
"""
|
18
|
+
|
19
|
+
async def get_finances(
|
20
|
+
self,
|
21
|
+
user_cache: bool = True,
|
22
|
+
funds_type: Optional[str] = None,
|
23
|
+
limit: int = 100,
|
24
|
+
offset: int = 0,
|
25
|
+
sort_by: str = "date",
|
26
|
+
sort_order: str = "desc",
|
27
|
+
start_date: Optional[Union[str, date]] = None,
|
28
|
+
end_date: Optional[Union[str, date]] = None,
|
29
|
+
search_field: Optional[str] = None,
|
30
|
+
search_value: Optional[str] = None,
|
31
|
+
) -> List[Dict[str, Any]]:
|
32
|
+
"""
|
33
|
+
Получает данные о финансах по кошелькам пользователей.
|
34
|
+
|
35
|
+
Args:
|
36
|
+
user_cache: Использовать кэш пользователя
|
37
|
+
funds_type: Тип средств ("balance" или "cashback")
|
38
|
+
limit: Ограничение на количество результатов (макс. 500)
|
39
|
+
offset: Смещение для пагинации
|
40
|
+
sort_by: Поле для сортировки
|
41
|
+
sort_order: Порядок сортировки ("asc" или "desc")
|
42
|
+
start_date: Начальная дата для фильтрации
|
43
|
+
end_date: Конечная дата для фильтрации
|
44
|
+
search_field: Поле для поиска
|
45
|
+
search_value: Значение для поиска
|
46
|
+
|
47
|
+
Returns:
|
48
|
+
List[Dict[str, Any]]: Список финансовых данных
|
49
|
+
|
50
|
+
Examples:
|
51
|
+
>>> async with Client(...) as client:
|
52
|
+
>>> finances = await client.finances.get_finances(
|
53
|
+
>>> funds_type="balance",
|
54
|
+
>>> limit=50,
|
55
|
+
>>> sort_by="amount",
|
56
|
+
>>> sort_order="desc"
|
57
|
+
>>> )
|
58
|
+
>>> print(f"Получено {len(finances)} финансовых записей")
|
59
|
+
"""
|
60
|
+
params = self.remove_none_values({
|
61
|
+
"user_cache": user_cache,
|
62
|
+
"funds_type": funds_type,
|
63
|
+
"limit": limit,
|
64
|
+
"offset": offset,
|
65
|
+
"sort_by": sort_by,
|
66
|
+
"sort_order": sort_order,
|
67
|
+
"start_date": self.format_date_param(start_date),
|
68
|
+
"end_date": self.format_date_param(end_date),
|
69
|
+
"search_field": search_field,
|
70
|
+
"search_value": search_value,
|
71
|
+
})
|
72
|
+
|
73
|
+
self.logger.info(f"Получение финансовых данных с параметрами: {params}")
|
74
|
+
response = await self._get("finances", params=params)
|
75
|
+
|
76
|
+
# В этом API ожидаем список данных в поле "data"
|
77
|
+
data = self.extract_data(response)
|
78
|
+
if data is None:
|
79
|
+
return []
|
80
|
+
|
81
|
+
return data
|
@@ -0,0 +1,115 @@
|
|
1
|
+
"""
|
2
|
+
Модуль для работы с платежами в API G-Engine.
|
3
|
+
|
4
|
+
Поддерживает создание и верификацию платежей, выполнение платежей и получение статуса платежей.
|
5
|
+
"""
|
6
|
+
from decimal import Decimal
|
7
|
+
from typing import Any, Dict, Optional, Union
|
8
|
+
|
9
|
+
from .base import BaseApiModule
|
10
|
+
|
11
|
+
|
12
|
+
class PaymentsModule(BaseApiModule):
|
13
|
+
"""
|
14
|
+
Модуль для работы с платежами.
|
15
|
+
|
16
|
+
Предоставляет методы для создания, верификации и выполнения платежей,
|
17
|
+
а также для получения статуса платежей.
|
18
|
+
"""
|
19
|
+
|
20
|
+
async def verify(
|
21
|
+
self,
|
22
|
+
transaction_id: str,
|
23
|
+
service_id: int,
|
24
|
+
account: str,
|
25
|
+
amount: Union[Decimal, float, str],
|
26
|
+
currency: str,
|
27
|
+
) -> Dict[str, Any]:
|
28
|
+
"""
|
29
|
+
Создает и верифицирует платеж.
|
30
|
+
|
31
|
+
Args:
|
32
|
+
transaction_id: Идентификатор транзакции (UUID)
|
33
|
+
service_id: Идентификатор сервиса
|
34
|
+
account: Аккаунт для пополнения
|
35
|
+
amount: Сумма транзакции
|
36
|
+
currency: Код валюты (3 символа)
|
37
|
+
|
38
|
+
Returns:
|
39
|
+
Dict[str, Any]: Информация о созданном платеже
|
40
|
+
|
41
|
+
Examples:
|
42
|
+
>>> async with Client(...) as client:
|
43
|
+
>>> payment = await client.payments.verify(
|
44
|
+
>>> transaction_id="b3f1c8d2-4e9a-42f5-bb8d-8e3b6c6c6a7f",
|
45
|
+
>>> service_id=1,
|
46
|
+
>>> account="user@example.com",
|
47
|
+
>>> amount=10.99,
|
48
|
+
>>> currency="USD"
|
49
|
+
>>> )
|
50
|
+
>>> print(f"Создан платеж: {payment['transaction_id']}")
|
51
|
+
"""
|
52
|
+
# Преобразуем amount в строку, если это не строка
|
53
|
+
if not isinstance(amount, str):
|
54
|
+
amount = str(amount)
|
55
|
+
|
56
|
+
data = {
|
57
|
+
"transaction_id": transaction_id,
|
58
|
+
"service_id": service_id,
|
59
|
+
"account": account,
|
60
|
+
"amount": amount,
|
61
|
+
"currency": currency,
|
62
|
+
}
|
63
|
+
|
64
|
+
self.logger.info(f"Создание платежа: {transaction_id}, сервис: {service_id}, сумма: {amount} {currency}")
|
65
|
+
response = await self._post("payment/verify", data=data)
|
66
|
+
|
67
|
+
return self.extract_data(response)
|
68
|
+
|
69
|
+
async def execute(self, transaction_id: str) -> Dict[str, Any]:
|
70
|
+
"""
|
71
|
+
Выполняет платеж на основе идентификатора транзакции.
|
72
|
+
|
73
|
+
Args:
|
74
|
+
transaction_id: Идентификатор транзакции (UUID)
|
75
|
+
|
76
|
+
Returns:
|
77
|
+
Dict[str, Any]: Результат выполнения платежа
|
78
|
+
|
79
|
+
Examples:
|
80
|
+
>>> async with Client(...) as client:
|
81
|
+
>>> result = await client.payments.execute(
|
82
|
+
>>> transaction_id="b3f1c8d2-4e9a-42f5-bb8d-8e3b6c6c6a7f"
|
83
|
+
>>> )
|
84
|
+
>>> print(f"Статус платежа: {result['status_code']}")
|
85
|
+
"""
|
86
|
+
data = {"transaction_id": transaction_id}
|
87
|
+
|
88
|
+
self.logger.info(f"Выполнение платежа для транзакции: {transaction_id}")
|
89
|
+
response = await self._post("payment/execute", data=data)
|
90
|
+
|
91
|
+
return self.extract_data(response)
|
92
|
+
|
93
|
+
async def get_status(self, transaction_id: str) -> Dict[str, Any]:
|
94
|
+
"""
|
95
|
+
Получает статус платежа.
|
96
|
+
|
97
|
+
Args:
|
98
|
+
transaction_id: Идентификатор транзакции (UUID)
|
99
|
+
|
100
|
+
Returns:
|
101
|
+
Dict[str, Any]: Статус платежа
|
102
|
+
|
103
|
+
Examples:
|
104
|
+
>>> async with Client(...) as client:
|
105
|
+
>>> status = await client.payments.get_status(
|
106
|
+
>>> transaction_id="b3f1c8d2-4e9a-42f5-bb8d-8e3b6c6c6a7f"
|
107
|
+
>>> )
|
108
|
+
>>> print(f"Текущий статус платежа: {status['status_code']}")
|
109
|
+
"""
|
110
|
+
params = {"transaction_id": transaction_id}
|
111
|
+
|
112
|
+
self.logger.info(f"Получение статуса платежа для транзакции: {transaction_id}")
|
113
|
+
response = await self._get("payment/status", params=params)
|
114
|
+
|
115
|
+
return self.extract_data(response)
|
@@ -0,0 +1,70 @@
|
|
1
|
+
"""
|
2
|
+
Модуль для работы с транзакциями в API G-Engine.
|
3
|
+
|
4
|
+
Предоставляет методы для получения списка транзакций с различными фильтрами.
|
5
|
+
"""
|
6
|
+
from datetime import date
|
7
|
+
from typing import Any, Dict, List, Optional, Union
|
8
|
+
|
9
|
+
from .base import BaseApiModule
|
10
|
+
|
11
|
+
|
12
|
+
class TransactionsModule(BaseApiModule):
|
13
|
+
"""
|
14
|
+
Модуль для работы с транзакциями.
|
15
|
+
|
16
|
+
Предоставляет методы для получения списка транзакций с различными фильтрами.
|
17
|
+
"""
|
18
|
+
|
19
|
+
async def get_transactions(
|
20
|
+
self,
|
21
|
+
user_cache: bool = True,
|
22
|
+
limit: int = 100,
|
23
|
+
offset: int = 0,
|
24
|
+
sort_by: str = "date",
|
25
|
+
sort_order: str = "desc",
|
26
|
+
start_date: Optional[Union[str, date]] = None,
|
27
|
+
end_date: Optional[Union[str, date]] = None,
|
28
|
+
search_field: Optional[str] = None,
|
29
|
+
search_value: Optional[str] = None,
|
30
|
+
) -> List[Dict[str, Any]]:
|
31
|
+
"""
|
32
|
+
Получает список транзакций.
|
33
|
+
|
34
|
+
Args:
|
35
|
+
user_cache: Использовать кэш пользователя
|
36
|
+
limit: Ограничение на количество результатов (макс. 500)
|
37
|
+
offset: Смещение для пагинации
|
38
|
+
sort_by: Поле для сортировки
|
39
|
+
sort_order: Порядок сортировки ("asc" или "desc")
|
40
|
+
start_date: Начальная дата для фильтрации
|
41
|
+
end_date: Конечная дата для фильтрации
|
42
|
+
search_field: Поле для поиска
|
43
|
+
search_value: Значение для поиска
|
44
|
+
|
45
|
+
Returns:
|
46
|
+
List[Dict[str, Any]]: Список транзакций
|
47
|
+
|
48
|
+
Examples:
|
49
|
+
>>> async with Client(...) as client:
|
50
|
+
>>> transactions = await client.transactions.get_transactions(
|
51
|
+
>>> limit=50,
|
52
|
+
>>> start_date="2023-01-01",
|
53
|
+
>>> end_date="2023-12-31"
|
54
|
+
>>> )
|
55
|
+
>>> print(f"Получено {len(transactions)} транзакций")
|
56
|
+
"""
|
57
|
+
params = self.remove_none_values({
|
58
|
+
"user_cache": user_cache,
|
59
|
+
"limit": limit,
|
60
|
+
"offset": offset,
|
61
|
+
"sort_by": sort_by,
|
62
|
+
"sort_order": sort_order,
|
63
|
+
"start_date": self.format_date_param(start_date),
|
64
|
+
"end_date": self.format_date_param(end_date),
|
65
|
+
"search_field": search_field,
|
66
|
+
"search_value": search_value,
|
67
|
+
})
|
68
|
+
|
69
|
+
self.logger.info(f"Получение списка транзакций с параметрами: {params}")
|
70
|
+
return await self._get("transaction/view", params=params)
|
@@ -0,0 +1,100 @@
|
|
1
|
+
"""
|
2
|
+
Модуль для работы с пользователями в API G-Engine.
|
3
|
+
|
4
|
+
Предоставляет методы для получения информации о пользователях, их балансах и текущем пользователе.
|
5
|
+
"""
|
6
|
+
from datetime import date
|
7
|
+
from typing import Any, Dict, List, Optional, Union
|
8
|
+
|
9
|
+
from .base import BaseApiModule
|
10
|
+
|
11
|
+
|
12
|
+
class UsersModule(BaseApiModule):
|
13
|
+
"""
|
14
|
+
Модуль для работы с пользователями.
|
15
|
+
|
16
|
+
Предоставляет методы для получения информации о пользователях,
|
17
|
+
их балансах и текущем пользователе.
|
18
|
+
"""
|
19
|
+
|
20
|
+
async def get_users(
|
21
|
+
self,
|
22
|
+
limit: int = 100,
|
23
|
+
offset: int = 0,
|
24
|
+
sort_by: Optional[str] = None,
|
25
|
+
sort_order: Optional[str] = None,
|
26
|
+
start_date: Optional[Union[str, date]] = None,
|
27
|
+
end_date: Optional[Union[str, date]] = None,
|
28
|
+
search_field: Optional[str] = None,
|
29
|
+
search_value: Optional[str] = None,
|
30
|
+
role_name: Optional[str] = None,
|
31
|
+
) -> List[Dict[str, Any]]:
|
32
|
+
"""
|
33
|
+
Получает список пользователей (только для Observer).
|
34
|
+
|
35
|
+
Args:
|
36
|
+
limit: Ограничение на количество результатов (макс. 500)
|
37
|
+
offset: Смещение для пагинации
|
38
|
+
sort_by: Поле для сортировки
|
39
|
+
sort_order: Порядок сортировки ("asc" или "desc")
|
40
|
+
start_date: Начальная дата для фильтрации
|
41
|
+
end_date: Конечная дата для фильтрации
|
42
|
+
search_field: Поле для поиска
|
43
|
+
search_value: Значение для поиска
|
44
|
+
role_name: Название роли для фильтрации
|
45
|
+
|
46
|
+
Returns:
|
47
|
+
List[Dict[str, Any]]: Список пользователей
|
48
|
+
|
49
|
+
Examples:
|
50
|
+
>>> async with Client(...) as client:
|
51
|
+
>>> users = await client.users.get_users(
|
52
|
+
>>> limit=50,
|
53
|
+
>>> role_name="User"
|
54
|
+
>>> )
|
55
|
+
>>> print(f"Получено {len(users)} пользователей")
|
56
|
+
"""
|
57
|
+
params = self.remove_none_values({
|
58
|
+
"limit": limit,
|
59
|
+
"offset": offset,
|
60
|
+
"sort_by": sort_by,
|
61
|
+
"sort_order": sort_order,
|
62
|
+
"start_date": self.format_date_param(start_date),
|
63
|
+
"end_date": self.format_date_param(end_date),
|
64
|
+
"search_field": search_field,
|
65
|
+
"search_value": search_value,
|
66
|
+
"role_name": role_name,
|
67
|
+
})
|
68
|
+
|
69
|
+
self.logger.info(f"Получение списка пользователей с параметрами: {params}")
|
70
|
+
return await self._get("user", params=params)
|
71
|
+
|
72
|
+
async def get_balance(self) -> Dict[str, Any]:
|
73
|
+
"""
|
74
|
+
Получает баланс текущего пользователя.
|
75
|
+
|
76
|
+
Returns:
|
77
|
+
Dict[str, Any]: Информация о балансе пользователя
|
78
|
+
|
79
|
+
Examples:
|
80
|
+
>>> async with Client(...) as client:
|
81
|
+
>>> balance = await client.users.get_balance()
|
82
|
+
>>> print(f"Баланс: {balance['balance']} {balance['currency']}")
|
83
|
+
"""
|
84
|
+
self.logger.info("Получение баланса текущего пользователя")
|
85
|
+
return await self._get("user/balance")
|
86
|
+
|
87
|
+
async def get_me(self) -> Dict[str, Any]:
|
88
|
+
"""
|
89
|
+
Получает данные текущего пользователя.
|
90
|
+
|
91
|
+
Returns:
|
92
|
+
Dict[str, Any]: Информация о текущем пользователе
|
93
|
+
|
94
|
+
Examples:
|
95
|
+
>>> async with Client(...) as client:
|
96
|
+
>>> user = await client.users.get_me()
|
97
|
+
>>> print(f"Текущий пользователь: {user['login']}")
|
98
|
+
"""
|
99
|
+
self.logger.info("Получение данных текущего пользователя")
|
100
|
+
return await self._get("user/me")
|