themeparks 4.0.0__tar.gz → 4.0.1__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 (26) hide show
  1. {themeparks-4.0.0 → themeparks-4.0.1}/CHANGELOG.md +29 -0
  2. {themeparks-4.0.0 → themeparks-4.0.1}/PKG-INFO +6 -2
  3. {themeparks-4.0.0 → themeparks-4.0.1}/README.md +5 -1
  4. {themeparks-4.0.0 → themeparks-4.0.1}/pyproject.toml +1 -1
  5. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/backfill.py +19 -1
  6. {themeparks-4.0.0 → themeparks-4.0.1}/.gitignore +0 -0
  7. {themeparks-4.0.0 → themeparks-4.0.1}/LICENSE +0 -0
  8. {themeparks-4.0.0 → themeparks-4.0.1}/MIGRATION.md +0 -0
  9. {themeparks-4.0.0 → themeparks-4.0.1}/tests/fixtures/README.md +0 -0
  10. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/__init__.py +0 -0
  11. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_cache.py +0 -0
  12. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_client.py +0 -0
  13. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/__init__.py +0 -0
  14. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/dates.py +0 -0
  15. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/destinations.py +0 -0
  16. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/entity.py +0 -0
  17. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/history.py +0 -0
  18. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ergonomic/live.py +0 -0
  19. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_errors.py +0 -0
  20. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_generated/__init__.py +0 -0
  21. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_generated/models.py +0 -0
  22. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_models_base.py +0 -0
  23. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_ratelimit.py +0 -0
  24. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_raw.py +0 -0
  25. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/_transport.py +0 -0
  26. {themeparks-4.0.0 → themeparks-4.0.1}/themeparks/py.typed +0 -0
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## [4.0.1] - 2026-09-28
4
+
5
+ ### Fixed
6
+
7
+ - **A run with no API key now says so when it finishes**, not only when it
8
+ starts. Without a key the command SUCCEEDS: it reads the 7 days anonymous
9
+ access allows, writes 433 rows of Magic Kingdom instead of about 94,000, and
10
+ exits 0. The notice was printed before a run that takes minutes, so it scrolled
11
+ away, and the last thing on screen was `done: 433 rows` -- which for someone
12
+ who has just paid for 400 days is indistinguishable from success. There is a
13
+ file, there is no error, and the number means nothing unless you already know
14
+ what it should have been.
15
+
16
+ The README and the command's own `--help` now `export THEMEPARKS_API_KEY`
17
+ before the example that needs it, and still say `--list` does not: finding a
18
+ park before you have paid is the point of that flag.
19
+
20
+ ### Added
21
+
22
+ - **A committed mutant list** (`tests/mutation/mutants.json`) and a nightly,
23
+ non-gating job that runs it. An author-written mutant list contains the
24
+ mutations that author's tests already catch -- one scored 14/14 on this package
25
+ while an independent sweep found 27 survivors, including the defect 4.0.0
26
+ exists to fix. The list is committed so a reviewer can see what is checked and,
27
+ more usefully, what is not. Its first run found two gaps, both closed here: a
28
+ spent hourly budget on a resumed run deleted the accumulated archive, and
29
+ `str(EntityType.SHOW)` reached a CSV cell as `EntityType.SHOW` rather than
30
+ `SHOW`.
31
+
3
32
  ## [4.0.0] - 2026-09-28
4
33
 
5
34
  **3.3.0 was yanked: incomplete CSV export and a resume defect.**
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: themeparks
3
- Version: 4.0.0
3
+ Version: 4.0.1
4
4
  Summary: Official SDK for the ThemeParks.wiki API
5
5
  Project-URL: Homepage, https://api.themeparks.wiki
6
6
  Project-URL: Source, https://github.com/ThemeParks/ThemeParks_Python
@@ -356,9 +356,13 @@ Installing the library installs `themeparks-backfill`, which does all of the
356
356
  above and stops before the walls:
357
357
 
358
358
  ```bash
359
+ # How far back it reaches is your plan, so set the key first: without one you get
360
+ # the 7 days anonymous access allows, and the run still succeeds, quietly.
361
+ export THEMEPARKS_API_KEY=tpw_your_key
362
+
359
363
  themeparks-backfill "Disneyland Park" # a park, by name or id
360
364
  themeparks-backfill "Walt Disney World Resort" # a destination: every park in it
361
- themeparks-backfill --list disney # find an id. Needs no key.
365
+ themeparks-backfill --list disney # find an id. This part needs no key.
362
366
  ```
363
367
 
364
368
  It reads how far back your own key may ask and starts there, writes NDJSON or
@@ -317,9 +317,13 @@ Installing the library installs `themeparks-backfill`, which does all of the
317
317
  above and stops before the walls:
318
318
 
319
319
  ```bash
320
+ # How far back it reaches is your plan, so set the key first: without one you get
321
+ # the 7 days anonymous access allows, and the run still succeeds, quietly.
322
+ export THEMEPARKS_API_KEY=tpw_your_key
323
+
320
324
  themeparks-backfill "Disneyland Park" # a park, by name or id
321
325
  themeparks-backfill "Walt Disney World Resort" # a destination: every park in it
322
- themeparks-backfill --list disney # find an id. Needs no key.
326
+ themeparks-backfill --list disney # find an id. This part needs no key.
323
327
  ```
324
328
 
325
329
  It reads how far back your own key may ask and starts there, writes NDJSON or
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "themeparks"
7
- version = "4.0.0"
7
+ version = "4.0.1"
8
8
  description = "Official SDK for the ThemeParks.wiki API"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -1090,6 +1090,10 @@ def _print_list(catalogue: list[tuple[str, str, str, str]], needle: str | None)
1090
1090
 
1091
1091
 
1092
1092
  EPILOG = """examples:
1093
+ export THEMEPARKS_API_KEY=tpw_your_key
1094
+ how far back this reaches is your plan, so without a key you get the 7
1095
+ days anonymous access allows -- and the run still succeeds, quietly.
1096
+
1093
1097
  themeparks-backfill "Disneyland Park"
1094
1098
  the whole daily history your plan reaches, as NDJSON, into the current
1095
1099
  directory
@@ -1248,7 +1252,21 @@ def main(argv: list[str] | None = None) -> int:
1248
1252
  file=sys.stderr,
1249
1253
  )
1250
1254
 
1251
- return _run_all(tp, targets, args)
1255
+ status = _run_all(tp, targets, args)
1256
+ # SAID AGAIN AT THE END, and this is the point of it. The warning above
1257
+ # is printed before a run that takes minutes, so it scrolls away, and the
1258
+ # last thing on screen is "done: 433 rows" -- which for a customer who
1259
+ # thought they were downloading five years is indistinguishable from
1260
+ # success. They paid for 400 days and got seven, exit 0, no complaint.
1261
+ if not args.api_key:
1262
+ print(
1263
+ "\nthat was ANONYMOUS ACCESS: the last 7 days only.\n"
1264
+ " a free key reads 30 days, Pro 400, Business the whole archive\n"
1265
+ " set THEMEPARKS_API_KEY and run the same command again\n"
1266
+ " keys: https://www.themeparks.wiki/profile",
1267
+ file=sys.stderr,
1268
+ )
1269
+ return status
1252
1270
  return 0
1253
1271
 
1254
1272
 
File without changes
File without changes
File without changes