parseapi 1.9.3__tar.gz → 1.10.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.
- {parseapi-1.9.3 → parseapi-1.10.0}/CHANGELOG.md +6 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/PKG-INFO +71 -3
- {parseapi-1.9.3 → parseapi-1.10.0}/README.md +70 -2
- {parseapi-1.9.3 → parseapi-1.10.0}/api/public.json +2558 -1000
- {parseapi-1.9.3 → parseapi-1.10.0}/pyproject.toml +1 -1
- parseapi-1.10.0/src/parseapi/__init__.py +7 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/src/parseapi/_client.py +197 -23
- parseapi-1.10.0/src/parseapi/city.py +31 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-company-coverage.json +12 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-company-profile.json +16 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-emoji-catalog.json +185 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-emoji-metadata.json +127 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-provider.json +31 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-tariff-search.json +15 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-tariff.json +10 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-time.json +78 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/clean-timezones.json +601 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-company-coverage.json +13 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-company-profile.json +17 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-emoji-catalog.json +189 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-emoji-metadata.json +131 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-provider.json +42 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-tariff-search.json +16 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-tariff.json +11 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-time.json +84 -0
- parseapi-1.10.0/tests/fixtures/response-fixtures/standard-timezones.json +602 -0
- parseapi-1.10.0/tests/test_city_canonical.py +132 -0
- parseapi-1.10.0/tests/test_city_quality.py +57 -0
- parseapi-1.10.0/tests/test_city_query_parity.py +54 -0
- parseapi-1.10.0/tests/test_response_decoding.py +31 -0
- parseapi-1.9.3/src/parseapi/__init__.py +0 -6
- {parseapi-1.9.3 → parseapi-1.10.0}/.github/workflows/publish.yml +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/.github/workflows/test.yml +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/.gitignore +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/LICENSE +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/scripts/public_api.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/smoke/smoke.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/src/parseapi/py.typed +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/bank-fixtures.json +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/fixtures/emoji-artwork.json +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/fixtures/emoji-catalog.json +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/fixtures/measure-response.json +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_bank.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_card_dx.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_client.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_company_directory.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_email_enrichment.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_emoji.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_language.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_measure_response.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_name_formatting.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_postal_localities.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_public_api.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_stack.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_tariff.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_tariff_short_id.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_time_complete.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_time_gaps.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/test_version.py +0 -0
- {parseapi-1.9.3 → parseapi-1.10.0}/tests/typing_company_directory.py +0 -0
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 1.10.0 — 2026-10-15
|
|
4
|
+
|
|
5
|
+
- Add compatible City resource/list, spelling-search, geographic-filter, pagination, hierarchy, relationship and distance support.
|
|
6
|
+
- Keep existing City calls and response defaults compatible; expose ambiguity candidates when requested.
|
|
7
|
+
- Remove population observation periods from public examples; retain published typed members only for source compatibility.
|
|
8
|
+
|
|
3
9
|
## 1.9.1 — 2026-10-12
|
|
4
10
|
|
|
5
11
|
- Add Emoji search/browse, categories, catalog, metadata, parsing and conversion; keep existing lookup calls and response decoding compatible.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: parseapi
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.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
|
|
@@ -275,7 +275,7 @@ place = parse.postal("28202", country="US", deep=True)
|
|
|
275
275
|
property_tax = (place.get("deep") or {}).get("property_tax")
|
|
276
276
|
```
|
|
277
277
|
|
|
278
|
-
Read `
|
|
278
|
+
Read `population` as the source’s count for that place boundary. Keep missing or null values unknown and preserve a known zero. State district lists include each district’s population. Postal nearby and distance detail remains metropolitan associations only. Continent population stays in core.
|
|
279
279
|
|
|
280
280
|
Country deep includes `land_area` and `water_area` in km2, `coastline` in km, and mean `elevation` in metres. `lowest_point` and `highest_point` contain a nullable `name` and an `elevation` in metres. Values below sea level are negative. Missing or null values stay unknown, and zero stays zero.
|
|
281
281
|
|
|
@@ -329,7 +329,7 @@ Invalid input returns `valid: false` with unknown provider fields. A checksum-va
|
|
|
329
329
|
|
|
330
330
|
The default pooled lookup includes provider identity, specialty and practice contact where held. Paid `deep` adds `deactivated_at`, `medicare`, `opt_out` and `enrollments` from stored source files, with no separate check meter or live verification. `enrollments: null` means unavailable; `[]` means no enrollment rows are returned. The API omits unrequested `deep` and returns `{}` when requested on Free.
|
|
331
331
|
|
|
332
|
-
Paid Deep also returns `taxonomies` in published order, with taxonomy code, specialty label, primary flag and provider-reported license number/state, plus `enumerated_at`, `updated_at` and `reactivated_at` record dates. Reported licenses are not verified licenses. Null lists mean unavailable; empty lists mean the edition contains no entries.
|
|
332
|
+
Paid Deep also returns `taxonomies` in published order, with taxonomy code, specialty label, primary flag and provider-reported license number/state, plus `enumerated_at`, `updated_at` and `reactivated_at` record dates. Reported licenses are not verified licenses. Null lists mean unavailable; empty lists mean the edition contains no entries. Provider record dates describe the provider record. Unknown dates stay null.
|
|
333
333
|
|
|
334
334
|
## Deep
|
|
335
335
|
|
|
@@ -482,3 +482,71 @@ A device's emoji font remains the ordinary display.
|
|
|
482
482
|
|
|
483
483
|
These additions are a local release candidate until the matching SDK and
|
|
484
484
|
backend are published. Existing lookup and search contracts are preserved.
|
|
485
|
+
|
|
486
|
+
|
|
487
|
+
## City scope and reviewed details
|
|
488
|
+
|
|
489
|
+
```python
|
|
490
|
+
city = parse.city("Sakai", country="JP", state="27", grain="municipality",
|
|
491
|
+
aliases=True, ambiguity="error", hierarchy=True, deep=True)
|
|
492
|
+
```
|
|
493
|
+
|
|
494
|
+
`type` selects the recorded country-specific place type. `grain` selects a reviewed `municipality`, `subdivision`, `locality` or `metropolitan_area`; unreviewed places do not match a grain filter. `aliases=True` enables reviewed name forms. `ambiguity="error"` rejects several eligible exact matches. Existing calls keep their defaults, and `AsyncParseAPI` accepts the same options.
|
|
495
|
+
|
|
496
|
+
`hierarchy=True` adds optional `grain` and `parent` fields using stable City IDs. A null parent means no relationship has been reviewed. Nearest lookup applies country, state, type and grain to eligible centers within 2,000 km; a nearest center does not establish boundary containment. Nearby type and grain select both the named anchor and its results.
|
|
497
|
+
|
|
498
|
+
Paid Deep can include `population_observed_on` and `population_basis` for a reviewed count at the same place layer. Download dates do not supply population observation dates. These options use current API 2.0.0; older responses can omit the new fields.
|
|
499
|
+
|
|
500
|
+
```python
|
|
501
|
+
opts = dict(country="JP", min_population=100_000, sort="-population,+name",
|
|
502
|
+
limit=50)
|
|
503
|
+
first = parse.city.list(**opts)
|
|
504
|
+
for city in first["data"]:
|
|
505
|
+
print(city["id"], city.get("name"))
|
|
506
|
+
if first["next_cursor"]:
|
|
507
|
+
next_page = parse.city.list(**opts, cursor=first["next_cursor"])
|
|
508
|
+
parse.city.nearby_coordinates(48.2082, 16.3738, radius=40, unit="km")
|
|
509
|
+
parse.city.search("sa", page=True, timezone="Asia/Tokyo", bbox="130,30,145,45")
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
Collections support inclusive `min_population`/`max_population`, `min_elevation`/`max_elevation`, `countries`, `exclude_countries`, `timezones`, exact `timezone` and center-coordinate `bbox` (`west,south,east,north`; west greater than east crosses the dateline). Unknown populations do not match a population range. Browse sorts by name or population; search also supports relevance; nearby also supports distance. `order` accepts `asc` or `desc` (relevance allows only `asc`); population defaults to descending with unknown counts last. Filtering and ordering use the same count as paid Deep.
|
|
513
|
+
|
|
514
|
+
`lang="de"` displays Vienna as Wien; `lang="ja"` supports 1,912 reviewed Japanese native names, and `lang="zh-Hant"` supports 377 reviewed Traditional Chinese names in Taiwan. Approved translations take precedence; missing or unsupported labels keep the source name. IDs and `name_local` stay unchanged. Name sorting uses the stored primary name, regardless of display language. Coordinate nearby defaults to 40 km, or 25 mi with `unit="mi"`, and caps the radius at 800 km or 500 mi.
|
|
515
|
+
|
|
516
|
+
`city.list` and `city.nearby_coordinates` return `{ "object": "list", "data": [...], "next_cursor": ... }`. Each item retains `id` and `object: "city"`. Existing lookup, search, nearest and named-nearby calls keep their classic responses. Add `format="list"` to search or named nearby for a canonical collection, or `format="resource"` to lookup, ID lookup or nearest for a canonical resource. Classic search and named nearby include `next_cursor` with `page=True` or `cursor`; old responses may omit it. Keep the original options, including `limit`, when continuing. An invalid cursor or changed query/order returns 400; restart without the cursor. Pages are not a historical snapshot. Named nearby applies population, timezone and bbox to results, while country/state select its anchor. Async methods accept the same arguments.
|
|
517
|
+
|
|
518
|
+
`city.children(id)`, `city.ancestors(id)` and `city.siblings(id)` return canonical lists with `coverage: "partial"`. An empty list does not prove the absence of relatives. Children and siblings support page continuation. `city.distance(from_id, to_id)` returns `object: "city_distance"`, `from`, `to`, `distance` in kilometers, `distance_mi` in miles and `method: "great_circle"`. It compares stored centers; unknown coordinates remain null and known zero remains zero. Async clients support the same calls.
|
|
519
|
+
|
|
520
|
+
Strict ambiguity returns HTTP 409. Catch `ParseAPIError` with `code == "ambiguous_city"` and read optional `error.candidates` for at most two safe City identity objects; `CityAmbiguityCandidate` is exported as a TypedDict. Choose an ID or narrow the filters for a new request. Other errors and retry behavior remain unchanged.
|
|
521
|
+
|
|
522
|
+
|
|
523
|
+
## Canonical City operations
|
|
524
|
+
|
|
525
|
+
Classic lookup, search, nearest and named-nearby methods retain their default envelopes and required-field models. Browse and coordinate-nearby use canonical lists: `object`, `data` and nullable `next_cursor` (camelCase properties in Swift/Kotlin). Keep all query options unchanged when continuing a page; no client fetches pages automatically.
|
|
526
|
+
|
|
527
|
+
```python
|
|
528
|
+
page = parse.city.search('Viena', format='list', match='fuzzy', max_distance=1)
|
|
529
|
+
```
|
|
530
|
+
|
|
531
|
+
Select `format=resource` for one City or `format=list` for a collection. Country inclusion/exclusion sets, timezone sets, inclusive population and meter-elevation bounds, stored-center `bbox` and signed multi-key sorting are available for collections. Unknown numeric facts do not match range filters.
|
|
532
|
+
|
|
533
|
+
Search defaults to prefix matching. Exact and fuzzy matching are explicit; fuzzy accepts maximum edit distance 1 or 2 and returns `match` evidence (`type`, `source`, `value`, `language`, `edit_distance`). Review a fuzzy choice before storing its ID.
|
|
534
|
+
|
|
535
|
+
Reviewed children, ancestors and siblings use canonical lists with partial relationship coverage. Empty data does not prove there are no geographic relatives. Children/siblings accept page controls; ancestors do not. Distance reports great-circle kilometers and miles between stored centers: zero is known zero, null is unknown, and it does not imply travel time or containment.
|
|
536
|
+
|
|
537
|
+
Strict `ambiguity=error` can return HTTP 409 `ambiguous_city` with up to two safe candidate identities. The existing error constructor and unrelated error metadata are preserved; candidates are retained only for that status/code and never contain Deep. GeoJSON is available through HTTP; these typed City list methods do not return GeoJSON.
|
|
538
|
+
|
|
539
|
+
|
|
540
|
+
|
|
541
|
+
Reviewed name forms:
|
|
542
|
+
|
|
543
|
+
```python
|
|
544
|
+
city = parse.city.id('city_7aj899nvwyku', format='resource', romanized=True)
|
|
545
|
+
```
|
|
546
|
+
|
|
547
|
+
Coverage by country and available fields is described at https://parseapi.com/city#coverage.
|
|
548
|
+
|
|
549
|
+
`romanized=true` requests reviewed official name forms as `name_romanized` and `romanization_language` (camelCase in Swift/Kotlin). Current reviewed forms cover 20 Japanese whole-city aliases in ja-Latn. Missing or conflicting forms stay null; ASCII folding is not substituted for an official form.
|
|
550
|
+
|
|
551
|
+
|
|
552
|
+
Conditional `If-None-Match` reads and GeoJSON currently use HTTP directly. A matching City ETag returns 304 without a body; ordinary billing and rate limits apply. These JSON client methods do not supply conditional-cache handling.
|
|
@@ -256,7 +256,7 @@ place = parse.postal("28202", country="US", deep=True)
|
|
|
256
256
|
property_tax = (place.get("deep") or {}).get("property_tax")
|
|
257
257
|
```
|
|
258
258
|
|
|
259
|
-
Read `
|
|
259
|
+
Read `population` as the source’s count for that place boundary. Keep missing or null values unknown and preserve a known zero. State district lists include each district’s population. Postal nearby and distance detail remains metropolitan associations only. Continent population stays in core.
|
|
260
260
|
|
|
261
261
|
Country deep includes `land_area` and `water_area` in km2, `coastline` in km, and mean `elevation` in metres. `lowest_point` and `highest_point` contain a nullable `name` and an `elevation` in metres. Values below sea level are negative. Missing or null values stay unknown, and zero stays zero.
|
|
262
262
|
|
|
@@ -310,7 +310,7 @@ Invalid input returns `valid: false` with unknown provider fields. A checksum-va
|
|
|
310
310
|
|
|
311
311
|
The default pooled lookup includes provider identity, specialty and practice contact where held. Paid `deep` adds `deactivated_at`, `medicare`, `opt_out` and `enrollments` from stored source files, with no separate check meter or live verification. `enrollments: null` means unavailable; `[]` means no enrollment rows are returned. The API omits unrequested `deep` and returns `{}` when requested on Free.
|
|
312
312
|
|
|
313
|
-
Paid Deep also returns `taxonomies` in published order, with taxonomy code, specialty label, primary flag and provider-reported license number/state, plus `enumerated_at`, `updated_at` and `reactivated_at` record dates. Reported licenses are not verified licenses. Null lists mean unavailable; empty lists mean the edition contains no entries.
|
|
313
|
+
Paid Deep also returns `taxonomies` in published order, with taxonomy code, specialty label, primary flag and provider-reported license number/state, plus `enumerated_at`, `updated_at` and `reactivated_at` record dates. Reported licenses are not verified licenses. Null lists mean unavailable; empty lists mean the edition contains no entries. Provider record dates describe the provider record. Unknown dates stay null.
|
|
314
314
|
|
|
315
315
|
## Deep
|
|
316
316
|
|
|
@@ -463,3 +463,71 @@ A device's emoji font remains the ordinary display.
|
|
|
463
463
|
|
|
464
464
|
These additions are a local release candidate until the matching SDK and
|
|
465
465
|
backend are published. Existing lookup and search contracts are preserved.
|
|
466
|
+
|
|
467
|
+
|
|
468
|
+
## City scope and reviewed details
|
|
469
|
+
|
|
470
|
+
```python
|
|
471
|
+
city = parse.city("Sakai", country="JP", state="27", grain="municipality",
|
|
472
|
+
aliases=True, ambiguity="error", hierarchy=True, deep=True)
|
|
473
|
+
```
|
|
474
|
+
|
|
475
|
+
`type` selects the recorded country-specific place type. `grain` selects a reviewed `municipality`, `subdivision`, `locality` or `metropolitan_area`; unreviewed places do not match a grain filter. `aliases=True` enables reviewed name forms. `ambiguity="error"` rejects several eligible exact matches. Existing calls keep their defaults, and `AsyncParseAPI` accepts the same options.
|
|
476
|
+
|
|
477
|
+
`hierarchy=True` adds optional `grain` and `parent` fields using stable City IDs. A null parent means no relationship has been reviewed. Nearest lookup applies country, state, type and grain to eligible centers within 2,000 km; a nearest center does not establish boundary containment. Nearby type and grain select both the named anchor and its results.
|
|
478
|
+
|
|
479
|
+
Paid Deep can include `population_observed_on` and `population_basis` for a reviewed count at the same place layer. Download dates do not supply population observation dates. These options use current API 2.0.0; older responses can omit the new fields.
|
|
480
|
+
|
|
481
|
+
```python
|
|
482
|
+
opts = dict(country="JP", min_population=100_000, sort="-population,+name",
|
|
483
|
+
limit=50)
|
|
484
|
+
first = parse.city.list(**opts)
|
|
485
|
+
for city in first["data"]:
|
|
486
|
+
print(city["id"], city.get("name"))
|
|
487
|
+
if first["next_cursor"]:
|
|
488
|
+
next_page = parse.city.list(**opts, cursor=first["next_cursor"])
|
|
489
|
+
parse.city.nearby_coordinates(48.2082, 16.3738, radius=40, unit="km")
|
|
490
|
+
parse.city.search("sa", page=True, timezone="Asia/Tokyo", bbox="130,30,145,45")
|
|
491
|
+
```
|
|
492
|
+
|
|
493
|
+
Collections support inclusive `min_population`/`max_population`, `min_elevation`/`max_elevation`, `countries`, `exclude_countries`, `timezones`, exact `timezone` and center-coordinate `bbox` (`west,south,east,north`; west greater than east crosses the dateline). Unknown populations do not match a population range. Browse sorts by name or population; search also supports relevance; nearby also supports distance. `order` accepts `asc` or `desc` (relevance allows only `asc`); population defaults to descending with unknown counts last. Filtering and ordering use the same count as paid Deep.
|
|
494
|
+
|
|
495
|
+
`lang="de"` displays Vienna as Wien; `lang="ja"` supports 1,912 reviewed Japanese native names, and `lang="zh-Hant"` supports 377 reviewed Traditional Chinese names in Taiwan. Approved translations take precedence; missing or unsupported labels keep the source name. IDs and `name_local` stay unchanged. Name sorting uses the stored primary name, regardless of display language. Coordinate nearby defaults to 40 km, or 25 mi with `unit="mi"`, and caps the radius at 800 km or 500 mi.
|
|
496
|
+
|
|
497
|
+
`city.list` and `city.nearby_coordinates` return `{ "object": "list", "data": [...], "next_cursor": ... }`. Each item retains `id` and `object: "city"`. Existing lookup, search, nearest and named-nearby calls keep their classic responses. Add `format="list"` to search or named nearby for a canonical collection, or `format="resource"` to lookup, ID lookup or nearest for a canonical resource. Classic search and named nearby include `next_cursor` with `page=True` or `cursor`; old responses may omit it. Keep the original options, including `limit`, when continuing. An invalid cursor or changed query/order returns 400; restart without the cursor. Pages are not a historical snapshot. Named nearby applies population, timezone and bbox to results, while country/state select its anchor. Async methods accept the same arguments.
|
|
498
|
+
|
|
499
|
+
`city.children(id)`, `city.ancestors(id)` and `city.siblings(id)` return canonical lists with `coverage: "partial"`. An empty list does not prove the absence of relatives. Children and siblings support page continuation. `city.distance(from_id, to_id)` returns `object: "city_distance"`, `from`, `to`, `distance` in kilometers, `distance_mi` in miles and `method: "great_circle"`. It compares stored centers; unknown coordinates remain null and known zero remains zero. Async clients support the same calls.
|
|
500
|
+
|
|
501
|
+
Strict ambiguity returns HTTP 409. Catch `ParseAPIError` with `code == "ambiguous_city"` and read optional `error.candidates` for at most two safe City identity objects; `CityAmbiguityCandidate` is exported as a TypedDict. Choose an ID or narrow the filters for a new request. Other errors and retry behavior remain unchanged.
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
## Canonical City operations
|
|
505
|
+
|
|
506
|
+
Classic lookup, search, nearest and named-nearby methods retain their default envelopes and required-field models. Browse and coordinate-nearby use canonical lists: `object`, `data` and nullable `next_cursor` (camelCase properties in Swift/Kotlin). Keep all query options unchanged when continuing a page; no client fetches pages automatically.
|
|
507
|
+
|
|
508
|
+
```python
|
|
509
|
+
page = parse.city.search('Viena', format='list', match='fuzzy', max_distance=1)
|
|
510
|
+
```
|
|
511
|
+
|
|
512
|
+
Select `format=resource` for one City or `format=list` for a collection. Country inclusion/exclusion sets, timezone sets, inclusive population and meter-elevation bounds, stored-center `bbox` and signed multi-key sorting are available for collections. Unknown numeric facts do not match range filters.
|
|
513
|
+
|
|
514
|
+
Search defaults to prefix matching. Exact and fuzzy matching are explicit; fuzzy accepts maximum edit distance 1 or 2 and returns `match` evidence (`type`, `source`, `value`, `language`, `edit_distance`). Review a fuzzy choice before storing its ID.
|
|
515
|
+
|
|
516
|
+
Reviewed children, ancestors and siblings use canonical lists with partial relationship coverage. Empty data does not prove there are no geographic relatives. Children/siblings accept page controls; ancestors do not. Distance reports great-circle kilometers and miles between stored centers: zero is known zero, null is unknown, and it does not imply travel time or containment.
|
|
517
|
+
|
|
518
|
+
Strict `ambiguity=error` can return HTTP 409 `ambiguous_city` with up to two safe candidate identities. The existing error constructor and unrelated error metadata are preserved; candidates are retained only for that status/code and never contain Deep. GeoJSON is available through HTTP; these typed City list methods do not return GeoJSON.
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
Reviewed name forms:
|
|
523
|
+
|
|
524
|
+
```python
|
|
525
|
+
city = parse.city.id('city_7aj899nvwyku', format='resource', romanized=True)
|
|
526
|
+
```
|
|
527
|
+
|
|
528
|
+
Coverage by country and available fields is described at https://parseapi.com/city#coverage.
|
|
529
|
+
|
|
530
|
+
`romanized=true` requests reviewed official name forms as `name_romanized` and `romanization_language` (camelCase in Swift/Kotlin). Current reviewed forms cover 20 Japanese whole-city aliases in ja-Latn. Missing or conflicting forms stay null; ASCII folding is not substituted for an official form.
|
|
531
|
+
|
|
532
|
+
|
|
533
|
+
Conditional `If-None-Match` reads and GeoJSON currently use HTTP directly. A matching City ETag returns 304 without a body; ordinary billing and rate limits apply. These JSON client methods do not supply conditional-cache handling.
|