Example #1
0
    def run(self):
        if 'targets' not in self.config:
            self.logger.info('You have not added any targets yet')
            self.logger.info('Use the "add" command to do this')
            return

        if self.args.target not in self.config['targets']:
            all_targets = sorted(list(self.config['targets'].keys()))
            self.logger.info('"%s" is an unknown target', self.args.target)
            self.logger.info('Choices are: %s', all_targets)
            return

        entry = self.config['targets'][self.args.target]

        local_folder = entry.get('local_folder', '')
        s3_uri = entry.get('s3_uri', '')
        aws_access_key_id = entry.get('aws_access_key_id')
        aws_secret_access_key = entry.get('aws_secret_access_key')
        region_name = entry.get('region_name')

        new_local_folder = utils.get_input(
            'local folder [{}]: '.format(local_folder))
        new_s3_uri = utils.get_input('s3 uri [{}]: '.format(s3_uri))
        new_aws_access_key_id = utils.get_input(
            'AWS Access Key ID [{}]: '.format(aws_access_key_id))

        secret_key_prompt = 'AWS Secret Access Key [{}]: '.format(
            aws_secret_access_key)
        new_aws_secret_access_key = utils.get_input(secret_key_prompt,
                                                    secret=True)

        new_region_name = utils.get_input(
            'region name [{}]: '.format(region_name))

        if new_local_folder:
            entry['local_folder'] = os.path.expanduser(new_local_folder)
        if new_s3_uri:
            entry['s3_uri'] = new_s3_uri
        if new_aws_access_key_id:
            entry['aws_access_key_id'] = new_aws_access_key_id
        if new_aws_secret_access_key:
            entry['aws_secret_access_key'] = new_aws_secret_access_key
        if new_region_name:
            entry['region_name'] = new_region_name

        self.config['targets'][self.args.target] = entry

        utils.set_config(self.config)
Example #2
0
    def run(self):
        if "targets" not in self.config:
            self.logger.info("You have not added any targets yet")
            self.logger.info('Use the "add" command to do this')
            return

        if self.args.target not in self.config["targets"]:
            all_targets = sorted(list(self.config["targets"].keys()))
            self.logger.info('"%s" is an unknown target', self.args.target)
            self.logger.info("Choices are: %s", all_targets)
            return

        entry = self.config["targets"][self.args.target]

        local_folder = entry.get("local_folder", "")
        s3_uri = entry.get("s3_uri", "")
        aws_access_key_id = entry.get("aws_access_key_id")
        aws_secret_access_key = entry.get("aws_secret_access_key")
        region_name = entry.get("region_name")

        new_local_folder = utils.get_input(
            "local folder [{}]: ".format(local_folder))
        new_s3_uri = utils.get_input("s3 uri [{}]: ".format(s3_uri))
        new_aws_access_key_id = utils.get_input(
            "AWS Access Key ID [{}]: ".format(aws_access_key_id))

        secret_key_prompt = "AWS Secret Access Key [{}]: ".format(
            aws_secret_access_key)
        new_aws_secret_access_key = utils.get_input(secret_key_prompt,
                                                    secret=True)

        new_region_name = utils.get_input(
            "region name [{}]: ".format(region_name))

        if new_local_folder:
            entry["local_folder"] = os.path.expanduser(new_local_folder)
        if new_s3_uri:
            entry["s3_uri"] = new_s3_uri
        if new_aws_access_key_id:
            entry["aws_access_key_id"] = new_aws_access_key_id
        if new_aws_secret_access_key:
            entry["aws_secret_access_key"] = new_aws_secret_access_key
        if new_region_name:
            entry["region_name"] = new_region_name

        self.config["targets"][self.args.target] = entry

        utils.set_config(self.config)
Example #3
0
def handle_conflict(key, action_1, client_1, action_2, client_2):
    print(
        "\n"
        'Conflict for "{}". Which version would you like to keep?\n'
        "   (1) {}{} updated at {} ({})\n"
        "   (2) {}{} updated at {} ({})\n"
        "   (d) View difference (requires the diff command)\n"
        "   (X) Skip this file\n".format(
            key,
            client_1.get_uri(),
            key,
            action_1.get_remote_datetime(),
            action_1.state,
            client_2.get_uri(),
            key,
            action_2.get_remote_datetime(),
            action_2.state,
        ),
        file=sys.stderr,
    )
    while True:
        choice = utils.get_input("Choice (default=skip): ")
        print("", file=sys.stderr)

        if choice == "d":
            show_diff(client_1, client_2, key)
        else:
            break

    if choice == "1":
        return Resolution.get_resolution(key, action_1, client_2, client_1)
    elif choice == "2":
        return Resolution.get_resolution(key, action_2, client_1, client_2)
Example #4
0
    def test_required(self, input_fn, getpass):
        input_fn.side_effect = ["", "", "something"]

        result = utils.get_input("give me some info", required=True)

        assert result == "something"
        assert input_fn.call_count == 3
        assert getpass.call_count == 0
Example #5
0
    def test_secret(self, input_fn, getpass):
        getpass.return_value = "bar"

        result = utils.get_input("give me some secret info", secret=True)

        assert result == "bar"

        assert getpass.call_count == 1
        assert input_fn.call_count == 0
Example #6
0
    def test_blank(self, input_fn, getpass):
        input_fn.return_value = ""

        result = utils.get_input("give me some info", blank=True)

        assert result is None

        assert getpass.call_count == 0
        assert input_fn.call_count == 1
Example #7
0
    def test_not_secret(self, input_fn, getpass):
        input_fn.return_value = "foo"

        result = utils.get_input("give me some info", secret=False)

        assert result == "foo"

        assert getpass.call_count == 0
        assert input_fn.call_count == 1
Example #8
0
    def run(self):
        target = self.args.copy_target_credentials
        all_targets = list(self.config["targets"].keys())
        if target is not None and target not in all_targets:
            self.logger.info('"%s" is an unknown target', target)
            self.logger.info("Choices are: %s", all_targets)
            return

        entry = {}
        entry["local_folder"] = os.path.expanduser(
            utils.get_input("local folder: "))
        entry["s3_uri"] = utils.get_input("s3 uri: ")
        entry["region_name"] = utils.get_input("region name: ")

        if target is not None:
            entry["aws_access_key_id"] = self.config["targets"][target][
                "aws_access_key_id"]
            entry["aws_secret_access_key"] = self.config["targets"][target][
                "aws_secret_access_key"]
        else:
            entry["aws_access_key_id"] = utils.get_input("AWS Access Key ID: ")
            entry["aws_secret_access_key"] = utils.get_input(
                "AWS Secret Access Key: ", secret=True)

        default_name = os.path.basename(entry["s3_uri"])
        name = utils.get_input(
            "Provide a name for this entry [{}]: ".format(default_name))

        if not name:
            name = default_name

        self.config["targets"][name] = entry

        utils.set_config(self.config)
Example #9
0
    def run(self):
        target = self.args.copy_target_credentials
        all_targets = list(self.config['targets'].keys())
        if target is not None and target not in all_targets:
            self.logger.info('"%s" is an unknown target', target)
            self.logger.info('Choices are: %s', all_targets)
            return

        entry = {}
        entry['local_folder'] = os.path.expanduser(
            utils.get_input('local folder: '))
        entry['s3_uri'] = utils.get_input('s3 uri: ')
        entry['region_name'] = utils.get_input('region name: ')

        if target is not None:
            entry['aws_access_key_id'] = self.config['targets'][target][
                'aws_access_key_id']
            entry['aws_secret_access_key'] = self.config['targets'][target][
                'aws_secret_access_key']
        else:
            entry['aws_access_key_id'] = utils.get_input('AWS Access Key ID: ')
            entry['aws_secret_access_key'] = utils.get_input(
                'AWS Secret Access Key: ', secret=True)

        default_name = os.path.basename(entry['s3_uri'])
        name = utils.get_input(
            'Provide a name for this entry [{}]: '.format(default_name))

        if not name:
            name = default_name

        if 'targets' not in self.config:
            self.config['targets'] = {}

        self.config['targets'][name] = entry

        utils.set_config(self.config)
Example #10
0
def add_command(args, config, logger):
    entry = {}

    entry['local_folder'] = os.path.expanduser(
        utils.get_input('local folder: '))
    entry['s3_uri'] = utils.get_input('s3 uri: ')
    entry['aws_access_key_id'] = utils.get_input('AWS Access Key ID: ')
    entry['aws_secret_access_key'] = utils.get_input('AWS Secret Access Key: ',
                                                     secret=True)
    entry['region_name'] = utils.get_input('region name: ')

    default_name = os.path.basename(entry['s3_uri'])
    name = utils.get_input(
        'Provide a name for this entry [{}]: '.format(default_name))

    if not name:
        name = default_name

    if 'targets' not in config:
        config['targets'] = {}

    config['targets'][name] = entry

    set_config(config)
Example #11
0
def test_get_input(getpass, input_fn):
    utils.get_input("give me some info", secret=False)

    assert getpass.call_count == 1
    assert input_fn.call_count == 0
Example #12
0
def test_get_input_secret(getpass, input_fn):
    utils.get_input("give me some secret info", secret=True)

    assert getpass.call_count == 0
    assert input_fn.call_count == 1