pulse-python-sdk 0.0.58__tar.gz → 0.0.59__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 (70) hide show
  1. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/PKG-INFO +7 -3
  2. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/README.md +6 -2
  3. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/pyproject.toml +1 -1
  4. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/client.py +30 -6
  5. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/client_wrapper.py +9 -4
  6. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/jobs/client.py +12 -4
  7. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/webhooks/client.py +6 -2
  8. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/__init__.py +0 -0
  9. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/__init__.py +0 -0
  10. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/api_error.py +0 -0
  11. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/datetime_utils.py +0 -0
  12. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/file.py +0 -0
  13. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/force_multipart.py +0 -0
  14. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_client.py +0 -0
  15. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_response.py +0 -0
  16. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_sse/__init__.py +0 -0
  17. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_sse/_api.py +0 -0
  18. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_sse/_decoders.py +0 -0
  19. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_sse/_exceptions.py +0 -0
  20. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/http_sse/_models.py +0 -0
  21. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/jsonable_encoder.py +0 -0
  22. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/pydantic_utilities.py +0 -0
  23. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/query_encoder.py +0 -0
  24. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/remove_none_from_dict.py +0 -0
  25. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/request_options.py +0 -0
  26. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/serialization.py +0 -0
  27. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/core/unchecked_base_model.py +0 -0
  28. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/environment.py +0 -0
  29. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/__init__.py +0 -0
  30. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/bad_request_error.py +0 -0
  31. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/forbidden_error.py +0 -0
  32. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/internal_server_error.py +0 -0
  33. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/not_found_error.py +0 -0
  34. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/too_many_requests_error.py +0 -0
  35. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/errors/unauthorized_error.py +0 -0
  36. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/jobs/__init__.py +0 -0
  37. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/jobs/raw_client.py +0 -0
  38. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/py.typed +0 -0
  39. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/raw_client.py +0 -0
  40. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/__init__.py +0 -0
  41. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_request_experimental_schema.py +0 -0
  42. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_request_schema.py +0 -0
  43. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_request_storage.py +0 -0
  44. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_request_structured_output.py +0 -0
  45. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_response.py +0 -0
  46. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_async_submission_response_status.py +0 -0
  47. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_input.py +0 -0
  48. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_input_experimental_schema.py +0 -0
  49. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_input_schema.py +0 -0
  50. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_input_storage.py +0 -0
  51. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_input_structured_output.py +0 -0
  52. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_options.py +0 -0
  53. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_options_experimental_schema.py +0 -0
  54. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_options_schema.py +0 -0
  55. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_options_storage.py +0 -0
  56. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_options_structured_output.py +0 -0
  57. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_request_experimental_schema.py +0 -0
  58. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_request_schema.py +0 -0
  59. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_request_storage.py +0 -0
  60. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_request_structured_output.py +0 -0
  61. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_response.py +0 -0
  62. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/extract_source.py +0 -0
  63. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/job_cancellation_response.py +0 -0
  64. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/job_status.py +0 -0
  65. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/types/job_status_response.py +0 -0
  66. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/version.py +0 -0
  67. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/webhooks/__init__.py +0 -0
  68. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/webhooks/raw_client.py +0 -0
  69. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/webhooks/types/__init__.py +0 -0
  70. {pulse_python_sdk-0.0.58 → pulse_python_sdk-0.0.59}/src/pulse/webhooks/types/create_webhook_link_response.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pulse-python-sdk
3
- Version: 0.0.58
3
+ Version: 0.0.59
4
4
  Summary:
5
5
  Requires-Python: >=3.8,<4.0
6
6
  Classifier: Intended Audience :: Developers
@@ -63,7 +63,9 @@ Instantiate and use the client with the following:
63
63
  ```python
64
64
  from pulse import Pulse
65
65
 
66
- client = Pulse()
66
+ client = Pulse(
67
+ api_key="YOUR_API_KEY",
68
+ )
67
69
  client.extract()
68
70
  ```
69
71
 
@@ -76,7 +78,9 @@ import asyncio
76
78
 
77
79
  from pulse import AsyncPulse
78
80
 
79
- client = AsyncPulse()
81
+ client = AsyncPulse(
82
+ api_key="YOUR_API_KEY",
83
+ )
80
84
 
81
85
 
82
86
  async def main() -> None:
@@ -36,7 +36,9 @@ Instantiate and use the client with the following:
36
36
  ```python
37
37
  from pulse import Pulse
38
38
 
39
- client = Pulse()
39
+ client = Pulse(
40
+ api_key="YOUR_API_KEY",
41
+ )
40
42
  client.extract()
41
43
  ```
42
44
 
@@ -49,7 +51,9 @@ import asyncio
49
51
 
50
52
  from pulse import AsyncPulse
51
53
 
52
- client = AsyncPulse()
54
+ client = AsyncPulse(
55
+ api_key="YOUR_API_KEY",
56
+ )
53
57
 
54
58
 
55
59
  async def main() -> None:
@@ -4,7 +4,7 @@ dynamic = ["version"]
4
4
 
5
5
  [tool.poetry]
6
6
  name = "pulse-python-sdk"
7
- version = "0.0.58"
7
+ version = "0.0.59"
8
8
  description = ""
9
9
  readme = "README.md"
10
10
  authors = []
@@ -2,10 +2,12 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import os
5
6
  import typing
6
7
 
7
8
  import httpx
8
9
  from . import core
10
+ from .core.api_error import ApiError
9
11
  from .core.client_wrapper import AsyncClientWrapper, SyncClientWrapper
10
12
  from .core.request_options import RequestOptions
11
13
  from .environment import PulseEnvironment
@@ -46,6 +48,7 @@ class Pulse:
46
48
 
47
49
 
48
50
 
51
+ api_key : typing.Optional[str]
49
52
  headers : typing.Optional[typing.Dict[str, str]]
50
53
  Additional headers to send with every request.
51
54
 
@@ -62,7 +65,9 @@ class Pulse:
62
65
  --------
63
66
  from pulse import Pulse
64
67
 
65
- client = Pulse()
68
+ client = Pulse(
69
+ api_key="YOUR_API_KEY",
70
+ )
66
71
  """
67
72
 
68
73
  def __init__(
@@ -70,6 +75,7 @@ class Pulse:
70
75
  *,
71
76
  base_url: typing.Optional[str] = None,
72
77
  environment: PulseEnvironment = PulseEnvironment.DEFAULT,
78
+ api_key: typing.Optional[str] = os.getenv("PULSE_API_KEY"),
73
79
  headers: typing.Optional[typing.Dict[str, str]] = None,
74
80
  timeout: typing.Optional[float] = None,
75
81
  follow_redirects: typing.Optional[bool] = True,
@@ -78,8 +84,11 @@ class Pulse:
78
84
  _defaulted_timeout = (
79
85
  timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
80
86
  )
87
+ if api_key is None:
88
+ raise ApiError(body="The client must be instantiated be either passing in api_key or setting PULSE_API_KEY")
81
89
  self._client_wrapper = SyncClientWrapper(
82
90
  base_url=_get_base_url(base_url=base_url, environment=environment),
91
+ api_key=api_key,
83
92
  headers=headers,
84
93
  httpx_client=httpx_client
85
94
  if httpx_client is not None
@@ -187,7 +196,9 @@ class Pulse:
187
196
  --------
188
197
  from pulse import Pulse
189
198
 
190
- client = Pulse()
199
+ client = Pulse(
200
+ api_key="YOUR_API_KEY",
201
+ )
191
202
  client.extract()
192
203
  """
193
204
  _response = self._raw_client.extract(
@@ -294,7 +305,9 @@ class Pulse:
294
305
  --------
295
306
  from pulse import Pulse
296
307
 
297
- client = Pulse()
308
+ client = Pulse(
309
+ api_key="YOUR_API_KEY",
310
+ )
298
311
  client.extract_async()
299
312
  """
300
313
  _response = self._raw_client.extract_async(
@@ -352,6 +365,7 @@ class AsyncPulse:
352
365
 
353
366
 
354
367
 
368
+ api_key : typing.Optional[str]
355
369
  headers : typing.Optional[typing.Dict[str, str]]
356
370
  Additional headers to send with every request.
357
371
 
@@ -368,7 +382,9 @@ class AsyncPulse:
368
382
  --------
369
383
  from pulse import AsyncPulse
370
384
 
371
- client = AsyncPulse()
385
+ client = AsyncPulse(
386
+ api_key="YOUR_API_KEY",
387
+ )
372
388
  """
373
389
 
374
390
  def __init__(
@@ -376,6 +392,7 @@ class AsyncPulse:
376
392
  *,
377
393
  base_url: typing.Optional[str] = None,
378
394
  environment: PulseEnvironment = PulseEnvironment.DEFAULT,
395
+ api_key: typing.Optional[str] = os.getenv("PULSE_API_KEY"),
379
396
  headers: typing.Optional[typing.Dict[str, str]] = None,
380
397
  timeout: typing.Optional[float] = None,
381
398
  follow_redirects: typing.Optional[bool] = True,
@@ -384,8 +401,11 @@ class AsyncPulse:
384
401
  _defaulted_timeout = (
385
402
  timeout if timeout is not None else 60 if httpx_client is None else httpx_client.timeout.read
386
403
  )
404
+ if api_key is None:
405
+ raise ApiError(body="The client must be instantiated be either passing in api_key or setting PULSE_API_KEY")
387
406
  self._client_wrapper = AsyncClientWrapper(
388
407
  base_url=_get_base_url(base_url=base_url, environment=environment),
408
+ api_key=api_key,
389
409
  headers=headers,
390
410
  httpx_client=httpx_client
391
411
  if httpx_client is not None
@@ -495,7 +515,9 @@ class AsyncPulse:
495
515
 
496
516
  from pulse import AsyncPulse
497
517
 
498
- client = AsyncPulse()
518
+ client = AsyncPulse(
519
+ api_key="YOUR_API_KEY",
520
+ )
499
521
 
500
522
 
501
523
  async def main() -> None:
@@ -610,7 +632,9 @@ class AsyncPulse:
610
632
 
611
633
  from pulse import AsyncPulse
612
634
 
613
- client = AsyncPulse()
635
+ client = AsyncPulse(
636
+ api_key="YOUR_API_KEY",
637
+ )
614
638
 
615
639
 
616
640
  async def main() -> None:
@@ -10,22 +10,25 @@ class BaseClientWrapper:
10
10
  def __init__(
11
11
  self,
12
12
  *,
13
+ api_key: str,
13
14
  headers: typing.Optional[typing.Dict[str, str]] = None,
14
15
  base_url: str,
15
16
  timeout: typing.Optional[float] = None,
16
17
  ):
18
+ self.api_key = api_key
17
19
  self._headers = headers
18
20
  self._base_url = base_url
19
21
  self._timeout = timeout
20
22
 
21
23
  def get_headers(self) -> typing.Dict[str, str]:
22
24
  headers: typing.Dict[str, str] = {
23
- "User-Agent": "pulse-python-sdk/0.0.58",
25
+ "User-Agent": "pulse-python-sdk/0.0.59",
24
26
  "X-Fern-Language": "Python",
25
27
  "X-Fern-SDK-Name": "pulse-python-sdk",
26
- "X-Fern-SDK-Version": "0.0.58",
28
+ "X-Fern-SDK-Version": "0.0.59",
27
29
  **(self.get_custom_headers() or {}),
28
30
  }
31
+ headers["x-api-key"] = self.api_key
29
32
  return headers
30
33
 
31
34
  def get_custom_headers(self) -> typing.Optional[typing.Dict[str, str]]:
@@ -42,12 +45,13 @@ class SyncClientWrapper(BaseClientWrapper):
42
45
  def __init__(
43
46
  self,
44
47
  *,
48
+ api_key: str,
45
49
  headers: typing.Optional[typing.Dict[str, str]] = None,
46
50
  base_url: str,
47
51
  timeout: typing.Optional[float] = None,
48
52
  httpx_client: httpx.Client,
49
53
  ):
50
- super().__init__(headers=headers, base_url=base_url, timeout=timeout)
54
+ super().__init__(api_key=api_key, headers=headers, base_url=base_url, timeout=timeout)
51
55
  self.httpx_client = HttpClient(
52
56
  httpx_client=httpx_client,
53
57
  base_headers=self.get_headers,
@@ -60,13 +64,14 @@ class AsyncClientWrapper(BaseClientWrapper):
60
64
  def __init__(
61
65
  self,
62
66
  *,
67
+ api_key: str,
63
68
  headers: typing.Optional[typing.Dict[str, str]] = None,
64
69
  base_url: str,
65
70
  timeout: typing.Optional[float] = None,
66
71
  async_token: typing.Optional[typing.Callable[[], typing.Awaitable[str]]] = None,
67
72
  httpx_client: httpx.AsyncClient,
68
73
  ):
69
- super().__init__(headers=headers, base_url=base_url, timeout=timeout)
74
+ super().__init__(api_key=api_key, headers=headers, base_url=base_url, timeout=timeout)
70
75
  self._async_token = async_token
71
76
  self.httpx_client = AsyncHttpClient(
72
77
  httpx_client=httpx_client,
@@ -46,7 +46,9 @@ class JobsClient:
46
46
  --------
47
47
  from pulse import Pulse
48
48
 
49
- client = Pulse()
49
+ client = Pulse(
50
+ api_key="YOUR_API_KEY",
51
+ )
50
52
  client.jobs.get_job(
51
53
  job_id="jobId",
52
54
  )
@@ -78,7 +80,9 @@ class JobsClient:
78
80
  --------
79
81
  from pulse import Pulse
80
82
 
81
- client = Pulse()
83
+ client = Pulse(
84
+ api_key="YOUR_API_KEY",
85
+ )
82
86
  client.jobs.cancel_job(
83
87
  job_id="jobId",
84
88
  )
@@ -128,7 +132,9 @@ class AsyncJobsClient:
128
132
 
129
133
  from pulse import AsyncPulse
130
134
 
131
- client = AsyncPulse()
135
+ client = AsyncPulse(
136
+ api_key="YOUR_API_KEY",
137
+ )
132
138
 
133
139
 
134
140
  async def main() -> None:
@@ -168,7 +174,9 @@ class AsyncJobsClient:
168
174
 
169
175
  from pulse import AsyncPulse
170
176
 
171
- client = AsyncPulse()
177
+ client = AsyncPulse(
178
+ api_key="YOUR_API_KEY",
179
+ )
172
180
 
173
181
 
174
182
  async def main() -> None:
@@ -43,7 +43,9 @@ class WebhooksClient:
43
43
  --------
44
44
  from pulse import Pulse
45
45
 
46
- client = Pulse()
46
+ client = Pulse(
47
+ api_key="YOUR_API_KEY",
48
+ )
47
49
  client.webhooks.create_webhook_link()
48
50
  """
49
51
  _response = self._raw_client.create_webhook_link(request_options=request_options)
@@ -87,7 +89,9 @@ class AsyncWebhooksClient:
87
89
 
88
90
  from pulse import AsyncPulse
89
91
 
90
- client = AsyncPulse()
92
+ client = AsyncPulse(
93
+ api_key="YOUR_API_KEY",
94
+ )
91
95
 
92
96
 
93
97
  async def main() -> None: