phenostore-sdk-python 0.1.1__py3-none-any.whl
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.
- phenostore/__init__.py +26 -0
- phenostore/_auth.py +94 -0
- phenostore/client.py +276 -0
- phenostore/errors.py +93 -0
- phenostore/gen/__init__.py +8 -0
- phenostore/gen/api/__init__.py +1 -0
- phenostore/gen/api/bulk/__init__.py +1 -0
- phenostore/gen/api/bulk/get_bulk_status.py +194 -0
- phenostore/gen/api/bulk/submit_bulk.py +223 -0
- phenostore/gen/api/fhir/__init__.py +1 -0
- phenostore/gen/api/fhir/conditional_delete_resource.py +277 -0
- phenostore/gen/api/fhir/create_resource.py +257 -0
- phenostore/gen/api/fhir/delete_resource.py +212 -0
- phenostore/gen/api/fhir/get_docref.py +281 -0
- phenostore/gen/api/fhir/get_metadata.py +185 -0
- phenostore/gen/api/fhir/get_resource_history.py +240 -0
- phenostore/gen/api/fhir/get_smart_configuration.py +169 -0
- phenostore/gen/api/fhir/patch_resource.py +282 -0
- phenostore/gen/api/fhir/post_docref.py +200 -0
- phenostore/gen/api/fhir/process_bundle.py +201 -0
- phenostore/gen/api/fhir/read_resource.py +214 -0
- phenostore/gen/api/fhir/read_resource_version.py +228 -0
- phenostore/gen/api/fhir/search_resources.py +390 -0
- phenostore/gen/api/fhir/search_resources_post.py +228 -0
- phenostore/gen/api/fhir/update_resource.py +281 -0
- phenostore/gen/api/fhir/validate_resource.py +217 -0
- phenostore/gen/api/o_auth/__init__.py +1 -0
- phenostore/gen/api/o_auth/issue_token.py +186 -0
- phenostore/gen/api/system/__init__.py +1 -0
- phenostore/gen/api/system/get_health.py +128 -0
- phenostore/gen/client.py +280 -0
- phenostore/gen/errors.py +16 -0
- phenostore/gen/models/__init__.py +71 -0
- phenostore/gen/models/bulk_operation_accepted.py +79 -0
- phenostore/gen/models/bulk_operation_accepted_status.py +8 -0
- phenostore/gen/models/bulk_operation_status.py +122 -0
- phenostore/gen/models/bulk_operation_status_code.py +11 -0
- phenostore/gen/models/bundle.py +132 -0
- phenostore/gen/models/bundle_entry.py +128 -0
- phenostore/gen/models/bundle_entry_request.py +70 -0
- phenostore/gen/models/bundle_entry_response.py +97 -0
- phenostore/gen/models/bundle_entry_search.py +69 -0
- phenostore/gen/models/bundle_entry_search_mode.py +9 -0
- phenostore/gen/models/bundle_link.py +69 -0
- phenostore/gen/models/bundle_resource_type.py +8 -0
- phenostore/gen/models/bundle_type.py +11 -0
- phenostore/gen/models/fhir_resource.py +47 -0
- phenostore/gen/models/health_response.py +63 -0
- phenostore/gen/models/health_response_status.py +8 -0
- phenostore/gen/models/issue_severity.py +11 -0
- phenostore/gen/models/issue_token_body.py +91 -0
- phenostore/gen/models/issue_token_body_grant_type.py +8 -0
- phenostore/gen/models/json_patch_item.py +90 -0
- phenostore/gen/models/json_patch_op.py +13 -0
- phenostore/gen/models/o_auth_error.py +69 -0
- phenostore/gen/models/operation_outcome.py +85 -0
- phenostore/gen/models/operation_outcome_issue.py +92 -0
- phenostore/gen/models/operation_outcome_resource_type.py +8 -0
- phenostore/gen/models/post_docref_body.py +124 -0
- phenostore/gen/models/resource_type.py +47 -0
- phenostore/gen/models/search_resources_post_body.py +155 -0
- phenostore/gen/models/search_summary_mode.py +12 -0
- phenostore/gen/models/search_total_mode.py +10 -0
- phenostore/gen/models/smart_configuration.py +111 -0
- phenostore/gen/models/token_response.py +87 -0
- phenostore/gen/models/token_response_token_type.py +8 -0
- phenostore/gen/types.py +54 -0
- phenostore/py.typed +0 -0
- phenostore_sdk_python-0.1.1.dist-info/METADATA +196 -0
- phenostore_sdk_python-0.1.1.dist-info/RECORD +72 -0
- phenostore_sdk_python-0.1.1.dist-info/WHEEL +4 -0
- phenostore_sdk_python-0.1.1.dist-info/licenses/LICENSE +21 -0
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: phenostore-sdk-python
|
|
3
|
+
Version: 0.1.1
|
|
4
|
+
Summary: Python SDK for the Phenostore FHIR data API
|
|
5
|
+
Project-URL: Repository, https://github.com/PhenoML/phenostore-sdk-python
|
|
6
|
+
Author: PhenoML Inc.
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Classifier: Programming Language :: Python :: 3
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.14
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.15
|
|
15
|
+
Classifier: Typing :: Typed
|
|
16
|
+
Requires-Python: >=3.11
|
|
17
|
+
Requires-Dist: attrs<27,>=25.3
|
|
18
|
+
Requires-Dist: httpx<0.29,>=0.28.1
|
|
19
|
+
Requires-Dist: python-dateutil<3,>=2.9
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
|
|
22
|
+
# phenostore-sdk-python
|
|
23
|
+
|
|
24
|
+
Python SDK for [Phenostore](https://phenoml.com), a FHIR-compatible data store by PhenoML Inc.
|
|
25
|
+
Requires Python 3.11 or later.
|
|
26
|
+
|
|
27
|
+
This follows the [Go SDK](https://github.com/PhenoML/phenostore-sdk-go) design: a generated OpenAPI client and models, wrapped with OAuth2 authentication, convenience methods, and FHIR error helpers.
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
Install a published release from PyPI:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
pip install phenostore-sdk-python
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Or install from a checkout:
|
|
38
|
+
|
|
39
|
+
```sh
|
|
40
|
+
pip install .
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
Import the SDK as `phenostore`.
|
|
44
|
+
|
|
45
|
+
## Python runtime support
|
|
46
|
+
|
|
47
|
+
We support CPython feature versions that still receive upstream bug fixes or security fixes, currently Python 3.11–3.15. CI tests every supported version. New stable versions are added after compatibility checks, and the supported range is reviewed when Python releases a new feature version or an existing version reaches end of life. See the [upstream support schedule](https://devguide.python.org/versions/).
|
|
48
|
+
|
|
49
|
+
Support for a version may be removed after upstream end of life, with advance notice and an explicit release-note entry. Python 3.11 remains supported until at least its upstream end of life in October 2027. Runtime requirements are declared in `requires-python`; we do not impose an upper version bound without a known incompatibility.
|
|
50
|
+
|
|
51
|
+
## Usage
|
|
52
|
+
|
|
53
|
+
```python
|
|
54
|
+
from phenostore import Client, OperationOutcomeError, is_not_found
|
|
55
|
+
|
|
56
|
+
with Client(
|
|
57
|
+
"https://api.phenostore.example.com",
|
|
58
|
+
"your-client-id",
|
|
59
|
+
"your-client-secret",
|
|
60
|
+
"my-tenant",
|
|
61
|
+
"my-store",
|
|
62
|
+
) as client:
|
|
63
|
+
try:
|
|
64
|
+
patient = client.read_resource("Patient", "pat-123")
|
|
65
|
+
print(patient)
|
|
66
|
+
except OperationOutcomeError as error:
|
|
67
|
+
if is_not_found(error):
|
|
68
|
+
print("not found")
|
|
69
|
+
else:
|
|
70
|
+
raise
|
|
71
|
+
|
|
72
|
+
created = client.create_resource(
|
|
73
|
+
"Observation",
|
|
74
|
+
{
|
|
75
|
+
"resourceType": "Observation",
|
|
76
|
+
"status": "final",
|
|
77
|
+
"code": {"text": "Blood pressure"},
|
|
78
|
+
"subject": {"reference": "Patient/pat-123"},
|
|
79
|
+
},
|
|
80
|
+
)
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
FHIR resources and bundles are plain dictionaries. Unknown fields and extensions are preserved; the wrapper does not validate resources against a FHIR model. Use `client.tenant` and `client.store` to access the configured tenant and store.
|
|
84
|
+
|
|
85
|
+
| Method | Behavior |
|
|
86
|
+
| --- | --- |
|
|
87
|
+
| `read_resource(resource_type, id)` | Read a resource |
|
|
88
|
+
| `create_resource(resource_type, body, *, if_none_exist=None)` | Create, including conditional create (200 or 201) |
|
|
89
|
+
| `update_resource(resource_type, id, body, *, if_match=None)` | Update or upsert (200 or 201) |
|
|
90
|
+
| `delete_resource(resource_type, id)` | Delete; returns `None` |
|
|
91
|
+
| `search_resources(resource_type, params=None)` | Search with arbitrary FHIR query parameters |
|
|
92
|
+
| `process_bundle(bundle)` | Execute a transaction or batch bundle |
|
|
93
|
+
|
|
94
|
+
```python
|
|
95
|
+
results = client.search_resources(
|
|
96
|
+
"Observation",
|
|
97
|
+
{
|
|
98
|
+
"subject:Patient.name": "Smith",
|
|
99
|
+
"date": ["ge2026-01-01", "lt2027-01-01"],
|
|
100
|
+
"_include": ["Observation:subject", "Observation:encounter"],
|
|
101
|
+
"_count": 50,
|
|
102
|
+
},
|
|
103
|
+
)
|
|
104
|
+
# A sequence of (name, value) pairs also supports repeated parameters.
|
|
105
|
+
client.update_resource("Patient", "pat-123", patient, if_match='W/"1"')
|
|
106
|
+
client.create_resource("Patient", patient, if_none_exist="identifier=https://example.com|123")
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
There is no automatic pagination; use the returned Bundle links/cursors in subsequent searches.
|
|
110
|
+
|
|
111
|
+
## Asynchronous usage
|
|
112
|
+
|
|
113
|
+
`AsyncClient` has the same six convenience methods, all awaitable:
|
|
114
|
+
|
|
115
|
+
```python
|
|
116
|
+
from phenostore import AsyncClient
|
|
117
|
+
|
|
118
|
+
|
|
119
|
+
async def read_patient():
|
|
120
|
+
async with AsyncClient(base_url, client_id, client_secret, tenant, store) as client:
|
|
121
|
+
return await client.read_resource("Patient", "pat-123")
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
Use a synchronous client in a `with` block (or call `close()`), and an asynchronous client in an `async with` block (or await `aclose()`). Keep an async client within one event loop.
|
|
125
|
+
|
|
126
|
+
## Authentication and HTTP configuration
|
|
127
|
+
|
|
128
|
+
OAuth2 client credentials are sent in a form body to `<base_url>/oauth/token`, matching the Go SDK. Tokens are acquired lazily, reused, and refreshed shortly before expiry. Concurrent calls share token refresh within each execution mode. Token failures raise `AuthenticationError`; requests are not retried automatically.
|
|
129
|
+
|
|
130
|
+
Both clients accept `scopes=[...]`, `timeout=30.0` (seconds or `httpx.Timeout`), `verify=True` (or an `ssl.SSLContext` for custom TLS), and `transport=...` (an HTTPX sync or async transport). These settings apply to token exchange and API calls. Redirects are disabled. A base URL may contain a path prefix.
|
|
131
|
+
|
|
132
|
+
## Errors
|
|
133
|
+
|
|
134
|
+
Convenience methods raise `OperationOutcomeError` for non-2xx API responses, including non-JSON error bodies. It exposes `status_code`, raw `body` bytes, parsed `outcome` when available, and the original HTTPX `response` with headers. Its message includes the first FHIR issue when present. `is_not_found`, `is_gone`, `is_conflict` (HTTP 412), and `is_forbidden` classify the first `OperationOutcomeError` encountered, including through chained exception wrappers. Earlier API failures in its history do not affect that classification.
|
|
135
|
+
|
|
136
|
+
Invalid JSON/object responses raise `InvalidResponseError`. HTTPX connection and timeout exceptions propagate unchanged.
|
|
137
|
+
|
|
138
|
+
## Full generated API
|
|
139
|
+
|
|
140
|
+
Use `client.inner` with generated endpoint functions for patch, history, bulk, validation, `$docref`, metadata, and system endpoints. This retains automatic authentication and HTTP configuration. Use sync functions with `Client.inner` and async functions with `AsyncClient.inner`.
|
|
141
|
+
|
|
142
|
+
```python
|
|
143
|
+
from phenostore.gen.api.fhir import get_resource_history
|
|
144
|
+
from phenostore.gen.models import ResourceType
|
|
145
|
+
|
|
146
|
+
response = get_resource_history.sync_detailed(
|
|
147
|
+
client.tenant,
|
|
148
|
+
client.store,
|
|
149
|
+
ResourceType.PATIENT,
|
|
150
|
+
"pat-123",
|
|
151
|
+
client=client.inner,
|
|
152
|
+
)
|
|
153
|
+
print(response.status_code, response.headers, response.parsed)
|
|
154
|
+
```
|
|
155
|
+
|
|
156
|
+
Each endpoint provides `sync`, `sync_detailed`, `asyncio`, and `asyncio_detailed` variants where applicable. Detailed responses expose status, headers, raw bytes, and typed models. Models support `from_dict()` and `to_dict()`.
|
|
157
|
+
|
|
158
|
+
Generated functions follow the generator's error semantics: documented error responses are returned as parsed models, undocumented statuses raise `phenostore.gen.errors.UnexpectedStatus`, and malformed modeled responses may raise parsing errors. The convenience error helpers apply to convenience methods. Health, token, and SMART endpoints can also use a standalone `phenostore.gen.Client` without automatic authentication.
|
|
159
|
+
|
|
160
|
+
## Development and generation
|
|
161
|
+
|
|
162
|
+
Install [uv](https://docs.astral.sh/uv/) and run:
|
|
163
|
+
|
|
164
|
+
```sh
|
|
165
|
+
make install
|
|
166
|
+
make generate
|
|
167
|
+
make test lint check-generated build
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
`api/openapi.yaml` was initially imported verbatim from the Go SDK at commit `dc11a82650f4e75dbbd3f7e8cdc292193e3056c8` (the upstream API contract). Subsequent updates arrive through the regeneration workflow. Do not edit it here; change the Phenostore API upstream. `phenostore/gen/` is generated with [openapi-python-client](https://github.com/openapi-generators/openapi-python-client); never edit generated files by hand.
|
|
171
|
+
|
|
172
|
+
Generator dependencies are pinned separately in `tools/pyproject.toml` and `tools/uv.lock` and are not runtime dependencies. The generator temporarily removes duplicate request-body encodings for identical schemas to work around a multi-media-type bug in 0.29.1, retaining the first media type (FHIR JSON). It never changes the imported spec. Formatting is isolated from local settings. `make check-generated` regenerates in a temporary directory and compares every generated file without changing the checkout.
|
|
173
|
+
|
|
174
|
+
CI tests Python 3.11–3.15, checks formatting/types and regeneration, and builds a wheel and source distribution. CI and regeneration use the pinned `astral-sh/setup-uv` action to install a specific uv version and cache dependencies using both lockfiles, with separate caches for each Python version. The regeneration workflow accepts the same `spec-updated` repository dispatch payload as the Go SDK (`spec_b64`, `spec_sha`) and opens a PR after validation. Configure the upstream dispatcher to include this repository to enable automatic spec updates. A manual workflow run regenerates from the committed spec. PRs opened with `GITHUB_TOKEN` do not trigger normal PR workflows automatically; run CI manually on the PR branch, or configure a GitHub App token for PR creation.
|
|
175
|
+
|
|
176
|
+
To upgrade the generator, run `uv add --project tools openapi-python-client==<version>`, then `make generate test lint check-generated build`. Commit the tooling lockfile and generated changes together. Dependabot's tooling PRs may need this regeneration step before CI can pass.
|
|
177
|
+
|
|
178
|
+
Regeneration PRs are created and updated with `git` and the GitHub CLI (`gh`), using the automation-owned `sdk/regenerate` branch. If the regenerated client fails compatibility checks, a pinned Claude Code action attempts to adapt the handwritten wrapper, tests, examples, and README. The full checks must then pass before those adaptations are included in the PR. The imported spec and generated files must not be edited by the agent. If regeneration produces no changes relative to `main`, an existing regeneration PR is closed. Branch updates use an explicit force-with-lease check, so a concurrent push causes the workflow to fail instead of overwriting it.
|
|
179
|
+
|
|
180
|
+
Automatic wrapper adaptation authenticates to Anthropic with GitHub Actions OIDC through [Workload Identity Federation](https://platform.claude.com/docs/en/manage-claude/workload-identity-federation). The organization, federation rule, service account, and workspace IDs are configured directly in `.github/workflows/generate.yml`. These are public identifiers; authentication uses the workflow's OIDC token, so no Anthropic API key or Actions variables are needed. Ordinary regeneration and deterministic commit/PR titles do not call Claude.
|
|
181
|
+
|
|
182
|
+
In the Anthropic Console, an organization admin/owner registers the GitHub issuer `https://token.actions.githubusercontent.com` in discovery mode, creates a service account with access to the chosen workspace, and creates a federation rule for that account. Use audience `https://api.anthropic.com`, scope `workspace:developer`, and subject `repo:PhenoML/phenostore-sdk-python:ref:refs/heads/main`. Limit the rule's claims to this repository and regeneration workflow as described in the [GitHub Actions federation guide](https://platform.claude.com/docs/en/manage-claude/wif-providers/github-actions). The Console's “Connect workload” wizard can create these resources together. Manual workflow runs must use `main` to match this identity. Git operations and PR creation continue to use the workflow's built-in `GITHUB_TOKEN`.
|
|
183
|
+
|
|
184
|
+
## Releases and PyPI publishing
|
|
185
|
+
|
|
186
|
+
Release Please prepares version/changelog PRs after conventional commits reach `main`. Merging a release PR creates a GitHub release and starts package publication in the same `release-please.yml` workflow. Ordinary pushes that do not create a release do not publish a package.
|
|
187
|
+
|
|
188
|
+
The build job checks out the exact released commit, verifies that the package versions match the release, runs the tests/lint/generation checks, and builds the wheel and source distribution. It installs and smoke tests both distributions in isolated environments before handing them to a separate publish job. Only the publish job can request an OIDC token; it runs in the `pypi` GitHub environment and uploads with `uv publish --trusted-publishing always`. No stored PyPI API token is required.
|
|
189
|
+
|
|
190
|
+
The PyPI Trusted Publisher must identify owner `PhenoML`, repository `phenostore-sdk-python`, workflow filename `release-please.yml`, and environment `pypi`. For the first upload, configure a pending publisher for project `phenostore-sdk-python`. GitHub creates the referenced environment on first use if it does not already exist.
|
|
191
|
+
|
|
192
|
+
If an upload fails, re-run the failed jobs in that workflow run. The publisher checks PyPI for files already uploaded, allowing a partially completed upload to be retried. Re-running the entire workflow may not publish because Release Please only signals a newly created release once.
|
|
193
|
+
|
|
194
|
+
## License
|
|
195
|
+
|
|
196
|
+
[MIT](LICENSE)
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
phenostore/__init__.py,sha256=Hai37hHcGQR9FPS0cA03FeBanr3kaYrhrX0BpPX9Lis,517
|
|
2
|
+
phenostore/_auth.py,sha256=3e03KCrVUZhNrfb0eEAcFeqTg_1FSoEh7IfSJMar5Mc,3351
|
|
3
|
+
phenostore/client.py,sha256=p8f8e3GG0q3BeB_9c_7fapdGm3gPOHDCJzSrSZJiqdQ,10305
|
|
4
|
+
phenostore/errors.py,sha256=r06ydDT0EKK4qMXSY9flDiwaGZFSCO3ByUyzppaktQs,3269
|
|
5
|
+
phenostore/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
phenostore/gen/__init__.py,sha256=hcB8v3tDReHYK42thFeRKKcGhfm43Qbj6XcRxFQIybU,167
|
|
7
|
+
phenostore/gen/client.py,sha256=5TZkF0JpMHgvYykROEpjaNDGbSchq33uZCh-GaH8_WU,12426
|
|
8
|
+
phenostore/gen/errors.py,sha256=gO8GBmKqmSNgAg-E5oT-oOyxztvp7V_6XG7OUTT15q0,546
|
|
9
|
+
phenostore/gen/types.py,sha256=0We4NPvhIYASRpQ3le41nmJeEAVm42-2VKdzlJ4Ogok,1343
|
|
10
|
+
phenostore/gen/api/__init__.py,sha256=zTSiG_ujSjAqWPyc435YXaX9XTlpMjiJWBbV-f-YtdA,45
|
|
11
|
+
phenostore/gen/api/bulk/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
12
|
+
phenostore/gen/api/bulk/get_bulk_status.py,sha256=5-Mo9WIlME8xb5KZGTdyD5ktpKamusvUxsnVAxM6Olk,4985
|
|
13
|
+
phenostore/gen/api/bulk/submit_bulk.py,sha256=0rWKgAaza-XHMFu1ZGcs1B7k6DPjGvtB6eDoJ52rgEY,6547
|
|
14
|
+
phenostore/gen/api/fhir/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
15
|
+
phenostore/gen/api/fhir/conditional_delete_resource.py,sha256=IPMUIJQe8EYtPlmU0_PIGN9QHv6fqL8DRngxmZkBPRk,8539
|
|
16
|
+
phenostore/gen/api/fhir/create_resource.py,sha256=hUStZEzoqMtE181tdtGwyrM4zznYmIvK_TfBiUR5zOE,7384
|
|
17
|
+
phenostore/gen/api/fhir/delete_resource.py,sha256=MyLb1vsEeTYgsCQ67yXspl4voL6Vh2dI37j_3_9JTg8,5462
|
|
18
|
+
phenostore/gen/api/fhir/get_docref.py,sha256=gAy5lQy4myUmH-gwf9ATDlnx_EhyxXaruZLmnvehNdY,8268
|
|
19
|
+
phenostore/gen/api/fhir/get_metadata.py,sha256=1b_ALHB2VmRKhRouyxpUGS6VjJ6taIJ-CksBeDIRkoY,4890
|
|
20
|
+
phenostore/gen/api/fhir/get_resource_history.py,sha256=0szcDGZm35QvAbmMFvCuwDGUZ7aTFaP5_loMH99j1fU,6569
|
|
21
|
+
phenostore/gen/api/fhir/get_smart_configuration.py,sha256=PhUrtDvL-f9i9RxGKLGBU6coHZSU-mhEfJOxB9brtIE,4227
|
|
22
|
+
phenostore/gen/api/fhir/patch_resource.py,sha256=TQGEHZWaN4fi_f2iMRtJ0hGrzkJXw_RSKGevknCZSQs,8008
|
|
23
|
+
phenostore/gen/api/fhir/post_docref.py,sha256=7td6uuxbjKERejFJ_c9VBR23YfdPuS-utA72CJxTpQU,5119
|
|
24
|
+
phenostore/gen/api/fhir/process_bundle.py,sha256=mrGfrqEr_wzSu8ArOEeBohtZhju8aHYJGubKuggXi5U,5287
|
|
25
|
+
phenostore/gen/api/fhir/read_resource.py,sha256=1FaeBcMR46ZIRxZ9llpBftnV-qSt_iTSLgAoDOBdhoQ,5609
|
|
26
|
+
phenostore/gen/api/fhir/read_resource_version.py,sha256=OkWqS4ViwMWfaBF4lsCEMxtyRZDcbiqCV8aUcgZG2kw,6112
|
|
27
|
+
phenostore/gen/api/fhir/search_resources.py,sha256=HY9NJMhfLoP2RR-qz8QY5NSqPWKDecn6IE5h8He7iYk,14027
|
|
28
|
+
phenostore/gen/api/fhir/search_resources_post.py,sha256=ijKmbC-NIt8Et0_u8hCH1PQZNiLcOoCEQF-KmqxzXmA,6595
|
|
29
|
+
phenostore/gen/api/fhir/update_resource.py,sha256=ws48VHsuXcMvaDOiPWkqfl7SGkU9KV0v61HrJjYKxv4,7999
|
|
30
|
+
phenostore/gen/api/fhir/validate_resource.py,sha256=5ld1Jm3_yGEMHygix_c09DuDQTM9qSDHHR_O6YjojNY,6043
|
|
31
|
+
phenostore/gen/api/o_auth/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
32
|
+
phenostore/gen/api/o_auth/issue_token.py,sha256=2ysRrSgIeWFzx7-5pFt762Iej9eo4x26X_SC2p6aCQ4,5255
|
|
33
|
+
phenostore/gen/api/system/__init__.py,sha256=5vd9uJWAjRqa9xzxzYkLD1yoZ12Ld_bAaNB5WX4fbE8,56
|
|
34
|
+
phenostore/gen/api/system/get_health.py,sha256=mOPE97tY_5sc_kOE-3rRPHGDhoKXKe5KY44_NlEVLXk,3172
|
|
35
|
+
phenostore/gen/models/__init__.py,sha256=qELD5uRLqZIzR9wX8U9OYHDLOOlYCSRfrPfCGKeeJP4,2542
|
|
36
|
+
phenostore/gen/models/bulk_operation_accepted.py,sha256=U86XsDt5X2SIsYcqoEwnsLuIULBbT0qZKvg3HwJk_18,1986
|
|
37
|
+
phenostore/gen/models/bulk_operation_accepted_status.py,sha256=8mURzU-dwlEqHqsk-hA2rbapx_RcQqQ4qDQGf_960-c,157
|
|
38
|
+
phenostore/gen/models/bulk_operation_status.py,sha256=XIDZdpYXFVrmm0nsnqI3pyWXpgLZCdOIhJBKgIY4CeM,3399
|
|
39
|
+
phenostore/gen/models/bulk_operation_status_code.py,sha256=mB4yUF2dFMHZAz6fhyw8LRb-HiTBMt_G7M8FXTMb2qM,233
|
|
40
|
+
phenostore/gen/models/bundle.py,sha256=U5-WA-BHrspbqKYB6-0G8ul3fbruC1iYo_-XjUzphyw,3886
|
|
41
|
+
phenostore/gen/models/bundle_entry.py,sha256=hPYkyaml-rnRMbqbJWHd_0Go3at9VNyQIW3z95--fCw,4100
|
|
42
|
+
phenostore/gen/models/bundle_entry_request.py,sha256=CkNQXUH01DmNulwdxU5LpoRXBdajOkps_xuGzDfwyt4,1802
|
|
43
|
+
phenostore/gen/models/bundle_entry_response.py,sha256=w8xU-MgUJRd2oegaVzZ-zd5bDM9KaHbMnsqXrdo5RFI,2678
|
|
44
|
+
phenostore/gen/models/bundle_entry_search.py,sha256=I0yrnkY_30XIbPYOFDNpWIxIuyD_BcAAPURjnGrHwTc,1936
|
|
45
|
+
phenostore/gen/models/bundle_entry_search_mode.py,sha256=EI8A78iQ3g2EEzL5MsVDNDSV_xiViiizjcojzno7xq0,171
|
|
46
|
+
phenostore/gen/models/bundle_link.py,sha256=Tt-Orwvw26vyMIzgJAij9Q3et3xLNkn2btzykHW9QGg,1641
|
|
47
|
+
phenostore/gen/models/bundle_resource_type.py,sha256=rFknVLRiqmvi5Jm27GLszuIYA_e-nLH0PM6w67rsJI4,146
|
|
48
|
+
phenostore/gen/models/bundle_type.py,sha256=ekmPv5RZ8b7AYbVZpT2VM5N7ZdEqMROLqQNRQJUwL64,256
|
|
49
|
+
phenostore/gen/models/fhir_resource.py,sha256=bhHEEPEps_BPebkZD2F1p3jgkT2u3S1MQZpNeUwIZRA,1287
|
|
50
|
+
phenostore/gen/models/health_response.py,sha256=TcTrMrnxoMOGmH9KrrCk9Oxadi_VNtGY45scQ6CJsW0,1636
|
|
51
|
+
phenostore/gen/models/health_response_status.py,sha256=f_bqWqOmUhRatyKjflvNtwvFBq0oGNdLfflXDpwaQgw,140
|
|
52
|
+
phenostore/gen/models/issue_severity.py,sha256=NpaMLUzV6K3R_1yHR9TotU_QhDu-kp1S00IEcWjx6LQ,215
|
|
53
|
+
phenostore/gen/models/issue_token_body.py,sha256=fmVtvj62gmYM5se87-ICRe-ojxfitsQGUF1nASacXOM,2723
|
|
54
|
+
phenostore/gen/models/issue_token_body_grant_type.py,sha256=9GYdXDvNsWBqhwfuGURFJj1urG8k-KWTmA3cs3fcJ-0,175
|
|
55
|
+
phenostore/gen/models/json_patch_item.py,sha256=5zUxEUveZ_GNnhlcb1XtPDHRPJitUXjZb91GWk9OOaw,2206
|
|
56
|
+
phenostore/gen/models/json_patch_op.py,sha256=oBpUN2xQg0GQx9cLMg_Yt1qptZH-qzQcEl4SNB-pv-Q,233
|
|
57
|
+
phenostore/gen/models/o_auth_error.py,sha256=WEZy71j7SD73Q5oXMZPbBQxXdg3eAp28WLmYPBRetFs,1783
|
|
58
|
+
phenostore/gen/models/operation_outcome.py,sha256=yiVnqSXaTNDYDpPx1-5rinqRPNMK4xFgLuINHmXLuvQ,2449
|
|
59
|
+
phenostore/gen/models/operation_outcome_issue.py,sha256=vWD6co9htxNxHV6TB0SUqeOOfOHJcUeAS93SPkSBSsk,2595
|
|
60
|
+
phenostore/gen/models/operation_outcome_resource_type.py,sha256=YFk2hO-OJDYgAYkd6UJl7mGjRx_KegcmpvbpbtBN_Wg,176
|
|
61
|
+
phenostore/gen/models/post_docref_body.py,sha256=H4OzZWL2bnSXEjXiv3kdMDFhlyJdz-Ce690ZuHzDEy0,3741
|
|
62
|
+
phenostore/gen/models/resource_type.py,sha256=XR2gIohGM6T_7drmAahpRS_ELjw31jNzU0OGTKTMPsc,1472
|
|
63
|
+
phenostore/gen/models/search_resources_post_body.py,sha256=r8F_TnjDovbfoo4pHm9QJlGUjnKEAgUha-86wxsEDXQ,5354
|
|
64
|
+
phenostore/gen/models/search_summary_mode.py,sha256=3o2lt-JC_0dCGYJlfe46SUZv1xUcLg7FIdE-gMhjenc,217
|
|
65
|
+
phenostore/gen/models/search_total_mode.py,sha256=jv3rj-XA3cHCS1PsnBQLzN_Ymu65O2MYCU7kogt0d3I,191
|
|
66
|
+
phenostore/gen/models/smart_configuration.py,sha256=Dq8OGv8b4hy4RRIAiDpcuKNvks-8KRba9rUazxwJyY8,4008
|
|
67
|
+
phenostore/gen/models/token_response.py,sha256=5Qejh5rLtUvuArviNGV4MxZXL_rsgY01AQeMqMsFe0s,2326
|
|
68
|
+
phenostore/gen/models/token_response_token_type.py,sha256=ML3GBChXIvhRwETYb3b8B_tdrV1UIS9WKQAOMv43a3c,150
|
|
69
|
+
phenostore_sdk_python-0.1.1.dist-info/METADATA,sha256=RbStRPoRgioDKc6CU4x8KmM1EH4qgcIjXRaeQPtUJ7w,13002
|
|
70
|
+
phenostore_sdk_python-0.1.1.dist-info/WHEEL,sha256=2iZrJkDIkeDh0k9SikKMqFuRP-ua6mb4Ir1AsER4BEw,87
|
|
71
|
+
phenostore_sdk_python-0.1.1.dist-info/licenses/LICENSE,sha256=pi5gO5vkTjuuznqO-lbt-x3U4CQR9uiUIJ-_eeQ2Xc4,1069
|
|
72
|
+
phenostore_sdk_python-0.1.1.dist-info/RECORD,,
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 PhenoML Inc.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|