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.
@@ -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,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -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
+ ]