pyloops 1.6.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.
- pyloops-1.6.0/PKG-INFO +131 -0
- pyloops-1.6.0/README.md +107 -0
- pyloops-1.6.0/pyproject.toml +42 -0
- pyloops-1.6.0/src/pyloops/__init__.py +8 -0
- pyloops-1.6.0/src/pyloops/api/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/api_key/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/api_key/get_api_key.py +133 -0
- pyloops-1.6.0/src/pyloops/api/contact_properties/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/contact_properties/get_contacts_properties.py +180 -0
- pyloops-1.6.0/src/pyloops/api/contact_properties/post_contacts_properties.py +178 -0
- pyloops-1.6.0/src/pyloops/api/contacts/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/contacts/get_contacts_find.py +197 -0
- pyloops-1.6.0/src/pyloops/api/contacts/post_contacts_create.py +183 -0
- pyloops-1.6.0/src/pyloops/api/contacts/post_contacts_delete.py +183 -0
- pyloops-1.6.0/src/pyloops/api/contacts/put_contacts_update.py +186 -0
- pyloops-1.6.0/src/pyloops/api/dedicated_sending_i_ps/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/dedicated_sending_i_ps/get_dedicated_sending_ips.py +144 -0
- pyloops-1.6.0/src/pyloops/api/events/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/events/post_events_send.py +199 -0
- pyloops-1.6.0/src/pyloops/api/mailing_lists/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/mailing_lists/get_lists.py +144 -0
- pyloops-1.6.0/src/pyloops/api/transactional_emails/__init__.py +1 -0
- pyloops-1.6.0/src/pyloops/api/transactional_emails/get_transactional.py +115 -0
- pyloops-1.6.0/src/pyloops/api/transactional_emails/post_transactional.py +323 -0
- pyloops-1.6.0/src/pyloops/client.py +268 -0
- pyloops-1.6.0/src/pyloops/errors.py +16 -0
- pyloops-1.6.0/src/pyloops/models/__init__.py +83 -0
- pyloops-1.6.0/src/pyloops/models/contact.py +240 -0
- pyloops-1.6.0/src/pyloops/models/contact_delete_request.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_delete_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_failure_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_mailing_lists.py +46 -0
- pyloops-1.6.0/src/pyloops/models/contact_opt_in_status_type_1.py +10 -0
- pyloops-1.6.0/src/pyloops/models/contact_opt_in_status_type_2_type_1.py +10 -0
- pyloops-1.6.0/src/pyloops/models/contact_opt_in_status_type_3_type_1.py +10 -0
- pyloops-1.6.0/src/pyloops/models/contact_property.py +77 -0
- pyloops-1.6.0/src/pyloops/models/contact_property_create_request.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_property_failure_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_property_success_response.py +61 -0
- pyloops-1.6.0/src/pyloops/models/contact_request.py +143 -0
- pyloops-1.6.0/src/pyloops/models/contact_request_mailing_lists.py +46 -0
- pyloops-1.6.0/src/pyloops/models/contact_success_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/contact_update_request.py +141 -0
- pyloops-1.6.0/src/pyloops/models/contact_update_request_mailing_lists.py +46 -0
- pyloops-1.6.0/src/pyloops/models/event_failure_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/event_request.py +135 -0
- pyloops-1.6.0/src/pyloops/models/event_request_event_properties.py +46 -0
- pyloops-1.6.0/src/pyloops/models/event_request_mailing_lists.py +46 -0
- pyloops-1.6.0/src/pyloops/models/event_success_response.py +61 -0
- pyloops-1.6.0/src/pyloops/models/get_api_key_response_200.py +69 -0
- pyloops-1.6.0/src/pyloops/models/get_api_key_response_401.py +79 -0
- pyloops-1.6.0/src/pyloops/models/get_dedicated_sending_ips_response_500.py +69 -0
- pyloops-1.6.0/src/pyloops/models/idempotency_key_failure_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/mailing_list.py +85 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_2_response.py +77 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_3_response.py +83 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_3_response_error.py +70 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_4_response.py +83 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_4_response_error.py +70 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_5_response.py +91 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_5_response_error.py +70 -0
- pyloops-1.6.0/src/pyloops/models/transactional_failure_response.py +69 -0
- pyloops-1.6.0/src/pyloops/models/transactional_request.py +128 -0
- pyloops-1.6.0/src/pyloops/models/transactional_request_attachments_item.py +77 -0
- pyloops-1.6.0/src/pyloops/models/transactional_request_data_variables.py +46 -0
- pyloops-1.6.0/src/pyloops/models/transactional_success_response.py +61 -0
- pyloops-1.6.0/src/pyloops/py.typed +1 -0
- pyloops-1.6.0/src/pyloops/types.py +54 -0
pyloops-1.6.0/PKG-INFO
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
Metadata-Version: 2.3
|
|
2
|
+
Name: pyloops
|
|
3
|
+
Version: 1.6.0
|
|
4
|
+
Summary: Unofficial Python SDK for Loops.so email platform
|
|
5
|
+
Keywords: loops,email,api,sdk,loops.so
|
|
6
|
+
Author: zegerius
|
|
7
|
+
Author-email: zegerius <aram@askaletta.com>
|
|
8
|
+
License: MIT
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
16
|
+
Requires-Dist: httpx>=0.23.0,<0.29.0
|
|
17
|
+
Requires-Dist: attrs>=22.2.0
|
|
18
|
+
Requires-Dist: python-dateutil>=2.8.0,<3
|
|
19
|
+
Requires-Python: >=3.12
|
|
20
|
+
Project-URL: Documentation, https://loops.so/docs
|
|
21
|
+
Project-URL: Homepage, https://github.com/doctorgpt-corp/pyloops
|
|
22
|
+
Project-URL: Repository, https://github.com/doctorgpt-corp/pyloops
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
|
|
25
|
+
# PyLoops
|
|
26
|
+
|
|
27
|
+
Unofficial Python SDK for [Loops.so](https://loops.so).
|
|
28
|
+
|
|
29
|
+
[](https://badge.fury.io/py/pyloops)
|
|
30
|
+
[](https://www.python.org/downloads/)
|
|
31
|
+
|
|
32
|
+
## Installation
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
pip install pyloops
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Or with uv:
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
uv add pyloops
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
```python
|
|
47
|
+
from pyloops import Client
|
|
48
|
+
|
|
49
|
+
# Initialize the client with your API key
|
|
50
|
+
client = Client(base_url="https://app.loops.so/api/v1", token="your_api_key_here")
|
|
51
|
+
|
|
52
|
+
# Create a contact
|
|
53
|
+
from pyloops.api.contacts import create_contact
|
|
54
|
+
from pyloops.models import CreateContactBody
|
|
55
|
+
|
|
56
|
+
response = create_contact.sync(
|
|
57
|
+
client=client,
|
|
58
|
+
body=CreateContactBody(
|
|
59
|
+
email="user@example.com",
|
|
60
|
+
first_name="John",
|
|
61
|
+
last_name="Doe"
|
|
62
|
+
)
|
|
63
|
+
)
|
|
64
|
+
|
|
65
|
+
print(response)
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
## Authentication
|
|
69
|
+
|
|
70
|
+
All API calls require a Loops API key. Get your API key from your [Loops account settings](https://app.loops.so/settings).
|
|
71
|
+
|
|
72
|
+
```python
|
|
73
|
+
from pyloops import Client
|
|
74
|
+
|
|
75
|
+
client = Client(
|
|
76
|
+
base_url="https://app.loops.so/api/v1",
|
|
77
|
+
token="your_api_key_here"
|
|
78
|
+
)
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
## Features
|
|
82
|
+
|
|
83
|
+
This SDK provides access to all Loops.so API endpoints:
|
|
84
|
+
|
|
85
|
+
- **Contacts**: Create, update, find, and delete contacts
|
|
86
|
+
- **Contact Properties**: Manage custom contact properties
|
|
87
|
+
- **Mailing Lists**: View available mailing lists
|
|
88
|
+
- **Events**: Trigger event-based emails
|
|
89
|
+
- **Transactional Emails**: Send and list transactional emails
|
|
90
|
+
- **Sending IPs**: Retrieve dedicated sending IP addresses
|
|
91
|
+
|
|
92
|
+
## Documentation
|
|
93
|
+
|
|
94
|
+
For detailed API documentation, visit the [Loops.so API docs](https://loops.so/docs).
|
|
95
|
+
|
|
96
|
+
## Automated Updates
|
|
97
|
+
|
|
98
|
+
This SDK is automatically updated to match the latest Loops.so API specification. The package version corresponds to the Loops API version (current: **1.6.0**).
|
|
99
|
+
|
|
100
|
+
A GitHub Action checks for API updates daily and creates a pull request when changes are detected. After review and merge, a new version is automatically published to PyPI.
|
|
101
|
+
|
|
102
|
+
## Development
|
|
103
|
+
|
|
104
|
+
### Setup
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
# Clone the repository
|
|
108
|
+
git clone https://github.com/doctorgpt-corp/pyloops.git
|
|
109
|
+
cd pyloops
|
|
110
|
+
|
|
111
|
+
# Install dependencies with uv
|
|
112
|
+
uv sync
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Regenerate SDK
|
|
116
|
+
|
|
117
|
+
To manually regenerate the SDK from the latest OpenAPI spec:
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
uv run openapi-python-client generate --url https://app.loops.so/openapi.yaml --meta uv
|
|
121
|
+
cp -r loops-open-api-spec-client/loops_open_api_spec_client/* src/pyloops/
|
|
122
|
+
rm -rf loops-open-api-spec-client
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
## License
|
|
126
|
+
|
|
127
|
+
MIT
|
|
128
|
+
|
|
129
|
+
## Disclaimer
|
|
130
|
+
|
|
131
|
+
This is an unofficial SDK and is not affiliated with or endorsed by Loops.so.
|
pyloops-1.6.0/README.md
ADDED
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# PyLoops
|
|
2
|
+
|
|
3
|
+
Unofficial Python SDK for [Loops.so](https://loops.so).
|
|
4
|
+
|
|
5
|
+
[](https://badge.fury.io/py/pyloops)
|
|
6
|
+
[](https://www.python.org/downloads/)
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
pip install pyloops
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
Or with uv:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
uv add pyloops
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## Quick Start
|
|
21
|
+
|
|
22
|
+
```python
|
|
23
|
+
from pyloops import Client
|
|
24
|
+
|
|
25
|
+
# Initialize the client with your API key
|
|
26
|
+
client = Client(base_url="https://app.loops.so/api/v1", token="your_api_key_here")
|
|
27
|
+
|
|
28
|
+
# Create a contact
|
|
29
|
+
from pyloops.api.contacts import create_contact
|
|
30
|
+
from pyloops.models import CreateContactBody
|
|
31
|
+
|
|
32
|
+
response = create_contact.sync(
|
|
33
|
+
client=client,
|
|
34
|
+
body=CreateContactBody(
|
|
35
|
+
email="user@example.com",
|
|
36
|
+
first_name="John",
|
|
37
|
+
last_name="Doe"
|
|
38
|
+
)
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
print(response)
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
## Authentication
|
|
45
|
+
|
|
46
|
+
All API calls require a Loops API key. Get your API key from your [Loops account settings](https://app.loops.so/settings).
|
|
47
|
+
|
|
48
|
+
```python
|
|
49
|
+
from pyloops import Client
|
|
50
|
+
|
|
51
|
+
client = Client(
|
|
52
|
+
base_url="https://app.loops.so/api/v1",
|
|
53
|
+
token="your_api_key_here"
|
|
54
|
+
)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Features
|
|
58
|
+
|
|
59
|
+
This SDK provides access to all Loops.so API endpoints:
|
|
60
|
+
|
|
61
|
+
- **Contacts**: Create, update, find, and delete contacts
|
|
62
|
+
- **Contact Properties**: Manage custom contact properties
|
|
63
|
+
- **Mailing Lists**: View available mailing lists
|
|
64
|
+
- **Events**: Trigger event-based emails
|
|
65
|
+
- **Transactional Emails**: Send and list transactional emails
|
|
66
|
+
- **Sending IPs**: Retrieve dedicated sending IP addresses
|
|
67
|
+
|
|
68
|
+
## Documentation
|
|
69
|
+
|
|
70
|
+
For detailed API documentation, visit the [Loops.so API docs](https://loops.so/docs).
|
|
71
|
+
|
|
72
|
+
## Automated Updates
|
|
73
|
+
|
|
74
|
+
This SDK is automatically updated to match the latest Loops.so API specification. The package version corresponds to the Loops API version (current: **1.6.0**).
|
|
75
|
+
|
|
76
|
+
A GitHub Action checks for API updates daily and creates a pull request when changes are detected. After review and merge, a new version is automatically published to PyPI.
|
|
77
|
+
|
|
78
|
+
## Development
|
|
79
|
+
|
|
80
|
+
### Setup
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# Clone the repository
|
|
84
|
+
git clone https://github.com/doctorgpt-corp/pyloops.git
|
|
85
|
+
cd pyloops
|
|
86
|
+
|
|
87
|
+
# Install dependencies with uv
|
|
88
|
+
uv sync
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Regenerate SDK
|
|
92
|
+
|
|
93
|
+
To manually regenerate the SDK from the latest OpenAPI spec:
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
uv run openapi-python-client generate --url https://app.loops.so/openapi.yaml --meta uv
|
|
97
|
+
cp -r loops-open-api-spec-client/loops_open_api_spec_client/* src/pyloops/
|
|
98
|
+
rm -rf loops-open-api-spec-client
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
## License
|
|
102
|
+
|
|
103
|
+
MIT
|
|
104
|
+
|
|
105
|
+
## Disclaimer
|
|
106
|
+
|
|
107
|
+
This is an unofficial SDK and is not affiliated with or endorsed by Loops.so.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["uv_build>=0.9.9,<0.10.0"]
|
|
3
|
+
build-backend = "uv_build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "pyloops"
|
|
7
|
+
version = "1.6.0"
|
|
8
|
+
description = "Unofficial Python SDK for Loops.so email platform"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
requires-python = ">=3.12"
|
|
11
|
+
license = {text = "MIT"}
|
|
12
|
+
authors = [
|
|
13
|
+
{name = "zegerius", email = "aram@askaletta.com"}
|
|
14
|
+
]
|
|
15
|
+
keywords = ["loops", "email", "api", "sdk", "loops.so"]
|
|
16
|
+
classifiers = [
|
|
17
|
+
"Development Status :: 4 - Beta",
|
|
18
|
+
"Intended Audience :: Developers",
|
|
19
|
+
"License :: OSI Approved :: MIT License",
|
|
20
|
+
"Programming Language :: Python :: 3",
|
|
21
|
+
"Programming Language :: Python :: 3.12",
|
|
22
|
+
"Programming Language :: Python :: 3.13",
|
|
23
|
+
"Programming Language :: Python :: 3.14",
|
|
24
|
+
]
|
|
25
|
+
dependencies = [
|
|
26
|
+
"httpx>=0.23.0,<0.29.0",
|
|
27
|
+
"attrs>=22.2.0",
|
|
28
|
+
"python-dateutil>=2.8.0,<3",
|
|
29
|
+
]
|
|
30
|
+
|
|
31
|
+
[project.urls]
|
|
32
|
+
Homepage = "https://github.com/doctorgpt-corp/pyloops"
|
|
33
|
+
Repository = "https://github.com/doctorgpt-corp/pyloops"
|
|
34
|
+
Documentation = "https://loops.so/docs"
|
|
35
|
+
|
|
36
|
+
[tool.uv.build-backend]
|
|
37
|
+
module-root = "src/"
|
|
38
|
+
|
|
39
|
+
[dependency-groups]
|
|
40
|
+
dev = [
|
|
41
|
+
"openapi-python-client>=0.27.1",
|
|
42
|
+
]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains methods for accessing the API"""
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
from http import HTTPStatus
|
|
2
|
+
from typing import Any
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from ... import errors
|
|
7
|
+
from ...client import AuthenticatedClient, Client
|
|
8
|
+
from ...models.get_api_key_response_200 import GetApiKeyResponse200
|
|
9
|
+
from ...models.get_api_key_response_401 import GetApiKeyResponse401
|
|
10
|
+
from ...types import Response
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _get_kwargs() -> dict[str, Any]:
|
|
14
|
+
_kwargs: dict[str, Any] = {
|
|
15
|
+
"method": "get",
|
|
16
|
+
"url": "/api-key",
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
return _kwargs
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _parse_response(
|
|
23
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
24
|
+
) -> GetApiKeyResponse200 | GetApiKeyResponse401 | None:
|
|
25
|
+
if response.status_code == 200:
|
|
26
|
+
response_200 = GetApiKeyResponse200.from_dict(response.json())
|
|
27
|
+
|
|
28
|
+
return response_200
|
|
29
|
+
|
|
30
|
+
if response.status_code == 401:
|
|
31
|
+
response_401 = GetApiKeyResponse401.from_dict(response.json())
|
|
32
|
+
|
|
33
|
+
return response_401
|
|
34
|
+
|
|
35
|
+
if client.raise_on_unexpected_status:
|
|
36
|
+
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
37
|
+
else:
|
|
38
|
+
return None
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
def _build_response(
|
|
42
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
43
|
+
) -> Response[GetApiKeyResponse200 | GetApiKeyResponse401]:
|
|
44
|
+
return Response(
|
|
45
|
+
status_code=HTTPStatus(response.status_code),
|
|
46
|
+
content=response.content,
|
|
47
|
+
headers=response.headers,
|
|
48
|
+
parsed=_parse_response(client=client, response=response),
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
def sync_detailed(
|
|
53
|
+
*,
|
|
54
|
+
client: AuthenticatedClient,
|
|
55
|
+
) -> Response[GetApiKeyResponse200 | GetApiKeyResponse401]:
|
|
56
|
+
"""Test your API key
|
|
57
|
+
|
|
58
|
+
Raises:
|
|
59
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
60
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
61
|
+
|
|
62
|
+
Returns:
|
|
63
|
+
Response[GetApiKeyResponse200 | GetApiKeyResponse401]
|
|
64
|
+
"""
|
|
65
|
+
|
|
66
|
+
kwargs = _get_kwargs()
|
|
67
|
+
|
|
68
|
+
response = client.get_httpx_client().request(
|
|
69
|
+
**kwargs,
|
|
70
|
+
)
|
|
71
|
+
|
|
72
|
+
return _build_response(client=client, response=response)
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def sync(
|
|
76
|
+
*,
|
|
77
|
+
client: AuthenticatedClient,
|
|
78
|
+
) -> GetApiKeyResponse200 | GetApiKeyResponse401 | None:
|
|
79
|
+
"""Test your API key
|
|
80
|
+
|
|
81
|
+
Raises:
|
|
82
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
83
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
84
|
+
|
|
85
|
+
Returns:
|
|
86
|
+
GetApiKeyResponse200 | GetApiKeyResponse401
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
return sync_detailed(
|
|
90
|
+
client=client,
|
|
91
|
+
).parsed
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
async def asyncio_detailed(
|
|
95
|
+
*,
|
|
96
|
+
client: AuthenticatedClient,
|
|
97
|
+
) -> Response[GetApiKeyResponse200 | GetApiKeyResponse401]:
|
|
98
|
+
"""Test your API key
|
|
99
|
+
|
|
100
|
+
Raises:
|
|
101
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
102
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
103
|
+
|
|
104
|
+
Returns:
|
|
105
|
+
Response[GetApiKeyResponse200 | GetApiKeyResponse401]
|
|
106
|
+
"""
|
|
107
|
+
|
|
108
|
+
kwargs = _get_kwargs()
|
|
109
|
+
|
|
110
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
111
|
+
|
|
112
|
+
return _build_response(client=client, response=response)
|
|
113
|
+
|
|
114
|
+
|
|
115
|
+
async def asyncio(
|
|
116
|
+
*,
|
|
117
|
+
client: AuthenticatedClient,
|
|
118
|
+
) -> GetApiKeyResponse200 | GetApiKeyResponse401 | None:
|
|
119
|
+
"""Test your API key
|
|
120
|
+
|
|
121
|
+
Raises:
|
|
122
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
123
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
124
|
+
|
|
125
|
+
Returns:
|
|
126
|
+
GetApiKeyResponse200 | GetApiKeyResponse401
|
|
127
|
+
"""
|
|
128
|
+
|
|
129
|
+
return (
|
|
130
|
+
await asyncio_detailed(
|
|
131
|
+
client=client,
|
|
132
|
+
)
|
|
133
|
+
).parsed
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"""Contains endpoint functions for accessing the API"""
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
from http import HTTPStatus
|
|
2
|
+
from typing import Any, cast
|
|
3
|
+
|
|
4
|
+
import httpx
|
|
5
|
+
|
|
6
|
+
from ... import errors
|
|
7
|
+
from ...client import AuthenticatedClient, Client
|
|
8
|
+
from ...models.contact_property import ContactProperty
|
|
9
|
+
from ...types import UNSET, Response, Unset
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _get_kwargs(
|
|
13
|
+
*,
|
|
14
|
+
list_: str | Unset = UNSET,
|
|
15
|
+
) -> dict[str, Any]:
|
|
16
|
+
params: dict[str, Any] = {}
|
|
17
|
+
|
|
18
|
+
params["list"] = list_
|
|
19
|
+
|
|
20
|
+
params = {k: v for k, v in params.items() if v is not UNSET and v is not None}
|
|
21
|
+
|
|
22
|
+
_kwargs: dict[str, Any] = {
|
|
23
|
+
"method": "get",
|
|
24
|
+
"url": "/contacts/properties",
|
|
25
|
+
"params": params,
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
return _kwargs
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _parse_response(
|
|
32
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
33
|
+
) -> Any | list[ContactProperty] | None:
|
|
34
|
+
if response.status_code == 200:
|
|
35
|
+
response_200 = []
|
|
36
|
+
_response_200 = response.json()
|
|
37
|
+
for response_200_item_data in _response_200:
|
|
38
|
+
response_200_item = ContactProperty.from_dict(response_200_item_data)
|
|
39
|
+
|
|
40
|
+
response_200.append(response_200_item)
|
|
41
|
+
|
|
42
|
+
return response_200
|
|
43
|
+
|
|
44
|
+
if response.status_code == 405:
|
|
45
|
+
response_405 = cast(Any, None)
|
|
46
|
+
return response_405
|
|
47
|
+
|
|
48
|
+
if client.raise_on_unexpected_status:
|
|
49
|
+
raise errors.UnexpectedStatus(response.status_code, response.content)
|
|
50
|
+
else:
|
|
51
|
+
return None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _build_response(
|
|
55
|
+
*, client: AuthenticatedClient | Client, response: httpx.Response
|
|
56
|
+
) -> Response[Any | list[ContactProperty]]:
|
|
57
|
+
return Response(
|
|
58
|
+
status_code=HTTPStatus(response.status_code),
|
|
59
|
+
content=response.content,
|
|
60
|
+
headers=response.headers,
|
|
61
|
+
parsed=_parse_response(client=client, response=response),
|
|
62
|
+
)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def sync_detailed(
|
|
66
|
+
*,
|
|
67
|
+
client: AuthenticatedClient,
|
|
68
|
+
list_: str | Unset = UNSET,
|
|
69
|
+
) -> Response[Any | list[ContactProperty]]:
|
|
70
|
+
r"""Get a list of contact properties
|
|
71
|
+
|
|
72
|
+
Retrieve a list of your account's contact properties.<br>Use the `list` parameter to query \"all\"
|
|
73
|
+
or \"custom\" properties.
|
|
74
|
+
|
|
75
|
+
Args:
|
|
76
|
+
list_ (str | Unset):
|
|
77
|
+
|
|
78
|
+
Raises:
|
|
79
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
80
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
81
|
+
|
|
82
|
+
Returns:
|
|
83
|
+
Response[Any | list[ContactProperty]]
|
|
84
|
+
"""
|
|
85
|
+
|
|
86
|
+
kwargs = _get_kwargs(
|
|
87
|
+
list_=list_,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
response = client.get_httpx_client().request(
|
|
91
|
+
**kwargs,
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
return _build_response(client=client, response=response)
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
def sync(
|
|
98
|
+
*,
|
|
99
|
+
client: AuthenticatedClient,
|
|
100
|
+
list_: str | Unset = UNSET,
|
|
101
|
+
) -> Any | list[ContactProperty] | None:
|
|
102
|
+
r"""Get a list of contact properties
|
|
103
|
+
|
|
104
|
+
Retrieve a list of your account's contact properties.<br>Use the `list` parameter to query \"all\"
|
|
105
|
+
or \"custom\" properties.
|
|
106
|
+
|
|
107
|
+
Args:
|
|
108
|
+
list_ (str | Unset):
|
|
109
|
+
|
|
110
|
+
Raises:
|
|
111
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
112
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
113
|
+
|
|
114
|
+
Returns:
|
|
115
|
+
Any | list[ContactProperty]
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
return sync_detailed(
|
|
119
|
+
client=client,
|
|
120
|
+
list_=list_,
|
|
121
|
+
).parsed
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
async def asyncio_detailed(
|
|
125
|
+
*,
|
|
126
|
+
client: AuthenticatedClient,
|
|
127
|
+
list_: str | Unset = UNSET,
|
|
128
|
+
) -> Response[Any | list[ContactProperty]]:
|
|
129
|
+
r"""Get a list of contact properties
|
|
130
|
+
|
|
131
|
+
Retrieve a list of your account's contact properties.<br>Use the `list` parameter to query \"all\"
|
|
132
|
+
or \"custom\" properties.
|
|
133
|
+
|
|
134
|
+
Args:
|
|
135
|
+
list_ (str | Unset):
|
|
136
|
+
|
|
137
|
+
Raises:
|
|
138
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
139
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
140
|
+
|
|
141
|
+
Returns:
|
|
142
|
+
Response[Any | list[ContactProperty]]
|
|
143
|
+
"""
|
|
144
|
+
|
|
145
|
+
kwargs = _get_kwargs(
|
|
146
|
+
list_=list_,
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
response = await client.get_async_httpx_client().request(**kwargs)
|
|
150
|
+
|
|
151
|
+
return _build_response(client=client, response=response)
|
|
152
|
+
|
|
153
|
+
|
|
154
|
+
async def asyncio(
|
|
155
|
+
*,
|
|
156
|
+
client: AuthenticatedClient,
|
|
157
|
+
list_: str | Unset = UNSET,
|
|
158
|
+
) -> Any | list[ContactProperty] | None:
|
|
159
|
+
r"""Get a list of contact properties
|
|
160
|
+
|
|
161
|
+
Retrieve a list of your account's contact properties.<br>Use the `list` parameter to query \"all\"
|
|
162
|
+
or \"custom\" properties.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
list_ (str | Unset):
|
|
166
|
+
|
|
167
|
+
Raises:
|
|
168
|
+
errors.UnexpectedStatus: If the server returns an undocumented status code and Client.raise_on_unexpected_status is True.
|
|
169
|
+
httpx.TimeoutException: If the request takes longer than Client.timeout.
|
|
170
|
+
|
|
171
|
+
Returns:
|
|
172
|
+
Any | list[ContactProperty]
|
|
173
|
+
"""
|
|
174
|
+
|
|
175
|
+
return (
|
|
176
|
+
await asyncio_detailed(
|
|
177
|
+
client=client,
|
|
178
|
+
list_=list_,
|
|
179
|
+
)
|
|
180
|
+
).parsed
|