s-adapterkit 0.1.1__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.
adapterkit/__init__.py ADDED
@@ -0,0 +1,293 @@
1
+ """adapterkit — переиспользуемый SDK сетевых адаптеров (поверх clikit).
2
+
3
+ Сетевой слой, который пишется один раз и потребляется всеми адаптерами
4
+ `bublictr` и `reverse-factory`: транспорт + retry + auth + session + antibot,
5
+ декларативный контракт плагинов (`typing.Protocol` + `ADAPTER_API_VERSION`) и
6
+ базовый фасад адаптера. adapterkit зависит ТОЛЬКО от `clikit` (и стандартных
7
+ сетевых библиотек) — без импортов домена, чтобы reverse-factory брал тот же SDK.
8
+
9
+ Публичный API сгруппирован по слоям (как в `clikit.__init__`): ошибки → контракт
10
+ → retry → transport → client → auth → errmap → pagination → sessions → base →
11
+ registry → antibot. Браузерный слой (`adapterkit.browser`) тащит опциональный
12
+ Playwright и здесь НЕ ре-экспортируется на верхний уровень — импортируется явно
13
+ из подмодуля (``from adapterkit.browser import maximized_chromium``), чтобы
14
+ верхнеуровневый импорт пакета не зависел от extra `browser`.
15
+ """
16
+ from __future__ import annotations
17
+
18
+ __version__ = "0.1.1"
19
+
20
+ # Импорты сгруппированы по слоям, но отсортированы по алфавиту (isort/ruff):
21
+ # заголовки-комментарии ниже маркируют слой каждого подмодуля, а __all__ в конце
22
+ # держит исходную смысловую группировку (ошибки → контракт → транспорт → ...).
23
+
24
+ # --------------------------------------------------------------------------- #
25
+ # antibot — выбор транспорта (curl-cffi JA3 / реальный браузер по CDP) #
26
+ # --------------------------------------------------------------------------- #
27
+ from adapterkit.antibot import (
28
+ CdpBrowserBackend,
29
+ CdpTransport,
30
+ CurlCffiTransport,
31
+ pick_chrome_impersonate,
32
+ )
33
+
34
+ # --------------------------------------------------------------------------- #
35
+ # auth — стратегии авторизации + персистентность сессии #
36
+ # --------------------------------------------------------------------------- #
37
+ from adapterkit.auth import (
38
+ BrowserLoginAuth,
39
+ CookieSessionAuth,
40
+ OAuth2Auth,
41
+ TokenAuth,
42
+ decrypt_settings,
43
+ dump_settings,
44
+ encrypt_settings,
45
+ load_settings,
46
+ )
47
+
48
+ # --------------------------------------------------------------------------- #
49
+ # base — базовый адаптер + ресурс-под-сервисы (Stripe-фасад) #
50
+ # --------------------------------------------------------------------------- #
51
+ from adapterkit.base import (
52
+ BaseAdapter,
53
+ CommentsResource,
54
+ ContentResource,
55
+ HttpClientLike,
56
+ MetricsResource,
57
+ Resource,
58
+ SearchResource,
59
+ )
60
+
61
+ # --------------------------------------------------------------------------- #
62
+ # client — единый choke-point HTTP-вызовов #
63
+ # --------------------------------------------------------------------------- #
64
+ from adapterkit.client import HttpClient
65
+
66
+ # --------------------------------------------------------------------------- #
67
+ # contract — Protocol-«талия» + версии контракта + DTO/enum #
68
+ # --------------------------------------------------------------------------- #
69
+ from adapterkit.contract import (
70
+ ADAPTER_API_VERSION,
71
+ MIN_SUPPORTED_API_VERSION,
72
+ Auth,
73
+ AuthMode,
74
+ Creds,
75
+ Endpoint,
76
+ ErrorMapper,
77
+ NetworkAdapter,
78
+ PaginationMode,
79
+ Paginator,
80
+ Refreshable,
81
+ SessionRef,
82
+ SessionStoreProtocol,
83
+ Transport,
84
+ TransportKind,
85
+ )
86
+
87
+ # --------------------------------------------------------------------------- #
88
+ # errmap — декларативный маппинг ответа в доменную ошибку #
89
+ # --------------------------------------------------------------------------- #
90
+ from adapterkit.errmap import (
91
+ DEFAULT_ERROR_MAP,
92
+ AuthExpired,
93
+ BodyRule,
94
+ ErrorMap,
95
+ ErrorMapBuilder,
96
+ ExcFactory,
97
+ build_error_map,
98
+ )
99
+
100
+ # --------------------------------------------------------------------------- #
101
+ # errors — единая иерархия (реэкспорт clikit + сетевые подклассы) #
102
+ # --------------------------------------------------------------------------- #
103
+ from adapterkit.errors import (
104
+ RETRYABLE,
105
+ AdapterError,
106
+ AuthRequired,
107
+ Blocked,
108
+ CliError,
109
+ NotFound,
110
+ RateLimited,
111
+ ServerError,
112
+ SessionExpired,
113
+ TransportError,
114
+ ValidationError,
115
+ )
116
+
117
+ # --------------------------------------------------------------------------- #
118
+ # onboarding_contract — опциональные онбординг/health-контракты (api_version 2) #
119
+ # --------------------------------------------------------------------------- #
120
+ from adapterkit.onboarding_contract import (
121
+ HealthProtocol,
122
+ HealthState,
123
+ HealthStatus,
124
+ InteractiveFlow,
125
+ LoginMode,
126
+ LoginRequirements,
127
+ OnboardingProtocol,
128
+ )
129
+
130
+ # --------------------------------------------------------------------------- #
131
+ # orchestration_api — тонкий registry-driven API онбординга/health (W5) #
132
+ # --------------------------------------------------------------------------- #
133
+ from adapterkit.orchestration_api import (
134
+ OnboardReport,
135
+ OnboardResult,
136
+ health_check_all,
137
+ onboard_all,
138
+ )
139
+
140
+ # --------------------------------------------------------------------------- #
141
+ # pagination — три стратегии листания + tweepy-обёртки #
142
+ # --------------------------------------------------------------------------- #
143
+ from adapterkit.pagination import (
144
+ DEFAULT_PAGE_PARAMS,
145
+ CursorExtractor,
146
+ CursorPaginator,
147
+ ItemsExtractor,
148
+ PageParams,
149
+ default_extract_cursor,
150
+ default_extract_items,
151
+ with_page_params,
152
+ )
153
+
154
+ # --------------------------------------------------------------------------- #
155
+ # registry — discovery плагинов + ручная регистрация #
156
+ # --------------------------------------------------------------------------- #
157
+ from adapterkit.registry import (
158
+ ENTRY_POINT_GROUP,
159
+ AdapterClass,
160
+ AdapterRegistry,
161
+ default_registry,
162
+ discover_adapters,
163
+ get_adapter_class,
164
+ get_health_adapters,
165
+ get_onboarding_adapters,
166
+ register_adapter,
167
+ )
168
+
169
+ # --------------------------------------------------------------------------- #
170
+ # retry — header-driven политика повторов #
171
+ # --------------------------------------------------------------------------- #
172
+ from adapterkit.retry import DEFAULT_RETRY, RetryPolicy
173
+
174
+ # --------------------------------------------------------------------------- #
175
+ # sessions — единое хранилище сессий (каталог + SQLite-индекс) #
176
+ # --------------------------------------------------------------------------- #
177
+ from adapterkit.sessions import (
178
+ KekUnavailableError,
179
+ SessionStore,
180
+ SessionStoreError,
181
+ resolve_kek,
182
+ )
183
+
184
+ # --------------------------------------------------------------------------- #
185
+ # transport — конкретный httpx-транспорт #
186
+ # --------------------------------------------------------------------------- #
187
+ from adapterkit.transport import HttpxTransport
188
+
189
+ __all__ = [
190
+ "__version__",
191
+ # errors (единая иерархия поверх clikit)
192
+ "CliError",
193
+ "AuthRequired",
194
+ "SessionExpired",
195
+ "RateLimited",
196
+ "ValidationError",
197
+ "AdapterError",
198
+ "TransportError",
199
+ "NotFound",
200
+ "Blocked",
201
+ "ServerError",
202
+ "RETRYABLE",
203
+ # contract: версии + Protocol-«талия» + DTO/enum
204
+ "ADAPTER_API_VERSION",
205
+ "MIN_SUPPORTED_API_VERSION",
206
+ "Transport",
207
+ "Auth",
208
+ "Refreshable",
209
+ "ErrorMapper",
210
+ "Paginator",
211
+ "SessionStoreProtocol",
212
+ "NetworkAdapter",
213
+ "Endpoint",
214
+ "SessionRef",
215
+ "Creds",
216
+ "PaginationMode",
217
+ "AuthMode",
218
+ "TransportKind",
219
+ # onboarding/health контракты (api_version 2, опциональные)
220
+ "LoginMode",
221
+ "LoginRequirements",
222
+ "InteractiveFlow",
223
+ "OnboardingProtocol",
224
+ "HealthState",
225
+ "HealthStatus",
226
+ "HealthProtocol",
227
+ # retry
228
+ "RetryPolicy",
229
+ "DEFAULT_RETRY",
230
+ # transport
231
+ "HttpxTransport",
232
+ # client (choke-point)
233
+ "HttpClient",
234
+ # auth: стратегии + персистентность сессии
235
+ "TokenAuth",
236
+ "CookieSessionAuth",
237
+ "OAuth2Auth",
238
+ "BrowserLoginAuth",
239
+ "dump_settings",
240
+ "load_settings",
241
+ "encrypt_settings",
242
+ "decrypt_settings",
243
+ # errmap
244
+ "ErrorMap",
245
+ "ErrorMapBuilder",
246
+ "BodyRule",
247
+ "ExcFactory",
248
+ "AuthExpired",
249
+ "build_error_map",
250
+ "DEFAULT_ERROR_MAP",
251
+ # pagination
252
+ "CursorPaginator",
253
+ "PageParams",
254
+ "DEFAULT_PAGE_PARAMS",
255
+ "ItemsExtractor",
256
+ "CursorExtractor",
257
+ "default_extract_items",
258
+ "default_extract_cursor",
259
+ "with_page_params",
260
+ # sessions
261
+ "SessionStore",
262
+ "SessionStoreError",
263
+ "KekUnavailableError",
264
+ "resolve_kek",
265
+ # base (адаптер + ресурсы)
266
+ "BaseAdapter",
267
+ "Resource",
268
+ "ContentResource",
269
+ "CommentsResource",
270
+ "MetricsResource",
271
+ "SearchResource",
272
+ "HttpClientLike",
273
+ # registry
274
+ "AdapterRegistry",
275
+ "AdapterClass",
276
+ "ENTRY_POINT_GROUP",
277
+ "default_registry",
278
+ "register_adapter",
279
+ "get_adapter_class",
280
+ "discover_adapters",
281
+ "get_onboarding_adapters",
282
+ "get_health_adapters",
283
+ # orchestration_api (тонкий registry-driven онбординг/health поверх librarykit)
284
+ "onboard_all",
285
+ "health_check_all",
286
+ "OnboardResult",
287
+ "OnboardReport",
288
+ # antibot (выбор транспорта)
289
+ "CurlCffiTransport",
290
+ "CdpTransport",
291
+ "CdpBrowserBackend",
292
+ "pick_chrome_impersonate",
293
+ ]
adapterkit/antibot.py ADDED
@@ -0,0 +1,27 @@
1
+ """Антибот-транспорты adapterkit — ТОНКИЙ реэкспорт из ``librarykit.antibot``.
2
+
3
+ Выбор транспорта под сложность антибота (``CurlCffiTransport`` — JA3-имитация
4
+ Chrome через curl-cffi; ``CdpTransport`` + ``CdpBrowserBackend`` — реальный
5
+ браузер по CDP; ``pick_chrome_impersonate`` — подбор impersonate-профиля) переехал
6
+ в жирный КОРЕНЬ ``librarykit.antibot`` (граф ``librarykit <- adapterkit <-
7
+ clikit``). Здесь — тонкий реэкспорт ради back-compat: ``from adapterkit.antibot
8
+ import CurlCffiTransport`` работает идентично.
9
+
10
+ curl-cffi — опциональный extra (``antibot``), импортируется ЛЕНИВО внутри
11
+ транспорта: импорт самого модуля не требует extra.
12
+ """
13
+ from __future__ import annotations
14
+
15
+ from librarykit.antibot import (
16
+ CdpBrowserBackend,
17
+ CdpTransport,
18
+ CurlCffiTransport,
19
+ pick_chrome_impersonate,
20
+ )
21
+
22
+ __all__ = [
23
+ "CurlCffiTransport",
24
+ "CdpTransport",
25
+ "CdpBrowserBackend",
26
+ "pick_chrome_impersonate",
27
+ ]
adapterkit/auth.py ADDED
@@ -0,0 +1,42 @@
1
+ """Стратегии авторизации adapterkit — ТОНКИЙ реэкспорт из ``librarykit.auth``.
2
+
3
+ Реализации ``contract.Auth`` (``TokenAuth`` / ``CookieSessionAuth`` / ``OAuth2Auth``
4
+ / ``BrowserLoginAuth``) и хелперы персистентности сессии (``dump_settings`` /
5
+ ``load_settings`` / ``encrypt_settings`` / ``decrypt_settings``) переехали в жирный
6
+ КОРЕНЬ ``librarykit.auth`` (граф ``librarykit <- adapterkit <- clikit``). Здесь —
7
+ тонкий реэкспорт ради back-compat: ``from adapterkit.auth import TokenAuth,
8
+ dump_settings`` работает идентично.
9
+
10
+ Внутренние ленивые загрузчики ``_require_authlib`` / ``_load_fernet`` тоже
11
+ реэкспортируются — это исторические monkeypatch-таргеты тестов. ВНИМАНИЕ: их
12
+ ``OAuth2Auth._ensure_client`` / ``encrypt_settings`` резолвят по module-global в
13
+ ``librarykit.auth``, поэтому подмену для эффекта делать на ``librarykit.auth``,
14
+ а не на этом shim'е.
15
+ """
16
+ from __future__ import annotations
17
+
18
+ from librarykit.auth import (
19
+ BrowserLoginAuth,
20
+ CookieSessionAuth,
21
+ OAuth2Auth,
22
+ TokenAuth,
23
+ _load_fernet, # noqa: F401 # исторический monkeypatch-таргет
24
+ _require_authlib, # noqa: F401 # исторический monkeypatch-таргет
25
+ decrypt_settings,
26
+ dump_settings,
27
+ encrypt_settings,
28
+ load_settings,
29
+ )
30
+
31
+ __all__ = [
32
+ # стратегии Auth
33
+ "TokenAuth",
34
+ "CookieSessionAuth",
35
+ "OAuth2Auth",
36
+ "BrowserLoginAuth",
37
+ # персистентность сессии
38
+ "dump_settings",
39
+ "load_settings",
40
+ "encrypt_settings",
41
+ "decrypt_settings",
42
+ ]