poelis-sdk 0.1.6__tar.gz → 0.1.7__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.
Potentially problematic release.
This version of poelis-sdk might be problematic. Click here for more details.
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/PKG-INFO +1 -1
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/notebooks/try_poelis_sdk.ipynb +2 -2
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/pyproject.toml +1 -1
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/models.py +1 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/org_validation.py +0 -4
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/products.py +10 -3
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/uv.lock +1 -1
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/.github/workflows/ci.yml +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/.github/workflows/codeql.yml +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/.github/workflows/publish-on-push.yml +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/.gitignore +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/LICENSE +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/README.md +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/__init__.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/_transport.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/auth0.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/browser.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/client.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/exceptions.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/items.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/logging.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/search.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/poelis_sdk/workspaces.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/tests/test_client_basic.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/tests/test_errors_and_backoff.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/tests/test_items_client.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/tests/test_search_client.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/src/tests/test_transport_and_products.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/tests/__init__.py +0 -0
- {poelis_sdk-0.1.6 → poelis_sdk-0.1.7}/tests/test_integration_smoke.py +0 -0
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"First, let's install the Poelis Python SDK. The SDK requires Python 3.11 or higher.\n",
|
|
35
35
|
"\n",
|
|
36
36
|
"```bash\n",
|
|
37
|
-
"pip install poelis-sdk\n",
|
|
37
|
+
"pip install -U poelis-sdk\n",
|
|
38
38
|
"```\n",
|
|
39
39
|
"\n",
|
|
40
40
|
"### Requirements\n",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
}
|
|
58
58
|
],
|
|
59
59
|
"source": [
|
|
60
|
-
"!pip install poelis-sdk"
|
|
60
|
+
"!pip install -U poelis-sdk"
|
|
61
61
|
]
|
|
62
62
|
},
|
|
63
63
|
{
|
|
@@ -77,10 +77,6 @@ def filter_by_organization(data_list: List[Dict[str, Any]], expected_org_id: str
|
|
|
77
77
|
else:
|
|
78
78
|
cross_org_count += 1
|
|
79
79
|
|
|
80
|
-
if cross_org_count > 0:
|
|
81
|
-
# Log warning about cross-org data (but don't fail)
|
|
82
|
-
print(f"⚠️ Warning: Filtered out {cross_org_count} {data_type} from other organizations")
|
|
83
|
-
|
|
84
80
|
return filtered
|
|
85
81
|
|
|
86
82
|
|
|
@@ -4,6 +4,7 @@ from typing import Generator, Optional, List, TYPE_CHECKING
|
|
|
4
4
|
|
|
5
5
|
from ._transport import Transport
|
|
6
6
|
from .models import PaginatedProducts, Product
|
|
7
|
+
from .org_validation import filter_by_organization
|
|
7
8
|
|
|
8
9
|
if TYPE_CHECKING:
|
|
9
10
|
from .workspaces import WorkspacesClient
|
|
@@ -32,7 +33,7 @@ class ProductsClient:
|
|
|
32
33
|
|
|
33
34
|
query = (
|
|
34
35
|
"query($ws: ID!, $q: String, $limit: Int!, $offset: Int!) {\n"
|
|
35
|
-
" products(workspaceId: $ws, q: $q, limit: $limit, offset: $offset) { id name code description workspaceId }\n"
|
|
36
|
+
" products(workspaceId: $ws, q: $q, limit: $limit, offset: $offset) { id name code description workspaceId orgId }\n"
|
|
36
37
|
"}"
|
|
37
38
|
)
|
|
38
39
|
variables = {"ws": workspace_id, "q": q, "limit": int(limit), "offset": int(offset)}
|
|
@@ -41,8 +42,14 @@ class ProductsClient:
|
|
|
41
42
|
payload = resp.json()
|
|
42
43
|
if "errors" in payload:
|
|
43
44
|
raise RuntimeError(str(payload["errors"]))
|
|
44
|
-
|
|
45
|
-
|
|
45
|
+
|
|
46
|
+
products = payload.get("data", {}).get("products", [])
|
|
47
|
+
|
|
48
|
+
# Client-side organization filtering as backup protection
|
|
49
|
+
expected_org_id = self._t._org_id
|
|
50
|
+
filtered_products = filter_by_organization(products, expected_org_id, "products")
|
|
51
|
+
|
|
52
|
+
return PaginatedProducts(data=[Product(**r) for r in filtered_products], limit=limit, offset=offset)
|
|
46
53
|
|
|
47
54
|
def iter_all_by_workspace(self, *, workspace_id: str, q: Optional[str] = None, page_size: int = 100, start_offset: int = 0) -> Generator[Product, None, None]:
|
|
48
55
|
"""Iterate products via GraphQL with offset pagination for a workspace."""
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|