gengineapi 0.1.0__tar.gz
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-0.1.0/PKG-INFO +274 -0
- gengineapi-0.1.0/README.md +263 -0
- gengineapi-0.1.0/pyproject.toml +18 -0
- gengineapi-0.1.0/setup.cfg +4 -0
- gengineapi-0.1.0/src/gengineapi/__init__.py +43 -0
- gengineapi-0.1.0/src/gengineapi/client.py +121 -0
- gengineapi-0.1.0/src/gengineapi/config.py +242 -0
- gengineapi-0.1.0/src/gengineapi/exceptions.py +125 -0
- gengineapi-0.1.0/src/gengineapi/http.py +540 -0
- gengineapi-0.1.0/src/gengineapi/modules/__init__.py +23 -0
- gengineapi-0.1.0/src/gengineapi/modules/auth.py +46 -0
- gengineapi-0.1.0/src/gengineapi/modules/base.py +196 -0
- gengineapi-0.1.0/src/gengineapi/modules/currencies.py +54 -0
- gengineapi-0.1.0/src/gengineapi/modules/finances.py +81 -0
- gengineapi-0.1.0/src/gengineapi/modules/payments.py +115 -0
- gengineapi-0.1.0/src/gengineapi/modules/transactions.py +70 -0
- gengineapi-0.1.0/src/gengineapi/modules/users.py +100 -0
- gengineapi-0.1.0/src/gengineapi.egg-info/PKG-INFO +274 -0
- gengineapi-0.1.0/src/gengineapi.egg-info/SOURCES.txt +20 -0
- gengineapi-0.1.0/src/gengineapi.egg-info/dependency_links.txt +1 -0
- gengineapi-0.1.0/src/gengineapi.egg-info/requires.txt +4 -0
- gengineapi-0.1.0/src/gengineapi.egg-info/top_level.txt +1 -0
@@ -0,0 +1,274 @@
|
|
1
|
+
Metadata-Version: 2.4
|
2
|
+
Name: gengineapi
|
3
|
+
Version: 0.1.0
|
4
|
+
Summary: Add your description here
|
5
|
+
Requires-Python: >=3.13
|
6
|
+
Description-Content-Type: text/markdown
|
7
|
+
Requires-Dist: aiohttp>=3.8.0
|
8
|
+
Requires-Dist: typing-extensions>=4.0.0
|
9
|
+
Requires-Dist: aiohttp-socks>=0.7.1
|
10
|
+
Requires-Dist: uv-publish
|
11
|
+
|
12
|
+
# G-Engine API Client
|
13
|
+
|
14
|
+
Асинхронный модульный клиент для взаимодействия с API G-Engine.
|
15
|
+
|
16
|
+
## Особенности
|
17
|
+
|
18
|
+
- Полностью асинхронный интерфейс на базе `aiohttp` и `asyncio`
|
19
|
+
- Модульная структура с разделением по доменам API
|
20
|
+
- Детальная обработка ошибок и исключений
|
21
|
+
- Автоматические повторные попытки для временных ошибок
|
22
|
+
- Поддержка JWT-аутентификации
|
23
|
+
- Поддержка прокси, включая SOCKS5
|
24
|
+
- Подробное логирование
|
25
|
+
- Строгая типизация с помощью аннотаций типов
|
26
|
+
- Класс-конфигурация для централизованной настройки и повторного использования
|
27
|
+
|
28
|
+
## Установка
|
29
|
+
|
30
|
+
```bash
|
31
|
+
pip install -r requirements.txt
|
32
|
+
```
|
33
|
+
|
34
|
+
Или с помощью setup.py:
|
35
|
+
|
36
|
+
```bash
|
37
|
+
pip install .
|
38
|
+
```
|
39
|
+
|
40
|
+
## Структура проекта
|
41
|
+
|
42
|
+
```
|
43
|
+
gengine_client/
|
44
|
+
├── __init__.py # Экспорт основных классов
|
45
|
+
├── client.py # Основной класс клиента
|
46
|
+
├── http.py # HTTP клиент с поддержкой аутентификации
|
47
|
+
├── exceptions.py # Иерархия исключений API
|
48
|
+
├── config.py # Класс-конфигурация для настройки параметров
|
49
|
+
└── modules/ # Папка с модулями API
|
50
|
+
├── __init__.py
|
51
|
+
├── base.py # Базовый класс для всех модулей
|
52
|
+
├── payments.py # Модуль для работы с платежами
|
53
|
+
├── finances.py # Модуль для работы с финансами
|
54
|
+
├── auth.py # Модуль для аутентификации
|
55
|
+
├── users.py # Модуль для работы с пользователями
|
56
|
+
├── transactions.py # Модуль для работы с транзакциями
|
57
|
+
└── currencies.py # Модуль для работы с валютами
|
58
|
+
```
|
59
|
+
|
60
|
+
## Использование
|
61
|
+
|
62
|
+
### Инициализация с существующим токеном
|
63
|
+
|
64
|
+
```python
|
65
|
+
import asyncio
|
66
|
+
from gengine_client import GEngineClient
|
67
|
+
|
68
|
+
async def main():
|
69
|
+
# Создаем клиент с существующим токеном
|
70
|
+
async with GEngineClient(
|
71
|
+
base_url="https://api.example.com/api/v2",
|
72
|
+
jwt_token="your-jwt-token",
|
73
|
+
timeout=30,
|
74
|
+
max_retries=3
|
75
|
+
) as client:
|
76
|
+
# Используем API
|
77
|
+
user_info = await client.users.get_me()
|
78
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
79
|
+
|
80
|
+
asyncio.run(main())
|
81
|
+
```
|
82
|
+
|
83
|
+
### Получение нового токена
|
84
|
+
|
85
|
+
```python
|
86
|
+
import asyncio
|
87
|
+
from gengine_client import GEngineClient
|
88
|
+
|
89
|
+
async def main():
|
90
|
+
# Создаем клиент без токена
|
91
|
+
async with GEngineClient(
|
92
|
+
base_url="https://api.example.com/api/v2",
|
93
|
+
timeout=30,
|
94
|
+
max_retries=3
|
95
|
+
) as client:
|
96
|
+
# Аутентифицируемся и получаем токен
|
97
|
+
token_info = await client.auth.login(
|
98
|
+
login="user@example.com",
|
99
|
+
password="secure_password"
|
100
|
+
)
|
101
|
+
|
102
|
+
# Получаем токен
|
103
|
+
token = token_info["access_token"]
|
104
|
+
print(f"Получен токен: {token}")
|
105
|
+
|
106
|
+
# Обновляем токен в клиенте
|
107
|
+
client.update_token(token)
|
108
|
+
|
109
|
+
# Используем API
|
110
|
+
user_info = await client.users.get_me()
|
111
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
112
|
+
|
113
|
+
asyncio.run(main())
|
114
|
+
```
|
115
|
+
|
116
|
+
### Использование прокси
|
117
|
+
|
118
|
+
Клиент поддерживает работу через прокси, включая SOCKS5:
|
119
|
+
|
120
|
+
```python
|
121
|
+
import asyncio
|
122
|
+
from gengine_client import GEngineClient
|
123
|
+
|
124
|
+
async def main():
|
125
|
+
# Создаем клиент с использованием SOCKS5 прокси
|
126
|
+
async with GEngineClient(
|
127
|
+
base_url="https://api.example.com/api/v2",
|
128
|
+
jwt_token="your-jwt-token",
|
129
|
+
timeout=60, # Увеличиваем таймаут для прокси
|
130
|
+
max_retries=5, # Увеличиваем количество повторных попыток
|
131
|
+
proxy="socks5://user:pass@host:port" # Адрес SOCKS5 прокси
|
132
|
+
) as client:
|
133
|
+
# Используем API через прокси
|
134
|
+
user_info = await client.users.get_me()
|
135
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
136
|
+
|
137
|
+
# Можно изменить настройки прокси на лету
|
138
|
+
client.update_proxy("socks5://another-host:port")
|
139
|
+
|
140
|
+
# Или отключить прокси
|
141
|
+
client.update_proxy(None)
|
142
|
+
|
143
|
+
asyncio.run(main())
|
144
|
+
```
|
145
|
+
|
146
|
+
### Использование класса-конфигурации
|
147
|
+
|
148
|
+
Класс-конфигурация позволяет настроить параметры клиента один раз и затем использовать их многократно:
|
149
|
+
|
150
|
+
```python
|
151
|
+
import asyncio
|
152
|
+
from gengine_client import GEngineConfig
|
153
|
+
|
154
|
+
async def main():
|
155
|
+
# Настройка параметров клиента
|
156
|
+
GEngineConfig.setup(
|
157
|
+
base_url="https://api.example.com/api/v2",
|
158
|
+
jwt_token="your-jwt-token",
|
159
|
+
timeout=30,
|
160
|
+
max_retries=3,
|
161
|
+
proxy="socks5://127.0.0.1:9050" # Опционально - прокси
|
162
|
+
)
|
163
|
+
|
164
|
+
# Получение глобального экземпляра клиента
|
165
|
+
client = await GEngineConfig.get_client()
|
166
|
+
|
167
|
+
# Использование клиента
|
168
|
+
user_info = await client.users.get_me()
|
169
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
170
|
+
|
171
|
+
# Не нужно закрывать клиент при каждом использовании,
|
172
|
+
# так как он хранится глобально
|
173
|
+
|
174
|
+
# В другой части приложения
|
175
|
+
# Получение того же экземпляра клиента
|
176
|
+
client = await GEngineConfig.get_client()
|
177
|
+
|
178
|
+
# Использование клиента
|
179
|
+
balance = await client.users.get_balance()
|
180
|
+
print(f"Баланс: {balance['balance']} {balance['currency']}")
|
181
|
+
|
182
|
+
# Обновление настройки прокси в конфигурации
|
183
|
+
await GEngineConfig.update_proxy(None) # Отключение прокси
|
184
|
+
|
185
|
+
# При завершении приложения
|
186
|
+
await GEngineConfig.reset() # Закрывает глобальный клиент
|
187
|
+
|
188
|
+
asyncio.run(main())
|
189
|
+
```
|
190
|
+
|
191
|
+
### Загрузка конфигурации из переменных окружения
|
192
|
+
|
193
|
+
```python
|
194
|
+
import asyncio
|
195
|
+
import os
|
196
|
+
from gengine_client import GEngineConfig
|
197
|
+
|
198
|
+
# Установка переменных окружения
|
199
|
+
os.environ["GENGINE_BASE_URL"] = "https://api.example.com/api/v2"
|
200
|
+
os.environ["GENGINE_TOKEN"] = "env_jwt_token"
|
201
|
+
os.environ["GENGINE_TIMEOUT"] = "45"
|
202
|
+
os.environ["GENGINE_MAX_RETRIES"] = "5"
|
203
|
+
os.environ["GENGINE_PROXY"] = "socks5://127.0.0.1:9050" # Опционально - прокси
|
204
|
+
|
205
|
+
async def main():
|
206
|
+
# Загрузка настроек из переменных окружения
|
207
|
+
GEngineConfig.load_from_env()
|
208
|
+
|
209
|
+
# Получение клиента с настройками из переменных окружения
|
210
|
+
client = await GEngineConfig.get_client()
|
211
|
+
|
212
|
+
# Использование клиента
|
213
|
+
# ...
|
214
|
+
|
215
|
+
# При завершении приложения
|
216
|
+
await GEngineConfig.reset()
|
217
|
+
|
218
|
+
asyncio.run(main())
|
219
|
+
```
|
220
|
+
|
221
|
+
### Работа с платежами
|
222
|
+
|
223
|
+
```python
|
224
|
+
import asyncio
|
225
|
+
import uuid
|
226
|
+
from decimal import Decimal
|
227
|
+
from gengine_client import GEngineClient
|
228
|
+
|
229
|
+
async def main():
|
230
|
+
async with GEngineClient(
|
231
|
+
base_url="https://api.example.com/api/v2",
|
232
|
+
jwt_token="your-jwt-token"
|
233
|
+
) as client:
|
234
|
+
# Генерируем уникальный идентификатор транзакции
|
235
|
+
transaction_id = str(uuid.uuid4())
|
236
|
+
|
237
|
+
# Создаем и верифицируем платеж
|
238
|
+
payment = await client.payments.verify(
|
239
|
+
transaction_id=transaction_id,
|
240
|
+
service_id=1,
|
241
|
+
account="user123",
|
242
|
+
amount=Decimal("10.99"),
|
243
|
+
currency="USD"
|
244
|
+
)
|
245
|
+
print(f"Создан платеж: {payment['transaction_id']}")
|
246
|
+
|
247
|
+
# Выполняем платеж
|
248
|
+
result = await client.payments.execute(transaction_id=transaction_id)
|
249
|
+
print(f"Статус платежа: {result['status_code']}")
|
250
|
+
|
251
|
+
# Получаем статус платежа
|
252
|
+
status = await client.payments.get_status(transaction_id=transaction_id)
|
253
|
+
print(f"Текущий статус платежа: {status['status_code']}")
|
254
|
+
|
255
|
+
asyncio.run(main())
|
256
|
+
```
|
257
|
+
|
258
|
+
## Примеры
|
259
|
+
|
260
|
+
В репозитории есть примеры использования клиента с разными сценариями:
|
261
|
+
|
262
|
+
- `examples.py` - полный набор примеров использования, включая работу с прокси
|
263
|
+
- `old_examples/` - директория с устаревшими примерами
|
264
|
+
|
265
|
+
## Зависимости
|
266
|
+
|
267
|
+
- Python 3.7+
|
268
|
+
- aiohttp >= 3.8.0
|
269
|
+
- typing-extensions >= 4.0.0
|
270
|
+
- aiohttp-socks >= 0.7.1 (для поддержки SOCKS5 прокси)
|
271
|
+
|
272
|
+
## Лицензия
|
273
|
+
|
274
|
+
MIT
|
@@ -0,0 +1,263 @@
|
|
1
|
+
# G-Engine API Client
|
2
|
+
|
3
|
+
Асинхронный модульный клиент для взаимодействия с API G-Engine.
|
4
|
+
|
5
|
+
## Особенности
|
6
|
+
|
7
|
+
- Полностью асинхронный интерфейс на базе `aiohttp` и `asyncio`
|
8
|
+
- Модульная структура с разделением по доменам API
|
9
|
+
- Детальная обработка ошибок и исключений
|
10
|
+
- Автоматические повторные попытки для временных ошибок
|
11
|
+
- Поддержка JWT-аутентификации
|
12
|
+
- Поддержка прокси, включая SOCKS5
|
13
|
+
- Подробное логирование
|
14
|
+
- Строгая типизация с помощью аннотаций типов
|
15
|
+
- Класс-конфигурация для централизованной настройки и повторного использования
|
16
|
+
|
17
|
+
## Установка
|
18
|
+
|
19
|
+
```bash
|
20
|
+
pip install -r requirements.txt
|
21
|
+
```
|
22
|
+
|
23
|
+
Или с помощью setup.py:
|
24
|
+
|
25
|
+
```bash
|
26
|
+
pip install .
|
27
|
+
```
|
28
|
+
|
29
|
+
## Структура проекта
|
30
|
+
|
31
|
+
```
|
32
|
+
gengine_client/
|
33
|
+
├── __init__.py # Экспорт основных классов
|
34
|
+
├── client.py # Основной класс клиента
|
35
|
+
├── http.py # HTTP клиент с поддержкой аутентификации
|
36
|
+
├── exceptions.py # Иерархия исключений API
|
37
|
+
├── config.py # Класс-конфигурация для настройки параметров
|
38
|
+
└── modules/ # Папка с модулями API
|
39
|
+
├── __init__.py
|
40
|
+
├── base.py # Базовый класс для всех модулей
|
41
|
+
├── payments.py # Модуль для работы с платежами
|
42
|
+
├── finances.py # Модуль для работы с финансами
|
43
|
+
├── auth.py # Модуль для аутентификации
|
44
|
+
├── users.py # Модуль для работы с пользователями
|
45
|
+
├── transactions.py # Модуль для работы с транзакциями
|
46
|
+
└── currencies.py # Модуль для работы с валютами
|
47
|
+
```
|
48
|
+
|
49
|
+
## Использование
|
50
|
+
|
51
|
+
### Инициализация с существующим токеном
|
52
|
+
|
53
|
+
```python
|
54
|
+
import asyncio
|
55
|
+
from gengine_client import GEngineClient
|
56
|
+
|
57
|
+
async def main():
|
58
|
+
# Создаем клиент с существующим токеном
|
59
|
+
async with GEngineClient(
|
60
|
+
base_url="https://api.example.com/api/v2",
|
61
|
+
jwt_token="your-jwt-token",
|
62
|
+
timeout=30,
|
63
|
+
max_retries=3
|
64
|
+
) as client:
|
65
|
+
# Используем API
|
66
|
+
user_info = await client.users.get_me()
|
67
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
68
|
+
|
69
|
+
asyncio.run(main())
|
70
|
+
```
|
71
|
+
|
72
|
+
### Получение нового токена
|
73
|
+
|
74
|
+
```python
|
75
|
+
import asyncio
|
76
|
+
from gengine_client import GEngineClient
|
77
|
+
|
78
|
+
async def main():
|
79
|
+
# Создаем клиент без токена
|
80
|
+
async with GEngineClient(
|
81
|
+
base_url="https://api.example.com/api/v2",
|
82
|
+
timeout=30,
|
83
|
+
max_retries=3
|
84
|
+
) as client:
|
85
|
+
# Аутентифицируемся и получаем токен
|
86
|
+
token_info = await client.auth.login(
|
87
|
+
login="user@example.com",
|
88
|
+
password="secure_password"
|
89
|
+
)
|
90
|
+
|
91
|
+
# Получаем токен
|
92
|
+
token = token_info["access_token"]
|
93
|
+
print(f"Получен токен: {token}")
|
94
|
+
|
95
|
+
# Обновляем токен в клиенте
|
96
|
+
client.update_token(token)
|
97
|
+
|
98
|
+
# Используем API
|
99
|
+
user_info = await client.users.get_me()
|
100
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
101
|
+
|
102
|
+
asyncio.run(main())
|
103
|
+
```
|
104
|
+
|
105
|
+
### Использование прокси
|
106
|
+
|
107
|
+
Клиент поддерживает работу через прокси, включая SOCKS5:
|
108
|
+
|
109
|
+
```python
|
110
|
+
import asyncio
|
111
|
+
from gengine_client import GEngineClient
|
112
|
+
|
113
|
+
async def main():
|
114
|
+
# Создаем клиент с использованием SOCKS5 прокси
|
115
|
+
async with GEngineClient(
|
116
|
+
base_url="https://api.example.com/api/v2",
|
117
|
+
jwt_token="your-jwt-token",
|
118
|
+
timeout=60, # Увеличиваем таймаут для прокси
|
119
|
+
max_retries=5, # Увеличиваем количество повторных попыток
|
120
|
+
proxy="socks5://user:pass@host:port" # Адрес SOCKS5 прокси
|
121
|
+
) as client:
|
122
|
+
# Используем API через прокси
|
123
|
+
user_info = await client.users.get_me()
|
124
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
125
|
+
|
126
|
+
# Можно изменить настройки прокси на лету
|
127
|
+
client.update_proxy("socks5://another-host:port")
|
128
|
+
|
129
|
+
# Или отключить прокси
|
130
|
+
client.update_proxy(None)
|
131
|
+
|
132
|
+
asyncio.run(main())
|
133
|
+
```
|
134
|
+
|
135
|
+
### Использование класса-конфигурации
|
136
|
+
|
137
|
+
Класс-конфигурация позволяет настроить параметры клиента один раз и затем использовать их многократно:
|
138
|
+
|
139
|
+
```python
|
140
|
+
import asyncio
|
141
|
+
from gengine_client import GEngineConfig
|
142
|
+
|
143
|
+
async def main():
|
144
|
+
# Настройка параметров клиента
|
145
|
+
GEngineConfig.setup(
|
146
|
+
base_url="https://api.example.com/api/v2",
|
147
|
+
jwt_token="your-jwt-token",
|
148
|
+
timeout=30,
|
149
|
+
max_retries=3,
|
150
|
+
proxy="socks5://127.0.0.1:9050" # Опционально - прокси
|
151
|
+
)
|
152
|
+
|
153
|
+
# Получение глобального экземпляра клиента
|
154
|
+
client = await GEngineConfig.get_client()
|
155
|
+
|
156
|
+
# Использование клиента
|
157
|
+
user_info = await client.users.get_me()
|
158
|
+
print(f"Текущий пользователь: {user_info['login']}")
|
159
|
+
|
160
|
+
# Не нужно закрывать клиент при каждом использовании,
|
161
|
+
# так как он хранится глобально
|
162
|
+
|
163
|
+
# В другой части приложения
|
164
|
+
# Получение того же экземпляра клиента
|
165
|
+
client = await GEngineConfig.get_client()
|
166
|
+
|
167
|
+
# Использование клиента
|
168
|
+
balance = await client.users.get_balance()
|
169
|
+
print(f"Баланс: {balance['balance']} {balance['currency']}")
|
170
|
+
|
171
|
+
# Обновление настройки прокси в конфигурации
|
172
|
+
await GEngineConfig.update_proxy(None) # Отключение прокси
|
173
|
+
|
174
|
+
# При завершении приложения
|
175
|
+
await GEngineConfig.reset() # Закрывает глобальный клиент
|
176
|
+
|
177
|
+
asyncio.run(main())
|
178
|
+
```
|
179
|
+
|
180
|
+
### Загрузка конфигурации из переменных окружения
|
181
|
+
|
182
|
+
```python
|
183
|
+
import asyncio
|
184
|
+
import os
|
185
|
+
from gengine_client import GEngineConfig
|
186
|
+
|
187
|
+
# Установка переменных окружения
|
188
|
+
os.environ["GENGINE_BASE_URL"] = "https://api.example.com/api/v2"
|
189
|
+
os.environ["GENGINE_TOKEN"] = "env_jwt_token"
|
190
|
+
os.environ["GENGINE_TIMEOUT"] = "45"
|
191
|
+
os.environ["GENGINE_MAX_RETRIES"] = "5"
|
192
|
+
os.environ["GENGINE_PROXY"] = "socks5://127.0.0.1:9050" # Опционально - прокси
|
193
|
+
|
194
|
+
async def main():
|
195
|
+
# Загрузка настроек из переменных окружения
|
196
|
+
GEngineConfig.load_from_env()
|
197
|
+
|
198
|
+
# Получение клиента с настройками из переменных окружения
|
199
|
+
client = await GEngineConfig.get_client()
|
200
|
+
|
201
|
+
# Использование клиента
|
202
|
+
# ...
|
203
|
+
|
204
|
+
# При завершении приложения
|
205
|
+
await GEngineConfig.reset()
|
206
|
+
|
207
|
+
asyncio.run(main())
|
208
|
+
```
|
209
|
+
|
210
|
+
### Работа с платежами
|
211
|
+
|
212
|
+
```python
|
213
|
+
import asyncio
|
214
|
+
import uuid
|
215
|
+
from decimal import Decimal
|
216
|
+
from gengine_client import GEngineClient
|
217
|
+
|
218
|
+
async def main():
|
219
|
+
async with GEngineClient(
|
220
|
+
base_url="https://api.example.com/api/v2",
|
221
|
+
jwt_token="your-jwt-token"
|
222
|
+
) as client:
|
223
|
+
# Генерируем уникальный идентификатор транзакции
|
224
|
+
transaction_id = str(uuid.uuid4())
|
225
|
+
|
226
|
+
# Создаем и верифицируем платеж
|
227
|
+
payment = await client.payments.verify(
|
228
|
+
transaction_id=transaction_id,
|
229
|
+
service_id=1,
|
230
|
+
account="user123",
|
231
|
+
amount=Decimal("10.99"),
|
232
|
+
currency="USD"
|
233
|
+
)
|
234
|
+
print(f"Создан платеж: {payment['transaction_id']}")
|
235
|
+
|
236
|
+
# Выполняем платеж
|
237
|
+
result = await client.payments.execute(transaction_id=transaction_id)
|
238
|
+
print(f"Статус платежа: {result['status_code']}")
|
239
|
+
|
240
|
+
# Получаем статус платежа
|
241
|
+
status = await client.payments.get_status(transaction_id=transaction_id)
|
242
|
+
print(f"Текущий статус платежа: {status['status_code']}")
|
243
|
+
|
244
|
+
asyncio.run(main())
|
245
|
+
```
|
246
|
+
|
247
|
+
## Примеры
|
248
|
+
|
249
|
+
В репозитории есть примеры использования клиента с разными сценариями:
|
250
|
+
|
251
|
+
- `examples.py` - полный набор примеров использования, включая работу с прокси
|
252
|
+
- `old_examples/` - директория с устаревшими примерами
|
253
|
+
|
254
|
+
## Зависимости
|
255
|
+
|
256
|
+
- Python 3.7+
|
257
|
+
- aiohttp >= 3.8.0
|
258
|
+
- typing-extensions >= 4.0.0
|
259
|
+
- aiohttp-socks >= 0.7.1 (для поддержки SOCKS5 прокси)
|
260
|
+
|
261
|
+
## Лицензия
|
262
|
+
|
263
|
+
MIT
|
@@ -0,0 +1,18 @@
|
|
1
|
+
[project]
|
2
|
+
name = "gengineapi"
|
3
|
+
version = "0.1.0"
|
4
|
+
description = "Add your description here"
|
5
|
+
readme = "README.md"
|
6
|
+
requires-python = ">=3.13"
|
7
|
+
dependencies = [
|
8
|
+
"aiohttp>=3.8.0", # Для асинхронных HTTP-запросов и WebSocket
|
9
|
+
"typing-extensions>=4.0.0", # Для расширенных типов аннотаций
|
10
|
+
"aiohttp-socks>=0.7.1",
|
11
|
+
"uv-publish",
|
12
|
+
]
|
13
|
+
|
14
|
+
[[tool.uv.index]]
|
15
|
+
name = "testpypi"
|
16
|
+
url = "https://test.pypi.org/simple/"
|
17
|
+
publish-url = "https://test.pypi.org/legacy/"
|
18
|
+
explicit = true
|
@@ -0,0 +1,43 @@
|
|
1
|
+
"""
|
2
|
+
G-Engine API Client - Асинхронный модульный клиент для взаимодействия с API G-Engine.
|
3
|
+
|
4
|
+
Предоставляет удобный интерфейс для работы с платежами, финансами,
|
5
|
+
пользователями и другими ресурсами API G-Engine.
|
6
|
+
"""
|
7
|
+
|
8
|
+
from .client import GEngineClient
|
9
|
+
from .config import GEngineConfig
|
10
|
+
from .exceptions import (
|
11
|
+
ApiAuthError,
|
12
|
+
ApiConnectionError,
|
13
|
+
ApiError,
|
14
|
+
ApiForbiddenError,
|
15
|
+
ApiParsingError,
|
16
|
+
ApiResourceNotFoundError,
|
17
|
+
ApiServerError,
|
18
|
+
ApiServiceUnavailableError,
|
19
|
+
ApiTimeoutError,
|
20
|
+
ApiValidationError,
|
21
|
+
)
|
22
|
+
from .http import AsyncHttpClient
|
23
|
+
|
24
|
+
__version__ = "1.0.0"
|
25
|
+
__all__ = [
|
26
|
+
# Основной клиент
|
27
|
+
'GEngineClient',
|
28
|
+
# Конфигурация
|
29
|
+
'GEngineConfig',
|
30
|
+
# HTTP клиент
|
31
|
+
'AsyncHttpClient',
|
32
|
+
# Исключения
|
33
|
+
'ApiError',
|
34
|
+
'ApiConnectionError',
|
35
|
+
'ApiTimeoutError',
|
36
|
+
'ApiAuthError',
|
37
|
+
'ApiForbiddenError',
|
38
|
+
'ApiValidationError',
|
39
|
+
'ApiResourceNotFoundError',
|
40
|
+
'ApiServerError',
|
41
|
+
'ApiServiceUnavailableError',
|
42
|
+
'ApiParsingError',
|
43
|
+
]
|