Divyansh
09/20/2024, 9:51 AMimport asyncio
import os
from prefect import get_client
from prefect.server.schemas.filters import DeploymentFilter, DeploymentFilterName
class PrefectAPI:
@staticmethod
async def get_deployment_payload_schema(name: str):
"""
Retrieve payload schema for a given deployment name or ID.
This can be used to verify deployment parameters.
"""
async with get_client() as client:
# Filter deployments by name or ID using DeploymentFilter
deployments = await client.read_deployments(
deployment_filter=DeploymentFilter(
name=DeploymentFilterName(any_=[name])
)
)
if not deployments:
raise ValueError(f"Deployment {name} not found")
# Assuming only one deployment matches
deployment = deployments[0]
# Return the OpenAPI schema for the deployment parameters
return deployment.parameter_openapi_schema
os.environ['PREFECT_API_URL'] = '<https://my-prefect-3.website.com/api>'
asyncio.run(PrefectAPI.get_deployment_payload_schema("test_name"))
ERROR:
Traceback (most recent call last):
File "/my/project/path/script.py", line 35, in <module>
asyncio.run(PrefectAPI.get_deployment_payload_schema("test_name"))
File "/.pyenv/versions/3.11.9/lib/python3.11/asyncio/runners.py", line 190, in run
return runner.run(main)
^^^^^^^^^^^^^^^^
File "/.pyenv/versions/3.11.9/lib/python3.11/asyncio/runners.py", line 118, in run
return self._loop.run_until_complete(task)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.pyenv/versions/3.11.9/lib/python3.11/asyncio/base_events.py", line 654, in run_until_complete
return future.result()
^^^^^^^^^^^^^^^
File "/my/project/path/do.py", line 18, in get_deployment_payload_schema
deployments = await client.read_deployments(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.pyenv/versions/vision3119/lib/python3.11/site-packages/prefect/client/orchestration.py", line 1883, in read_deployments
response = await <http://self._client.post|self._client.post>("/deployments/filter", json=body)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.pyenv/versions/vision3119/lib/python3.11/site-packages/httpx/_client.py", line 1905, in post
return await self.request(
^^^^^^^^^^^^^^^^^^^
File "/.pyenv/versions/vision3119/lib/python3.11/site-packages/httpx/_client.py", line 1585, in request
return await self.send(request, auth=auth, follow_redirects=follow_redirects)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/.pyenv/versions/vision3119/lib/python3.11/site-packages/prefect/client/base.py", line 361, in send
response.raise_for_status()
File "/.pyenv/versions/vision3119/lib/python3.11/site-packages/prefect/client/base.py", line 174, in raise_for_status
raise PrefectHTTPStatusError.from_httpx_error(exc) from exc.__cause__
prefect.exceptions.PrefectHTTPStatusError: Client error '422 Unprocessable Entity' for url '<https://my-prefect-3.website.com/api/deployments/filter>'
Response: {'exception_message': 'Invalid request received.', 'exception_detail': [{'loc': ['body', 'deployments', 'concurrency_limit'], 'msg': 'extra fields not permitted', 'type': 'value_error.extra'}, {'loc': ['body', 'deployments', 'flow_or_deployment_name'], 'msg': 'extra fields not permitted', 'type': 'value_error.extra'}], 'request_body': {'deployments': {'operator': 'and_', 'id': None, 'name': {'any_': ['test_name'], 'like_': None}, 'flow_or_deployment_name': None, 'paused': None, 'tags': None, 'work_queue_name': None, 'concurrency_limit': None}, 'limit': None, 'offset': 0, 'sort': None}}
For more information check: <https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/422>
Process finished with exit code 1
Slack Conversation