diff --git a/.fern/metadata.json b/.fern/metadata.json index a3ccea9..214386a 100644 --- a/.fern/metadata.json +++ b/.fern/metadata.json @@ -5,6 +5,6 @@ "generatorConfig": { "client_class_name": "PhenomlClient" }, - "originGitCommit": "cdfe611a02d68f09dbce1eb259387269402552fb", - "sdkVersion": "9.0.0" + "originGitCommit": "670d2f19d924d953196b4131bb16a252f2b6148f", + "sdkVersion": "9.1.0" } \ No newline at end of file diff --git a/changelog.md b/changelog.md index 4ec42e9..2510822 100644 --- a/changelog.md +++ b/changelog.md @@ -1,3 +1,6 @@ +## 9.1.0 - 2026-03-11 +* The workflow execution methods now support an optional `preview` parameter. When set to true, workflows return mock resources instead of persisting data to the FHIR server, enabling safe testing and development. + ## 9.0.0 - 2026-03-11 * The `ErrorResponse` type has been removed from the summary module. If your code references `phenoml.summary.ErrorResponse` or imports it directly, you'll need to update your error handling logic to use the appropriate error types for your specific use case. diff --git a/pyproject.toml b/pyproject.toml index a04a9d1..2165cd0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,7 +4,7 @@ dynamic = ["version"] [tool.poetry] name = "phenoml" -version = "9.0.0" +version = "9.1.0" description = "" readme = "README.md" authors = [] diff --git a/reference.md b/reference.md index f714f31..f935b42 100644 --- a/reference.md +++ b/reference.md @@ -6689,6 +6689,14 @@ client.workflows.execute(
+**preview:** `typing.Optional[bool]` — If true, create operations return mock resources instead of persisting to the FHIR server + +
+
+ +
+
+ **request_options:** `typing.Optional[RequestOptions]` — Request-specific configuration.
diff --git a/src/phenoml/core/client_wrapper.py b/src/phenoml/core/client_wrapper.py index f21da3c..e13d82d 100644 --- a/src/phenoml/core/client_wrapper.py +++ b/src/phenoml/core/client_wrapper.py @@ -27,12 +27,12 @@ def get_headers(self) -> typing.Dict[str, str]: import platform headers: typing.Dict[str, str] = { - "User-Agent": "phenoml/9.0.0", + "User-Agent": "phenoml/9.1.0", "X-Fern-Language": "Python", "X-Fern-Runtime": f"python/{platform.python_version()}", "X-Fern-Platform": f"{platform.system().lower()}/{platform.release()}", "X-Fern-SDK-Name": "phenoml", - "X-Fern-SDK-Version": "9.0.0", + "X-Fern-SDK-Version": "9.1.0", **(self.get_custom_headers() or {}), } token = self._get_token() diff --git a/src/phenoml/workflows/client.py b/src/phenoml/workflows/client.py index b08af65..790051a 100644 --- a/src/phenoml/workflows/client.py +++ b/src/phenoml/workflows/client.py @@ -279,6 +279,7 @@ def execute( id: str, *, input_data: typing.Dict[str, typing.Any], + preview: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> ExecuteWorkflowResponse: """ @@ -292,6 +293,9 @@ def execute( input_data : typing.Dict[str, typing.Any] Input data for workflow execution + preview : typing.Optional[bool] + If true, create operations return mock resources instead of persisting to the FHIR server + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -315,7 +319,9 @@ def execute( }, ) """ - _response = self._raw_client.execute(id, input_data=input_data, request_options=request_options) + _response = self._raw_client.execute( + id, input_data=input_data, preview=preview, request_options=request_options + ) return _response.data @@ -622,6 +628,7 @@ async def execute( id: str, *, input_data: typing.Dict[str, typing.Any], + preview: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> ExecuteWorkflowResponse: """ @@ -635,6 +642,9 @@ async def execute( input_data : typing.Dict[str, typing.Any] Input data for workflow execution + preview : typing.Optional[bool] + If true, create operations return mock resources instead of persisting to the FHIR server + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -666,5 +676,7 @@ async def main() -> None: asyncio.run(main()) """ - _response = await self._raw_client.execute(id, input_data=input_data, request_options=request_options) + _response = await self._raw_client.execute( + id, input_data=input_data, preview=preview, request_options=request_options + ) return _response.data diff --git a/src/phenoml/workflows/raw_client.py b/src/phenoml/workflows/raw_client.py index 2c4e08a..b14f8d8 100644 --- a/src/phenoml/workflows/raw_client.py +++ b/src/phenoml/workflows/raw_client.py @@ -543,6 +543,7 @@ def execute( id: str, *, input_data: typing.Dict[str, typing.Any], + preview: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> HttpResponse[ExecuteWorkflowResponse]: """ @@ -556,6 +557,9 @@ def execute( input_data : typing.Dict[str, typing.Any] Input data for workflow execution + preview : typing.Optional[bool] + If true, create operations return mock resources instead of persisting to the FHIR server + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -569,6 +573,7 @@ def execute( method="POST", json={ "input_data": input_data, + "preview": preview, }, headers={ "content-type": "application/json", @@ -1162,6 +1167,7 @@ async def execute( id: str, *, input_data: typing.Dict[str, typing.Any], + preview: typing.Optional[bool] = OMIT, request_options: typing.Optional[RequestOptions] = None, ) -> AsyncHttpResponse[ExecuteWorkflowResponse]: """ @@ -1175,6 +1181,9 @@ async def execute( input_data : typing.Dict[str, typing.Any] Input data for workflow execution + preview : typing.Optional[bool] + If true, create operations return mock resources instead of persisting to the FHIR server + request_options : typing.Optional[RequestOptions] Request-specific configuration. @@ -1188,6 +1197,7 @@ async def execute( method="POST", json={ "input_data": input_data, + "preview": preview, }, headers={ "content-type": "application/json", diff --git a/src/phenoml/workflows/types/execute_workflow_response.py b/src/phenoml/workflows/types/execute_workflow_response.py index 61e4e8a..acd41bd 100644 --- a/src/phenoml/workflows/types/execute_workflow_response.py +++ b/src/phenoml/workflows/types/execute_workflow_response.py @@ -19,6 +19,10 @@ class ExecuteWorkflowResponse(UniversalBaseModel): """ results: typing.Optional[ExecuteWorkflowResponseResults] = None + preview: typing.Optional[bool] = pydantic.Field(default=None) + """ + Whether the workflow was executed in preview mode + """ if IS_PYDANTIC_V2: model_config: typing.ClassVar[pydantic.ConfigDict] = pydantic.ConfigDict(extra="allow", frozen=True) # type: ignore # Pydantic v2