parseapi 1.0.0__tar.gz → 1.1.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.
@@ -0,0 +1,5 @@
1
+ # Changelog
2
+
3
+ ## 1.1.0 - 2026-09-20
4
+
5
+ Email deep results now include nullable suggested first name, no-reply flag, plus-address tag, mail provider, verification status and reason. Existing lookup calls, retry defaults and API contract `2.0.0` remain unchanged. Missing details remain unknown, and suggested names do not verify identity.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: parseapi
3
- Version: 1.0.0
3
+ Version: 1.1.0
4
4
  Summary: Official ParseAPI client for Python. One key, minimal JSON, fast.
5
5
  Project-URL: Homepage, https://parseapi.com
6
6
  Project-URL: Documentation, https://parseapi.com/docs
@@ -36,7 +36,7 @@ Get a key at [parseapi.com](https://parseapi.com). The client also reads `PARSEA
36
36
 
37
37
  ## API versions
38
38
 
39
- Version 1.0.0 explicitly selects the API contract supported by this SDK. It sends `Parse-Version: 2.0.0` on every lookup so responses match the API contract supported by the package. Your key and the team's saved default stay the same.
39
+ Version 1.1.0 explicitly selects the API contract supported by this SDK. It sends `Parse-Version: 2.0.0` on every lookup so responses match the API contract supported by the package. Your key and the team's saved default stay the same.
40
40
 
41
41
  Upgrade the dependency in staging, review the [release notes](https://parseapi.com/docs/releases), and test the application before deploying the same code and dependency version to production. Commit your dependency lockfile so the tested package travels with your deployment. Future major SDK upgrades can select a newer API contract.
42
42
 
@@ -224,7 +224,7 @@ Choose enrichment for the question you need answered.
224
224
  |---|---|
225
225
  | IP | Richer IP fields included with a paid plan. No separate check meter. |
226
226
  | Domain | Registration dates, registrar, status and DNSSEC, included with a paid plan. Use `dns` for DNS records and `mx` for mail routing. |
227
- | Email | A metered deliverability check, using included email checks or enabled on-demand usage. |
227
+ | Email | A metered mailbox check with deliverability, catch-all, status, reason and address hints, using included email checks or enabled on-demand usage. |
228
228
  | VAT | A metered registry check where supported, using included VAT checks or enabled on-demand usage. |
229
229
  | Phone, Time, Date, Currency, Language, Emoji, IBAN, Point | Optional detail in the same pooled request on every plan. |
230
230
  | Country, State, District, City, Postal | The place profile on paid plans, including demographic and tax facts where held. |
@@ -233,6 +233,10 @@ Choose enrichment for the question you need answered.
233
233
  | Weather | Specialist current measurements and the existing forecast, alert, air and history bag on paid plans. |
234
234
  | Carrier, HLR | Optional diagnostic detail within the same metered core unit, including Free allowance units. No second gate or additional check. |
235
235
 
236
+ Email deep includes mailbox status and the reason for the result, plus a suggested first name, no-reply flag, plus-address tag and mail service. The suggested name is not a verified identity. Unavailable details are null.
237
+
238
+ Reasons include `accepted`, `invalid_format`, `invalid_domain`, `no_mail_server`, `mailbox_not_found`, `mailbox_disabled`, `mailbox_full`, `catchall`, `disposable`, `temporary_failure`, `rejected` and `unconfirmed`.
239
+
236
240
  Carrier, caller, and HLR are separate metered operations. Choose them explicitly when you need their answers. Ordinary lookups retry twice by default. Metered checks use one attempt by default. Setting retries explicitly can repeat paid usage.
237
241
 
238
242
  Without `deep`, the response omits that key. When requested, it is an empty object if access is locked or the operation has no deep fields. Otherwise it contains the available fields. A missing or null field means unknown.
@@ -17,7 +17,7 @@ Get a key at [parseapi.com](https://parseapi.com). The client also reads `PARSEA
17
17
 
18
18
  ## API versions
19
19
 
20
- Version 1.0.0 explicitly selects the API contract supported by this SDK. It sends `Parse-Version: 2.0.0` on every lookup so responses match the API contract supported by the package. Your key and the team's saved default stay the same.
20
+ Version 1.1.0 explicitly selects the API contract supported by this SDK. It sends `Parse-Version: 2.0.0` on every lookup so responses match the API contract supported by the package. Your key and the team's saved default stay the same.
21
21
 
22
22
  Upgrade the dependency in staging, review the [release notes](https://parseapi.com/docs/releases), and test the application before deploying the same code and dependency version to production. Commit your dependency lockfile so the tested package travels with your deployment. Future major SDK upgrades can select a newer API contract.
23
23
 
@@ -205,7 +205,7 @@ Choose enrichment for the question you need answered.
205
205
  |---|---|
206
206
  | IP | Richer IP fields included with a paid plan. No separate check meter. |
207
207
  | Domain | Registration dates, registrar, status and DNSSEC, included with a paid plan. Use `dns` for DNS records and `mx` for mail routing. |
208
- | Email | A metered deliverability check, using included email checks or enabled on-demand usage. |
208
+ | Email | A metered mailbox check with deliverability, catch-all, status, reason and address hints, using included email checks or enabled on-demand usage. |
209
209
  | VAT | A metered registry check where supported, using included VAT checks or enabled on-demand usage. |
210
210
  | Phone, Time, Date, Currency, Language, Emoji, IBAN, Point | Optional detail in the same pooled request on every plan. |
211
211
  | Country, State, District, City, Postal | The place profile on paid plans, including demographic and tax facts where held. |
@@ -214,6 +214,10 @@ Choose enrichment for the question you need answered.
214
214
  | Weather | Specialist current measurements and the existing forecast, alert, air and history bag on paid plans. |
215
215
  | Carrier, HLR | Optional diagnostic detail within the same metered core unit, including Free allowance units. No second gate or additional check. |
216
216
 
217
+ Email deep includes mailbox status and the reason for the result, plus a suggested first name, no-reply flag, plus-address tag and mail service. The suggested name is not a verified identity. Unavailable details are null.
218
+
219
+ Reasons include `accepted`, `invalid_format`, `invalid_domain`, `no_mail_server`, `mailbox_not_found`, `mailbox_disabled`, `mailbox_full`, `catchall`, `disposable`, `temporary_failure`, `rejected` and `unconfirmed`.
220
+
217
221
  Carrier, caller, and HLR are separate metered operations. Choose them explicitly when you need their answers. Ordinary lookups retry twice by default. Metered checks use one attempt by default. Setting retries explicitly can repeat paid usage.
218
222
 
219
223
  Without `deep`, the response omits that key. When requested, it is an empty object if access is locked or the operation has no deep fields. Otherwise it contains the available fields. A missing or null field means unknown.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "parseapi"
7
- version = "1.0.0"
7
+ version = "1.1.0"
8
8
  description = "Official ParseAPI client for Python. One key, minimal JSON, fast."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -2,5 +2,5 @@
2
2
 
3
3
  from ._client import AsyncParseAPI, ParseAPI, ParseAPIError
4
4
 
5
- __version__ = "1.0.0"
5
+ __version__ = "1.1.0"
6
6
  __all__ = ["ParseAPI", "AsyncParseAPI", "ParseAPIError", "__version__"]
@@ -10,7 +10,7 @@ from urllib.parse import quote
10
10
 
11
11
  import httpx
12
12
 
13
- VERSION = "1.0.0"
13
+ VERSION = "1.1.0"
14
14
  _API_VERSION = "2.0.0"
15
15
  DEFAULT_BASE_URL = "https://api.parseapi.com"
16
16
  DEFAULT_TIMEOUT = 10.0
@@ -0,0 +1,25 @@
1
+ import asyncio
2
+
3
+ import httpx
4
+ import pytest
5
+
6
+ from parseapi import AsyncParseAPI, ParseAPI
7
+
8
+
9
+ @pytest.mark.parametrize("async_client", [False, True])
10
+ @pytest.mark.parametrize("extra", [
11
+ {}, {"deep": {}},
12
+ {"deep": {"first_name": None, "no_reply": None, "tag": None, "mail_provider": None, "status": None, "reason": None}},
13
+ {"deep": {"first_name": "Jane", "no_reply": False, "tag": "news", "mail_provider": "future-provider", "deliverable": True, "catchall": False, "status": "future-status", "reason": "future_reason"}, "future": True},
14
+ ])
15
+ def test_email_enrichment_passes_through(async_client, extra):
16
+ body = {"email": "jane.doe+news@example.com", **extra}
17
+ transport = httpx.MockTransport(lambda request: httpx.Response(200, json=body))
18
+ if async_client:
19
+ async def run():
20
+ async with AsyncParseAPI("fixture", transport=transport) as client:
21
+ assert await client.email(body["email"], deep=True) == body
22
+ asyncio.run(run())
23
+ else:
24
+ with ParseAPI("fixture", transport=transport) as client:
25
+ assert client.email(body["email"], deep=True) == body
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes