getresponse 0.1.2__tar.gz → 0.1.3__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.
- {getresponse-0.1.2 → getresponse-0.1.3}/PKG-INFO +1 -1
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/_core.py +6 -1
- {getresponse-0.1.2 → getresponse-0.1.3}/pyproject.toml +1 -1
- getresponse-0.1.3/tests/test_query_building.py +51 -0
- getresponse-0.1.2/tests/test_query_building.py +0 -27
- {getresponse-0.1.2 → getresponse-0.1.3}/.gitignore +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/README.md +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/__init__.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/_compat.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/_ratelimit.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/_resource_groups.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/client.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/models.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/py.typed +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/__init__.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/ab_tests.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/ab_tests_subject.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/accounts.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/addresses.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/autoresponders.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/campaigns_lists.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/carts.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/categories.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/click_tracks.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/contacts.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/custom_events.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/custom_fields.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/custom_reports.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/ecommerce.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/file_library.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/form_and_popup.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/forms.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/forms_and_popups.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/from_fields.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/gdpr_fields.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/imports.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/landing_page.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/landing_pages.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/legacy_forms.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/legacy_landing_pages.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/meta_fields.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/multimedia.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/newsletters.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/orders.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/predefined_fields.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/product_variants.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/products.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/rss_newsletters.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/search_contacts.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/shops.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/sms.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/sms_automation_messages.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/sms_messages.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/subscription_confirmations.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/suppressions.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/tags.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/taxes.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/tracking.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/transactional_emails.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/transactional_emails_templates.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/webinars.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/website.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/websites.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/workflows.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/conftest.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/test_auth.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/test_errors.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/test_models.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/test_pagination.py +0 -0
- {getresponse-0.1.2 → getresponse-0.1.3}/tests/test_ratelimit.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: getresponse
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.3
|
|
4
4
|
Summary: Async, fully-typed Python client for the GetResponse v3 API.
|
|
5
5
|
Project-URL: Repository, https://github.com/sistemitre/get-response
|
|
6
6
|
Project-URL: Issues, https://github.com/sistemitre/get-response/issues
|
|
@@ -148,7 +148,12 @@ def _encode_query(query: dict[str, Any] | None) -> dict[str, Any] | None:
|
|
|
148
148
|
if isinstance(value, Enum):
|
|
149
149
|
encoded[key] = value.value
|
|
150
150
|
elif isinstance(value, datetime):
|
|
151
|
-
|
|
151
|
+
# GetResponse expects Y-m-d\TH:i:sO (PHP date format): no sub-second precision,
|
|
152
|
+
# and the UTC offset without a colon (+0000, not +00:00) -- isoformat() produces
|
|
153
|
+
# neither. strftime's %z already omits the colon and %S excludes microseconds;
|
|
154
|
+
# a naive datetime (no tzinfo) formats with %z as an empty string, unchanged from
|
|
155
|
+
# isoformat()'s behavior for that case.
|
|
156
|
+
encoded[key] = value.strftime("%Y-%m-%dT%H:%M:%S%z")
|
|
152
157
|
elif isinstance(value, bool):
|
|
153
158
|
encoded[key] = "true" if value else "false"
|
|
154
159
|
else:
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"""Bracket-notation query parameter building."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from datetime import datetime, timedelta, timezone
|
|
6
|
+
|
|
7
|
+
import httpx
|
|
8
|
+
|
|
9
|
+
from getresponse import GetResponseClient
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
async def test_datetime_query_params_use_getresponse_date_format() -> None:
|
|
13
|
+
# GetResponse expects Y-m-d\TH:i:sO (PHP format): no sub-second precision, and the UTC
|
|
14
|
+
# offset without a colon (+0000, not Python's default +00:00).
|
|
15
|
+
captured: dict[str, httpx.URL] = {}
|
|
16
|
+
|
|
17
|
+
def handler(request: httpx.Request) -> httpx.Response:
|
|
18
|
+
captured["url"] = request.url
|
|
19
|
+
return httpx.Response(200, json=[])
|
|
20
|
+
|
|
21
|
+
async with GetResponseClient(api_key="k", transport=httpx.MockTransport(handler)) as c:
|
|
22
|
+
await c.contacts.get_contact_list(
|
|
23
|
+
query_created_on_from=datetime(2024, 1, 15, 10, 30, 0, 123456, tzinfo=timezone.utc),
|
|
24
|
+
query_created_on_to=datetime(
|
|
25
|
+
2024, 1, 16, 10, 30, 0, tzinfo=timezone(timedelta(hours=5, minutes=30))
|
|
26
|
+
),
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
params = captured["url"].params
|
|
30
|
+
assert params["query[createdOn][from]"] == "2024-01-15T10:30:00+0000"
|
|
31
|
+
assert params["query[createdOn][to]"] == "2024-01-16T10:30:00+0530"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
async def test_query_params_use_bracket_notation_and_skip_none() -> None:
|
|
35
|
+
captured: dict[str, httpx.URL] = {}
|
|
36
|
+
|
|
37
|
+
def handler(request: httpx.Request) -> httpx.Response:
|
|
38
|
+
captured["url"] = request.url
|
|
39
|
+
return httpx.Response(200, json=[])
|
|
40
|
+
|
|
41
|
+
async with GetResponseClient(api_key="k", transport=httpx.MockTransport(handler)) as c:
|
|
42
|
+
await c.contacts.get_contact_list(
|
|
43
|
+
query_email="a@b.com", sort_name="asc", page=2, per_page=50
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
params = captured["url"].params
|
|
47
|
+
assert params["query[email]"] == "a@b.com"
|
|
48
|
+
assert params["sort[name]"] == "asc"
|
|
49
|
+
assert params["page"] == "2"
|
|
50
|
+
assert params["perPage"] == "50"
|
|
51
|
+
assert "query[name]" not in params
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
"""Bracket-notation query parameter building."""
|
|
2
|
-
|
|
3
|
-
from __future__ import annotations
|
|
4
|
-
|
|
5
|
-
import httpx
|
|
6
|
-
|
|
7
|
-
from getresponse import GetResponseClient
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
async def test_query_params_use_bracket_notation_and_skip_none() -> None:
|
|
11
|
-
captured: dict[str, httpx.URL] = {}
|
|
12
|
-
|
|
13
|
-
def handler(request: httpx.Request) -> httpx.Response:
|
|
14
|
-
captured["url"] = request.url
|
|
15
|
-
return httpx.Response(200, json=[])
|
|
16
|
-
|
|
17
|
-
async with GetResponseClient(api_key="k", transport=httpx.MockTransport(handler)) as c:
|
|
18
|
-
await c.contacts.get_contact_list(
|
|
19
|
-
query_email="a@b.com", sort_name="asc", page=2, per_page=50
|
|
20
|
-
)
|
|
21
|
-
|
|
22
|
-
params = captured["url"].params
|
|
23
|
-
assert params["query[email]"] == "a@b.com"
|
|
24
|
-
assert params["sort[name]"] == "asc"
|
|
25
|
-
assert params["page"] == "2"
|
|
26
|
-
assert params["perPage"] == "50"
|
|
27
|
-
assert "query[name]" not in params
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{getresponse-0.1.2 → getresponse-0.1.3}/getresponse/resources/transactional_emails_templates.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|