polygres-sdk 0.4.0__tar.gz → 0.4.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.
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/CONTRIBUTING.md +3 -3
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/PKG-INFO +3 -3
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/README.md +2 -2
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/docs/reference-v1.md +1 -1
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/pyproject.toml +1 -1
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/enums.py +11 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/generated.py +108 -15
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/python-sdk-v1.methods.json +1 -1
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_release_workflow.py +2 -2
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_version.py +6 -6
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_version_notices.py +1 -1
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/check_pgcontext_compatibility.py +7 -5
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/.gitignore +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/LICENSE +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.1.0/README.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.1.0/python-sdk-v1.methods.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.2.1/README.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.2.1/python-sdk-v1.methods.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.3.0/README.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/compatibility/0.3.0/python-sdk-v1.methods.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/README.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/pgcontext-0.2.0-names.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/migrations/vector-configuration-creation.md +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_api_version.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_method_metadata.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/api_versions.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/api_keys.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/errors.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/models.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/ports.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/principals.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/records.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/types.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/enums.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/errors.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/models.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/validation.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/models.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/types.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/catalog.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_version.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/client.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_models.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_validation.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/context_wait.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/errors.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/models.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/py.typed +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/rows.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/__init__.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/pgcontext-0.2.0-compatibility.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/python-sdk-v1.methods.schema.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/runtime-v1.openapi.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/version_notices.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/conftest.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/fixtures/context/contract-fixtures.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_client.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_compatibility.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_context.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_method_spec.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_packaged_resources.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tests/test_rows.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/check_sdk_compatibility.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/extract_release_notes.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/generate_runtime_openapi_snapshot.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/generate_sdk_method_spec.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/run_context_live_test.sh +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/runtime_operation_exclusions.json +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/test_context_live.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/verify_distribution.py +0 -0
- {polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/tools/verify_release_version.py +0 -0
|
@@ -60,7 +60,7 @@ Release rehearsal happens first on TestPyPI:
|
|
|
60
60
|
/tmp/polygres-sdk-testpypi/bin/python -m pip install \
|
|
61
61
|
--index-url https://test.pypi.org/simple/ \
|
|
62
62
|
--extra-index-url https://pypi.org/simple/ \
|
|
63
|
-
polygres-sdk==0.4.
|
|
63
|
+
polygres-sdk==0.4.1
|
|
64
64
|
/tmp/polygres-sdk-testpypi/bin/python - <<'PY'
|
|
65
65
|
import importlib.metadata
|
|
66
66
|
from polygres import Polygres
|
|
@@ -74,8 +74,8 @@ Publish to PyPI only after the same commit has passed TestPyPI validation. Push
|
|
|
74
74
|
a release tag from the public repository:
|
|
75
75
|
|
|
76
76
|
```bash
|
|
77
|
-
git tag polygres-sdk-v0.4.
|
|
78
|
-
git push origin polygres-sdk-v0.4.
|
|
77
|
+
git tag polygres-sdk-v0.4.1
|
|
78
|
+
git push origin polygres-sdk-v0.4.1
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
The `pypi` GitHub environment must be approved before the upload proceeds.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: polygres-sdk
|
|
3
|
-
Version: 0.4.
|
|
3
|
+
Version: 0.4.1
|
|
4
4
|
Summary: Python SDK for Polygres
|
|
5
5
|
Project-URL: Homepage, https://polygres.com
|
|
6
6
|
Project-URL: Documentation, https://docs.polygres.com/sdk
|
|
@@ -365,11 +365,11 @@ payload and idempotency key.
|
|
|
365
365
|
|
|
366
366
|
## Version and support
|
|
367
367
|
|
|
368
|
-
Package version: [`0.4.
|
|
368
|
+
Package version: [`0.4.1`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1).
|
|
369
369
|
|
|
370
370
|
When contacting support, include the installed SDK version and the request ID.
|
|
371
371
|
|
|
372
|
-
See the [SDK 0.4.
|
|
372
|
+
See the [SDK 0.4.1 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1) for release changes.
|
|
373
373
|
|
|
374
374
|
## Optional Agent Skill
|
|
375
375
|
|
|
@@ -323,11 +323,11 @@ payload and idempotency key.
|
|
|
323
323
|
|
|
324
324
|
## Version and support
|
|
325
325
|
|
|
326
|
-
Package version: [`0.4.
|
|
326
|
+
Package version: [`0.4.1`](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1).
|
|
327
327
|
|
|
328
328
|
When contacting support, include the installed SDK version and the request ID.
|
|
329
329
|
|
|
330
|
-
See the [SDK 0.4.
|
|
330
|
+
See the [SDK 0.4.1 release notes](https://github.com/Evokoa/polygres-sdk/releases/tag/polygres-sdk-v0.4.1) for release changes.
|
|
331
331
|
|
|
332
332
|
## Optional Agent Skill
|
|
333
333
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
This file is generated. Edit Python method metadata, docstrings, or the Runtime OpenAPI contract instead.
|
|
4
4
|
|
|
5
|
-
- SDK package version: `0.4.
|
|
5
|
+
- SDK package version: `0.4.1`
|
|
6
6
|
- HTTP API family: `v1`
|
|
7
7
|
- Default API behavior version: `2026-08-04`
|
|
8
8
|
- Method specification schema: `1`
|
|
@@ -257,6 +257,16 @@ class ProjectMode(str, Enum):
|
|
|
257
257
|
SYNCED = "synced"
|
|
258
258
|
|
|
259
259
|
|
|
260
|
+
class ProjectDataSource(str, Enum):
|
|
261
|
+
"""The data-source option selected when a project is created."""
|
|
262
|
+
|
|
263
|
+
NEON = "neon"
|
|
264
|
+
SUPABASE = "supabase"
|
|
265
|
+
PLANETSCALE = "planetscale"
|
|
266
|
+
POSTGRES = "postgres"
|
|
267
|
+
POLYGRES = "polygres"
|
|
268
|
+
|
|
269
|
+
|
|
260
270
|
class ProjectApiKeyScope(str, Enum):
|
|
261
271
|
PROJECT_FULL = "project_full"
|
|
262
272
|
SYNCED_PROJECT = "synced_project"
|
|
@@ -377,6 +387,7 @@ class PolicyId(str, Enum):
|
|
|
377
387
|
PORTAL_SESSION = "portal_session"
|
|
378
388
|
DASHBOARD_ONLY = "dashboard_only"
|
|
379
389
|
DASHBOARD_OR_CLI = "dashboard_or_cli"
|
|
390
|
+
CLI_ACCESS_USER = "cli_access_user"
|
|
380
391
|
ACTIVE_ACCOUNT = "active_account"
|
|
381
392
|
ADMIN_OPERATOR = "admin_operator"
|
|
382
393
|
ORGANIZATION_MEMBER = "organization_member"
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/generated.py
RENAMED
|
@@ -1037,6 +1037,20 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1037
1037
|
'reset_class': 'none',
|
|
1038
1038
|
'cli_exit_code': 2,
|
|
1039
1039
|
'variants': {}},
|
|
1040
|
+
{'code': 'CONTEXT_COLLECTION_SYNC_FAILED',
|
|
1041
|
+
'family': 'context',
|
|
1042
|
+
'category': 'dependency',
|
|
1043
|
+
'kind': ['public', 'persisted_operation'],
|
|
1044
|
+
'visibility': 'public',
|
|
1045
|
+
'http_status': 500,
|
|
1046
|
+
'message': 'Context collection sync failed. Retry the operation. If it fails again, contact '
|
|
1047
|
+
'support with the operation ID.',
|
|
1048
|
+
'message_key': 'polygres.error.context_collection_sync_failed',
|
|
1049
|
+
'safe_detail_fields': ['failure_stage', 'operation_id', 'underlying_code'],
|
|
1050
|
+
'retry_class': 'after_delay',
|
|
1051
|
+
'reset_class': 'none',
|
|
1052
|
+
'cli_exit_code': 8,
|
|
1053
|
+
'variants': {}},
|
|
1040
1054
|
{'code': 'CONTEXT_COLLECTION_TARGET_MISMATCH',
|
|
1041
1055
|
'family': 'context',
|
|
1042
1056
|
'category': 'validation',
|
|
@@ -1306,12 +1320,12 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1306
1320
|
{'code': 'CONTEXT_HNSW_UNSUPPORTED',
|
|
1307
1321
|
'family': 'context',
|
|
1308
1322
|
'category': 'conflict',
|
|
1309
|
-
'kind': ['public'],
|
|
1323
|
+
'kind': ['public', 'persisted_operation'],
|
|
1310
1324
|
'visibility': 'public',
|
|
1311
1325
|
'http_status': 409,
|
|
1312
1326
|
'message': 'Hnsw unsupported.',
|
|
1313
1327
|
'message_key': 'polygres.error.context_hnsw_unsupported',
|
|
1314
|
-
'safe_detail_fields': ['field'],
|
|
1328
|
+
'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
|
|
1315
1329
|
'retry_class': 'after_user_action',
|
|
1316
1330
|
'reset_class': 'none',
|
|
1317
1331
|
'cli_exit_code': 6,
|
|
@@ -1372,6 +1386,34 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1372
1386
|
'constraint and cannot '
|
|
1373
1387
|
'be converted safely.',
|
|
1374
1388
|
'http_status': 409}}},
|
|
1389
|
+
{'code': 'CONTEXT_INDEX_CORRUPT',
|
|
1390
|
+
'family': 'context',
|
|
1391
|
+
'category': 'dependency',
|
|
1392
|
+
'kind': ['public', 'persisted_operation'],
|
|
1393
|
+
'visibility': 'public',
|
|
1394
|
+
'http_status': 500,
|
|
1395
|
+
'message': 'The Context index failed its integrity check. Rebuild the index. If rebuilding '
|
|
1396
|
+
'fails, contact support with the operation ID.',
|
|
1397
|
+
'message_key': 'polygres.error.context_index_corrupt',
|
|
1398
|
+
'safe_detail_fields': ['failure_stage', 'operation_id'],
|
|
1399
|
+
'retry_class': 'after_user_action',
|
|
1400
|
+
'reset_class': 'none',
|
|
1401
|
+
'cli_exit_code': 8,
|
|
1402
|
+
'variants': {}},
|
|
1403
|
+
{'code': 'CONTEXT_INDEX_MEMORY_BUDGET_EXCEEDED',
|
|
1404
|
+
'family': 'context',
|
|
1405
|
+
'category': 'conflict',
|
|
1406
|
+
'kind': ['public', 'persisted_operation'],
|
|
1407
|
+
'visibility': 'public',
|
|
1408
|
+
'http_status': 409,
|
|
1409
|
+
'message': 'The HNSW index needs more build memory than this project currently allows. Contact '
|
|
1410
|
+
'support with the operation ID to increase the index-build budget, then retry.',
|
|
1411
|
+
'message_key': 'polygres.error.context_index_memory_budget_exceeded',
|
|
1412
|
+
'safe_detail_fields': ['failure_stage', 'operation_id'],
|
|
1413
|
+
'retry_class': 'after_user_action',
|
|
1414
|
+
'reset_class': 'none',
|
|
1415
|
+
'cli_exit_code': 6,
|
|
1416
|
+
'variants': {}},
|
|
1375
1417
|
{'code': 'CONTEXT_INDEX_MISSING',
|
|
1376
1418
|
'family': 'context',
|
|
1377
1419
|
'category': 'conflict',
|
|
@@ -1397,7 +1439,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1397
1439
|
'http_status': 409,
|
|
1398
1440
|
'message': 'Context index not ready.',
|
|
1399
1441
|
'message_key': 'polygres.error.context_index_not_ready',
|
|
1400
|
-
'safe_detail_fields': [],
|
|
1442
|
+
'safe_detail_fields': ['failure_stage', 'operation_id'],
|
|
1401
1443
|
'retry_class': 'after_user_action',
|
|
1402
1444
|
'reset_class': 'none',
|
|
1403
1445
|
'cli_exit_code': 6,
|
|
@@ -1449,7 +1491,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1449
1491
|
'http_status': 400,
|
|
1450
1492
|
'message': 'Context request exceeds a limit.',
|
|
1451
1493
|
'message_key': 'polygres.error.context_limit_exceeded',
|
|
1452
|
-
'safe_detail_fields': ['field', 'limit'],
|
|
1494
|
+
'safe_detail_fields': ['failure_stage', 'field', 'limit', 'operation_id'],
|
|
1453
1495
|
'retry_class': 'after_user_action',
|
|
1454
1496
|
'reset_class': 'none',
|
|
1455
1497
|
'cli_exit_code': 2,
|
|
@@ -1462,18 +1504,24 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1462
1504
|
{'code': 'CONTEXT_MEMORY_PRESSURE',
|
|
1463
1505
|
'family': 'context',
|
|
1464
1506
|
'category': 'conflict',
|
|
1465
|
-
'kind': ['public'],
|
|
1507
|
+
'kind': ['public', 'persisted_operation'],
|
|
1466
1508
|
'visibility': 'public',
|
|
1467
1509
|
'http_status': 409,
|
|
1468
1510
|
'message': 'Memory pressure.',
|
|
1469
1511
|
'message_key': 'polygres.error.context_memory_pressure',
|
|
1470
|
-
'safe_detail_fields': ['field', 'project_id'],
|
|
1512
|
+
'safe_detail_fields': ['failure_stage', 'field', 'operation_id', 'project_id'],
|
|
1471
1513
|
'retry_class': 'after_user_action',
|
|
1472
1514
|
'reset_class': 'none',
|
|
1473
1515
|
'cli_exit_code': 6,
|
|
1474
1516
|
'variants': {'context_heavy_work_blocked_by_project': {'message': 'Context heavy work is blocked '
|
|
1475
1517
|
'by project memory pressure.',
|
|
1476
|
-
'http_status': 409}
|
|
1518
|
+
'http_status': 409},
|
|
1519
|
+
'context_operation_database_memory_exhausted': {'message': 'The Context operation '
|
|
1520
|
+
'stopped because the '
|
|
1521
|
+
'project database ran '
|
|
1522
|
+
'out of available '
|
|
1523
|
+
'memory.',
|
|
1524
|
+
'http_status': 503}}},
|
|
1477
1525
|
{'code': 'CONTEXT_ONBOARDING_NOT_AVAILABLE',
|
|
1478
1526
|
'family': 'context',
|
|
1479
1527
|
'category': 'conflict',
|
|
@@ -1612,7 +1660,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1612
1660
|
'http_status': 500,
|
|
1613
1661
|
'message': 'The Context operation could not be completed.',
|
|
1614
1662
|
'message_key': 'polygres.error.context_operation_failed',
|
|
1615
|
-
'safe_detail_fields': ['operation_id', 'underlying_code'],
|
|
1663
|
+
'safe_detail_fields': ['failure_stage', 'operation_id', 'underlying_code'],
|
|
1616
1664
|
'retry_class': 'after_delay',
|
|
1617
1665
|
'reset_class': 'none',
|
|
1618
1666
|
'cli_exit_code': 8,
|
|
@@ -1699,6 +1747,19 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1699
1747
|
'dispatch_attempts_exhausted': {'message': 'The Context operation could not be '
|
|
1700
1748
|
'scheduled after several attempts.',
|
|
1701
1749
|
'http_status': 500}}},
|
|
1750
|
+
{'code': 'CONTEXT_OPERATION_TIMED_OUT',
|
|
1751
|
+
'family': 'context',
|
|
1752
|
+
'category': 'dependency',
|
|
1753
|
+
'kind': ['public', 'persisted_operation'],
|
|
1754
|
+
'visibility': 'public',
|
|
1755
|
+
'http_status': 504,
|
|
1756
|
+
'message': 'The Context operation exceeded the processing time limit. Retry the operation.',
|
|
1757
|
+
'message_key': 'polygres.error.context_operation_timed_out',
|
|
1758
|
+
'safe_detail_fields': ['failure_stage', 'operation_id'],
|
|
1759
|
+
'retry_class': 'after_delay',
|
|
1760
|
+
'reset_class': 'none',
|
|
1761
|
+
'cli_exit_code': 8,
|
|
1762
|
+
'variants': {}},
|
|
1702
1763
|
{'code': 'CONTEXT_OUTBOX_PUBLICATION_FAILED',
|
|
1703
1764
|
'family': 'context',
|
|
1704
1765
|
'category': 'dependency',
|
|
@@ -1945,7 +2006,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
1945
2006
|
'http_status': 409,
|
|
1946
2007
|
'message': 'Result column invalid.',
|
|
1947
2008
|
'message_key': 'polygres.error.context_result_column_invalid',
|
|
1948
|
-
'safe_detail_fields': ['field'],
|
|
2009
|
+
'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
|
|
1949
2010
|
'retry_class': 'after_user_action',
|
|
1950
2011
|
'reset_class': 'none',
|
|
1951
2012
|
'cli_exit_code': 6,
|
|
@@ -2167,7 +2228,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
2167
2228
|
'message': 'Polygres does not have the source-table permissions required to read data and '
|
|
2168
2229
|
'install synchronization triggers.',
|
|
2169
2230
|
'message_key': 'polygres.error.context_source_privilege_required',
|
|
2170
|
-
'safe_detail_fields': ['field'],
|
|
2231
|
+
'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
|
|
2171
2232
|
'retry_class': 'after_user_action',
|
|
2172
2233
|
'reset_class': 'none',
|
|
2173
2234
|
'cli_exit_code': 6,
|
|
@@ -2207,7 +2268,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
2207
2268
|
'http_status': 409,
|
|
2208
2269
|
'message': 'The Context collection source table is unavailable.',
|
|
2209
2270
|
'message_key': 'polygres.error.context_source_unavailable',
|
|
2210
|
-
'safe_detail_fields': ['reason', 'schema', 'table'],
|
|
2271
|
+
'safe_detail_fields': ['failure_stage', 'operation_id', 'reason', 'schema', 'table'],
|
|
2211
2272
|
'retry_class': 'after_user_action',
|
|
2212
2273
|
'reset_class': 'none',
|
|
2213
2274
|
'cli_exit_code': 6,
|
|
@@ -2219,16 +2280,29 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
2219
2280
|
{'code': 'CONTEXT_SOURCE_VECTOR_INVALID',
|
|
2220
2281
|
'family': 'context',
|
|
2221
2282
|
'category': 'conflict',
|
|
2222
|
-
'kind': ['public'],
|
|
2283
|
+
'kind': ['public', 'persisted_operation'],
|
|
2223
2284
|
'visibility': 'public',
|
|
2224
2285
|
'http_status': 409,
|
|
2225
2286
|
'message': 'One or more source vectors are invalid.',
|
|
2226
2287
|
'message_key': 'polygres.error.context_source_vector_invalid',
|
|
2227
|
-
'safe_detail_fields': ['collection_id', 'count', 'reason'],
|
|
2288
|
+
'safe_detail_fields': ['collection_id', 'count', 'failure_stage', 'operation_id', 'reason'],
|
|
2228
2289
|
'retry_class': 'after_user_action',
|
|
2229
2290
|
'reset_class': 'none',
|
|
2230
2291
|
'cli_exit_code': 6,
|
|
2231
2292
|
'variants': {}},
|
|
2293
|
+
{'code': 'CONTEXT_STORAGE_PRESSURE',
|
|
2294
|
+
'family': 'context',
|
|
2295
|
+
'category': 'dependency',
|
|
2296
|
+
'kind': ['public', 'persisted_operation'],
|
|
2297
|
+
'visibility': 'public',
|
|
2298
|
+
'http_status': 503,
|
|
2299
|
+
'message': 'The Context operation stopped because the project database ran out of storage.',
|
|
2300
|
+
'message_key': 'polygres.error.context_storage_pressure',
|
|
2301
|
+
'safe_detail_fields': ['failure_stage', 'operation_id'],
|
|
2302
|
+
'retry_class': 'after_user_action',
|
|
2303
|
+
'reset_class': 'none',
|
|
2304
|
+
'cli_exit_code': 8,
|
|
2305
|
+
'variants': {}},
|
|
2232
2306
|
{'code': 'CONTEXT_SYNC_TRIGGER_UNAVAILABLE',
|
|
2233
2307
|
'family': 'context',
|
|
2234
2308
|
'category': 'conflict',
|
|
@@ -2372,7 +2446,7 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
2372
2446
|
'message': 'The vector column type is not supported for this collection. Use a native pgContext '
|
|
2373
2447
|
'vector or a compatible pgvector column.',
|
|
2374
2448
|
'message_key': 'polygres.error.context_vector_type_unsupported',
|
|
2375
|
-
'safe_detail_fields': ['field'],
|
|
2449
|
+
'safe_detail_fields': ['failure_stage', 'field', 'operation_id'],
|
|
2376
2450
|
'retry_class': 'after_user_action',
|
|
2377
2451
|
'reset_class': 'none',
|
|
2378
2452
|
'cli_exit_code': 6,
|
|
@@ -3031,7 +3105,9 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
3031
3105
|
'message_key': 'polygres.error.data_plane_connection_failed',
|
|
3032
3106
|
'safe_detail_fields': ['connection',
|
|
3033
3107
|
'database',
|
|
3108
|
+
'failure_stage',
|
|
3034
3109
|
'host',
|
|
3110
|
+
'operation_id',
|
|
3035
3111
|
'port',
|
|
3036
3112
|
'project_external_id',
|
|
3037
3113
|
'reason',
|
|
@@ -3040,7 +3116,11 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
3040
3116
|
'retry_class': 'after_delay',
|
|
3041
3117
|
'reset_class': 'none',
|
|
3042
3118
|
'cli_exit_code': 8,
|
|
3043
|
-
'variants': {
|
|
3119
|
+
'variants': {'context_operation_connection_lost': {'message': 'Connection to the project '
|
|
3120
|
+
'database was lost during the '
|
|
3121
|
+
'Context operation. Retry the '
|
|
3122
|
+
'operation.',
|
|
3123
|
+
'http_status': 503}}},
|
|
3044
3124
|
{'code': 'DATA_PLANE_CONNECTION_INVALID',
|
|
3045
3125
|
'family': 'data_plane',
|
|
3046
3126
|
'category': 'dependency',
|
|
@@ -7401,6 +7481,19 @@ ERROR_CATALOG_DATA: tuple[dict[str, object], ...] = tuple([{'code': 'ACCOUNT_CRE
|
|
|
7401
7481
|
'reset_class': 'none',
|
|
7402
7482
|
'cli_exit_code': 8,
|
|
7403
7483
|
'variants': {}},
|
|
7484
|
+
{'code': 'RUNTIME_JOINT_QUERY_BUSY',
|
|
7485
|
+
'family': 'runtime',
|
|
7486
|
+
'category': 'dependency',
|
|
7487
|
+
'kind': ['public'],
|
|
7488
|
+
'visibility': 'public',
|
|
7489
|
+
'http_status': 503,
|
|
7490
|
+
'message': 'Hybrid retrieval is busy. Try again shortly.',
|
|
7491
|
+
'message_key': 'polygres.error.runtime_joint_query_busy',
|
|
7492
|
+
'safe_detail_fields': ['retry_after_seconds'],
|
|
7493
|
+
'retry_class': 'after_delay',
|
|
7494
|
+
'reset_class': 'none',
|
|
7495
|
+
'cli_exit_code': 8,
|
|
7496
|
+
'variants': {}},
|
|
7404
7497
|
{'code': 'RUNTIME_KEY_SYNC_FAILED',
|
|
7405
7498
|
'family': 'runtime',
|
|
7406
7499
|
'category': 'dependency',
|
|
@@ -95,11 +95,11 @@ def test_publish_workflow_creates_release_after_pypi() -> None:
|
|
|
95
95
|
assert "releases/latest" in workflow
|
|
96
96
|
|
|
97
97
|
|
|
98
|
-
def
|
|
98
|
+
def test_publish_workflow_checks_the_0_4_1_release_against_0_3_0() -> None:
|
|
99
99
|
workflow = (ROOT / ".github" / "workflows" / "publish-python-sdk.yml").read_text(
|
|
100
100
|
encoding="utf-8"
|
|
101
101
|
)
|
|
102
102
|
|
|
103
103
|
assert "--baseline compatibility/0.3.0/python-sdk-v1.methods.json" in workflow
|
|
104
|
-
assert "--expect-current-version 0.4.
|
|
104
|
+
assert "--expect-current-version 0.4.1" in workflow
|
|
105
105
|
assert "--baseline compatibility/0.2.1/python-sdk-v1.methods.json" not in workflow
|
|
@@ -26,12 +26,12 @@ def test_release_metadata_and_documentation_name_current_sdk_version() -> None:
|
|
|
26
26
|
)
|
|
27
27
|
)
|
|
28
28
|
|
|
29
|
-
assert __version__ == "0.4.
|
|
30
|
-
assert methods["sdk_version"] == "0.4.
|
|
31
|
-
assert "Package version: [`0.4.
|
|
32
|
-
assert "polygres-sdk-v0.4.
|
|
33
|
-
assert "SDK 0.4.
|
|
34
|
-
assert "## 0.4.
|
|
29
|
+
assert __version__ == "0.4.1"
|
|
30
|
+
assert methods["sdk_version"] == "0.4.1"
|
|
31
|
+
assert "Package version: [`0.4.1`]" in readme
|
|
32
|
+
assert "polygres-sdk-v0.4.1" in readme
|
|
33
|
+
assert "SDK 0.4.1 release notes" in readme
|
|
34
|
+
assert "## 0.4.1 - 2026-08-25" in changelog
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
def test_uninstalled_source_uses_non_release_fallback(monkeypatch: pytest.MonkeyPatch) -> None:
|
|
@@ -40,14 +40,16 @@ def _load_json(path: Path) -> dict[str, Any]:
|
|
|
40
40
|
def _arguments() -> argparse.Namespace:
|
|
41
41
|
package_root = Path(__file__).resolve().parents[1]
|
|
42
42
|
repository_root = package_root.parents[1]
|
|
43
|
+
packaged_manifest = package_root / "src/polygres/spec/pgcontext-0.2.0-compatibility.json"
|
|
44
|
+
repository_manifest = (
|
|
45
|
+
repository_root
|
|
46
|
+
/ "packages/polygres-lib/contracts/context/pgcontext-0.2.0-compatibility.json"
|
|
47
|
+
)
|
|
43
48
|
parser = argparse.ArgumentParser()
|
|
44
49
|
parser.add_argument(
|
|
45
50
|
"--manifest",
|
|
46
51
|
type=Path,
|
|
47
|
-
default=(
|
|
48
|
-
repository_root
|
|
49
|
-
/ "packages/polygres-lib/contracts/context/pgcontext-0.2.0-compatibility.json"
|
|
50
|
-
),
|
|
52
|
+
default=(repository_manifest if repository_manifest.exists() else packaged_manifest),
|
|
51
53
|
)
|
|
52
54
|
parser.add_argument(
|
|
53
55
|
"--method-spec",
|
|
@@ -57,7 +59,7 @@ def _arguments() -> argparse.Namespace:
|
|
|
57
59
|
parser.add_argument(
|
|
58
60
|
"--packaged-manifest",
|
|
59
61
|
type=Path,
|
|
60
|
-
default=
|
|
62
|
+
default=packaged_manifest,
|
|
61
63
|
)
|
|
62
64
|
return parser.parse_args()
|
|
63
65
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/__init__.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/api_keys.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/auth/principals.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/__init__.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/enums.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/errors.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/models.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/context/validation.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/core/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/__init__.py
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/_vendor/polygres_lib/errors/catalog.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/pgcontext-0.2.0-compatibility.json
RENAMED
|
File without changes
|
{polygres_sdk-0.4.0 → polygres_sdk-0.4.1}/src/polygres/spec/python-sdk-v1.methods.schema.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|