planvortex 0.8.0__tar.gz → 0.9.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.8.0 → planvortex-0.9.0}/CHANGELOG.md +40 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/PKG-INFO +2 -2
- {planvortex-0.8.0 → planvortex-0.9.0}/README.md +1 -1
- {planvortex-0.8.0 → planvortex-0.9.0}/openapi/planvortex.openapi.json +548 -6
- {planvortex-0.8.0 → planvortex-0.9.0}/pyproject.toml +1 -1
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_generated/models.py +227 -6
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_version.py +1 -1
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/ai_plans.py +61 -2
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/apps.py +15 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/ai_plans.py +61 -2
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/apps.py +13 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/types.py +51 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_ai_plans.py +93 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_apps.py +8 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_route_coverage.py +6 -4
- {planvortex-0.8.0 → planvortex-0.9.0}/.gitignore +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/LICENSE +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/scripts/build_docs.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/scripts/check_packaging.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/scripts/generate_models.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/scripts/generate_sync.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/scripts/route_coverage.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_client.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_client_sync.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/auth.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/auth_sync.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/errors.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/files.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/http.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/http_sync.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/pagination.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/query.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_core/transport.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_generated/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/_shapes.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/py.typed +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/accounts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/base.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/catalog.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/clients.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/comments.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/contacts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/dashboard.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/integrations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/messages.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/organizations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/products.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/publications.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources/uploads.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/accounts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/base.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/catalog.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/clients.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/comments.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/contacts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/dashboard.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/integrations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/messages.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/organizations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/products.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/publications.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/resources_sync/uploads.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/src/planvortex/webhooks.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/conftest.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/contrato.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/__init__.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/conftest.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_auth.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_catalog.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_connect_flow.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_errors.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_publish.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/live/test_read.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_accounts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_catalog.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_client.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_clients.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_comments.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_contacts.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_core.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_dashboard.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_example_comments.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_example_connect.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_example_publish.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_example_schedule.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_example_webhooks.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_files.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_generate_models.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_generate_sync.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_integrations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_messages.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_models.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_openapi_freshness.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_organizations.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_packaging.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_pagination.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_products.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_publications.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_query_parity.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_readme.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_shapes_parity.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_types.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_uploads.py +0 -0
- {planvortex-0.8.0 → planvortex-0.9.0}/tests/test_webhooks.py +0 -0
|
@@ -4,6 +4,46 @@ 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.9.0] - 2026-09-17
|
|
8
|
+
|
|
9
|
+
**Which AI plan worked?** The server can now answer it, and so can this package:
|
|
10
|
+
`ai_plans.results()` returns what every plan achieved with what it published, the aggregate per
|
|
11
|
+
template and the total.
|
|
12
|
+
|
|
13
|
+
Nothing was removed and no signature moved: upgrading from `0.8.0` needs no changes, and
|
|
14
|
+
`MIGRATION.md` gains no entry.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
|
|
18
|
+
- **`pv.ai_plans.results(id_client, id_organization, ...)`**, over
|
|
19
|
+
`GET /clients/{id}/organizations/{id}/ai_plans/results`, in both clients. Four things about it
|
|
20
|
+
are not obvious, and all four are in its docstring:
|
|
21
|
+
- **The range filters on the plan's week** (`week_start`), not on when it was created. A plan
|
|
22
|
+
created today for next week has published nothing yet.
|
|
23
|
+
- **The ranking is interactions per _measured_ publication**, not the total — the total rewards
|
|
24
|
+
the plan with seven accounts even when each post does half as well — and only plans with
|
|
25
|
+
`ranked: True` (at least three measured publications, or all of them) compete in it.
|
|
26
|
+
- **`social_network` recomputes every plan with only its publications on those networks**,
|
|
27
|
+
which is what makes plans on different networks comparable. With that filter
|
|
28
|
+
`credits_per_engagement` is absent: the cost belongs to the whole plan.
|
|
29
|
+
- **It is not a `Page`.** Besides the page it carries `totals` and `by_template`, which do not
|
|
30
|
+
depend on the page, so it comes back whole.
|
|
31
|
+
- **Being first is not being good.** Every plan, group and the dashboard block carry
|
|
32
|
+
`engagement_vs_average`: the plan's interactions per post over what your usual posts get on the
|
|
33
|
+
same networks (`expected_engagement_per_publication`), where **1 is your average**. The ranking
|
|
34
|
+
still orders by interactions per post, so the first plan can be below 1.
|
|
35
|
+
- Types `AiPlanResult`, `AiPlanResults`, `AiPlanResultsGroup`, `AiPlanResultsTemplateGroup` and
|
|
36
|
+
the closed `AiPlanResultsSort`.
|
|
37
|
+
- **`Dashboard["ai_plan_results"]`** and its `available_blocks["ai_plan_results"]`: the three best
|
|
38
|
+
plans of the range, for the home screen. It needs both `ai_plans:read` and
|
|
39
|
+
`publication_stats:read`, and unlike `ai_plans.results()` it covers the organization **and its
|
|
40
|
+
children**, so each row carries its `id_organization`.
|
|
41
|
+
- **`pv.apps.rotate_secret(id_client, id_app)`**, over `POST /clients/{id}/apps/{id}/secret`. The
|
|
42
|
+
route reached the specification before this package, and regenerating the models is what turned
|
|
43
|
+
`tests/test_route_coverage.py` red — which is the test doing its job. **The previous secret stops
|
|
44
|
+
working the moment it answers, and the webhook signature changes with it.** Like `secret()`, it
|
|
45
|
+
needs a user token.
|
|
46
|
+
|
|
7
47
|
## [0.8.0] - 2026-09-13
|
|
8
48
|
|
|
9
49
|
Slack, the thirteenth network, reaches the package — and here it arrives the way it should: **three
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: planvortex
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.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/
|
|
@@ -348,7 +348,7 @@ you missed.
|
|
|
348
348
|
· `pv.comments` · `pv.messages` · `pv.contacts` · `pv.products` · `pv.integrations` · `pv.ai_plans`
|
|
349
349
|
· `pv.dashboard` · `pv.apps`
|
|
350
350
|
|
|
351
|
-
That is **
|
|
351
|
+
That is **117 of the 117 operations** the specification documents — everything except the 19 routes
|
|
352
352
|
of roles and invitations, which are out of scope. A script walks the OpenAPI bundle on every test
|
|
353
353
|
run and fails if a route is left without a method, so the sentence above stays true.
|
|
354
354
|
|
|
@@ -318,7 +318,7 @@ you missed.
|
|
|
318
318
|
· `pv.comments` · `pv.messages` · `pv.contacts` · `pv.products` · `pv.integrations` · `pv.ai_plans`
|
|
319
319
|
· `pv.dashboard` · `pv.apps`
|
|
320
320
|
|
|
321
|
-
That is **
|
|
321
|
+
That is **117 of the 117 operations** the specification documents — everything except the 19 routes
|
|
322
322
|
of roles and invitations, which are out of scope. A script walks the OpenAPI bundle on every test
|
|
323
323
|
run and fails if a route is left without a method, so the sentence above stays true.
|
|
324
324
|
|