Skip to content

Module taskcat._cli_modules.upload

None

None

View Source
import logging

from pathlib import Path

from typing import Any, Dict

from taskcat._cli_core import CliCore

from taskcat._client_factory import Boto3Cache

from taskcat._config import Config

from taskcat._lambda_build import LambdaBuild

from taskcat._s3_stage import stage_in_s3

LOG = logging.getLogger(__name__)

class Upload:

    """

    Uploads project to S3.

    """

    @CliCore.longform_param_required("exclude_prefix")

    @CliCore.longform_param_required("dry_run")

    def __init__(

        self,

        config_file: str = "./.taskcat.yml",

        project_root: str = "./",

        enable_sig_v2: bool = False,

        bucket_name: str = "",

        disable_lambda_packaging: bool = False,

        key_prefix: str = "",

        dry_run: bool = False,

        object_acl: str = "",

        exclude_prefix: list = None,

    ):  # pylint: disable=too-many-locals

        """does lambda packaging and uploads to s3

        :param config_file: path to taskat project config file

        :param enable_sig_v2: enable legacy sigv2 requests for auto-created buckets

        :param bucket_name: set bucket name instead of generating it. If regional

        buckets are enabled, will use this as a prefix

        :param disable_lambda_packaging: skip packaging step

        :param key_prefix: provide a custom key-prefix for uploading to S3. This

        will be used instead of `project` => `name` in the config

        :param dry_run: identify changes needed but do not upload to S3.

        """

        project_root_path: Path = Path(project_root).expanduser().resolve()

        input_file_path: Path = project_root_path / config_file

        args: Dict[str, Any] = {"project": {"s3_enable_sig_v2": enable_sig_v2}}

        if object_acl:

            args["project"]["s3_object_acl"] = object_acl

        if bucket_name:

            args["project"]["bucket_name"] = bucket_name

        if key_prefix:

            args["project"]["name"] = key_prefix

        config = Config.create(

            project_root=project_root_path,

            project_config_path=input_file_path,

            args=args,

        )

        boto3_cache = Boto3Cache()

        if (

            config.config.project.package_lambda

            and disable_lambda_packaging is not True

        ):

            LambdaBuild(config, project_root_path)

        buckets = config.get_buckets(boto3_cache)

        stage_in_s3(

            buckets,

            config.config.project.name,

            config.project_root,

            exclude_prefix,

            dry_run,

        )

Variables

LOG

Classes

Upload

class Upload(
    config_file: str = './.taskcat.yml',
    project_root: str = './',
    enable_sig_v2: bool = False,
    bucket_name: str = '',
    disable_lambda_packaging: bool = False,
    key_prefix: str = '',
    dry_run: bool = False,
    object_acl: str = '',
    exclude_prefix: list = None
)
View Source
class Upload:

    """

    Uploads project to S3.

    """

    @CliCore.longform_param_required("exclude_prefix")

    @CliCore.longform_param_required("dry_run")

    def __init__(

        self,

        config_file: str = "./.taskcat.yml",

        project_root: str = "./",

        enable_sig_v2: bool = False,

        bucket_name: str = "",

        disable_lambda_packaging: bool = False,

        key_prefix: str = "",

        dry_run: bool = False,

        object_acl: str = "",

        exclude_prefix: list = None,

    ):  # pylint: disable=too-many-locals

        """does lambda packaging and uploads to s3

        :param config_file: path to taskat project config file

        :param enable_sig_v2: enable legacy sigv2 requests for auto-created buckets

        :param bucket_name: set bucket name instead of generating it. If regional

        buckets are enabled, will use this as a prefix

        :param disable_lambda_packaging: skip packaging step

        :param key_prefix: provide a custom key-prefix for uploading to S3. This

        will be used instead of `project` => `name` in the config

        :param dry_run: identify changes needed but do not upload to S3.

        """

        project_root_path: Path = Path(project_root).expanduser().resolve()

        input_file_path: Path = project_root_path / config_file

        args: Dict[str, Any] = {"project": {"s3_enable_sig_v2": enable_sig_v2}}

        if object_acl:

            args["project"]["s3_object_acl"] = object_acl

        if bucket_name:

            args["project"]["bucket_name"] = bucket_name

        if key_prefix:

            args["project"]["name"] = key_prefix

        config = Config.create(

            project_root=project_root_path,

            project_config_path=input_file_path,

            args=args,

        )

        boto3_cache = Boto3Cache()

        if (

            config.config.project.package_lambda

            and disable_lambda_packaging is not True

        ):

            LambdaBuild(config, project_root_path)

        buckets = config.get_buckets(boto3_cache)

        stage_in_s3(

            buckets,

            config.config.project.name,

            config.project_root,

            exclude_prefix,

            dry_run,

        )