planvortex 0.9.0__tar.gz → 0.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.
- {planvortex-0.9.0 → planvortex-0.10.0}/CHANGELOG.md +51 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/PKG-INFO +4 -4
- {planvortex-0.9.0 → planvortex-0.10.0}/README.md +3 -3
- {planvortex-0.9.0 → planvortex-0.10.0}/openapi/planvortex.openapi.json +470 -21
- {planvortex-0.9.0 → planvortex-0.10.0}/pyproject.toml +1 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/__init__.py +1 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/errors.py +18 -11
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_generated/models.py +191 -20
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_shapes.py +21 -5
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_version.py +1 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/accounts.py +60 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/ai_plans.py +27 -3
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/publications.py +22 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/accounts.py +60 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/ai_plans.py +27 -3
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/publications.py +22 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/types.py +67 -12
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_accounts.py +24 -1
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_core.py +28 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_route_coverage.py +4 -3
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_types.py +14 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/.gitignore +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/LICENSE +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/scripts/build_docs.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/scripts/check_packaging.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/scripts/generate_models.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/scripts/generate_sync.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/scripts/route_coverage.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_client.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_client_sync.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/auth.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/auth_sync.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/files.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/http.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/http_sync.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/pagination.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/query.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_core/transport.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/_generated/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/py.typed +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/apps.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/base.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/catalog.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/clients.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/comments.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/contacts.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/dashboard.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/integrations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/messages.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/organizations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/products.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources/uploads.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/apps.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/base.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/catalog.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/clients.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/comments.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/contacts.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/dashboard.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/integrations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/messages.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/organizations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/products.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/resources_sync/uploads.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/src/planvortex/webhooks.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/conftest.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/contrato.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/__init__.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/conftest.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_auth.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_catalog.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_connect_flow.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_errors.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_publish.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/live/test_read.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_ai_plans.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_apps.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_catalog.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_client.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_clients.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_comments.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_contacts.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_dashboard.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_example_comments.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_example_connect.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_example_publish.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_example_schedule.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_example_webhooks.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_files.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_generate_models.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_generate_sync.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_integrations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_messages.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_models.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_openapi_freshness.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_organizations.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_packaging.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_pagination.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_products.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_publications.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_query_parity.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_readme.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_shapes_parity.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_uploads.py +0 -0
- {planvortex-0.9.0 → planvortex-0.10.0}/tests/test_webhooks.py +0 -0
|
@@ -4,6 +4,57 @@ All notable changes to this package are documented here. The format follows
|
|
|
4
4
|
[Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [0.10.0] - 2026-09-24
|
|
8
|
+
|
|
9
|
+
Pinterest, the fourteenth network, reaches the package — and it is the first one where choosing
|
|
10
|
+
the account does not choose where the publication comes out. **A pin goes to a board**, and that is
|
|
11
|
+
a field no other network has. Nothing was removed and no signature moved: upgrading from `0.9.0`
|
|
12
|
+
needs no changes, and `MIGRATION.md` gains no entry. The new fields are optional for the other
|
|
13
|
+
thirteen networks.
|
|
14
|
+
|
|
15
|
+
**`PublishableNetwork` is a closed `Literal` written by hand, and it went red on regeneration** —
|
|
16
|
+
which is how it is meant to find out. Pinterest is also the first network that enters
|
|
17
|
+
`PUBLISHABLE_NETWORKS` and **not** `COMMENT_NETWORKS`, so it is the first real proof that the two
|
|
18
|
+
lists are independent.
|
|
19
|
+
|
|
20
|
+
### Added
|
|
21
|
+
|
|
22
|
+
- **`pv.accounts.destinations(id_organization, id_account)`** and
|
|
23
|
+
**`pv.accounts.destination(id_organization, id_account, id_destination)`**, over
|
|
24
|
+
`GET /organizations/{id}/accounts/{id}/destinations[/{id}]`: an account's Pinterest boards, and
|
|
25
|
+
one board with its sections. Every other network answers 992 — the account itself is where its
|
|
26
|
+
publications go. Both take `refresh=True` to skip the server's short cache, for a board created
|
|
27
|
+
a moment ago; not on every call, because all of PlanVortex's Pinterest traffic leaves through one
|
|
28
|
+
application. Also on the synchronous client.
|
|
29
|
+
- **`"pinterest"` in `PublishableNetwork` and `PUBLISHABLE_NETWORKS`**, and **`destination` and
|
|
30
|
+
`link` on `PublicationInput`.** On Pinterest the board is **required**, and leaving it out does
|
|
31
|
+
not raise: the publication is created in `withErrors` with code 987 and is never attempted.
|
|
32
|
+
`destination["id"]` is **always a string** — Pinterest's ids are long integers. `link` is where
|
|
33
|
+
the pin takes whoever clicks it: it goes in its own field, not inside `text`. On every other
|
|
34
|
+
network both fields are deleted on save. Ask `destinations` and `link` in
|
|
35
|
+
`catalog.social_capabilities()` rather than keeping a list of which network has which.
|
|
36
|
+
- **`destinations` on `AiPlanCreateRequest` and `AiPlan`, and `options["link"]`.** A plan with a
|
|
37
|
+
Pinterest account needs that account's board, one entry per account; without it
|
|
38
|
+
`ai_plans.create` raises **2118**, listing every account that fails. A plan that would leave pins
|
|
39
|
+
without an image is refused with **2119** before a single credit is spent, and an image that
|
|
40
|
+
fails halfway through the generation shows up as a **922** in `warnings`, with the publication
|
|
41
|
+
that was left without it.
|
|
42
|
+
- Types `Destination`, `PublicationDestination` and `AiPlanDestination`.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- **Pinterest's error codes (987-996) arrived outside every family**, the third time a network's
|
|
47
|
+
codes were born above the ceiling of the publications range (after 978 and 980). They are now
|
|
48
|
+
`PublicationError`. The one that matters most is **991**: Pinterest throttling the application,
|
|
49
|
+
sent as HTTP 429 with `Retry-After` — the answer is to wait, and `error.retry_after` says how long.
|
|
50
|
+
- **547, 548 and 716 were unclassified too.** 547 (a client app's identifier cannot change) and
|
|
51
|
+
548 (rotating the secret failed, the method that came with `0.9.0`) are now `AuthError`, and 716
|
|
52
|
+
(another process is renewing the Bluesky session; retry) is `AccountError`.
|
|
53
|
+
- A test now checks that **every** error code named in the specification's error tables falls into
|
|
54
|
+
some family, so the next network cannot repeat this without the build going red.
|
|
55
|
+
- The prose that counts networks said "nine of the eleven" and "eleven and not twelve" in places;
|
|
56
|
+
it now says fourteen, thirteen of which publish.
|
|
57
|
+
|
|
7
58
|
## [0.9.0] - 2026-09-17
|
|
8
59
|
|
|
9
60
|
**Which AI plan worked?** The server can now answer it, and so can this package:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: planvortex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.10.0
|
|
4
4
|
Summary: Official Python client for the PlanVortex API
|
|
5
5
|
Project-URL: Homepage, https://planvortex.com/en/developers
|
|
6
6
|
Project-URL: Documentation, https://taliasoftworks.github.io/PlanVortexPython/
|
|
@@ -242,11 +242,11 @@ memorising numbers:
|
|
|
242
242
|
|
|
243
243
|
| Codes | Family | Exception |
|
|
244
244
|
|---|---|---|
|
|
245
|
-
| 500-
|
|
245
|
+
| 500-548 | `auth` | `AuthError` |
|
|
246
246
|
| 601-612 | `user` | `UserError` |
|
|
247
|
-
| 700-
|
|
247
|
+
| 700-716 | `account` | `AccountError` |
|
|
248
248
|
| 800-810 | `file` | `FileError` |
|
|
249
|
-
| 900-
|
|
249
|
+
| 900-996 | `publication` | `PublicationError` |
|
|
250
250
|
| 1000-1003 | `general` | `PlanVortexError` |
|
|
251
251
|
| 1100-1111 | `organization` | `OrganizationError` |
|
|
252
252
|
| 1200-1207 | `role` | `PlanVortexError` |
|
|
@@ -212,11 +212,11 @@ memorising numbers:
|
|
|
212
212
|
|
|
213
213
|
| Codes | Family | Exception |
|
|
214
214
|
|---|---|---|
|
|
215
|
-
| 500-
|
|
215
|
+
| 500-548 | `auth` | `AuthError` |
|
|
216
216
|
| 601-612 | `user` | `UserError` |
|
|
217
|
-
| 700-
|
|
217
|
+
| 700-716 | `account` | `AccountError` |
|
|
218
218
|
| 800-810 | `file` | `FileError` |
|
|
219
|
-
| 900-
|
|
219
|
+
| 900-996 | `publication` | `PublicationError` |
|
|
220
220
|
| 1000-1003 | `general` | `PlanVortexError` |
|
|
221
221
|
| 1100-1111 | `organization` | `OrganizationError` |
|
|
222
222
|
| 1200-1207 | `role` | `PlanVortexError` |
|