prefect-client 2.20.9__tar.gz → 2.20.11__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.
- {prefect-client-2.20.9/src/prefect_client.egg-info → prefect_client-2.20.11}/PKG-INFO +40 -2
- {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements-client.txt +2 -2
- {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements.txt +3 -3
- {prefect-client-2.20.9 → prefect_client-2.20.11}/setup.cfg +1 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v2_schema.py +26 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/notifications.py +42 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/webhook.py +8 -1
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/orchestration.py +16 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/flows.py +35 -8
- prefect_client-2.20.11/src/prefect/py.typed +0 -0
- prefect_client-2.20.11/src/prefect/utilities/__init__.py +0 -0
- prefect_client-2.20.11/src/prefect/utilities/urls.py +49 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/base.py +6 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11/src/prefect_client.egg-info}/PKG-INFO +40 -2
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/SOURCES.txt +30 -1
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/requires.txt +2 -2
- prefect_client-2.20.11/tests/test_artifacts.py +484 -0
- prefect_client-2.20.11/tests/test_automations.py +186 -0
- prefect_client-2.20.11/tests/test_background_tasks.py +401 -0
- prefect_client-2.20.11/tests/test_context.py +396 -0
- prefect_client-2.20.11/tests/test_deployments.py +1632 -0
- prefect_client-2.20.11/tests/test_engine.py +3417 -0
- prefect_client-2.20.11/tests/test_exceptions.py +139 -0
- prefect_client-2.20.11/tests/test_filesystems.py +782 -0
- prefect_client-2.20.11/tests/test_flow_runs.py +40 -0
- prefect_client-2.20.11/tests/test_flows.py +4497 -0
- prefect_client-2.20.11/tests/test_flows_compat.py +30 -0
- prefect_client-2.20.11/tests/test_futures.py +215 -0
- prefect_client-2.20.11/tests/test_highlighters.py +69 -0
- prefect_client-2.20.11/tests/test_import_interceptor.py +7 -0
- prefect_client-2.20.11/tests/test_log_prints.py +240 -0
- prefect_client-2.20.11/tests/test_logging.py +1586 -0
- prefect_client-2.20.11/tests/test_new_flow_engine.py +866 -0
- prefect_client-2.20.11/tests/test_new_task_engine.py +868 -0
- prefect_client-2.20.11/tests/test_plugins.py +259 -0
- prefect_client-2.20.11/tests/test_serializers.py +368 -0
- prefect_client-2.20.11/tests/test_settings.py +1062 -0
- prefect_client-2.20.11/tests/test_states.py +374 -0
- prefect_client-2.20.11/tests/test_task_runners.py +34 -0
- prefect_client-2.20.11/tests/test_task_server.py +551 -0
- prefect_client-2.20.11/tests/test_tasks.py +4404 -0
- prefect_client-2.20.11/tests/test_variables.py +94 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/LICENSE +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/MANIFEST.in +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/README.md +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/requirements-dev.txt +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/setup.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/.prefectignore +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/_logging.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/deprecated.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/compatibility/experimental.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/api.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/calls.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/cancellation.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/event_loop.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/inspection.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/primitives.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/services.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/threads.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/concurrency/waiters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/integrations.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_base_model.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_compat.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_flags.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/_types.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/annotations/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/annotations/pendulum.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/schemas.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/config_dict.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/field_validator.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_construct.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_copy.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_dump.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_dump_json.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_fields.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_fields_set.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_json_schema.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_rebuild.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validate.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validate_json.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/model_validator.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/utilities/type_adapter.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v1_schema.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v2_validated_func.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pytz.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/bases.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/fields.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/serializers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/schemas/validators.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/applications.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/background.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/concurrency.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/datastructures.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/models.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/dependencies/utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/encoders.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/exception_handlers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/exceptions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/logger.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/cors.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/gzip.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/trustedhost.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/middleware/wsgi.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/constants.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/docs.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/models.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/openapi/utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/param_functions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/params.py +0 -0
- {prefect-client-2.20.9/src/prefect → prefect_client-2.20.11/src/prefect/_vendor/fastapi}/py.typed +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/requests.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/responses.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/routing.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/api_key.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/http.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/oauth2.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/security/utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/staticfiles.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/templating.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/testclient.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/types.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/fastapi/websockets.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_compat.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_exception_handler.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/_utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/applications.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/authentication.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/background.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/concurrency.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/config.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/convertors.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/datastructures.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/endpoints.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/exceptions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/formparsers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/authentication.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/cors.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/errors.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/exceptions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/gzip.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/httpsredirect.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/sessions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/trustedhost.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/middleware/wsgi.py +0 -0
- /prefect-client-2.20.9/src/prefect/concurrency/__init__.py → /prefect_client-2.20.11/src/prefect/_vendor/starlette/py.typed +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/requests.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/responses.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/routing.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/schemas.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/staticfiles.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/status.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/templating.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/testclient.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/types.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_vendor/starlette/websockets.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_version.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/agent.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/artifacts.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/automations.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/abstract.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/core.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/fields.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/kubernetes.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/blocks/system.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/cloud.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/collections.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/constants.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/actions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/filters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/objects.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/responses.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/schedules.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/schemas/sorting.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/subscriptions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/client/utilities.py +0 -0
- {prefect-client-2.20.9/src/prefect/deprecated → prefect_client-2.20.11/src/prefect/concurrency}/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/asyncio.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/events.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/services.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/concurrency/sync.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/context.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/deployments.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/runner.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/schedules.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/core.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/pull.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deployments/steps/utility.py +0 -0
- {prefect-client-2.20.9/src/prefect/events/cli → prefect_client-2.20.11/src/prefect/deprecated}/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/data_documents.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/docker.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/file.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/orion.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/deprecated/packaging/serializers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/engine.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/actions.py +0 -0
- {prefect-client-2.20.9/src/prefect/utilities → prefect_client-2.20.11/src/prefect/events/cli}/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/cli/automations.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/clients.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/filters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/instrument.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/related.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/automations.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/deployment_triggers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/events.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/schemas/labelling.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/utilities.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/events/worker.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/exceptions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/filesystems.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/flow_runs.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/futures.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/container.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/kubernetes.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/process.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/cloud_run.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/container_instance.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/ecs.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/infrastructure/provisioners/modal.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/actions.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/input/run_input.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/configuration.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/filters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/formatters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/handlers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/highlighters.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/loggers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/logging/logging.yml +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/manifests.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/new_flow_engine.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/new_task_engine.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/plugins.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/profiles.toml +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/pydantic/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/pydantic/main.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/results.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/runner.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/server.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/storage.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/submit.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runner/utils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/deployment.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/flow_run.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/runtime/task_run.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/serializers.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/server/api/collections_data/views/aggregate-worker-metadata.json +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/server/api/static/prefect-logo-mark-gradient.png +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/settings.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/base.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/conda.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/pip.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/software/python.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/states.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_engine.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_runners.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/task_server.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/tasks.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/types/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/annotations.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/asyncutils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/callables.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/collections.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/compat.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/context.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/dispatch.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/dockerutils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/engine.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/filesystem.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/hashing.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/importtools.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/math.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/names.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/processutils.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/pydantic.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/render_swagger.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/hydration.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/schema_tools/validation.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/services.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/slugify.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/templating.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/text.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/timeout.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/utilities/visualization.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/variables.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/__init__.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/block.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/process.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/server.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/workers/utilities.py +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/dependency_links.txt +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect_client.egg-info/top_level.txt +0 -0
- {prefect-client-2.20.9 → prefect_client-2.20.11}/versioneer.py +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: prefect-client
|
3
|
-
Version: 2.20.
|
3
|
+
Version: 2.20.11
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Home-page: https://www.prefect.io
|
6
6
|
Author: Prefect Technologies, Inc.
|
@@ -21,8 +21,46 @@ Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Topic :: Software Development :: Libraries
|
22
22
|
Requires-Python: >=3.8
|
23
23
|
Description-Content-Type: text/markdown
|
24
|
-
Provides-Extra: notifications
|
25
24
|
License-File: LICENSE
|
25
|
+
Requires-Dist: anyio<4.6.1,>=4.4.0
|
26
|
+
Requires-Dist: asgi-lifespan<3.0,>=1.0
|
27
|
+
Requires-Dist: cachetools<6.0,>=5.3
|
28
|
+
Requires-Dist: cloudpickle<4.0,>=2.0
|
29
|
+
Requires-Dist: coolname<3.0.0,>=1.0.4
|
30
|
+
Requires-Dist: croniter<3.0.0,>=1.0.12
|
31
|
+
Requires-Dist: fsspec>=2022.5.0
|
32
|
+
Requires-Dist: exceptiongroup>=1.2.1
|
33
|
+
Requires-Dist: graphviz>=0.20.1
|
34
|
+
Requires-Dist: griffe<2.0.0,>=0.49.0
|
35
|
+
Requires-Dist: httpcore<2.0.0,>=1.0.5
|
36
|
+
Requires-Dist: httpx[http2]!=0.23.2,>=0.23
|
37
|
+
Requires-Dist: importlib_metadata>=4.4; python_version < "3.10"
|
38
|
+
Requires-Dist: importlib-resources<6.5.0,>=6.1.3
|
39
|
+
Requires-Dist: jsonpatch<2.0,>=1.32
|
40
|
+
Requires-Dist: jsonschema<5.0.0,>=4.0.0
|
41
|
+
Requires-Dist: orjson<4.0,>=3.7
|
42
|
+
Requires-Dist: packaging<24.3,>=21.3
|
43
|
+
Requires-Dist: pathspec>=0.8.0
|
44
|
+
Requires-Dist: pendulum<3.0; python_version < "3.12"
|
45
|
+
Requires-Dist: pendulum<4,>=3.0.0; python_version >= "3.12"
|
46
|
+
Requires-Dist: pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
|
47
|
+
Requires-Dist: pydantic_core<3.0.0,>=2.12.0
|
48
|
+
Requires-Dist: python_dateutil<3.0.0,>=2.8.2
|
49
|
+
Requires-Dist: python-slugify<9.0,>=5.0
|
50
|
+
Requires-Dist: pyyaml<7.0.0,>=5.4.1
|
51
|
+
Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
|
52
|
+
Requires-Dist: rich<14.0,>=11.0
|
53
|
+
Requires-Dist: ruamel.yaml>=0.17.0
|
54
|
+
Requires-Dist: sniffio<2.0.0,>=1.3.0
|
55
|
+
Requires-Dist: toml>=0.10.0
|
56
|
+
Requires-Dist: typing_extensions<5.0.0,>=4.5.0
|
57
|
+
Requires-Dist: ujson<6.0.0,>=5.8.0
|
58
|
+
Requires-Dist: uvicorn!=0.29.0,>=0.14.0
|
59
|
+
Requires-Dist: websockets<14.0,>=10.4
|
60
|
+
Requires-Dist: itsdangerous
|
61
|
+
Requires-Dist: python-multipart>=0.0.7
|
62
|
+
Provides-Extra: notifications
|
63
|
+
Requires-Dist: apprise<2.0.0,>=1.1.0; extra == "notifications"
|
26
64
|
|
27
65
|
<p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
|
28
66
|
|
@@ -1,4 +1,4 @@
|
|
1
|
-
anyio >= 4.4.0, <
|
1
|
+
anyio >= 4.4.0, < 4.6.1
|
2
2
|
asgi-lifespan >= 1.0, < 3.0
|
3
3
|
cachetools >= 5.3, < 6.0
|
4
4
|
cloudpickle >= 2.0, < 4.0
|
@@ -21,7 +21,7 @@ pathspec >= 0.8.0
|
|
21
21
|
pendulum < 3.0; python_version < '3.12'
|
22
22
|
pendulum >= 3.0.0, <4; python_version >= '3.12'
|
23
23
|
# the version constraints for pydantic are merged with those from fastapi 0.103.2
|
24
|
-
pydantic[email]>=1.10.0,!=2.0.0,!=2.0.1,!=2.1.0,<
|
24
|
+
pydantic[email]>=1.10.0,!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0
|
25
25
|
pydantic_core >= 2.12.0, < 3.0.0
|
26
26
|
python_dateutil >= 2.8.2, < 3.0.0
|
27
27
|
python-slugify >= 5.0, < 9.0
|
@@ -3,7 +3,7 @@
|
|
3
3
|
aiosqlite >= 0.17.0, < 1.0.0
|
4
4
|
alembic >= 1.7.5, < 2.0.0
|
5
5
|
apprise >= 1.8.0, < 2.0.0
|
6
|
-
asyncpg >= 0.23, <
|
6
|
+
asyncpg >= 0.23, < 0.30.0
|
7
7
|
click >= 8.0, < 8.2
|
8
8
|
cryptography >= 36.0.1
|
9
9
|
dateparser >= 1.1.1, < 2.0.0
|
@@ -12,8 +12,8 @@ graphviz >= 0.20.1
|
|
12
12
|
jinja2 >= 3.0.0, < 4.0.0
|
13
13
|
jinja2-humanize-extension >= 0.4.0
|
14
14
|
humanize >= 4.9.0, < 5.0.0
|
15
|
-
kubernetes >= 24.2.0, <
|
15
|
+
kubernetes >= 24.2.0, < 32.0.0
|
16
16
|
pytz >= 2021.1, < 2025
|
17
17
|
readchar >= 4.0.0, < 5.0.0
|
18
|
-
sqlalchemy[asyncio] >= 1.4.22, != 1.4.33, <
|
18
|
+
sqlalchemy[asyncio] >= 1.4.22, != 1.4.33, < 2.0.36
|
19
19
|
typer >= 0.12.0, != 0.12.2, < 0.13.0
|
@@ -37,6 +37,7 @@ filterwarnings =
|
|
37
37
|
ignore:The `RayTaskRunner` has moved:DeprecationWarning
|
38
38
|
ignore:The `DaskTaskRunner` has moved:DeprecationWarning
|
39
39
|
ignore:`DeploymentSpec` has been replaced by `Deployment`:DeprecationWarning
|
40
|
+
ignore:Please use `import python_multipart` instead:PendingDeprecationWarning
|
40
41
|
ignore:the imp module is deprecated:DeprecationWarning
|
41
42
|
ignore:distutils Version classes are deprecated:DeprecationWarning
|
42
43
|
ignore:The distutils package is deprecated:DeprecationWarning
|
{prefect-client-2.20.9 → prefect_client-2.20.11}/src/prefect/_internal/pydantic/v2_schema.py
RENAMED
@@ -9,6 +9,8 @@ import pydantic
|
|
9
9
|
from pydantic import BaseModel as V2BaseModel
|
10
10
|
from pydantic import ConfigDict, PydanticUndefinedAnnotation, create_model
|
11
11
|
from pydantic.type_adapter import TypeAdapter
|
12
|
+
from pydantic.v1 import BaseModel as V1BaseModel
|
13
|
+
from pydantic.v1 import SecretStr as V1SecretStr
|
12
14
|
|
13
15
|
from prefect._internal.pydantic.annotations.pendulum import (
|
14
16
|
PydanticPendulumDateTimeType,
|
@@ -30,6 +32,18 @@ def is_v2_model(v) -> bool:
|
|
30
32
|
return False
|
31
33
|
|
32
34
|
|
35
|
+
def is_v1_model(v) -> bool:
|
36
|
+
if isinstance(v, V1BaseModel):
|
37
|
+
return True
|
38
|
+
try:
|
39
|
+
if inspect.isclass(v) and issubclass(v, V1BaseModel):
|
40
|
+
return True
|
41
|
+
except TypeError:
|
42
|
+
pass
|
43
|
+
|
44
|
+
return False
|
45
|
+
|
46
|
+
|
33
47
|
def is_v2_type(v) -> bool:
|
34
48
|
if is_v2_model(v):
|
35
49
|
return True
|
@@ -40,6 +54,18 @@ def is_v2_type(v) -> bool:
|
|
40
54
|
return False
|
41
55
|
|
42
56
|
|
57
|
+
def is_v1_type(v) -> bool:
|
58
|
+
if is_v1_model(v):
|
59
|
+
return True
|
60
|
+
|
61
|
+
try:
|
62
|
+
return v.__module__.startswith("pydantic.v1.types") or isinstance(
|
63
|
+
v, V1SecretStr
|
64
|
+
)
|
65
|
+
except AttributeError:
|
66
|
+
return False
|
67
|
+
|
68
|
+
|
43
69
|
def has_v2_type_as_param(signature: inspect.Signature) -> bool:
|
44
70
|
parameters = signature.parameters.values()
|
45
71
|
for p in parameters:
|
@@ -4,6 +4,7 @@ from typing import Dict, List, Optional
|
|
4
4
|
|
5
5
|
from prefect._internal.pydantic import HAS_PYDANTIC_V2
|
6
6
|
from prefect.logging import LogEavesdropper
|
7
|
+
from prefect.utilities.urls import validate_restricted_url
|
7
8
|
|
8
9
|
if HAS_PYDANTIC_V2:
|
9
10
|
from pydantic.v1 import AnyHttpUrl, Field, SecretStr
|
@@ -88,6 +89,26 @@ class AppriseNotificationBlock(AbstractAppriseNotificationBlock, ABC):
|
|
88
89
|
description="Incoming webhook URL used to send notifications.",
|
89
90
|
examples=["https://hooks.example.com/XXX"],
|
90
91
|
)
|
92
|
+
allow_private_urls: bool = Field(
|
93
|
+
default=True,
|
94
|
+
description="Whether to allow notifications to private URLs. Defaults to True.",
|
95
|
+
)
|
96
|
+
|
97
|
+
@sync_compatible
|
98
|
+
async def notify(
|
99
|
+
self,
|
100
|
+
body: str,
|
101
|
+
subject: Optional[str] = None,
|
102
|
+
):
|
103
|
+
if not self.allow_private_urls:
|
104
|
+
try:
|
105
|
+
validate_restricted_url(self.url.get_secret_value())
|
106
|
+
except ValueError as exc:
|
107
|
+
if self._raise_on_failure:
|
108
|
+
raise NotificationError(str(exc))
|
109
|
+
raise
|
110
|
+
|
111
|
+
await super().notify(body, subject)
|
91
112
|
|
92
113
|
|
93
114
|
# TODO: Move to prefect-slack once collection block auto-registration is
|
@@ -281,6 +302,27 @@ class PagerDutyWebHook(AbstractAppriseNotificationBlock):
|
|
281
302
|
)
|
282
303
|
self._start_apprise_client(url)
|
283
304
|
|
305
|
+
@sync_compatible
|
306
|
+
async def notify(
|
307
|
+
self,
|
308
|
+
body: str,
|
309
|
+
subject: Optional[str] = None,
|
310
|
+
):
|
311
|
+
"""
|
312
|
+
Apprise will combine subject and body by default, so we need to move
|
313
|
+
the body into the custom_details field. custom_details is part of the
|
314
|
+
webhook url, so we need to update the url and restart the client.
|
315
|
+
"""
|
316
|
+
if subject:
|
317
|
+
self.custom_details = self.custom_details or {}
|
318
|
+
self.custom_details.update(
|
319
|
+
{"Prefect Notification Body": body.replace(" ", "%20")}
|
320
|
+
)
|
321
|
+
body = " "
|
322
|
+
self.block_initialization()
|
323
|
+
|
324
|
+
await super().notify(body, subject)
|
325
|
+
|
284
326
|
|
285
327
|
class TwilioSMS(AbstractAppriseNotificationBlock):
|
286
328
|
"""Enables sending notifications via Twilio SMS.
|
@@ -3,6 +3,7 @@ from typing import Optional
|
|
3
3
|
from httpx import AsyncClient, AsyncHTTPTransport, Response
|
4
4
|
|
5
5
|
from prefect._internal.pydantic import HAS_PYDANTIC_V2
|
6
|
+
from prefect.utilities.urls import validate_restricted_url
|
6
7
|
|
7
8
|
if HAS_PYDANTIC_V2:
|
8
9
|
from pydantic.v1 import Field, SecretStr
|
@@ -38,7 +39,10 @@ class Webhook(Block):
|
|
38
39
|
description="The webhook URL.",
|
39
40
|
examples=["https://hooks.slack.com/XXX"],
|
40
41
|
)
|
41
|
-
|
42
|
+
allow_private_urls: bool = Field(
|
43
|
+
default=True,
|
44
|
+
description="Whether to allow notifications to private URLs. Defaults to True.",
|
45
|
+
)
|
42
46
|
headers: SecretDict = Field(
|
43
47
|
default_factory=lambda: SecretDict(dict()),
|
44
48
|
title="Webhook Headers",
|
@@ -55,6 +59,9 @@ class Webhook(Block):
|
|
55
59
|
Args:
|
56
60
|
payload: an optional payload to send when calling the webhook.
|
57
61
|
"""
|
62
|
+
if not self.allow_private_urls:
|
63
|
+
validate_restricted_url(self.url.get_secret_value())
|
64
|
+
|
58
65
|
async with self._client:
|
59
66
|
return await self._client.request(
|
60
67
|
method=self.method,
|
@@ -8,12 +8,14 @@ from typing import (
|
|
8
8
|
Dict,
|
9
9
|
Iterable,
|
10
10
|
List,
|
11
|
+
Literal,
|
11
12
|
NoReturn,
|
12
13
|
Optional,
|
13
14
|
Set,
|
14
15
|
Tuple,
|
15
16
|
TypeVar,
|
16
17
|
Union,
|
18
|
+
overload,
|
17
19
|
)
|
18
20
|
from uuid import UUID, uuid4
|
19
21
|
|
@@ -178,6 +180,20 @@ class ServerType(AutoEnum):
|
|
178
180
|
return PREFECT_EXPERIMENTAL_EVENTS and PREFECT_API_SERVICES_TRIGGERS_ENABLED
|
179
181
|
|
180
182
|
|
183
|
+
@overload
|
184
|
+
def get_client(
|
185
|
+
httpx_settings: Optional[Dict[str, Any]] = None, sync_client: Literal[False] = False
|
186
|
+
) -> "PrefectClient":
|
187
|
+
...
|
188
|
+
|
189
|
+
|
190
|
+
@overload
|
191
|
+
def get_client(
|
192
|
+
httpx_settings: Optional[Dict[str, Any]] = None, sync_client: Literal[True] = True
|
193
|
+
) -> "SyncPrefectClient":
|
194
|
+
...
|
195
|
+
|
196
|
+
|
181
197
|
def get_client(
|
182
198
|
httpx_settings: Optional[Dict[str, Any]] = None, sync_client: bool = False
|
183
199
|
) -> Union["PrefectClient", "SyncPrefectClient"]:
|
@@ -45,11 +45,15 @@ from prefect._internal.pydantic import HAS_PYDANTIC_V2
|
|
45
45
|
|
46
46
|
if HAS_PYDANTIC_V2:
|
47
47
|
import pydantic.v1 as pydantic
|
48
|
+
from pydantic import BaseModel as V2BaseModel
|
48
49
|
from pydantic import ValidationError as V2ValidationError
|
49
50
|
from pydantic.v1 import BaseModel as V1BaseModel
|
50
51
|
from pydantic.v1.decorator import ValidatedFunction as V1ValidatedFunction
|
51
52
|
|
52
|
-
from ._internal.pydantic.v2_schema import
|
53
|
+
from ._internal.pydantic.v2_schema import (
|
54
|
+
is_v1_type,
|
55
|
+
is_v2_type,
|
56
|
+
)
|
53
57
|
from ._internal.pydantic.v2_validated_func import V2ValidatedFunction
|
54
58
|
from ._internal.pydantic.v2_validated_func import (
|
55
59
|
V2ValidatedFunction as ValidatedFunction,
|
@@ -339,6 +343,16 @@ class Flow(Generic[P, R]):
|
|
339
343
|
# is not picklable in some environments
|
340
344
|
try:
|
341
345
|
ValidatedFunction(self.fn, config={"arbitrary_types_allowed": True})
|
346
|
+
except TypeError as exc:
|
347
|
+
if (
|
348
|
+
HAS_PYDANTIC_V2
|
349
|
+
and "`__modify_schema__` method is not supported" in str(exc)
|
350
|
+
):
|
351
|
+
V1ValidatedFunction(
|
352
|
+
self.fn, config={"arbitrary_types_allowed": True}
|
353
|
+
)
|
354
|
+
else:
|
355
|
+
raise
|
342
356
|
except pydantic.ConfigError as exc:
|
343
357
|
raise ValueError(
|
344
358
|
"Flow function is not compatible with `validate_parameters`. "
|
@@ -510,19 +524,33 @@ class Flow(Generic[P, R]):
|
|
510
524
|
args, kwargs = parameters_to_args_kwargs(self.fn, parameters)
|
511
525
|
|
512
526
|
if HAS_PYDANTIC_V2:
|
513
|
-
|
514
|
-
|
527
|
+
sig = inspect.signature(self.fn)
|
528
|
+
|
529
|
+
has_v1_types = any(
|
530
|
+
is_v1_type(param.annotation) for param in sig.parameters.values()
|
531
|
+
)
|
532
|
+
has_v1_models = any(
|
533
|
+
issubclass(param.annotation, V1BaseModel)
|
534
|
+
if isinstance(param.annotation, type)
|
535
|
+
else False
|
536
|
+
for param in sig.parameters.values()
|
515
537
|
)
|
516
|
-
has_v2_types = any(
|
517
|
-
is_v2_type(
|
538
|
+
has_v2_types = any(
|
539
|
+
is_v2_type(param.annotation) for param in sig.parameters.values()
|
540
|
+
)
|
541
|
+
has_v2_models = any(
|
542
|
+
issubclass(param.annotation, V2BaseModel)
|
543
|
+
if isinstance(param.annotation, type)
|
544
|
+
else False
|
545
|
+
for param in sig.parameters.values()
|
518
546
|
)
|
519
547
|
|
520
|
-
if has_v1_models and
|
548
|
+
if (has_v1_types and has_v2_types) or (has_v1_models and has_v2_models):
|
521
549
|
raise ParameterTypeError(
|
522
550
|
"Cannot mix Pydantic v1 and v2 types as arguments to a flow."
|
523
551
|
)
|
524
552
|
|
525
|
-
if has_v1_models:
|
553
|
+
if has_v1_models or has_v1_types:
|
526
554
|
validated_fn = V1ValidatedFunction(
|
527
555
|
self.fn, config={"arbitrary_types_allowed": True}
|
528
556
|
)
|
@@ -530,7 +558,6 @@ class Flow(Generic[P, R]):
|
|
530
558
|
validated_fn = V2ValidatedFunction(
|
531
559
|
self.fn, config={"arbitrary_types_allowed": True}
|
532
560
|
)
|
533
|
-
|
534
561
|
else:
|
535
562
|
validated_fn = ValidatedFunction(
|
536
563
|
self.fn, config={"arbitrary_types_allowed": True}
|
File without changes
|
File without changes
|
@@ -0,0 +1,49 @@
|
|
1
|
+
import ipaddress
|
2
|
+
import socket
|
3
|
+
from urllib.parse import urlparse
|
4
|
+
|
5
|
+
|
6
|
+
def validate_restricted_url(url: str):
|
7
|
+
"""
|
8
|
+
Validate that the provided URL is safe for outbound requests. This prevents
|
9
|
+
attacks like SSRF (Server Side Request Forgery), where an attacker can make
|
10
|
+
requests to internal services (like the GCP metadata service, localhost addresses,
|
11
|
+
or in-cluster Kubernetes services)
|
12
|
+
Args:
|
13
|
+
url: The URL to validate.
|
14
|
+
Raises:
|
15
|
+
ValueError: If the URL is a restricted URL.
|
16
|
+
"""
|
17
|
+
|
18
|
+
try:
|
19
|
+
parsed_url = urlparse(url)
|
20
|
+
except ValueError:
|
21
|
+
raise ValueError(f"{url!r} is not a valid URL.")
|
22
|
+
|
23
|
+
if parsed_url.scheme not in ("http", "https"):
|
24
|
+
raise ValueError(
|
25
|
+
f"{url!r} is not a valid URL. Only HTTP and HTTPS URLs are allowed."
|
26
|
+
)
|
27
|
+
|
28
|
+
hostname = parsed_url.hostname or ""
|
29
|
+
|
30
|
+
# Remove IPv6 brackets if present
|
31
|
+
if hostname.startswith("[") and hostname.endswith("]"):
|
32
|
+
hostname = hostname[1:-1]
|
33
|
+
|
34
|
+
if not hostname:
|
35
|
+
raise ValueError(f"{url!r} is not a valid URL.")
|
36
|
+
|
37
|
+
try:
|
38
|
+
ip_address = socket.gethostbyname(hostname)
|
39
|
+
ip = ipaddress.ip_address(ip_address)
|
40
|
+
except socket.gaierror:
|
41
|
+
try:
|
42
|
+
ip = ipaddress.ip_address(hostname)
|
43
|
+
except ValueError:
|
44
|
+
raise ValueError(f"{url!r} is not a valid URL. It could not be resolved.")
|
45
|
+
|
46
|
+
if ip.is_private:
|
47
|
+
raise ValueError(
|
48
|
+
f"{url!r} is not a valid URL. It resolves to the private address {ip}."
|
49
|
+
)
|
@@ -137,6 +137,12 @@ class BaseJobConfiguration(BaseModel):
|
|
137
137
|
variables = cls._get_base_config_defaults(
|
138
138
|
variables_schema.get("properties", {})
|
139
139
|
)
|
140
|
+
|
141
|
+
# copy variable defaults for `env` to job config before they're replaced by
|
142
|
+
# deployment overrides
|
143
|
+
if variables.get("env"):
|
144
|
+
job_config["env"] = variables.get("env")
|
145
|
+
|
140
146
|
variables.update(values)
|
141
147
|
|
142
148
|
# deep merge `env`
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: prefect-client
|
3
|
-
Version: 2.20.
|
3
|
+
Version: 2.20.11
|
4
4
|
Summary: Workflow orchestration and management.
|
5
5
|
Home-page: https://www.prefect.io
|
6
6
|
Author: Prefect Technologies, Inc.
|
@@ -21,8 +21,46 @@ Classifier: Programming Language :: Python :: 3.11
|
|
21
21
|
Classifier: Topic :: Software Development :: Libraries
|
22
22
|
Requires-Python: >=3.8
|
23
23
|
Description-Content-Type: text/markdown
|
24
|
-
Provides-Extra: notifications
|
25
24
|
License-File: LICENSE
|
25
|
+
Requires-Dist: anyio<4.6.1,>=4.4.0
|
26
|
+
Requires-Dist: asgi-lifespan<3.0,>=1.0
|
27
|
+
Requires-Dist: cachetools<6.0,>=5.3
|
28
|
+
Requires-Dist: cloudpickle<4.0,>=2.0
|
29
|
+
Requires-Dist: coolname<3.0.0,>=1.0.4
|
30
|
+
Requires-Dist: croniter<3.0.0,>=1.0.12
|
31
|
+
Requires-Dist: fsspec>=2022.5.0
|
32
|
+
Requires-Dist: exceptiongroup>=1.2.1
|
33
|
+
Requires-Dist: graphviz>=0.20.1
|
34
|
+
Requires-Dist: griffe<2.0.0,>=0.49.0
|
35
|
+
Requires-Dist: httpcore<2.0.0,>=1.0.5
|
36
|
+
Requires-Dist: httpx[http2]!=0.23.2,>=0.23
|
37
|
+
Requires-Dist: importlib_metadata>=4.4; python_version < "3.10"
|
38
|
+
Requires-Dist: importlib-resources<6.5.0,>=6.1.3
|
39
|
+
Requires-Dist: jsonpatch<2.0,>=1.32
|
40
|
+
Requires-Dist: jsonschema<5.0.0,>=4.0.0
|
41
|
+
Requires-Dist: orjson<4.0,>=3.7
|
42
|
+
Requires-Dist: packaging<24.3,>=21.3
|
43
|
+
Requires-Dist: pathspec>=0.8.0
|
44
|
+
Requires-Dist: pendulum<3.0; python_version < "3.12"
|
45
|
+
Requires-Dist: pendulum<4,>=3.0.0; python_version >= "3.12"
|
46
|
+
Requires-Dist: pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
|
47
|
+
Requires-Dist: pydantic_core<3.0.0,>=2.12.0
|
48
|
+
Requires-Dist: python_dateutil<3.0.0,>=2.8.2
|
49
|
+
Requires-Dist: python-slugify<9.0,>=5.0
|
50
|
+
Requires-Dist: pyyaml<7.0.0,>=5.4.1
|
51
|
+
Requires-Dist: rfc3339-validator<0.2.0,>=0.1.4
|
52
|
+
Requires-Dist: rich<14.0,>=11.0
|
53
|
+
Requires-Dist: ruamel.yaml>=0.17.0
|
54
|
+
Requires-Dist: sniffio<2.0.0,>=1.3.0
|
55
|
+
Requires-Dist: toml>=0.10.0
|
56
|
+
Requires-Dist: typing_extensions<5.0.0,>=4.5.0
|
57
|
+
Requires-Dist: ujson<6.0.0,>=5.8.0
|
58
|
+
Requires-Dist: uvicorn!=0.29.0,>=0.14.0
|
59
|
+
Requires-Dist: websockets<14.0,>=10.4
|
60
|
+
Requires-Dist: itsdangerous
|
61
|
+
Requires-Dist: python-multipart>=0.0.7
|
62
|
+
Provides-Extra: notifications
|
63
|
+
Requires-Dist: apprise<2.0.0,>=1.1.0; extra == "notifications"
|
26
64
|
|
27
65
|
<p align="center"><img src="https://github.com/PrefectHQ/prefect/assets/3407835/c654cbc6-63e8-4ada-a92a-efd2f8f24b85" width=1000></p>
|
28
66
|
|
@@ -95,6 +95,7 @@ src/prefect/_vendor/fastapi/exceptions.py
|
|
95
95
|
src/prefect/_vendor/fastapi/logger.py
|
96
96
|
src/prefect/_vendor/fastapi/param_functions.py
|
97
97
|
src/prefect/_vendor/fastapi/params.py
|
98
|
+
src/prefect/_vendor/fastapi/py.typed
|
98
99
|
src/prefect/_vendor/fastapi/requests.py
|
99
100
|
src/prefect/_vendor/fastapi/responses.py
|
100
101
|
src/prefect/_vendor/fastapi/routing.py
|
@@ -140,6 +141,7 @@ src/prefect/_vendor/starlette/datastructures.py
|
|
140
141
|
src/prefect/_vendor/starlette/endpoints.py
|
141
142
|
src/prefect/_vendor/starlette/exceptions.py
|
142
143
|
src/prefect/_vendor/starlette/formparsers.py
|
144
|
+
src/prefect/_vendor/starlette/py.typed
|
143
145
|
src/prefect/_vendor/starlette/requests.py
|
144
146
|
src/prefect/_vendor/starlette/responses.py
|
145
147
|
src/prefect/_vendor/starlette/routing.py
|
@@ -285,6 +287,7 @@ src/prefect/utilities/slugify.py
|
|
285
287
|
src/prefect/utilities/templating.py
|
286
288
|
src/prefect/utilities/text.py
|
287
289
|
src/prefect/utilities/timeout.py
|
290
|
+
src/prefect/utilities/urls.py
|
288
291
|
src/prefect/utilities/visualization.py
|
289
292
|
src/prefect/utilities/schema_tools/__init__.py
|
290
293
|
src/prefect/utilities/schema_tools/hydration.py
|
@@ -299,4 +302,30 @@ src/prefect_client.egg-info/PKG-INFO
|
|
299
302
|
src/prefect_client.egg-info/SOURCES.txt
|
300
303
|
src/prefect_client.egg-info/dependency_links.txt
|
301
304
|
src/prefect_client.egg-info/requires.txt
|
302
|
-
src/prefect_client.egg-info/top_level.txt
|
305
|
+
src/prefect_client.egg-info/top_level.txt
|
306
|
+
tests/test_artifacts.py
|
307
|
+
tests/test_automations.py
|
308
|
+
tests/test_background_tasks.py
|
309
|
+
tests/test_context.py
|
310
|
+
tests/test_deployments.py
|
311
|
+
tests/test_engine.py
|
312
|
+
tests/test_exceptions.py
|
313
|
+
tests/test_filesystems.py
|
314
|
+
tests/test_flow_runs.py
|
315
|
+
tests/test_flows.py
|
316
|
+
tests/test_flows_compat.py
|
317
|
+
tests/test_futures.py
|
318
|
+
tests/test_highlighters.py
|
319
|
+
tests/test_import_interceptor.py
|
320
|
+
tests/test_log_prints.py
|
321
|
+
tests/test_logging.py
|
322
|
+
tests/test_new_flow_engine.py
|
323
|
+
tests/test_new_task_engine.py
|
324
|
+
tests/test_plugins.py
|
325
|
+
tests/test_serializers.py
|
326
|
+
tests/test_settings.py
|
327
|
+
tests/test_states.py
|
328
|
+
tests/test_task_runners.py
|
329
|
+
tests/test_task_server.py
|
330
|
+
tests/test_tasks.py
|
331
|
+
tests/test_variables.py
|
@@ -1,4 +1,4 @@
|
|
1
|
-
anyio<
|
1
|
+
anyio<4.6.1,>=4.4.0
|
2
2
|
asgi-lifespan<3.0,>=1.0
|
3
3
|
cachetools<6.0,>=5.3
|
4
4
|
cloudpickle<4.0,>=2.0
|
@@ -16,7 +16,7 @@ jsonschema<5.0.0,>=4.0.0
|
|
16
16
|
orjson<4.0,>=3.7
|
17
17
|
packaging<24.3,>=21.3
|
18
18
|
pathspec>=0.8.0
|
19
|
-
pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<
|
19
|
+
pydantic[email]!=2.0.0,!=2.0.1,!=2.1.0,<3.0.0,>=1.10.0
|
20
20
|
pydantic_core<3.0.0,>=2.12.0
|
21
21
|
python_dateutil<3.0.0,>=2.8.2
|
22
22
|
python-slugify<9.0,>=5.0
|