Skip to content

Commit b111bf0

Browse files
feat: Introduce SeamHttpClient (#51)
* Bump generator to 1.10.1 * ci: Generate code * Fix tests * Bump generator to 1.10.2 * ci: Generate code * Remove unnecessary import * Bump generator to 1.10.3 to fix circular imports with a separate file options.py * ci: Generate code * Add SeamMultiWorkspace * Add constants.py * Add get_endpoint helper fn * Add RequestMixin to define common make_request method * ci: Format code * Disable generate workflow * Add abstract classes, add helper for getting PAT, fix create ws test * Enforce keyword only args in WorkspacesProxy methods * Define WorkspacesProxy outside SeamMultiWorkspace * Fix proxy class usage * Add SeamHttpClient class * Adjust the routest to test new requests.Session * Remove .yalc files * Remove yalc.lock * Update seam http client to inherit from requests.Session with custom response handling * Remove endpoint rfom route clients as it's baked in the http client * Mark certain files as not generated * Fix client_options default value to fix linting * Remove AbstractRequestMixin * Swap requests for niquests * Uncomment innit imports * Remove duplicat SeamApiException definition * Add docstring for client and client_options * Revert generate-routes script * Revert package.json * Add AbstractSeamHttpClient * Update client_options docstring * Rename request.py to client.py * Remove client and client_options params * Update generator to 1.11.2 to update call site in route client, enable generation workflow * ci: Generate code * Bump generator to 1.11.3 * ci: Generate code --------- Co-authored-by: Seam Bot <devops@getseam.com>
1 parent 9b051f9 commit b111bf0

39 files changed

Lines changed: 525 additions & 325 deletions

package-lock.json

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"format": "prettier --write --ignore-path .gitignore ."
99
},
1010
"devDependencies": {
11-
"@seamapi/nextlove-sdk-generator": "1.11.0",
11+
"@seamapi/nextlove-sdk-generator": "^1.11.3",
1212
"@seamapi/types": "1.172.0",
1313
"del": "^7.1.0",
1414
"prettier": "^3.2.5"

poetry.lock

Lines changed: 296 additions & 38 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ repository = "https://github.com/seamapi/python-next"
1111
[tool.poetry.dependencies]
1212
python = "^3.9.0"
1313
dataclasses-json = "^0.6.4"
14-
requests = "^2.26.0"
14+
niquests = "^3.6.4"
1515

1616
[tool.poetry.group.dev.dependencies]
1717
black = "^24.3.0"

seam/client.py

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
from typing import Dict
2+
from urllib.parse import urljoin
3+
import niquests as requests
4+
from importlib.metadata import version
5+
6+
from seam.constants import LTS_VERSION
7+
from seam.types import AbstractSeamHttpClient, SeamHttpApiError
8+
9+
SDK_HEADERS = {
10+
"seam-sdk-name": "seamapi/python",
11+
"seam-sdk-version": version("seam"),
12+
"seam-lts-version": LTS_VERSION,
13+
}
14+
15+
16+
class SeamHttpClient(requests.Session, AbstractSeamHttpClient):
17+
def __init__(self, base_url: str, auth_headers: Dict[str, str], **kwargs):
18+
super().__init__(**kwargs)
19+
20+
self.base_url = base_url
21+
headers = {**auth_headers, **kwargs.get("headers", {}), **SDK_HEADERS}
22+
23+
self.headers.update(headers)
24+
25+
def request(self, method, url, *args, **kwargs):
26+
url = urljoin(self.base_url, url)
27+
response = super().request(method, url, *args, **kwargs)
28+
29+
return self._handle_response(response)
30+
31+
def _handle_response(self, response: requests.Response):
32+
if response.status_code != 200:
33+
raise SeamHttpApiError(response)
34+
35+
if "application/json" in response.headers["content-type"]:
36+
return response.json()
37+
38+
return response.text

seam/request.py

Lines changed: 0 additions & 47 deletions
This file was deleted.

seam/routes/access_codes.py

Lines changed: 9 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

seam/routes/access_codes_simulate.py

Lines changed: 2 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

seam/routes/access_codes_unmanaged.py

Lines changed: 6 additions & 14 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

seam/routes/acs_access_groups.py

Lines changed: 5 additions & 13 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)