eazy-sdk-core 0.2.0a8__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.
- eazy_sdk_core-0.2.0a8/.gitignore +79 -0
- eazy_sdk_core-0.2.0a8/LICENSE +21 -0
- eazy_sdk_core-0.2.0a8/PKG-INFO +244 -0
- eazy_sdk_core-0.2.0a8/README.md +169 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/__init__.py +99 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/api.py +1469 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/__init__.py +51 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/cookies.py +94 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/core.py +402 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/lifecycle.py +34 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/session.py +445 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/auth/session_runtime.py +659 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/__init__.py +45 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/_decisions.py +401 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/_shared.py +158 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/async_client.py +104 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/attempts.py +258 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/base.py +27 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/config.py +184 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/executor.py +2624 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/sync_client.py +104 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/clients/zapros_client.py +378 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/codecs/__init__.py +21 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/codecs/core.py +88 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/codegen/__init__.py +160 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/compile/__init__.py +26 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/compile/http_compiler.py +1276 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/compile/http_operation.py +105 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/compile/input.py +541 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/core/__init__.py +137 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/core/errors.py +100 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/core/http.py +17 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/core/http_plan.py +208 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/core/kernel.py +533 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/crypto/__init__.py +139 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/crypto/_compiler.py +404 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/crypto/_http.py +276 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/crypto/_inputs.py +59 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/crypto/core.py +1012 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/dependencies/__init__.py +444 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/driver.py +83 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/exceptions.py +91 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/ext/__init__.py +59 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/__init__.py +70 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/curl_cffi.py +229 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/httpx.py +171 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/profile.py +145 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/requests.py +119 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/handlers/zapros.py +177 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/identity.py +97 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/logging.py +14 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/middleware.py +183 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/models/__init__.py +29 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/models/adapters.py +1070 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/models/documents.py +49 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/operation.py +214 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/pagination.py +366 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/policies.py +100 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/preparation.py +133 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protection/__init__.py +56 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protection/advanced.py +1148 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protection/guard.py +202 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protocols/__init__.py +40 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protocols/core.py +98 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protocols/jsonrpc.py +216 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/protocols/operation.py +105 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/pydantic_integration/__init__.py +0 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/pydantic_integration/errors.py +14 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/pydantic_integration/parsers.py +18 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/ratelimit_runtime.py +28 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/redaction.py +80 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/__init__.py +112 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/descriptors.py +156 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/logical.py +67 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/markers.py +37 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/params.py +428 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/pipeline.py +61 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/prepared.py +1117 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/short.py +27 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/signatures.py +776 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/request/wire.py +236 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/__init__.py +62 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/_mapping.py +471 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/cases.py +965 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/headers.py +148 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/markers.py +255 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/match.py +206 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/normalized.py +82 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/response/short.py +16 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/root.py +400 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/sentinels.py +30 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/serialization.py +141 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/testing/__init__.py +152 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/__init__.py +186 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_clearance.py +223 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_connection.py +557 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_crypto.py +185 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_decisions.py +260 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_messages.py +126 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_outbound.py +696 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_reconnect.py +213 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/_state.py +635 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/api.py +364 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/auth.py +94 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/codecs.py +51 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/composition.py +39 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/errors.py +106 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/frames.py +71 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/graphql.py +174 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/middleware.py +192 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/operation.py +212 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/policies.py +116 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/protection.py +352 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/protocols.py +236 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/runtime.py +140 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/schemas.py +146 -0
- eazy_sdk_core-0.2.0a8/eazy_sdk/websocket/subscriptions.py +229 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/__init__.py +88 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/http.py +36 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/registration.py +1021 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/__init__.py +123 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/entities.py +304 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/exceptions.py +61 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/memory.py +305 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/observers.py +73 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/repository.py +75 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/__init__.py +23 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/accounts.py +105 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/base.py +44 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/history.py +67 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/links.py +64 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/pool.py +170 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/restrictions.py +97 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/sessions.py +66 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/verifications.py +79 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/services/workspace.py +54 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/session_bridge.py +43 -0
- eazy_sdk_core-0.2.0a8/plugins/accounts/eazy_sdk_accounts/storage/storage.py +129 -0
- eazy_sdk_core-0.2.0a8/plugins/adaptix/eazy_sdk_adaptix/__init__.py +119 -0
- eazy_sdk_core-0.2.0a8/plugins/adaptix/eazy_sdk_adaptix/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/asyncapi/eazy_sdk_asyncapi/__init__.py +23 -0
- eazy_sdk_core-0.2.0a8/plugins/asyncapi/eazy_sdk_asyncapi/cli.py +52 -0
- eazy_sdk_core-0.2.0a8/plugins/asyncapi/eazy_sdk_asyncapi/generator.py +470 -0
- eazy_sdk_core-0.2.0a8/plugins/asyncapi/eazy_sdk_asyncapi/ir.py +664 -0
- eazy_sdk_core-0.2.0a8/plugins/asyncapi/eazy_sdk_asyncapi/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/__init__.py +231 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/api.py +223 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/client.py +258 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/conditions.py +272 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/content.py +143 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/driver.py +105 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/errors.py +29 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/failures.py +103 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/fetch.py +118 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/__init__.py +13 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/_page_fetch.py +78 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/_response_buffer.py +60 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/capture.py +35 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/playwright.py +478 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/handlers/pydoll.py +675 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/integrations/__init__.py +1 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/integrations/accounts.py +273 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/integrations/eazy_sdk.py +73 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/integrations/handler.py +198 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/interceptors.py +73 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/locators.py +443 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/login.py +265 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/navigation.py +135 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/network.py +255 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/operations.py +424 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/outcomes.py +246 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/profile.py +87 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/rich_text.py +93 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/session.py +242 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/spec.py +149 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/state.py +124 -0
- eazy_sdk_core-0.2.0a8/plugins/browser/eazy_sdk_browser/testing.py +414 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/__init__.py +33 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/exceptions.py +20 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/extract_plan.py +136 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/forms.py +30 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/html_inspector.py +180 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/html_scanner.py +86 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/schema.py +346 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/urls.py +39 -0
- eazy_sdk_core-0.2.0a8/plugins/html/eazy_sdk_html/visible_text.py +103 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/__init__.py +41 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/cli.py +70 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/compatibility.py +220 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/generator.py +1600 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/ir.py +1905 -0
- eazy_sdk_core-0.2.0a8/plugins/openapi/eazy_sdk_openapi/py.typed +1 -0
- eazy_sdk_core-0.2.0a8/plugins/presets/eazy_sdk_presets/__init__.py +36 -0
- eazy_sdk_core-0.2.0a8/plugins/presets/eazy_sdk_presets/cloudflare.py +296 -0
- eazy_sdk_core-0.2.0a8/plugins/presets/eazy_sdk_presets/core.py +218 -0
- eazy_sdk_core-0.2.0a8/plugins/presets/eazy_sdk_presets/py.typed +1 -0
- eazy_sdk_core-0.2.0a8/plugins/presets/eazy_sdk_presets/recaptcha.py +331 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/__init__.py +76 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/adapter.py +343 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/cli.py +77 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/codecs.py +114 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/factory.py +359 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/migration.py +406 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/models.py +181 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/py.typed +0 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/registration.py +648 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/schema.py +48 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/session_store.py +185 -0
- eazy_sdk_core-0.2.0a8/plugins/sqlmodel/eazy_sdk_sqlmodel/tables.py +87 -0
- eazy_sdk_core-0.2.0a8/plugins/xml/eazy_sdk_xml/__init__.py +162 -0
- eazy_sdk_core-0.2.0a8/plugins/xml/eazy_sdk_xml/py.typed +1 -0
- eazy_sdk_core-0.2.0a8/pyproject.toml +441 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Operating systems and editors
|
|
2
|
+
.DS_Store
|
|
3
|
+
Thumbs.db
|
|
4
|
+
Desktop.ini
|
|
5
|
+
.idea/
|
|
6
|
+
.vscode/
|
|
7
|
+
*.swp
|
|
8
|
+
*.swo
|
|
9
|
+
*~
|
|
10
|
+
|
|
11
|
+
# Python bytecode and tool caches
|
|
12
|
+
__pycache__/
|
|
13
|
+
*.py[cod]
|
|
14
|
+
*$py.class
|
|
15
|
+
.cache/
|
|
16
|
+
.hypothesis/
|
|
17
|
+
.mypy_cache/
|
|
18
|
+
.pytest_cache/
|
|
19
|
+
.ruff_cache/
|
|
20
|
+
.tox/
|
|
21
|
+
.nox/
|
|
22
|
+
.coverage
|
|
23
|
+
.coverage.*
|
|
24
|
+
coverage.xml
|
|
25
|
+
htmlcov/
|
|
26
|
+
|
|
27
|
+
# Virtual environments and local configuration
|
|
28
|
+
.venv/
|
|
29
|
+
venv/
|
|
30
|
+
env/
|
|
31
|
+
.env
|
|
32
|
+
.env.*
|
|
33
|
+
!.env.example
|
|
34
|
+
|
|
35
|
+
# Python build artifacts
|
|
36
|
+
build/
|
|
37
|
+
dist/
|
|
38
|
+
wheels/
|
|
39
|
+
*.egg-info/
|
|
40
|
+
.eggs/
|
|
41
|
+
*.whl
|
|
42
|
+
|
|
43
|
+
# JavaScript and documentation builds
|
|
44
|
+
node_modules/
|
|
45
|
+
.astro/
|
|
46
|
+
|
|
47
|
+
# Eazy SDK-generated and temporary artifacts
|
|
48
|
+
.test-tmp/
|
|
49
|
+
.tmp/
|
|
50
|
+
.uv-cache/
|
|
51
|
+
.phase*-build/
|
|
52
|
+
.phase*-venv*/
|
|
53
|
+
generated-preview/
|
|
54
|
+
mutants/
|
|
55
|
+
|
|
56
|
+
# Local data and logs
|
|
57
|
+
*.db
|
|
58
|
+
*.db-journal
|
|
59
|
+
*.sqlite
|
|
60
|
+
*.sqlite3
|
|
61
|
+
*.log
|
|
62
|
+
|
|
63
|
+
# Local secrets and credentials
|
|
64
|
+
*.key
|
|
65
|
+
*.pem
|
|
66
|
+
*.p12
|
|
67
|
+
*.pfx
|
|
68
|
+
|
|
69
|
+
# Notebook checkpoints
|
|
70
|
+
.ipynb_checkpoints/
|
|
71
|
+
/experiments/
|
|
72
|
+
|
|
73
|
+
# Local AI-assisted development notes and instructions
|
|
74
|
+
*.md
|
|
75
|
+
!plugins/*/README.md
|
|
76
|
+
# ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠ»Π°Π³ΠΈΠ½Π° β ΡΠ°ΡΡΡ ΠΏΠ»Π°Π³ΠΈΠ½Π°, Π° Π½Π΅ Π»ΠΎΠΊΠ°Π»ΡΠ½Π°Ρ Π·Π°ΠΌΠ΅ΡΠΊΠ°.
|
|
77
|
+
!plugins/*/docs/*.md
|
|
78
|
+
/.claude/
|
|
79
|
+
/docs/
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eazy SDK contributors
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: eazy-sdk-core
|
|
3
|
+
Version: 0.2.0a8
|
|
4
|
+
Summary: Transport-independent runtime for typed HTTP and async WebSocket SDKs.
|
|
5
|
+
Project-URL: Homepage, https://github.com/0cherednoq/eazy-sdk
|
|
6
|
+
Project-URL: Documentation, https://0cherednoq.github.io/eazy-sdk/
|
|
7
|
+
Project-URL: Repository, https://github.com/0cherednoq/eazy-sdk
|
|
8
|
+
Project-URL: Changelog, https://github.com/0cherednoq/eazy-sdk/blob/master/CHANGELOG.md
|
|
9
|
+
Project-URL: Issues, https://github.com/0cherednoq/eazy-sdk/issues
|
|
10
|
+
Author: Eazy SDK contributors
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: asyncapi,http,openapi,sdk,typed,websocket
|
|
14
|
+
Classifier: Development Status :: 3 - Alpha
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Programming Language :: Python :: 3
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
19
|
+
Classifier: Typing :: Typed
|
|
20
|
+
Requires-Python: >=3.13
|
|
21
|
+
Requires-Dist: zapros==0.16.0
|
|
22
|
+
Provides-Extra: accounts
|
|
23
|
+
Provides-Extra: adaptix
|
|
24
|
+
Requires-Dist: adaptix>=3.0.0b12; extra == 'adaptix'
|
|
25
|
+
Provides-Extra: all
|
|
26
|
+
Requires-Dist: aiosqlite>=0.20; extra == 'all'
|
|
27
|
+
Requires-Dist: curl-cffi>=0.7; extra == 'all'
|
|
28
|
+
Requires-Dist: httpx>=0.27; extra == 'all'
|
|
29
|
+
Requires-Dist: msgspec>=0.21.1; extra == 'all'
|
|
30
|
+
Requires-Dist: parsel>=1.11; extra == 'all'
|
|
31
|
+
Requires-Dist: pydantic>=2; extra == 'all'
|
|
32
|
+
Requires-Dist: requests>=2.31; extra == 'all'
|
|
33
|
+
Requires-Dist: sqlalchemy[asyncio]>=2; extra == 'all'
|
|
34
|
+
Requires-Dist: sqlmodel>=0.0.22; extra == 'all'
|
|
35
|
+
Requires-Dist: zapros[websocket]==0.16.0; extra == 'all'
|
|
36
|
+
Provides-Extra: asyncapi
|
|
37
|
+
Provides-Extra: browser
|
|
38
|
+
Provides-Extra: camoufox
|
|
39
|
+
Requires-Dist: camoufox>=0.4; extra == 'camoufox'
|
|
40
|
+
Provides-Extra: curl-cffi
|
|
41
|
+
Requires-Dist: curl-cffi>=0.7; extra == 'curl-cffi'
|
|
42
|
+
Provides-Extra: html
|
|
43
|
+
Requires-Dist: parsel>=1.11; extra == 'html'
|
|
44
|
+
Provides-Extra: httpx
|
|
45
|
+
Requires-Dist: httpx>=0.27; extra == 'httpx'
|
|
46
|
+
Provides-Extra: msgspec
|
|
47
|
+
Requires-Dist: msgspec>=0.21.1; extra == 'msgspec'
|
|
48
|
+
Provides-Extra: openapi
|
|
49
|
+
Requires-Dist: datamodel-code-generator<1,>=0.26; extra == 'openapi'
|
|
50
|
+
Requires-Dist: pydantic[email]>=2; extra == 'openapi'
|
|
51
|
+
Provides-Extra: playwright
|
|
52
|
+
Requires-Dist: playwright>=1.55; extra == 'playwright'
|
|
53
|
+
Provides-Extra: presets
|
|
54
|
+
Provides-Extra: pydantic
|
|
55
|
+
Requires-Dist: pydantic>=2; extra == 'pydantic'
|
|
56
|
+
Provides-Extra: pydoll
|
|
57
|
+
Requires-Dist: pydoll-python<4,>=3; extra == 'pydoll'
|
|
58
|
+
Provides-Extra: requests
|
|
59
|
+
Requires-Dist: requests>=2.31; extra == 'requests'
|
|
60
|
+
Provides-Extra: selectolax
|
|
61
|
+
Requires-Dist: selectolax>=0.3; extra == 'selectolax'
|
|
62
|
+
Provides-Extra: selenium
|
|
63
|
+
Requires-Dist: selenium>=4.25; extra == 'selenium'
|
|
64
|
+
Provides-Extra: sqlmodel
|
|
65
|
+
Requires-Dist: aiosqlite>=0.20; extra == 'sqlmodel'
|
|
66
|
+
Requires-Dist: pydantic>=2; extra == 'sqlmodel'
|
|
67
|
+
Requires-Dist: sqlalchemy[asyncio]>=2; extra == 'sqlmodel'
|
|
68
|
+
Requires-Dist: sqlmodel>=0.0.22; extra == 'sqlmodel'
|
|
69
|
+
Provides-Extra: websocket
|
|
70
|
+
Requires-Dist: zapros[websocket]==0.16.0; extra == 'websocket'
|
|
71
|
+
Provides-Extra: xml
|
|
72
|
+
Provides-Extra: yaml
|
|
73
|
+
Requires-Dist: pyyaml>=6; extra == 'yaml'
|
|
74
|
+
Description-Content-Type: text/markdown
|
|
75
|
+
|
|
76
|
+
# Eazy SDK
|
|
77
|
+
|
|
78
|
+
[](https://github.com/0cherednoq/eazy-sdk/actions/workflows/ci.yml)
|
|
79
|
+
[](https://0cherednoq.github.io/eazy-sdk/)
|
|
80
|
+
[](https://pypi.org/project/eazy-sdk-core/)
|
|
81
|
+
[](https://pypi.org/project/eazy-sdk-core/)
|
|
82
|
+
|
|
83
|
+
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Python, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΈΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ SDK ΠΊ ΡΡΠΆΠΈΠΌ HTTP API, WebSocket ΠΈ ΡΠ°ΠΉΡΠ°ΠΌ.
|
|
84
|
+
ΠΠ°ΠΏΡΠΎΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΎΡΠ²Π΅Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ, Π° Π²Ρ
ΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ,
|
|
85
|
+
ΠΏΠΎΠ²ΡΠΎΡΡ ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΊΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π°.
|
|
86
|
+
|
|
87
|
+
> Π‘ΡΠ°ΡΡΡ: alpha, Π²Π΅ΡΡΠΈΡ `0.2.0a8`. ΠΠ»ΡΡΠ°-Π²Π΅ΡΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π±Π΅Π· ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ
|
|
88
|
+
> ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ², ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΌΠ΅Π½ Π²Π΅Π΄ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°
|
|
89
|
+
> [Β«ΠΠΈΠ³ΡΠ°ΡΠΈΡΒ»](https://0cherednoq.github.io/eazy-sdk/reference/migration/). ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²
|
|
90
|
+
> ΡΠ°ΠΉΡ ΠΈΠ· [docs-site/](https://github.com/0cherednoq/eazy-sdk/tree/master/docs-site) ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ Π½Π°
|
|
91
|
+
> [GitHub Pages](https://0cherednoq.github.io/eazy-sdk/).
|
|
92
|
+
|
|
93
|
+
## Π§ΡΠΎ ΡΡΠΎ Π΄Π°ΡΡ
|
|
94
|
+
|
|
95
|
+
* ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·: ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ, query, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎ, Π° ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
|
|
96
|
+
Π²ΠΈΠ΄Π΅Π½ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ ΠΈ ΡΠ°ΠΉΠΏΡΠ΅ΠΊΠ΅ΡΡ.
|
|
97
|
+
* ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΎΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· HTTPX, Requests, curl_cffi ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ. ΠΠ°ΠΊΠ΅Ρ Π±Π΅Π·
|
|
98
|
+
Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π½Π΅ ΡΡΠ°Π²ΠΈΡ Π½ΠΈ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.
|
|
99
|
+
* ΠΡΠ²Π΅ΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² Pydantic, msgspec, dataclass ΠΈΠ»ΠΈ Adaptix. ΠΡΠΈΠ±ΠΊΠ° API Π²Π½ΡΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ° Ρ
|
|
100
|
+
ΠΊΠΎΠ΄ΠΎΠΌ 200 ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ.
|
|
101
|
+
* ΠΡ
ΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΊΡ ΠΈ ΠΏΠΎ ΠΎΡΠΊΠ°Π·Ρ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ HMAC, ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π»Π°, ΠΊΠ°ΠΏΡΠ° ΠΈ
|
|
102
|
+
ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠ΅.
|
|
103
|
+
* Π’ΠΎΡ ΠΆΠ΅ SDK ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π½Π° Playwright ΠΈΠ»ΠΈ Pydoll ΠΈ ΡΠ΅ΡΡΠΈΡ
|
|
104
|
+
Π±ΡΠ°ΡΠ·Π΅ΡΠ° Ρ HTTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
|
|
105
|
+
* ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ SDK ΠΈΠ· OpenAPI 3.0-3.2 ΠΈ AsyncAPI 3.0.
|
|
106
|
+
|
|
107
|
+
HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ² ΠΎΡΡΠ°ΡΡΡΡ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ: SDK ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΡ
Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ.
|
|
108
|
+
|
|
109
|
+
## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
|
|
110
|
+
|
|
111
|
+
ΠΡΠΆΠ΅Π½ Python 3.13 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅.
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
pip install --pre "eazy-sdk-core[httpx,pydantic]"
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
ΠΠ° PyPI ΠΏΠ°ΠΊΠ΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ `eazy-sdk-core`, Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ `eazy_sdk`. ΠΡΠΎΠ΅ΠΊΡ `eazysdk` Π½Π° PyPI
|
|
118
|
+
ΠΊ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ. Π€Π»Π°Π³ `--pre` Π½ΡΠΆΠ΅Π½, ΠΏΠΎΠΊΠ° Π²ΡΡ
ΠΎΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π»ΡΡΠ°-Π²Π΅ΡΡΠΈΠΈ. Π’Π΅ ΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Ρ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ
|
|
119
|
+
[ΡΠ΅Π»ΠΈΠ·Ρ GitHub](https://github.com/0cherednoq/eazy-sdk/releases).
|
|
120
|
+
|
|
121
|
+
ΠΡΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ. ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°Π²ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ
|
|
122
|
+
Π·Π°Π΄Π°ΡΠ΅: `httpx`, `requests`, `curl-cffi`, `websocket`, `pydantic`, `msgspec`, `adaptix`, `html`,
|
|
123
|
+
`xml`, `openapi`, `asyncapi`, `accounts`, `sqlmodel`, `browser`, `playwright`, `pydoll`,
|
|
124
|
+
`presets`. ΠΠΎΠ»Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅
|
|
125
|
+
[Β«Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°Β»](https://0cherednoq.github.io/eazy-sdk/start/installation/).
|
|
126
|
+
|
|
127
|
+
## ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
|
|
128
|
+
|
|
129
|
+
Π‘ΠΊΡΠΈΠΏΡ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΏΠΈΡΡΠΌΠΎ Ρ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° `mail.example`. Π‘Π°ΠΉΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π² ΡΠΎΠΌ ΠΆΠ΅
|
|
130
|
+
ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ
Π²Π°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ΅ΡΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
|
|
131
|
+
|
|
132
|
+
```python
|
|
133
|
+
# quickstart.py
|
|
134
|
+
from dataclasses import dataclass
|
|
135
|
+
|
|
136
|
+
import httpx
|
|
137
|
+
from pydantic import BaseModel
|
|
138
|
+
|
|
139
|
+
from eazy_sdk import Client, Http, HttpOperation, Path, SyncApi, op
|
|
140
|
+
from eazy_sdk.handlers.httpx import HttpxHandler
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
class Message(BaseModel):
|
|
144
|
+
id: int
|
|
145
|
+
sender: str
|
|
146
|
+
subject: str
|
|
147
|
+
|
|
148
|
+
|
|
149
|
+
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
150
|
+
class GetMessage(HttpOperation[Message]):
|
|
151
|
+
__http__ = Http.get("/messages/{message_id}") # ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΏΡΡΡ
|
|
152
|
+
|
|
153
|
+
message_id: Path[int] # ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡ
ΠΎΠ΄ΠΈΡ Π² ΠΏΡΡΡ
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class MailApi(SyncApi):
|
|
157
|
+
message = op(GetMessage) # ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΎΡΡΠ΅ΡΠ°
|
|
158
|
+
|
|
159
|
+
|
|
160
|
+
def mail_site(request: httpx.Request) -> httpx.Response:
|
|
161
|
+
# ΡΡΠ΅Π±Π½ΡΠΉ ΡΠ°ΠΉΡ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅; Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡ ΡΡ
ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΡΡ
|
|
162
|
+
return httpx.Response(
|
|
163
|
+
200,
|
|
164
|
+
json={"id": 42, "sender": "ada@mail.example", "subject": "ΠΠ»Π°Π½Ρ Π½Π° ΠΏΡΡΠ½ΠΈΡΡ"},
|
|
165
|
+
)
|
|
166
|
+
|
|
167
|
+
|
|
168
|
+
raw = httpx.Client(transport=httpx.MockTransport(mail_site))
|
|
169
|
+
|
|
170
|
+
with Client(
|
|
171
|
+
base_url="https://mail.example",
|
|
172
|
+
handler=HttpxHandler(raw, owns_client=True),
|
|
173
|
+
) as client:
|
|
174
|
+
message = MailApi(client).message(message_id=42)
|
|
175
|
+
response = MailApi(client).message.with_response(message_id=42)
|
|
176
|
+
|
|
177
|
+
print(f"{message.sender}: {message.subject}")
|
|
178
|
+
print(response.status_code)
|
|
179
|
+
|
|
180
|
+
# ada@mail.example: ΠΠ»Π°Π½Ρ Π½Π° ΠΏΡΡΠ½ΠΈΡΡ
|
|
181
|
+
# 200
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ:
|
|
185
|
+
|
|
186
|
+
1. `GetMessage` ΠΎΠΏΠΈΡΠ°Π» Π·Π°ΠΏΡΠΎΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. `__http__` Π·Π°Π΄Π°Π» ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΏΡΡΡ, ΠΏΠΎΠ»Π΅ `message_id`
|
|
187
|
+
ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠ»ΠΎΡΡ Π² ΠΏΡΡΡ, Π° `HttpOperation[Message]` Π½Π°Π·Π²Π°Π» ΡΠΈΠΏ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°.
|
|
188
|
+
2. `op(GetMessage)` ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅. Π‘ΠΈΠ³Π½Π°ΡΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° `message` ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ
|
|
189
|
+
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ `message_id`.
|
|
190
|
+
3. ΠΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΡΡΠ°Π²ΠΈΠ» Π±Π°ΠΉΡΡ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π» JSON Π² `Message`. Π ΠΎΡΡΠ΅Ρ ΠΎ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ: Π²
|
|
191
|
+
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΡΡ
ΡΡΡΠΎΠΊ Ρ `raw` Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ `Client.httpx(base_url=...)`.
|
|
192
|
+
4. `.with_response()` Π²Π΅ΡΠ½ΡΠ» ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΡΠΎΠΌ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.
|
|
193
|
+
|
|
194
|
+
## ΠΠ°Π»ΡΡΠ΅
|
|
195
|
+
|
|
196
|
+
| ΠΠ°Π΄Π°ΡΠ° | Π‘ΡΡΠ°Π½ΠΈΡΠ° |
|
|
197
|
+
|---|---|
|
|
198
|
+
| Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠ»ΡΡ
: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΡΠΎΡΡΠ΅Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠ΅Π½Ρ, `Identity` | [ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/start/concepts/) |
|
|
199
|
+
| ΠΡΠΎΠΉΡΠΈ ΠΎΠ΄ΠΈΠ½ SDK ΠΏΠΎΡΡΡ ΠΎΡ Π²Ρ
ΠΎΠ΄Π° Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΈΡΡΠΌΠ°, ΠΏΠΎ HTTP ΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ | [Π Π°Π·Π±ΠΎΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅](https://0cherednoq.github.io/eazy-sdk/tutorial/) |
|
|
200
|
+
| ΠΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ° | [ΠΠ°ΠΏΡΠΎΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/requests/) |
|
|
201
|
+
| Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΈ ΠΎΡΠΈΠ±ΠΊΡ API | [ΠΡΠ²Π΅ΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/responses/) |
|
|
202
|
+
| ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ, ΡΠΎΠΊΠ΅Π½, cookie, Π²Ρ
ΠΎΠ΄ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ | [ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/guide/auth/) |
|
|
203
|
+
| ΠΠ±ΠΎΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ | [ΠΠ°Π³ΠΈΠ½Π°ΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/guide/pagination/), [ΠΏΠΎΠ΄ΠΏΠΈΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/signing/), [ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅](https://0cherednoq.github.io/eazy-sdk/guide/encryption/) |
|
|
204
|
+
| ΠΡΠ±ΡΠ°ΡΡ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ | [ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ](https://0cherednoq.github.io/eazy-sdk/integrations/) |
|
|
205
|
+
| ΠΡΠΎΠ²Π΅ΡΠΈΡΡ SDK Π±Π΅Π· ΡΠ΅ΡΠΈ | [Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ SDK](https://0cherednoq.github.io/eazy-sdk/guide/testing/) |
|
|
206
|
+
| ΠΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΠΏΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π²Π½ΡΡΡΠΈ | [ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°](https://0cherednoq.github.io/eazy-sdk/architecture/) |
|
|
207
|
+
| ΠΠ°ΠΉΡΠΈ ΡΠΎΡΠ½ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ | [Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ API](https://0cherednoq.github.io/eazy-sdk/reference/api/) |
|
|
208
|
+
|
|
209
|
+
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ Π»Π΅ΠΆΠ°Ρ Π² [examples/](https://github.com/0cherednoq/eazy-sdk/blob/master/examples/README.md).
|
|
210
|
+
|
|
211
|
+
## ΠΠ»Ρ ΠΠ-Π°ΡΡΠΈΡΡΠ΅Π½ΡΠΎΠ²
|
|
212
|
+
|
|
213
|
+
Π‘Π°ΠΉΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΡΠ΄Π°ΡΡ Π΄Π²Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΡΠ°ΠΉΠ»Π°, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΈΠ· ΡΠ΅Ρ
ΠΆΠ΅ ΡΡΡΠ°Π½ΠΈΡ:
|
|
214
|
+
|
|
215
|
+
* [llms.txt](https://0cherednoq.github.io/eazy-sdk/llms.txt) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
|
216
|
+
ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΡΡΠ»ΠΊΠΈ: Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ
|
|
217
|
+
ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ.
|
|
218
|
+
* [llms-full.txt](https://0cherednoq.github.io/eazy-sdk/llms-full.txt) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ
|
|
219
|
+
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠ½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ
|
|
220
|
+
ΡΡΡΠ»ΠΊΠ°ΠΌ Π½Π΅ Ρ
ΠΎΠ΄ΠΈΡ.
|
|
221
|
+
|
|
222
|
+
ΠΠ±Π° ΡΠ°ΠΉΠ»Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΠΉΡΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½Π΅
|
|
223
|
+
Π½ΡΠΆΠ½ΠΎ.
|
|
224
|
+
|
|
225
|
+
## Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
|
|
226
|
+
|
|
227
|
+
ΠΡΠΆΠ΅Π½ [uv](https://docs.astral.sh/uv/). ΠΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠ°ΠΌ Π½ΡΠΆΠ΅Π½ Chromium.
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
uv sync --all-extras # ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
|
|
231
|
+
uv run playwright install chromium # Π±ΡΠ°ΡΠ·Π΅Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½Π°
|
|
232
|
+
uv run pytest -q # ΡΠ΅ΡΡΡ
|
|
233
|
+
uv run mypy # ΡΠΈΠΏΡ
|
|
234
|
+
uv run ruff check # Π»ΠΈΠ½ΡΠ΅Ρ
|
|
235
|
+
uv run python scripts/docs_freshness.py check # ΡΡΡΠ°Π½ΠΈΡΡ Π½Π΅ ΠΎΡΡΡΠ°Π»ΠΈ ΠΎΡ ΠΊΠΎΠ΄Π°
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°Π±ΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ Π² [CONTRIBUTING.md](https://github.com/0cherednoq/eazy-sdk/blob/master/CONTRIBUTING.md), ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ
ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎ
|
|
239
|
+
[SECURITY.md](https://github.com/0cherednoq/eazy-sdk/blob/master/SECURITY.md). ΠΠ»Π°Π½ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π»Π΅ΠΆΠΈΡ Π²
|
|
240
|
+
[docs/implementation/](https://github.com/0cherednoq/eazy-sdk/blob/master/docs/implementation/README.md).
|
|
241
|
+
|
|
242
|
+
## ΠΠΈΡΠ΅Π½Π·ΠΈΡ
|
|
243
|
+
|
|
244
|
+
[MIT](https://github.com/0cherednoq/eazy-sdk/blob/master/LICENSE)
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
# Eazy SDK
|
|
2
|
+
|
|
3
|
+
[](https://github.com/0cherednoq/eazy-sdk/actions/workflows/ci.yml)
|
|
4
|
+
[](https://0cherednoq.github.io/eazy-sdk/)
|
|
5
|
+
[](https://pypi.org/project/eazy-sdk-core/)
|
|
6
|
+
[](https://pypi.org/project/eazy-sdk-core/)
|
|
7
|
+
|
|
8
|
+
ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Python, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΉ ΠΏΠΈΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ SDK ΠΊ ΡΡΠΆΠΈΠΌ HTTP API, WebSocket ΠΈ ΡΠ°ΠΉΡΠ°ΠΌ.
|
|
9
|
+
ΠΠ°ΠΏΡΠΎΡ ΠΎΠ±ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΊΠ»Π°ΡΡΠΎΠΌ, ΠΎΡΠ²Π΅Ρ ΡΠ°Π·Π±ΠΈΡΠ°Π΅ΡΡΡ Π² ΠΌΠΎΠ΄Π΅Π»Ρ, Π° Π²Ρ
ΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ,
|
|
10
|
+
ΠΏΠΎΠ²ΡΠΎΡΡ ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΎΠΏΠΈΡΡΠ²Π°ΡΡΡΡ ΡΡΠ΄ΠΎΠΌ Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π½Π΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΠΊΠΎΠ΄ Π²ΡΠ·ΠΎΠ²Π°.
|
|
11
|
+
|
|
12
|
+
> Π‘ΡΠ°ΡΡΡ: alpha, Π²Π΅ΡΡΠΈΡ `0.2.0a8`. ΠΠ»ΡΡΠ°-Π²Π΅ΡΡΠΈΠΈ ΠΏΠ΅ΡΠ΅ΠΈΠΌΠ΅Π½ΠΎΠ²ΡΠ²Π°ΡΡ ΠΏΡΠ±Π»ΠΈΡΠ½ΡΠ΅ ΠΈΠΌΠ΅Π½Π° Π±Π΅Π· ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΡ
|
|
13
|
+
> ΠΏΡΠ΅Π²Π΄ΠΎΠ½ΠΈΠΌΠΎΠ², ΡΠΏΠΈΡΠΎΠΊ Π·Π°ΠΌΠ΅Π½ Π²Π΅Π΄ΡΡ ΡΡΡΠ°Π½ΠΈΡΠ°
|
|
14
|
+
> [Β«ΠΠΈΠ³ΡΠ°ΡΠΈΡΒ»](https://0cherednoq.github.io/eazy-sdk/reference/migration/). ΠΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΡΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ Π²
|
|
15
|
+
> ΡΠ°ΠΉΡ ΠΈΠ· [docs-site/](https://github.com/0cherednoq/eazy-sdk/tree/master/docs-site) ΠΈ ΠΏΡΠ±Π»ΠΈΠΊΡΠ΅ΡΡΡ Π½Π°
|
|
16
|
+
> [GitHub Pages](https://0cherednoq.github.io/eazy-sdk/).
|
|
17
|
+
|
|
18
|
+
## Π§ΡΠΎ ΡΡΠΎ Π΄Π°ΡΡ
|
|
19
|
+
|
|
20
|
+
* ΠΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΎΠΏΠΈΡΠ°Π½Π° ΠΎΠ΄ΠΈΠ½ ΡΠ°Π·: ΠΏΠΎΠ»Ρ ΠΊΠ»Π°ΡΡΠ° Π·Π°Π΄Π°ΡΡ ΠΏΡΡΡ, query, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎ, Π° ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°
|
|
21
|
+
Π²ΠΈΠ΄Π΅Π½ ΡΠ΅Π΄Π°ΠΊΡΠΎΡΡ ΠΈ ΡΠ°ΠΉΠΏΡΠ΅ΠΊΠ΅ΡΡ.
|
|
22
|
+
* ΠΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΡΠΎΡΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π· HTTPX, Requests, curl_cffi ΠΈΠ»ΠΈ ΡΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ. ΠΠ°ΠΊΠ΅Ρ Π±Π΅Π·
|
|
23
|
+
Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ Π½Π΅ ΡΡΠ°Π²ΠΈΡ Π½ΠΈ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ.
|
|
24
|
+
* ΠΡΠ²Π΅ΡΡ ΡΠ°Π·Π±ΠΈΡΠ°ΡΡΡΡ Π² Pydantic, msgspec, dataclass ΠΈΠ»ΠΈ Adaptix. ΠΡΠΈΠ±ΠΊΠ° API Π²Π½ΡΡΡΠΈ ΠΎΡΠ²Π΅ΡΠ° Ρ
|
|
25
|
+
ΠΊΠΎΠ΄ΠΎΠΌ 200 ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠΈΠΏΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ.
|
|
26
|
+
* ΠΡ
ΠΎΠ΄, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ ΠΏΠΎ ΡΡΠΎΠΊΡ ΠΈ ΠΏΠΎ ΠΎΡΠΊΠ°Π·Ρ, ΠΏΠΎΠ΄ΠΏΠΈΡΡ HMAC, ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅ ΡΠ΅Π»Π°, ΠΊΠ°ΠΏΡΠ° ΠΈ
|
|
27
|
+
ΠΏΠ°Π³ΠΈΠ½Π°ΡΠΈΡ ΠΎΠ±ΡΡΠ²Π»ΡΡΡΡΡ Π΄Π΅ΠΊΠ»Π°ΡΠ°ΡΠΈΠ²Π½ΠΎ ΠΈ ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΠΎΠΏΡΡΠΊΠ΅.
|
|
28
|
+
* Π’ΠΎΡ ΠΆΠ΅ SDK ΠΌΠΎΠΆΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΡΠ°Π½ΠΈΡΡ Π½Π° Playwright ΠΈΠ»ΠΈ Pydoll ΠΈ ΡΠ΅ΡΡΠΈΡ
|
|
29
|
+
Π±ΡΠ°ΡΠ·Π΅ΡΠ° Ρ HTTP-ΠΊΠ»ΠΈΠ΅Π½ΡΠ°.
|
|
30
|
+
* ΠΠ΅Π½Π΅ΡΠ°ΡΠΎΡΡ ΡΠΎΠ±ΠΈΡΠ°ΡΡ SDK ΠΈΠ· OpenAPI 3.0-3.2 ΠΈ AsyncAPI 3.0.
|
|
31
|
+
|
|
32
|
+
HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈ Ρ
ΡΠ°Π½ΠΈΠ»ΠΈΡΠ΅ Π°ΠΊΠΊΠ°ΡΠ½ΡΠΎΠ² ΠΎΡΡΠ°ΡΡΡΡ Π·Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ: SDK ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΈΡ
Π³ΠΎΡΠΎΠ²ΡΠΌΠΈ.
|
|
33
|
+
|
|
34
|
+
## Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
|
|
35
|
+
|
|
36
|
+
ΠΡΠΆΠ΅Π½ Python 3.13 ΠΈΠ»ΠΈ Π½ΠΎΠ²Π΅Π΅.
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
pip install --pre "eazy-sdk-core[httpx,pydantic]"
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
ΠΠ° PyPI ΠΏΠ°ΠΊΠ΅Ρ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ `eazy-sdk-core`, Π° ΠΈΠΌΠΏΠΎΡΡΠΈΡΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ `eazy_sdk`. ΠΡΠΎΠ΅ΠΊΡ `eazysdk` Π½Π° PyPI
|
|
43
|
+
ΠΊ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ. Π€Π»Π°Π³ `--pre` Π½ΡΠΆΠ΅Π½, ΠΏΠΎΠΊΠ° Π²ΡΡ
ΠΎΠ΄ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π°Π»ΡΡΠ°-Π²Π΅ΡΡΠΈΠΈ. Π’Π΅ ΠΆΠ΅ ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½Ρ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ
|
|
44
|
+
[ΡΠ΅Π»ΠΈΠ·Ρ GitHub](https://github.com/0cherednoq/eazy-sdk/releases).
|
|
45
|
+
|
|
46
|
+
ΠΡΡ ΠΏΠΎΡΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠ°ΠΊΠ΅ΡΠΎΠΌ. ΠΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΡΠ°Π²ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠΎΡΠΎΠ½Π½ΠΈΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΠΈ Π²ΡΠ±ΠΈΡΠ°ΡΡΡΡ ΠΏΠΎ
|
|
47
|
+
Π·Π°Π΄Π°ΡΠ΅: `httpx`, `requests`, `curl-cffi`, `websocket`, `pydantic`, `msgspec`, `adaptix`, `html`,
|
|
48
|
+
`xml`, `openapi`, `asyncapi`, `accounts`, `sqlmodel`, `browser`, `playwright`, `pydoll`,
|
|
49
|
+
`presets`. ΠΠΎΠ»Π½Π°Ρ ΡΠ°Π±Π»ΠΈΡΠ° Π΅ΡΡΡ Π½Π° ΡΡΡΠ°Π½ΠΈΡΠ΅
|
|
50
|
+
[Β«Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°Β»](https://0cherednoq.github.io/eazy-sdk/start/installation/).
|
|
51
|
+
|
|
52
|
+
## ΠΡΡΡΡΡΠΉ ΡΡΠ°ΡΡ
|
|
53
|
+
|
|
54
|
+
Π‘ΠΊΡΠΈΠΏΡ Π½ΠΈΠΆΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ ΠΎΠ΄Π½ΠΎ ΠΏΠΈΡΡΠΌΠΎ Ρ ΡΡΠ΅Π±Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΡΠ° `mail.example`. Π‘Π°ΠΉΡ ΠΎΡΠ²Π΅ΡΠ°Π΅Ρ Π² ΡΠΎΠΌ ΠΆΠ΅
|
|
55
|
+
ΠΏΡΠΎΡΠ΅ΡΡΠ΅, ΠΏΠΎΡΡΠΎΠΌΡ Π΄Π»Ρ Π·Π½Π°ΠΊΠΎΠΌΡΡΠ²Π° Ρ
Π²Π°ΡΠΈΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° ΠΈ ΡΠ΅ΡΠΈ Π½Π΅ Π½ΡΠΆΠ½ΠΎ.
|
|
56
|
+
|
|
57
|
+
```python
|
|
58
|
+
# quickstart.py
|
|
59
|
+
from dataclasses import dataclass
|
|
60
|
+
|
|
61
|
+
import httpx
|
|
62
|
+
from pydantic import BaseModel
|
|
63
|
+
|
|
64
|
+
from eazy_sdk import Client, Http, HttpOperation, Path, SyncApi, op
|
|
65
|
+
from eazy_sdk.handlers.httpx import HttpxHandler
|
|
66
|
+
|
|
67
|
+
|
|
68
|
+
class Message(BaseModel):
|
|
69
|
+
id: int
|
|
70
|
+
sender: str
|
|
71
|
+
subject: str
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
@dataclass(frozen=True, slots=True, kw_only=True)
|
|
75
|
+
class GetMessage(HttpOperation[Message]):
|
|
76
|
+
__http__ = Http.get("/messages/{message_id}") # ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΏΡΡΡ
|
|
77
|
+
|
|
78
|
+
message_id: Path[int] # ΠΏΠΎΠ»Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡ
ΠΎΠ΄ΠΈΡ Π² ΠΏΡΡΡ
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class MailApi(SyncApi):
|
|
82
|
+
message = op(GetMessage) # ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΡΠΎΡΡΠ΅ΡΠ°
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def mail_site(request: httpx.Request) -> httpx.Response:
|
|
86
|
+
# ΡΡΠ΅Π±Π½ΡΠΉ ΡΠ°ΠΉΡ Π² ΡΡΠΎΠΌ ΠΆΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ΅; Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π·Π°ΠΏΡΠΎΡ ΡΡ
ΠΎΠ΄ΠΈΡ Π² ΡΠ΅ΡΡ
|
|
87
|
+
return httpx.Response(
|
|
88
|
+
200,
|
|
89
|
+
json={"id": 42, "sender": "ada@mail.example", "subject": "ΠΠ»Π°Π½Ρ Π½Π° ΠΏΡΡΠ½ΠΈΡΡ"},
|
|
90
|
+
)
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
raw = httpx.Client(transport=httpx.MockTransport(mail_site))
|
|
94
|
+
|
|
95
|
+
with Client(
|
|
96
|
+
base_url="https://mail.example",
|
|
97
|
+
handler=HttpxHandler(raw, owns_client=True),
|
|
98
|
+
) as client:
|
|
99
|
+
message = MailApi(client).message(message_id=42)
|
|
100
|
+
response = MailApi(client).message.with_response(message_id=42)
|
|
101
|
+
|
|
102
|
+
print(f"{message.sender}: {message.subject}")
|
|
103
|
+
print(response.status_code)
|
|
104
|
+
|
|
105
|
+
# ada@mail.example: ΠΠ»Π°Π½Ρ Π½Π° ΠΏΡΡΠ½ΠΈΡΡ
|
|
106
|
+
# 200
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Π§ΡΠΎ Π·Π΄Π΅ΡΡ ΠΏΡΠΎΠΈΠ·ΠΎΡΠ»ΠΎ:
|
|
110
|
+
|
|
111
|
+
1. `GetMessage` ΠΎΠΏΠΈΡΠ°Π» Π·Π°ΠΏΡΠΎΡ ΠΊΠ°ΠΊ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. `__http__` Π·Π°Π΄Π°Π» ΠΌΠ΅ΡΠΎΠ΄ ΠΈ ΠΏΡΡΡ, ΠΏΠΎΠ»Π΅ `message_id`
|
|
112
|
+
ΠΏΠΎΠ΄ΡΡΠ°Π²ΠΈΠ»ΠΎΡΡ Π² ΠΏΡΡΡ, Π° `HttpOperation[Message]` Π½Π°Π·Π²Π°Π» ΡΠΈΠΏ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²Π΅ΡΠ°.
|
|
113
|
+
2. `op(GetMessage)` ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π» ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π½Π° ΡΠΎΡΡΠ΅ΡΠ΅. Π‘ΠΈΠ³Π½Π°ΡΡΡΠ° ΠΌΠ΅ΡΠΎΠ΄Π° `message` ΡΠΎΠ²ΠΏΠ°Π΄Π°Π΅Ρ Ρ
|
|
114
|
+
ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠΌ ΠΊΠ»Π°ΡΡΠ°, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅Π΄Π°ΠΊΡΠΎΡ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ `message_id`.
|
|
115
|
+
3. ΠΠ»ΠΈΠ΅Π½Ρ Π΄ΠΎΡΡΠ°Π²ΠΈΠ» Π±Π°ΠΉΡΡ ΠΈ ΡΠ°Π·ΠΎΠ±ΡΠ°Π» JSON Π² `Message`. Π ΠΎΡΡΠ΅Ρ ΠΎ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ΅ Π½Π΅ Π·Π½Π°Π΅Ρ: Π²
|
|
116
|
+
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ Π²ΠΌΠ΅ΡΡΠΎ Π΄Π²ΡΡ
ΡΡΡΠΎΠΊ Ρ `raw` Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ `Client.httpx(base_url=...)`.
|
|
117
|
+
4. `.with_response()` Π²Π΅ΡΠ½ΡΠ» ΡΠΎΡ ΠΆΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΌΠ΅ΡΡΠ΅ ΡΠΎ ΡΡΠ°ΡΡΡΠΎΠΌ ΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌΠΈ.
|
|
118
|
+
|
|
119
|
+
## ΠΠ°Π»ΡΡΠ΅
|
|
120
|
+
|
|
121
|
+
| ΠΠ°Π΄Π°ΡΠ° | Π‘ΡΡΠ°Π½ΠΈΡΠ° |
|
|
122
|
+
|---|---|
|
|
123
|
+
| Π Π°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Π² ΡΠΎΠ»ΡΡ
: ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ, ΡΠΎΡΡΠ΅Ρ, ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠ΅Π½Ρ, `Identity` | [ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΠΎΠ½ΡΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/start/concepts/) |
|
|
124
|
+
| ΠΡΠΎΠΉΡΠΈ ΠΎΠ΄ΠΈΠ½ SDK ΠΏΠΎΡΡΡ ΠΎΡ Π²Ρ
ΠΎΠ΄Π° Π΄ΠΎ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΈΡΡΠΌΠ°, ΠΏΠΎ HTTP ΠΈ ΡΠ΅ΡΠ΅Π· Π±ΡΠ°ΡΠ·Π΅Ρ | [Π Π°Π·Π±ΠΎΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅](https://0cherednoq.github.io/eazy-sdk/tutorial/) |
|
|
125
|
+
| ΠΠ±ΡΡΠ²ΠΈΡΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ, Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΈ ΡΠ΅Π»ΠΎ Π·Π°ΠΏΡΠΎΡΠ° | [ΠΠ°ΠΏΡΠΎΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/requests/) |
|
|
126
|
+
| Π Π°Π·ΠΎΠ±ΡΠ°ΡΡ ΡΡΠΏΠ΅ΡΠ½ΡΠΉ ΠΎΡΠ²Π΅Ρ ΠΈ ΠΎΡΠΈΠ±ΠΊΡ API | [ΠΡΠ²Π΅ΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/responses/) |
|
|
127
|
+
| ΠΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠ»ΡΡ, ΡΠΎΠΊΠ΅Π½, cookie, Π²Ρ
ΠΎΠ΄ ΠΈ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΠΈ | [ΠΠ²ΡΠΎΡΠΈΠ·Π°ΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/guide/auth/) |
|
|
128
|
+
| ΠΠ±ΠΎΠΉΡΠΈ ΡΠΏΠΈΡΠΎΠΊ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ, ΠΏΠΎΠ΄ΠΏΠΈΡΠ°ΡΡ ΠΈ Π·Π°ΡΠΈΡΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΠΎΡ | [ΠΠ°Π³ΠΈΠ½Π°ΡΠΈΡ](https://0cherednoq.github.io/eazy-sdk/guide/pagination/), [ΠΏΠΎΠ΄ΠΏΠΈΡΡ](https://0cherednoq.github.io/eazy-sdk/guide/signing/), [ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈΠ΅](https://0cherednoq.github.io/eazy-sdk/guide/encryption/) |
|
|
129
|
+
| ΠΡΠ±ΡΠ°ΡΡ HTTP-ΠΊΠ»ΠΈΠ΅Π½Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΠΌΠΎΠ΄Π΅Π»Π΅ΠΉ, Π±ΡΠ°ΡΠ·Π΅Ρ ΠΈΠ»ΠΈ Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡ | [ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΠΈ](https://0cherednoq.github.io/eazy-sdk/integrations/) |
|
|
130
|
+
| ΠΡΠΎΠ²Π΅ΡΠΈΡΡ SDK Π±Π΅Π· ΡΠ΅ΡΠΈ | [Π’Π΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ SDK](https://0cherednoq.github.io/eazy-sdk/guide/testing/) |
|
|
131
|
+
| ΠΠΎΠ½ΡΡΡ, ΠΊΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ ΠΏΡΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π²Π½ΡΡΡΠΈ | [ΠΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°](https://0cherednoq.github.io/eazy-sdk/architecture/) |
|
|
132
|
+
| ΠΠ°ΠΉΡΠΈ ΡΠΎΡΠ½ΡΡ ΡΠΈΠ³Π½Π°ΡΡΡΡ | [Π‘ΠΏΡΠ°Π²ΠΎΡΠ½ΠΈΠΊ API](https://0cherednoq.github.io/eazy-sdk/reference/api/) |
|
|
133
|
+
|
|
134
|
+
ΠΠ°ΠΏΡΡΠΊΠ°Π΅ΠΌΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΊΠΎ Π²ΡΠ΅ΠΌ ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌ Π»Π΅ΠΆΠ°Ρ Π² [examples/](https://github.com/0cherednoq/eazy-sdk/blob/master/examples/README.md).
|
|
135
|
+
|
|
136
|
+
## ΠΠ»Ρ ΠΠ-Π°ΡΡΠΈΡΡΠ΅Π½ΡΠΎΠ²
|
|
137
|
+
|
|
138
|
+
Π‘Π°ΠΉΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΡΠ΄Π°ΡΡ Π΄Π²Π° ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ
ΡΠ°ΠΉΠ»Π°, ΡΠΎΠ±ΡΠ°Π½Π½ΡΡ
ΠΈΠ· ΡΠ΅Ρ
ΠΆΠ΅ ΡΡΡΠ°Π½ΠΈΡ:
|
|
139
|
+
|
|
140
|
+
* [llms.txt](https://0cherednoq.github.io/eazy-sdk/llms.txt) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΡΠ°ΡΠΊΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
|
|
141
|
+
ΠΈ ΡΡΡΠ»ΠΊΠΈ Π½Π° ΡΡΡΠ°Π½ΠΈΡΡ. ΠΠ½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ ΠΏΠΎΠΌΠΎΡΠ½ΠΈΠΊΡ, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΌΠ΅Π΅Ρ ΠΎΡΠΊΡΡΠ²Π°ΡΡ ΡΡΡΠ»ΠΊΠΈ: Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ
|
|
142
|
+
ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π½ΡΠΆΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΈΡΡ.
|
|
143
|
+
* [llms-full.txt](https://0cherednoq.github.io/eazy-sdk/llms-full.txt) ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠ΅ΠΊΡΡ
|
|
144
|
+
Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΎΠ΄Π½ΠΈΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ. ΠΠ½ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈ Π΄Π»Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎ
|
|
145
|
+
ΡΡΡΠ»ΠΊΠ°ΠΌ Π½Π΅ Ρ
ΠΎΠ΄ΠΈΡ.
|
|
146
|
+
|
|
147
|
+
ΠΠ±Π° ΡΠ°ΠΉΠ»Π° ΠΎΠ±Π½ΠΎΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ ΡΠ°ΠΉΡΠ°, ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΊΠΎΠΏΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ Π½Π΅
|
|
148
|
+
Π½ΡΠΆΠ½ΠΎ.
|
|
149
|
+
|
|
150
|
+
## Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
|
|
151
|
+
|
|
152
|
+
ΠΡΠΆΠ΅Π½ [uv](https://docs.astral.sh/uv/). ΠΡΠ°ΡΠ·Π΅ΡΠ½ΡΠΌ ΡΠ΅ΡΡΠ°ΠΌ Π½ΡΠΆΠ΅Π½ Chromium.
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
uv sync --all-extras # ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ ΠΈ Π²ΡΠ΅ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ
|
|
156
|
+
uv run playwright install chromium # Π±ΡΠ°ΡΠ·Π΅Ρ Π΄Π»Ρ ΡΠ΅ΡΡΠΎΠ² ΠΏΠ»Π°Π³ΠΈΠ½Π°
|
|
157
|
+
uv run pytest -q # ΡΠ΅ΡΡΡ
|
|
158
|
+
uv run mypy # ΡΠΈΠΏΡ
|
|
159
|
+
uv run ruff check # Π»ΠΈΠ½ΡΠ΅Ρ
|
|
160
|
+
uv run python scripts/docs_freshness.py check # ΡΡΡΠ°Π½ΠΈΡΡ Π½Π΅ ΠΎΡΡΡΠ°Π»ΠΈ ΠΎΡ ΠΊΠΎΠ΄Π°
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
ΠΠΎΡΡΠ΄ΠΎΠΊ ΡΠ°Π±ΠΎΡΡ ΠΎΠΏΠΈΡΠ°Π½ Π² [CONTRIBUTING.md](https://github.com/0cherednoq/eazy-sdk/blob/master/CONTRIBUTING.md), ΠΎΠ± ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ
ΡΠΎΠΎΠ±ΡΠ°ΡΡ ΠΏΠΎ
|
|
164
|
+
[SECURITY.md](https://github.com/0cherednoq/eazy-sdk/blob/master/SECURITY.md). ΠΠ»Π°Π½ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ Π»Π΅ΠΆΠΈΡ Π²
|
|
165
|
+
[docs/implementation/](https://github.com/0cherednoq/eazy-sdk/blob/master/docs/implementation/README.md).
|
|
166
|
+
|
|
167
|
+
## ΠΠΈΡΠ΅Π½Π·ΠΈΡ
|
|
168
|
+
|
|
169
|
+
[MIT](https://github.com/0cherednoq/eazy-sdk/blob/master/LICENSE)
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"""Eazy SDK: declare an API, compose it into an SDK, hand it a client.
|
|
2
|
+
|
|
3
|
+
What lives here is what an SDK author needs in the first hour: the declaration surface, the
|
|
4
|
+
composition surface, the request markers and the response contract. Everything else stays
|
|
5
|
+
importable from the module that owns it β ``eazy_sdk.models``, ``eazy_sdk.codecs``,
|
|
6
|
+
``eazy_sdk.crypto``, ``eazy_sdk.protection.advanced``, ``eazy_sdk.core.errors`` β because a
|
|
7
|
+
second name in the root is duplication, not convenience.
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
from __future__ import annotations
|
|
11
|
+
|
|
12
|
+
from typing import TYPE_CHECKING, Any
|
|
13
|
+
|
|
14
|
+
from eazy_sdk.api import AsyncApi, SyncApi, api, api_group, op
|
|
15
|
+
from eazy_sdk.clients import ClientConfig, Hooks, Resilience, RetryPolicy, Security
|
|
16
|
+
from eazy_sdk.dependencies import Inject
|
|
17
|
+
from eazy_sdk.handlers import HandlerProfile, TransportError
|
|
18
|
+
from eazy_sdk.identity import Identity
|
|
19
|
+
from eazy_sdk.operation import Http, HttpOperation
|
|
20
|
+
from eazy_sdk.preparation import PreparedCall, PrepareOptions
|
|
21
|
+
from eazy_sdk.request import (
|
|
22
|
+
Body,
|
|
23
|
+
BodyProjection,
|
|
24
|
+
Cookie,
|
|
25
|
+
FormBody,
|
|
26
|
+
Header,
|
|
27
|
+
JsonBody,
|
|
28
|
+
JsonField,
|
|
29
|
+
Path,
|
|
30
|
+
Query,
|
|
31
|
+
)
|
|
32
|
+
from eazy_sdk.response import (
|
|
33
|
+
Html,
|
|
34
|
+
Json,
|
|
35
|
+
ResponseEnvelope,
|
|
36
|
+
UnexpectedResponseError,
|
|
37
|
+
)
|
|
38
|
+
from eazy_sdk.root import AsyncRoot, Binding, SyncRoot, bind
|
|
39
|
+
from eazy_sdk.sentinels import UNSET, Omittable
|
|
40
|
+
from eazy_sdk.serialization import Serialization
|
|
41
|
+
|
|
42
|
+
__version__ = "0.2.0a8"
|
|
43
|
+
|
|
44
|
+
if TYPE_CHECKING:
|
|
45
|
+
from eazy_sdk.clients import AsyncClient, Client
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
def __getattr__(name: str) -> Any:
|
|
49
|
+
if name not in {"AsyncClient", "Client"}:
|
|
50
|
+
raise AttributeError(name)
|
|
51
|
+
from eazy_sdk.clients import AsyncClient, Client
|
|
52
|
+
|
|
53
|
+
value = AsyncClient if name == "AsyncClient" else Client
|
|
54
|
+
globals()[name] = value
|
|
55
|
+
return value
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
__all__ = [
|
|
59
|
+
"UNSET",
|
|
60
|
+
"AsyncApi",
|
|
61
|
+
"AsyncClient",
|
|
62
|
+
"AsyncRoot",
|
|
63
|
+
"Binding",
|
|
64
|
+
"Body",
|
|
65
|
+
"BodyProjection",
|
|
66
|
+
"Client",
|
|
67
|
+
"ClientConfig",
|
|
68
|
+
"Cookie",
|
|
69
|
+
"FormBody",
|
|
70
|
+
"HandlerProfile",
|
|
71
|
+
"Header",
|
|
72
|
+
"Hooks",
|
|
73
|
+
"Html",
|
|
74
|
+
"Http",
|
|
75
|
+
"HttpOperation",
|
|
76
|
+
"Identity",
|
|
77
|
+
"Inject",
|
|
78
|
+
"Json",
|
|
79
|
+
"JsonBody",
|
|
80
|
+
"JsonField",
|
|
81
|
+
"Omittable",
|
|
82
|
+
"Path",
|
|
83
|
+
"PrepareOptions",
|
|
84
|
+
"PreparedCall",
|
|
85
|
+
"Query",
|
|
86
|
+
"Resilience",
|
|
87
|
+
"ResponseEnvelope",
|
|
88
|
+
"RetryPolicy",
|
|
89
|
+
"Security",
|
|
90
|
+
"Serialization",
|
|
91
|
+
"SyncApi",
|
|
92
|
+
"SyncRoot",
|
|
93
|
+
"TransportError",
|
|
94
|
+
"UnexpectedResponseError",
|
|
95
|
+
"api",
|
|
96
|
+
"api_group",
|
|
97
|
+
"bind",
|
|
98
|
+
"op",
|
|
99
|
+
]
|