embed-client 2.0.0.0__tar.gz → 3.1.0.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.
Files changed (40) hide show
  1. embed_client-3.1.0.0/PKG-INFO +229 -0
  2. embed_client-3.1.0.0/README.md +214 -0
  3. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/embed_client/async_client.py +376 -16
  4. embed_client-3.1.0.0/embed_client/auth.py +487 -0
  5. embed_client-3.1.0.0/embed_client/auth_examples.py +248 -0
  6. embed_client-3.1.0.0/embed_client/client_factory.py +396 -0
  7. embed_client-3.1.0.0/embed_client/client_factory_examples.py +353 -0
  8. embed_client-3.1.0.0/embed_client/config.py +592 -0
  9. embed_client-3.1.0.0/embed_client/config_examples.py +197 -0
  10. embed_client-3.1.0.0/embed_client/example_async_usage.py +653 -0
  11. embed_client-3.1.0.0/embed_client/example_async_usage_ru.py +470 -0
  12. embed_client-3.1.0.0/embed_client/ssl_examples.py +329 -0
  13. embed_client-3.1.0.0/embed_client/ssl_manager.py +466 -0
  14. embed_client-3.1.0.0/embed_client.egg-info/PKG-INFO +229 -0
  15. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/embed_client.egg-info/SOURCES.txt +14 -1
  16. embed_client-3.1.0.0/embed_client.egg-info/requires.txt +8 -0
  17. embed_client-3.1.0.0/pyproject.toml +31 -0
  18. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_async_client.py +8 -8
  19. embed_client-3.1.0.0/tests/test_auth.py +459 -0
  20. embed_client-3.1.0.0/tests/test_client_factory.py +491 -0
  21. embed_client-3.1.0.0/tests/test_config.py +374 -0
  22. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_example_async_usage.py +9 -1
  23. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_example_async_usage_ru.py +9 -1
  24. embed_client-3.1.0.0/tests/test_ssl_manager.py +399 -0
  25. embed_client-3.1.0.0/tests/test_with_auth.py +235 -0
  26. embed_client-2.0.0.0/PKG-INFO +0 -9
  27. embed_client-2.0.0.0/README.md +0 -24
  28. embed_client-2.0.0.0/embed_client/example_async_usage.py +0 -165
  29. embed_client-2.0.0.0/embed_client/example_async_usage_ru.py +0 -128
  30. embed_client-2.0.0.0/embed_client.egg-info/PKG-INFO +0 -9
  31. embed_client-2.0.0.0/embed_client.egg-info/requires.txt +0 -5
  32. embed_client-2.0.0.0/pyproject.toml +0 -21
  33. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/embed_client/__init__.py +0 -0
  34. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/embed_client.egg-info/dependency_links.txt +0 -0
  35. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/embed_client.egg-info/top_level.txt +0 -0
  36. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/setup.cfg +0 -0
  37. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_async_client_real.py +0 -0
  38. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_async_client_stress.py +0 -0
  39. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_async_client_stress_new.py +0 -0
  40. {embed_client-2.0.0.0 → embed_client-3.1.0.0}/tests/test_async_client_stress_updated.py +0 -0
@@ -0,0 +1,229 @@
1
+ Metadata-Version: 2.4
2
+ Name: embed-client
3
+ Version: 3.1.0.0
4
+ Summary: Async client for Embedding Service API with comprehensive authentication, SSL/TLS, and mTLS support
5
+ Author-email: Vasiliy Zdanovskiy <vasilyvz@gmail.com>
6
+ Requires-Python: >=3.8
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: aiohttp
9
+ Requires-Dist: PyJWT>=2.0.0
10
+ Requires-Dist: cryptography>=3.0.0
11
+ Requires-Dist: pydantic>=2.0.0
12
+ Provides-Extra: test
13
+ Requires-Dist: pytest; extra == "test"
14
+ Requires-Dist: pytest-asyncio; extra == "test"
15
+
16
+ # embed-client
17
+
18
+ Асинхронный клиент для Embedding Service API с поддержкой всех режимов безопасности.
19
+
20
+ ## Возможности
21
+
22
+ - ✅ **Асинхронный API** - полная поддержка async/await
23
+ - ✅ **Все режимы безопасности** - HTTP, HTTPS, mTLS
24
+ - ✅ **Аутентификация** - API Key, JWT, Basic Auth, Certificate
25
+ - ✅ **SSL/TLS поддержка** - полная интеграция с mcp_security_framework
26
+ - ✅ **Конфигурация** - файлы конфигурации, переменные окружения, аргументы
27
+ - ✅ **Обратная совместимость** - API формат не изменился, добавлена только безопасность
28
+ - ✅ **Типизация** - 100% type-annotated код
29
+ - ✅ **Тестирование** - 84+ тестов с полным покрытием
30
+
31
+ ## Quick Start: Примеры запуска
32
+
33
+ ### Базовое использование
34
+
35
+ **Вариант 1: через аргументы командной строки**
36
+
37
+ ```sh
38
+ # HTTP без аутентификации
39
+ python embed_client/example_async_usage.py --base-url http://localhost --port 8001
40
+
41
+ # HTTP с API ключом
42
+ python embed_client/example_async_usage.py --base-url http://localhost --port 8001 \
43
+ --auth-method api_key --api-key admin_key_123
44
+
45
+ # HTTPS с SSL
46
+ python embed_client/example_async_usage.py --base-url https://localhost --port 9443 \
47
+ --ssl-verify-mode CERT_REQUIRED
48
+
49
+ # mTLS с сертификатами
50
+ python embed_client/example_async_usage.py --base-url https://localhost --port 9443 \
51
+ --cert-file certs/client.crt --key-file keys/client.key --ca-cert-file certs/ca.crt
52
+ ```
53
+
54
+ **Вариант 2: через переменные окружения**
55
+
56
+ ```sh
57
+ export EMBED_CLIENT_BASE_URL=http://localhost
58
+ export EMBED_CLIENT_PORT=8001
59
+ export EMBED_CLIENT_AUTH_METHOD=api_key
60
+ export EMBED_CLIENT_API_KEY=admin_key_123
61
+ python embed_client/example_async_usage.py
62
+ ```
63
+
64
+ **Вариант 3: через файл конфигурации**
65
+
66
+ ```sh
67
+ python embed_client/example_async_usage.py --config configs/https_token.json
68
+ ```
69
+
70
+ ### Режимы безопасности
71
+
72
+ #### 1. HTTP (без аутентификации)
73
+ ```python
74
+ from embed_client.async_client import EmbeddingServiceAsyncClient
75
+
76
+ client = EmbeddingServiceAsyncClient(
77
+ base_url="http://localhost",
78
+ port=8001
79
+ )
80
+ ```
81
+
82
+ #### 2. HTTP + Token
83
+ ```python
84
+ from embed_client.config import ClientConfig
85
+
86
+ # API Key
87
+ config = ClientConfig.create_http_token_config(
88
+ "http://localhost", 8001, {"user": "api_key_123"}
89
+ )
90
+
91
+ # JWT
92
+ config = ClientConfig.create_http_jwt_config(
93
+ "http://localhost", 8001, "secret", "username", "password"
94
+ )
95
+
96
+ # Basic Auth
97
+ config = ClientConfig.create_http_basic_config(
98
+ "http://localhost", 8001, "username", "password"
99
+ )
100
+ ```
101
+
102
+ #### 3. HTTPS
103
+ ```python
104
+ config = ClientConfig.create_https_config(
105
+ "https://localhost", 9443,
106
+ ca_cert_file="certs/ca.crt"
107
+ )
108
+ ```
109
+
110
+ #### 4. mTLS (взаимная аутентификация)
111
+ ```python
112
+ config = ClientConfig.create_mtls_config(
113
+ "https://localhost", 9443,
114
+ cert_file="certs/client.crt",
115
+ key_file="keys/client.key",
116
+ ca_cert_file="certs/ca.crt"
117
+ )
118
+ ```
119
+
120
+ ### Программное использование
121
+
122
+ ```python
123
+ import asyncio
124
+ from embed_client.async_client import EmbeddingServiceAsyncClient
125
+ from embed_client.config import ClientConfig
126
+
127
+ async def main():
128
+ # Создание конфигурации
129
+ config = ClientConfig.create_http_token_config(
130
+ "http://localhost", 8001, {"user": "api_key_123"}
131
+ )
132
+
133
+ # Использование клиента
134
+ async with EmbeddingServiceAsyncClient.from_config(config) as client:
135
+ # Проверка статуса
136
+ print(f"Аутентификация: {client.get_auth_method()}")
137
+ print(f"SSL включен: {client.is_ssl_enabled()}")
138
+ print(f"mTLS включен: {client.is_mtls_enabled()}")
139
+
140
+ # Выполнение запроса
141
+ result = await client.cmd("embed", params={"texts": ["hello world"]})
142
+
143
+ # Извлечение данных
144
+ embeddings = client.extract_embeddings(result)
145
+ texts = client.extract_texts(result)
146
+ tokens = client.extract_tokens(result)
147
+ bm25_tokens = client.extract_bm25_tokens(result)
148
+
149
+ print(f"Эмбеддинги: {embeddings}")
150
+ print(f"Тексты: {texts}")
151
+ print(f"Токены: {tokens}")
152
+ print(f"BM25 токены: {bm25_tokens}")
153
+
154
+ if __name__ == "__main__":
155
+ asyncio.run(main())
156
+ ```
157
+
158
+ ## Установка
159
+
160
+ ```bash
161
+ # Установка из PyPI
162
+ pip install embed-client
163
+
164
+ # Установка в режиме разработки
165
+ git clone <repository>
166
+ cd embed-client
167
+ pip install -e .
168
+ ```
169
+
170
+ ## Зависимости
171
+
172
+ - `aiohttp` - асинхронные HTTP запросы
173
+ - `PyJWT>=2.0.0` - JWT токены
174
+ - `cryptography>=3.0.0` - криптография и сертификаты
175
+ - `pydantic>=2.0.0` - валидация конфигурации
176
+
177
+ ## Тестирование
178
+
179
+ ```bash
180
+ # Запуск всех тестов
181
+ pytest tests/
182
+
183
+ # Запуск тестов с покрытием
184
+ pytest tests/ --cov=embed_client
185
+
186
+ # Запуск конкретных тестов
187
+ pytest tests/test_async_client.py -v
188
+ pytest tests/test_config.py -v
189
+ pytest tests/test_auth.py -v
190
+ pytest tests/test_ssl_manager.py -v
191
+ ```
192
+
193
+ ## Документация
194
+
195
+ - [Формат API и режимы безопасности](docs/api_format.md)
196
+ - [Примеры использования](embed_client/example_async_usage.py)
197
+ - [Примеры на русском](embed_client/example_async_usage_ru.py)
198
+
199
+ ## Безопасность
200
+
201
+ ### Рекомендации
202
+
203
+ 1. **Используйте HTTPS** для продакшена
204
+ 2. **Включите проверку сертификатов** (CERT_REQUIRED)
205
+ 3. **Используйте mTLS** для критически важных систем
206
+ 4. **Регулярно обновляйте сертификаты**
207
+ 5. **Храните приватные ключи в безопасном месте**
208
+
209
+ ### Поддерживаемые протоколы
210
+
211
+ - TLS 1.2
212
+ - TLS 1.3
213
+ - SSL 3.0 (устаревший, не рекомендуется)
214
+
215
+ ## Лицензия
216
+
217
+ MIT License
218
+
219
+ ## Автор
220
+
221
+ **Vasiliy Zdanovskiy**
222
+ Email: vasilyvz@gmail.com
223
+
224
+ ---
225
+
226
+ **Важно:**
227
+ - Используйте `--base-url` (через дефис), а не `--base_url` (через подчеркивание).
228
+ - Значение base_url должно содержать `http://` или `https://`.
229
+ - Аргументы должны быть отдельными (через пробел), а не через `=`.
@@ -0,0 +1,214 @@
1
+ # embed-client
2
+
3
+ Асинхронный клиент для Embedding Service API с поддержкой всех режимов безопасности.
4
+
5
+ ## Возможности
6
+
7
+ - ✅ **Асинхронный API** - полная поддержка async/await
8
+ - ✅ **Все режимы безопасности** - HTTP, HTTPS, mTLS
9
+ - ✅ **Аутентификация** - API Key, JWT, Basic Auth, Certificate
10
+ - ✅ **SSL/TLS поддержка** - полная интеграция с mcp_security_framework
11
+ - ✅ **Конфигурация** - файлы конфигурации, переменные окружения, аргументы
12
+ - ✅ **Обратная совместимость** - API формат не изменился, добавлена только безопасность
13
+ - ✅ **Типизация** - 100% type-annotated код
14
+ - ✅ **Тестирование** - 84+ тестов с полным покрытием
15
+
16
+ ## Quick Start: Примеры запуска
17
+
18
+ ### Базовое использование
19
+
20
+ **Вариант 1: через аргументы командной строки**
21
+
22
+ ```sh
23
+ # HTTP без аутентификации
24
+ python embed_client/example_async_usage.py --base-url http://localhost --port 8001
25
+
26
+ # HTTP с API ключом
27
+ python embed_client/example_async_usage.py --base-url http://localhost --port 8001 \
28
+ --auth-method api_key --api-key admin_key_123
29
+
30
+ # HTTPS с SSL
31
+ python embed_client/example_async_usage.py --base-url https://localhost --port 9443 \
32
+ --ssl-verify-mode CERT_REQUIRED
33
+
34
+ # mTLS с сертификатами
35
+ python embed_client/example_async_usage.py --base-url https://localhost --port 9443 \
36
+ --cert-file certs/client.crt --key-file keys/client.key --ca-cert-file certs/ca.crt
37
+ ```
38
+
39
+ **Вариант 2: через переменные окружения**
40
+
41
+ ```sh
42
+ export EMBED_CLIENT_BASE_URL=http://localhost
43
+ export EMBED_CLIENT_PORT=8001
44
+ export EMBED_CLIENT_AUTH_METHOD=api_key
45
+ export EMBED_CLIENT_API_KEY=admin_key_123
46
+ python embed_client/example_async_usage.py
47
+ ```
48
+
49
+ **Вариант 3: через файл конфигурации**
50
+
51
+ ```sh
52
+ python embed_client/example_async_usage.py --config configs/https_token.json
53
+ ```
54
+
55
+ ### Режимы безопасности
56
+
57
+ #### 1. HTTP (без аутентификации)
58
+ ```python
59
+ from embed_client.async_client import EmbeddingServiceAsyncClient
60
+
61
+ client = EmbeddingServiceAsyncClient(
62
+ base_url="http://localhost",
63
+ port=8001
64
+ )
65
+ ```
66
+
67
+ #### 2. HTTP + Token
68
+ ```python
69
+ from embed_client.config import ClientConfig
70
+
71
+ # API Key
72
+ config = ClientConfig.create_http_token_config(
73
+ "http://localhost", 8001, {"user": "api_key_123"}
74
+ )
75
+
76
+ # JWT
77
+ config = ClientConfig.create_http_jwt_config(
78
+ "http://localhost", 8001, "secret", "username", "password"
79
+ )
80
+
81
+ # Basic Auth
82
+ config = ClientConfig.create_http_basic_config(
83
+ "http://localhost", 8001, "username", "password"
84
+ )
85
+ ```
86
+
87
+ #### 3. HTTPS
88
+ ```python
89
+ config = ClientConfig.create_https_config(
90
+ "https://localhost", 9443,
91
+ ca_cert_file="certs/ca.crt"
92
+ )
93
+ ```
94
+
95
+ #### 4. mTLS (взаимная аутентификация)
96
+ ```python
97
+ config = ClientConfig.create_mtls_config(
98
+ "https://localhost", 9443,
99
+ cert_file="certs/client.crt",
100
+ key_file="keys/client.key",
101
+ ca_cert_file="certs/ca.crt"
102
+ )
103
+ ```
104
+
105
+ ### Программное использование
106
+
107
+ ```python
108
+ import asyncio
109
+ from embed_client.async_client import EmbeddingServiceAsyncClient
110
+ from embed_client.config import ClientConfig
111
+
112
+ async def main():
113
+ # Создание конфигурации
114
+ config = ClientConfig.create_http_token_config(
115
+ "http://localhost", 8001, {"user": "api_key_123"}
116
+ )
117
+
118
+ # Использование клиента
119
+ async with EmbeddingServiceAsyncClient.from_config(config) as client:
120
+ # Проверка статуса
121
+ print(f"Аутентификация: {client.get_auth_method()}")
122
+ print(f"SSL включен: {client.is_ssl_enabled()}")
123
+ print(f"mTLS включен: {client.is_mtls_enabled()}")
124
+
125
+ # Выполнение запроса
126
+ result = await client.cmd("embed", params={"texts": ["hello world"]})
127
+
128
+ # Извлечение данных
129
+ embeddings = client.extract_embeddings(result)
130
+ texts = client.extract_texts(result)
131
+ tokens = client.extract_tokens(result)
132
+ bm25_tokens = client.extract_bm25_tokens(result)
133
+
134
+ print(f"Эмбеддинги: {embeddings}")
135
+ print(f"Тексты: {texts}")
136
+ print(f"Токены: {tokens}")
137
+ print(f"BM25 токены: {bm25_tokens}")
138
+
139
+ if __name__ == "__main__":
140
+ asyncio.run(main())
141
+ ```
142
+
143
+ ## Установка
144
+
145
+ ```bash
146
+ # Установка из PyPI
147
+ pip install embed-client
148
+
149
+ # Установка в режиме разработки
150
+ git clone <repository>
151
+ cd embed-client
152
+ pip install -e .
153
+ ```
154
+
155
+ ## Зависимости
156
+
157
+ - `aiohttp` - асинхронные HTTP запросы
158
+ - `PyJWT>=2.0.0` - JWT токены
159
+ - `cryptography>=3.0.0` - криптография и сертификаты
160
+ - `pydantic>=2.0.0` - валидация конфигурации
161
+
162
+ ## Тестирование
163
+
164
+ ```bash
165
+ # Запуск всех тестов
166
+ pytest tests/
167
+
168
+ # Запуск тестов с покрытием
169
+ pytest tests/ --cov=embed_client
170
+
171
+ # Запуск конкретных тестов
172
+ pytest tests/test_async_client.py -v
173
+ pytest tests/test_config.py -v
174
+ pytest tests/test_auth.py -v
175
+ pytest tests/test_ssl_manager.py -v
176
+ ```
177
+
178
+ ## Документация
179
+
180
+ - [Формат API и режимы безопасности](docs/api_format.md)
181
+ - [Примеры использования](embed_client/example_async_usage.py)
182
+ - [Примеры на русском](embed_client/example_async_usage_ru.py)
183
+
184
+ ## Безопасность
185
+
186
+ ### Рекомендации
187
+
188
+ 1. **Используйте HTTPS** для продакшена
189
+ 2. **Включите проверку сертификатов** (CERT_REQUIRED)
190
+ 3. **Используйте mTLS** для критически важных систем
191
+ 4. **Регулярно обновляйте сертификаты**
192
+ 5. **Храните приватные ключи в безопасном месте**
193
+
194
+ ### Поддерживаемые протоколы
195
+
196
+ - TLS 1.2
197
+ - TLS 1.3
198
+ - SSL 3.0 (устаревший, не рекомендуется)
199
+
200
+ ## Лицензия
201
+
202
+ MIT License
203
+
204
+ ## Автор
205
+
206
+ **Vasiliy Zdanovskiy**
207
+ Email: vasilyvz@gmail.com
208
+
209
+ ---
210
+
211
+ **Важно:**
212
+ - Используйте `--base-url` (через дефис), а не `--base_url` (через подчеркивание).
213
+ - Значение base_url должно содержать `http://` или `https://`.
214
+ - Аргументы должны быть отдельными (через пробел), а не через `=`.