prefect-client 2.20.4__py3-none-any.whl → 3.0.0__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.
- prefect/__init__.py +74 -110
- prefect/_internal/compatibility/deprecated.py +6 -115
- prefect/_internal/compatibility/experimental.py +4 -79
- prefect/_internal/compatibility/migration.py +166 -0
- prefect/_internal/concurrency/__init__.py +2 -2
- prefect/_internal/concurrency/api.py +1 -35
- prefect/_internal/concurrency/calls.py +0 -6
- prefect/_internal/concurrency/cancellation.py +0 -3
- prefect/_internal/concurrency/event_loop.py +0 -20
- prefect/_internal/concurrency/inspection.py +3 -3
- prefect/_internal/concurrency/primitives.py +1 -0
- prefect/_internal/concurrency/services.py +23 -0
- prefect/_internal/concurrency/threads.py +35 -0
- prefect/_internal/concurrency/waiters.py +0 -28
- prefect/_internal/integrations.py +7 -0
- prefect/_internal/pydantic/__init__.py +0 -45
- prefect/_internal/pydantic/annotations/pendulum.py +2 -2
- prefect/_internal/pydantic/v1_schema.py +21 -22
- prefect/_internal/pydantic/v2_schema.py +0 -2
- prefect/_internal/pydantic/v2_validated_func.py +18 -23
- prefect/_internal/pytz.py +1 -1
- prefect/_internal/retries.py +61 -0
- prefect/_internal/schemas/bases.py +45 -177
- prefect/_internal/schemas/fields.py +1 -43
- prefect/_internal/schemas/validators.py +47 -233
- prefect/agent.py +3 -695
- prefect/artifacts.py +173 -14
- prefect/automations.py +39 -4
- prefect/blocks/abstract.py +1 -1
- prefect/blocks/core.py +405 -153
- prefect/blocks/fields.py +2 -57
- prefect/blocks/notifications.py +43 -28
- prefect/blocks/redis.py +168 -0
- prefect/blocks/system.py +67 -20
- prefect/blocks/webhook.py +2 -9
- prefect/cache_policies.py +239 -0
- prefect/client/__init__.py +4 -0
- prefect/client/base.py +33 -27
- prefect/client/cloud.py +65 -20
- prefect/client/collections.py +1 -1
- prefect/client/orchestration.py +650 -442
- prefect/client/schemas/actions.py +115 -100
- prefect/client/schemas/filters.py +46 -52
- prefect/client/schemas/objects.py +228 -178
- prefect/client/schemas/responses.py +18 -36
- prefect/client/schemas/schedules.py +55 -36
- prefect/client/schemas/sorting.py +2 -0
- prefect/client/subscriptions.py +8 -7
- prefect/client/types/flexible_schedule_list.py +11 -0
- prefect/client/utilities.py +9 -6
- prefect/concurrency/asyncio.py +60 -11
- prefect/concurrency/context.py +24 -0
- prefect/concurrency/events.py +2 -2
- prefect/concurrency/services.py +46 -16
- prefect/concurrency/sync.py +51 -7
- prefect/concurrency/v1/asyncio.py +143 -0
- prefect/concurrency/v1/context.py +27 -0
- prefect/concurrency/v1/events.py +61 -0
- prefect/concurrency/v1/services.py +116 -0
- prefect/concurrency/v1/sync.py +92 -0
- prefect/context.py +246 -149
- prefect/deployments/__init__.py +33 -18
- prefect/deployments/base.py +10 -15
- prefect/deployments/deployments.py +2 -1048
- prefect/deployments/flow_runs.py +178 -0
- prefect/deployments/runner.py +72 -173
- prefect/deployments/schedules.py +31 -25
- prefect/deployments/steps/__init__.py +0 -1
- prefect/deployments/steps/core.py +7 -0
- prefect/deployments/steps/pull.py +15 -21
- prefect/deployments/steps/utility.py +2 -1
- prefect/docker/__init__.py +20 -0
- prefect/docker/docker_image.py +82 -0
- prefect/engine.py +15 -2475
- prefect/events/actions.py +17 -23
- prefect/events/cli/automations.py +20 -7
- prefect/events/clients.py +142 -80
- prefect/events/filters.py +14 -18
- prefect/events/related.py +74 -75
- prefect/events/schemas/__init__.py +0 -5
- prefect/events/schemas/automations.py +55 -46
- prefect/events/schemas/deployment_triggers.py +7 -197
- prefect/events/schemas/events.py +46 -65
- prefect/events/schemas/labelling.py +10 -14
- prefect/events/utilities.py +4 -5
- prefect/events/worker.py +23 -8
- prefect/exceptions.py +15 -0
- prefect/filesystems.py +30 -529
- prefect/flow_engine.py +827 -0
- prefect/flow_runs.py +379 -7
- prefect/flows.py +470 -360
- prefect/futures.py +382 -331
- prefect/infrastructure/__init__.py +5 -26
- prefect/infrastructure/base.py +3 -320
- prefect/infrastructure/provisioners/__init__.py +5 -3
- prefect/infrastructure/provisioners/cloud_run.py +13 -8
- prefect/infrastructure/provisioners/container_instance.py +14 -9
- prefect/infrastructure/provisioners/ecs.py +10 -8
- prefect/infrastructure/provisioners/modal.py +8 -5
- prefect/input/__init__.py +4 -0
- prefect/input/actions.py +2 -4
- prefect/input/run_input.py +9 -9
- prefect/logging/formatters.py +2 -4
- prefect/logging/handlers.py +9 -14
- prefect/logging/loggers.py +5 -5
- prefect/main.py +72 -0
- prefect/plugins.py +2 -64
- prefect/profiles.toml +16 -2
- prefect/records/__init__.py +1 -0
- prefect/records/base.py +223 -0
- prefect/records/filesystem.py +207 -0
- prefect/records/memory.py +178 -0
- prefect/records/result_store.py +64 -0
- prefect/results.py +577 -504
- prefect/runner/runner.py +117 -47
- prefect/runner/server.py +32 -34
- prefect/runner/storage.py +3 -12
- prefect/runner/submit.py +2 -10
- prefect/runner/utils.py +2 -2
- prefect/runtime/__init__.py +1 -0
- prefect/runtime/deployment.py +1 -0
- prefect/runtime/flow_run.py +40 -5
- prefect/runtime/task_run.py +1 -0
- prefect/serializers.py +28 -39
- prefect/server/api/collections_data/views/aggregate-worker-metadata.json +5 -14
- prefect/settings.py +209 -332
- prefect/states.py +160 -63
- prefect/task_engine.py +1478 -57
- prefect/task_runners.py +383 -287
- prefect/task_runs.py +240 -0
- prefect/task_worker.py +463 -0
- prefect/tasks.py +684 -374
- prefect/transactions.py +410 -0
- prefect/types/__init__.py +72 -86
- prefect/types/entrypoint.py +13 -0
- prefect/utilities/annotations.py +4 -3
- prefect/utilities/asyncutils.py +227 -148
- prefect/utilities/callables.py +137 -45
- prefect/utilities/collections.py +134 -86
- prefect/utilities/dispatch.py +27 -14
- prefect/utilities/dockerutils.py +11 -4
- prefect/utilities/engine.py +186 -32
- prefect/utilities/filesystem.py +4 -5
- prefect/utilities/importtools.py +26 -27
- prefect/utilities/pydantic.py +128 -38
- prefect/utilities/schema_tools/hydration.py +18 -1
- prefect/utilities/schema_tools/validation.py +30 -0
- prefect/utilities/services.py +35 -9
- prefect/utilities/templating.py +12 -2
- prefect/utilities/timeout.py +20 -5
- prefect/utilities/urls.py +195 -0
- prefect/utilities/visualization.py +1 -0
- prefect/variables.py +78 -59
- prefect/workers/__init__.py +0 -1
- prefect/workers/base.py +237 -244
- prefect/workers/block.py +5 -226
- prefect/workers/cloud.py +6 -0
- prefect/workers/process.py +265 -12
- prefect/workers/server.py +29 -11
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/METADATA +28 -24
- prefect_client-3.0.0.dist-info/RECORD +201 -0
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/WHEEL +1 -1
- prefect/_internal/pydantic/_base_model.py +0 -51
- prefect/_internal/pydantic/_compat.py +0 -82
- prefect/_internal/pydantic/_flags.py +0 -20
- prefect/_internal/pydantic/_types.py +0 -8
- prefect/_internal/pydantic/utilities/config_dict.py +0 -72
- prefect/_internal/pydantic/utilities/field_validator.py +0 -150
- prefect/_internal/pydantic/utilities/model_construct.py +0 -56
- prefect/_internal/pydantic/utilities/model_copy.py +0 -55
- prefect/_internal/pydantic/utilities/model_dump.py +0 -136
- prefect/_internal/pydantic/utilities/model_dump_json.py +0 -112
- prefect/_internal/pydantic/utilities/model_fields.py +0 -50
- prefect/_internal/pydantic/utilities/model_fields_set.py +0 -29
- prefect/_internal/pydantic/utilities/model_json_schema.py +0 -82
- prefect/_internal/pydantic/utilities/model_rebuild.py +0 -80
- prefect/_internal/pydantic/utilities/model_validate.py +0 -75
- prefect/_internal/pydantic/utilities/model_validate_json.py +0 -68
- prefect/_internal/pydantic/utilities/model_validator.py +0 -87
- prefect/_internal/pydantic/utilities/type_adapter.py +0 -71
- prefect/_vendor/fastapi/__init__.py +0 -25
- prefect/_vendor/fastapi/applications.py +0 -946
- prefect/_vendor/fastapi/background.py +0 -3
- prefect/_vendor/fastapi/concurrency.py +0 -44
- prefect/_vendor/fastapi/datastructures.py +0 -58
- prefect/_vendor/fastapi/dependencies/__init__.py +0 -0
- prefect/_vendor/fastapi/dependencies/models.py +0 -64
- prefect/_vendor/fastapi/dependencies/utils.py +0 -877
- prefect/_vendor/fastapi/encoders.py +0 -177
- prefect/_vendor/fastapi/exception_handlers.py +0 -40
- prefect/_vendor/fastapi/exceptions.py +0 -46
- prefect/_vendor/fastapi/logger.py +0 -3
- prefect/_vendor/fastapi/middleware/__init__.py +0 -1
- prefect/_vendor/fastapi/middleware/asyncexitstack.py +0 -25
- prefect/_vendor/fastapi/middleware/cors.py +0 -3
- prefect/_vendor/fastapi/middleware/gzip.py +0 -3
- prefect/_vendor/fastapi/middleware/httpsredirect.py +0 -3
- prefect/_vendor/fastapi/middleware/trustedhost.py +0 -3
- prefect/_vendor/fastapi/middleware/wsgi.py +0 -3
- prefect/_vendor/fastapi/openapi/__init__.py +0 -0
- prefect/_vendor/fastapi/openapi/constants.py +0 -2
- prefect/_vendor/fastapi/openapi/docs.py +0 -203
- prefect/_vendor/fastapi/openapi/models.py +0 -480
- prefect/_vendor/fastapi/openapi/utils.py +0 -485
- prefect/_vendor/fastapi/param_functions.py +0 -340
- prefect/_vendor/fastapi/params.py +0 -453
- prefect/_vendor/fastapi/py.typed +0 -0
- prefect/_vendor/fastapi/requests.py +0 -4
- prefect/_vendor/fastapi/responses.py +0 -40
- prefect/_vendor/fastapi/routing.py +0 -1331
- prefect/_vendor/fastapi/security/__init__.py +0 -15
- prefect/_vendor/fastapi/security/api_key.py +0 -98
- prefect/_vendor/fastapi/security/base.py +0 -6
- prefect/_vendor/fastapi/security/http.py +0 -172
- prefect/_vendor/fastapi/security/oauth2.py +0 -227
- prefect/_vendor/fastapi/security/open_id_connect_url.py +0 -34
- prefect/_vendor/fastapi/security/utils.py +0 -10
- prefect/_vendor/fastapi/staticfiles.py +0 -1
- prefect/_vendor/fastapi/templating.py +0 -3
- prefect/_vendor/fastapi/testclient.py +0 -1
- prefect/_vendor/fastapi/types.py +0 -3
- prefect/_vendor/fastapi/utils.py +0 -235
- prefect/_vendor/fastapi/websockets.py +0 -7
- prefect/_vendor/starlette/__init__.py +0 -1
- prefect/_vendor/starlette/_compat.py +0 -28
- prefect/_vendor/starlette/_exception_handler.py +0 -80
- prefect/_vendor/starlette/_utils.py +0 -88
- prefect/_vendor/starlette/applications.py +0 -261
- prefect/_vendor/starlette/authentication.py +0 -159
- prefect/_vendor/starlette/background.py +0 -43
- prefect/_vendor/starlette/concurrency.py +0 -59
- prefect/_vendor/starlette/config.py +0 -151
- prefect/_vendor/starlette/convertors.py +0 -87
- prefect/_vendor/starlette/datastructures.py +0 -707
- prefect/_vendor/starlette/endpoints.py +0 -130
- prefect/_vendor/starlette/exceptions.py +0 -60
- prefect/_vendor/starlette/formparsers.py +0 -276
- prefect/_vendor/starlette/middleware/__init__.py +0 -17
- prefect/_vendor/starlette/middleware/authentication.py +0 -52
- prefect/_vendor/starlette/middleware/base.py +0 -220
- prefect/_vendor/starlette/middleware/cors.py +0 -176
- prefect/_vendor/starlette/middleware/errors.py +0 -265
- prefect/_vendor/starlette/middleware/exceptions.py +0 -74
- prefect/_vendor/starlette/middleware/gzip.py +0 -113
- prefect/_vendor/starlette/middleware/httpsredirect.py +0 -19
- prefect/_vendor/starlette/middleware/sessions.py +0 -82
- prefect/_vendor/starlette/middleware/trustedhost.py +0 -64
- prefect/_vendor/starlette/middleware/wsgi.py +0 -147
- prefect/_vendor/starlette/py.typed +0 -0
- prefect/_vendor/starlette/requests.py +0 -328
- prefect/_vendor/starlette/responses.py +0 -347
- prefect/_vendor/starlette/routing.py +0 -933
- prefect/_vendor/starlette/schemas.py +0 -154
- prefect/_vendor/starlette/staticfiles.py +0 -248
- prefect/_vendor/starlette/status.py +0 -199
- prefect/_vendor/starlette/templating.py +0 -231
- prefect/_vendor/starlette/testclient.py +0 -804
- prefect/_vendor/starlette/types.py +0 -30
- prefect/_vendor/starlette/websockets.py +0 -193
- prefect/blocks/kubernetes.py +0 -119
- prefect/deprecated/__init__.py +0 -0
- prefect/deprecated/data_documents.py +0 -350
- prefect/deprecated/packaging/__init__.py +0 -12
- prefect/deprecated/packaging/base.py +0 -96
- prefect/deprecated/packaging/docker.py +0 -146
- prefect/deprecated/packaging/file.py +0 -92
- prefect/deprecated/packaging/orion.py +0 -80
- prefect/deprecated/packaging/serializers.py +0 -171
- prefect/events/instrument.py +0 -135
- prefect/infrastructure/container.py +0 -824
- prefect/infrastructure/kubernetes.py +0 -920
- prefect/infrastructure/process.py +0 -289
- prefect/manifests.py +0 -20
- prefect/new_flow_engine.py +0 -449
- prefect/new_task_engine.py +0 -423
- prefect/pydantic/__init__.py +0 -76
- prefect/pydantic/main.py +0 -39
- prefect/software/__init__.py +0 -2
- prefect/software/base.py +0 -50
- prefect/software/conda.py +0 -199
- prefect/software/pip.py +0 -122
- prefect/software/python.py +0 -52
- prefect/task_server.py +0 -322
- prefect_client-2.20.4.dist-info/RECORD +0 -294
- /prefect/{_internal/pydantic/utilities → client/types}/__init__.py +0 -0
- /prefect/{_vendor → concurrency/v1}/__init__.py +0 -0
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/LICENSE +0 -0
- {prefect_client-2.20.4.dist-info → prefect_client-3.0.0.dist-info}/top_level.txt +0 -0
@@ -1,18 +1,21 @@
|
|
1
1
|
"""
|
2
2
|
Core set of steps for specifying a Prefect project pull step.
|
3
3
|
"""
|
4
|
+
|
4
5
|
import os
|
5
6
|
from pathlib import Path
|
6
|
-
from typing import Any, Optional
|
7
|
+
from typing import TYPE_CHECKING, Any, Optional
|
7
8
|
|
8
|
-
from prefect._internal.
|
9
|
-
from prefect.blocks.core import Block
|
9
|
+
from prefect._internal.retries import retry_async_fn
|
10
10
|
from prefect.logging.loggers import get_logger
|
11
11
|
from prefect.runner.storage import BlockStorageAdapter, GitRepository, RemoteStorage
|
12
12
|
from prefect.utilities.asyncutils import sync_compatible
|
13
13
|
|
14
14
|
deployment_logger = get_logger("deployment")
|
15
15
|
|
16
|
+
if TYPE_CHECKING:
|
17
|
+
from prefect.blocks.core import Block
|
18
|
+
|
16
19
|
|
17
20
|
def set_working_directory(directory: str) -> dict:
|
18
21
|
"""
|
@@ -29,13 +32,19 @@ def set_working_directory(directory: str) -> dict:
|
|
29
32
|
return dict(directory=directory)
|
30
33
|
|
31
34
|
|
35
|
+
@retry_async_fn(
|
36
|
+
max_attempts=3,
|
37
|
+
base_delay=1,
|
38
|
+
max_delay=10,
|
39
|
+
retry_on_exceptions=(RuntimeError,),
|
40
|
+
)
|
32
41
|
@sync_compatible
|
33
42
|
async def git_clone(
|
34
43
|
repository: str,
|
35
44
|
branch: Optional[str] = None,
|
36
45
|
include_submodules: bool = False,
|
37
46
|
access_token: Optional[str] = None,
|
38
|
-
credentials: Optional[Block] = None,
|
47
|
+
credentials: Optional["Block"] = None,
|
39
48
|
) -> dict:
|
40
49
|
"""
|
41
50
|
Clones a git repository into the current working directory.
|
@@ -177,6 +186,8 @@ async def pull_with_block(block_document_name: str, block_type_slug: str):
|
|
177
186
|
block_document_name: The name of the block document to use
|
178
187
|
block_type_slug: The slug of the type of block to use
|
179
188
|
"""
|
189
|
+
from prefect.blocks.core import Block
|
190
|
+
|
180
191
|
full_slug = f"{block_type_slug}/{block_document_name}"
|
181
192
|
try:
|
182
193
|
block = await Block.load(full_slug)
|
@@ -199,20 +210,3 @@ async def pull_with_block(block_document_name: str, block_type_slug: str):
|
|
199
210
|
"Pulled code using block '%s' into '%s'", full_slug, directory
|
200
211
|
)
|
201
212
|
return {"directory": directory}
|
202
|
-
|
203
|
-
|
204
|
-
@deprecated_callable(start_date="Jun 2023", help="Use 'git clone' instead.")
|
205
|
-
@sync_compatible
|
206
|
-
async def git_clone_project(
|
207
|
-
repository: str,
|
208
|
-
branch: Optional[str] = None,
|
209
|
-
include_submodules: bool = False,
|
210
|
-
access_token: Optional[str] = None,
|
211
|
-
) -> dict:
|
212
|
-
"""Deprecated. Use `git_clone` instead."""
|
213
|
-
return await git_clone(
|
214
|
-
repository=repository,
|
215
|
-
branch=branch,
|
216
|
-
include_submodules=include_submodules,
|
217
|
-
access_token=access_token,
|
218
|
-
)
|
@@ -4,7 +4,7 @@ Utility project steps that are useful for managing a project's deployment lifecy
|
|
4
4
|
Steps within this module can be used within a `build`, `push`, or `pull` deployment action.
|
5
5
|
|
6
6
|
Example:
|
7
|
-
Use the `run_shell_script` setp to retrieve the short Git commit hash of the current
|
7
|
+
Use the `run_shell_script` setp to retrieve the short Git commit hash of the current
|
8
8
|
repository and use it as a Docker image tag:
|
9
9
|
```yaml
|
10
10
|
build:
|
@@ -19,6 +19,7 @@ Example:
|
|
19
19
|
dockerfile: auto
|
20
20
|
```
|
21
21
|
"""
|
22
|
+
|
22
23
|
import io
|
23
24
|
import os
|
24
25
|
import shlex
|
@@ -0,0 +1,20 @@
|
|
1
|
+
from typing import TYPE_CHECKING
|
2
|
+
|
3
|
+
if TYPE_CHECKING:
|
4
|
+
from prefect.docker.docker_image import DockerImage
|
5
|
+
|
6
|
+
__all__ = ["DockerImage"]
|
7
|
+
|
8
|
+
_public_api: dict[str, tuple[str, str]] = {
|
9
|
+
"DockerImage": ("prefect.docker.docker_image", "DockerImage"),
|
10
|
+
}
|
11
|
+
|
12
|
+
|
13
|
+
def __getattr__(name: str) -> object:
|
14
|
+
from importlib import import_module
|
15
|
+
|
16
|
+
if name in _public_api:
|
17
|
+
module, attr = _public_api[name]
|
18
|
+
return getattr(import_module(module), attr)
|
19
|
+
|
20
|
+
raise ImportError(f"module {__name__!r} has no attribute {name!r}")
|
@@ -0,0 +1,82 @@
|
|
1
|
+
from pathlib import Path
|
2
|
+
from typing import Optional
|
3
|
+
|
4
|
+
from pendulum import now as pendulum_now
|
5
|
+
|
6
|
+
from prefect.settings import (
|
7
|
+
PREFECT_DEFAULT_DOCKER_BUILD_NAMESPACE,
|
8
|
+
)
|
9
|
+
from prefect.utilities.dockerutils import (
|
10
|
+
PushError,
|
11
|
+
build_image,
|
12
|
+
docker_client,
|
13
|
+
generate_default_dockerfile,
|
14
|
+
parse_image_tag,
|
15
|
+
split_repository_path,
|
16
|
+
)
|
17
|
+
from prefect.utilities.slugify import slugify
|
18
|
+
|
19
|
+
|
20
|
+
class DockerImage:
|
21
|
+
"""
|
22
|
+
Configuration used to build and push a Docker image for a deployment.
|
23
|
+
|
24
|
+
Attributes:
|
25
|
+
name: The name of the Docker image to build, including the registry and
|
26
|
+
repository.
|
27
|
+
tag: The tag to apply to the built image.
|
28
|
+
dockerfile: The path to the Dockerfile to use for building the image. If
|
29
|
+
not provided, a default Dockerfile will be generated.
|
30
|
+
**build_kwargs: Additional keyword arguments to pass to the Docker build request.
|
31
|
+
See the [`docker-py` documentation](https://docker-py.readthedocs.io/en/stable/images.html#docker.models.images.ImageCollection.build)
|
32
|
+
for more information.
|
33
|
+
|
34
|
+
"""
|
35
|
+
|
36
|
+
def __init__(
|
37
|
+
self, name: str, tag: Optional[str] = None, dockerfile="auto", **build_kwargs
|
38
|
+
):
|
39
|
+
image_name, image_tag = parse_image_tag(name)
|
40
|
+
if tag and image_tag:
|
41
|
+
raise ValueError(
|
42
|
+
f"Only one tag can be provided - both {image_tag!r} and {tag!r} were"
|
43
|
+
" provided as tags."
|
44
|
+
)
|
45
|
+
namespace, repository = split_repository_path(image_name)
|
46
|
+
# if the provided image name does not include a namespace (registry URL or user/org name),
|
47
|
+
# use the default namespace
|
48
|
+
if not namespace:
|
49
|
+
namespace = PREFECT_DEFAULT_DOCKER_BUILD_NAMESPACE.value()
|
50
|
+
# join the namespace and repository to create the full image name
|
51
|
+
# ignore namespace if it is None
|
52
|
+
self.name = "/".join(filter(None, [namespace, repository]))
|
53
|
+
self.tag = tag or image_tag or slugify(pendulum_now("utc").isoformat())
|
54
|
+
self.dockerfile = dockerfile
|
55
|
+
self.build_kwargs = build_kwargs
|
56
|
+
|
57
|
+
@property
|
58
|
+
def reference(self):
|
59
|
+
return f"{self.name}:{self.tag}"
|
60
|
+
|
61
|
+
def build(self):
|
62
|
+
full_image_name = self.reference
|
63
|
+
build_kwargs = self.build_kwargs.copy()
|
64
|
+
build_kwargs["context"] = Path.cwd()
|
65
|
+
build_kwargs["tag"] = full_image_name
|
66
|
+
build_kwargs["pull"] = build_kwargs.get("pull", True)
|
67
|
+
|
68
|
+
if self.dockerfile == "auto":
|
69
|
+
with generate_default_dockerfile():
|
70
|
+
build_image(**build_kwargs)
|
71
|
+
else:
|
72
|
+
build_kwargs["dockerfile"] = self.dockerfile
|
73
|
+
build_image(**build_kwargs)
|
74
|
+
|
75
|
+
def push(self):
|
76
|
+
with docker_client() as client:
|
77
|
+
events = client.api.push(
|
78
|
+
repository=self.name, tag=self.tag, stream=True, decode=True
|
79
|
+
)
|
80
|
+
for event in events:
|
81
|
+
if "error" in event:
|
82
|
+
raise PushError(event["error"])
|