Пример #1
0
def test_detect_invalid_version_in_meta(repo_w, tmpdir):
    rp = str(tmpdir) + '/r1'
    generate_structure(rp, ['0.1.0'], versions_meta=['0.1'], number=1)
    repo = Repository('repo_in_meta')
    with pytest.raises(RepositoryException) as ex:
        repo.create(rp)
    assert 'r1/first/0.1.0' in str(ex)
Пример #2
0
def add(name, source, overwrite, resource_name):
    repo = Repository(name)
    if resource_name is None:
        resource_name = os.path.split(source)[-1]
    repo.add_single(name=resource_name,
                    source=source,
                    overwrite=overwrite)
Пример #3
0
def test_simple_select(repo_r, spec, exp):
    spec = Repository._parse_spec(spec)
    assert Repository.contains(spec) is exp
    if exp:
        metadata = Repository.get_metadata(spec)
        assert metadata['version'] == spec['version']
        assert spec['version_sign'] == '=='
Пример #4
0
def test_get_latest(repo_r, spec, exp):
    spec = Repository._parse_spec(spec)
    assert spec['version'] is None
    assert Repository.contains(spec) is exp
    if exp:
        Repository.get_metadata(spec)
        assert spec['version_sign'] == '>='
Пример #5
0
def repo_w(request, tmpdir_factory):
    path = generator(request, tmpdir_factory)
    r = Repository('rwtest')
    r.create(path)
    request.addfinalizer(lambda: shutil.rmtree(path))
    request.addfinalizer(lambda: r.remove())
    return r
Пример #6
0
def test_simple_select(repo_r, spec, exp):
    spec = Repository._parse_spec(spec)
    assert Repository.contains(spec) is exp
    if exp:
        metadata = Repository.get_metadata(spec)
        assert metadata['version'] == spec['version']
        assert spec['version_sign'] == '=='
Пример #7
0
def repo_w(request, tmpdir_factory):
    path = generator(request, tmpdir_factory)
    r = Repository('rwtest')
    r.create(path)
    request.addfinalizer(lambda: shutil.rmtree(path))
    request.addfinalizer(lambda: r.remove())
    return r
Пример #8
0
def test_get_latest(repo_r, spec, exp):
    spec = Repository._parse_spec(spec)
    assert spec['version'] is None
    assert Repository.contains(spec) is exp
    if exp:
        Repository.get_metadata(spec)
        assert spec['version_sign'] == '>='
Пример #9
0
def add(name, source, overwrite, resource_name):
    repo = Repository(name)
    if resource_name is None:
        resource_name = os.path.split(source)[-1]
    repo.add_single(name=resource_name,
                    source=source,
                    overwrite=overwrite)
Пример #10
0
def _import(name, source, link):
    if name is None:
        name = os.path.split(source)[-1]
    repo = Repository(name)
    repo.create(source, link)
    cnt = len(list(repo.iter_contents()))
    click.echo(
        "Created new repository with {} resources".format(cnt))
Пример #11
0
def _import(name, source, link):
    if name is None:
        name = os.path.split(source)[-1]
    repo = Repository(name)
    repo.create(source, link)
    cnt = len(list(repo.iter_contents()))
    click.echo(
        "Created new repository with {} resources".format(cnt))
Пример #12
0
def show(repository):
    if not repository:
        repos = Repository.list_repos()
        str_repos = '\n'.join(sorted(repos))
        click.echo(str_repos)
    else:
        repo = Repository(repository)
        content = yaml.safe_dump(dict(repo.get_contents()),
                                 default_flow_style=False)
        click.echo_via_pager(content)
Пример #13
0
def show(repository):
    if not repository:
        repos = Repository.list_repos()
        str_repos = '\n'.join(sorted(repos))
        click.echo(str_repos)
    else:
        repo = Repository(repository)
        content = yaml.safe_dump(dict(repo.get_contents()),
                                 default_flow_style=False)
        click.echo_via_pager(content)
Пример #14
0
def test_create_from_src(mock_mkdtemp, mock_rename, _):
    tmp_dir = '/tmp/dir'
    mock_mkdtemp.return_value = tmp_dir

    repo = Repository('create_from_src')
    real_path = repo.fpath

    repo.create(source='source')

    mock_rename.assert_called_with(tmp_dir, real_path)
    assert repo.fpath == real_path
Пример #15
0
def test_create_from_src_failed(mock_rmtree, mock_mkdtemp, mock_add_contents):
    tmp_dir = '/tmp/dir'
    mock_mkdtemp.return_value = tmp_dir

    mock_add_contents.side_effect = Exception()
    repo = Repository('fail_create')
    real_path = repo.fpath
    with pytest.raises(Exception):
        repo.create(source='source')

    mock_rmtree.assert_called_with(tmp_dir)
    assert repo.fpath == real_path
Пример #16
0
def update(name, source, overwrite):
    repo = Repository(name)
    prev = len(list(repo.iter_contents()))
    repo.update(source, overwrite)
    now = len(list(repo.iter_contents()))
    diff = now - prev
    if diff:
        click.echo(
            "Updated repository, with {} new resources".format(diff))
    else:
        click.echo(
            "Repository updated".format(diff))
Пример #17
0
def contains(spec, bool):
    repo, spec = Repository.parse(spec)
    if bool:
        result = Repository.contains(spec)
        if result:
            click.echo(click.style("Exists", fg='green'))
            return
    else:
        result_version = Repository.what_version(spec)
        if result_version:
            click.echo(click.style("Found: {}".format(result_version),
                                   fg='green'))
            return
    spec_data = yaml.safe_dump(spec, default_flow_style=False)
    click.echo(click.style("Not found: \n{}".format(spec_data),
                           fg='red'))
Пример #18
0
def create(name, spec, inputs=None, tags=None):
    inputs = inputs or {}
    if isinstance(spec, provider.BaseProvider):
        spec = spec.directory

    # fullpath
    # TODO: (jnowak) find a better way to code this part
    if spec.startswith('/'):
        if os.path.isfile(spec):
            template = _compile_file(name, spec, inputs)
            yaml_template = yaml.load(StringIO(template))
            rs = apply_composer_file(spec, name, yaml_template, tags)
        else:
            r = create_resource(name, spec, inputs=inputs, tags=tags,)
            rs = [r]
        return rs

    repo, parsed_spec = Repository.parse(spec)

    if repo.is_composer_file(spec):
        path = repo.get_composer_file_path(spec)
        template = _compile_file(name, path, inputs)
        yaml_template = yaml.load(StringIO(template))
        rs = apply_composer_file(path, name, yaml_template, tags)
    else:
        r = create_resource(name, spec, inputs=inputs, tags=tags)
        rs = [r]
    return CreatedResources(rs)
Пример #19
0
def contains(spec, bool):
    repo, spec = Repository.parse(spec)
    if bool:
        result = Repository.contains(spec)
        if result:
            click.echo(click.style("Exists", fg='green'))
            return
    else:
        result_version = Repository.what_version(spec)
        if result_version:
            click.echo(click.style("Found: {}".format(result_version),
                                   fg='green'))
            return
    spec_data = yaml.safe_dump(spec, default_flow_style=False)
    click.echo(click.style("Not found: \n{}".format(spec_data),
                           fg='red'))
Пример #20
0
def create(name, spec, inputs=None, tags=None):
    inputs = inputs or {}
    if isinstance(spec, provider.BaseProvider):
        spec = spec.directory

    # fullpath
    # TODO: (jnowak) find a better way to code this part
    if spec.startswith('/'):
        if os.path.isfile(spec):
            template = _compile_file(name, spec, inputs)
            yaml_template = yaml.load(StringIO(template))
            rs = apply_composer_file(spec, name, yaml_template, tags)
        else:
            r = create_resource(name, spec, inputs=inputs, tags=tags,)
            rs = [r]
        return rs

    repo, parsed_spec = Repository.parse(spec)

    if repo.is_composer_file(spec):
        path = repo.get_composer_file_path(spec)
        template = _compile_file(name, path, inputs)
        yaml_template = yaml.load(StringIO(template))
        rs = apply_composer_file(path, name, yaml_template, tags)
    else:
        r = create_resource(name, spec, inputs=inputs, tags=tags)
        rs = [r]

    return CreatedResources(rs)
Пример #21
0
    def create_from_spec(self, name, spec, args=None, tags=None):
        args = args or {}
        self.name = name
        if spec:
            if spec.startswith('/'):
                # it's full path, don't use repo
                self.base_path = spec
                metadata = read_meta(spec)
            else:
                repo, spec = Repository.parse(spec)
                metadata = repo.get_metadata(spec)
                self.base_path = repo.get_path(spec)
        else:
            metadata = deepcopy(self._metadata)
            self.base_path = spec  # TODO: remove this old method?

        if tags is None:
            tags = []
        m_tags = metadata.get('tags', [])
        tags.extend(m_tags)
        tags.append('resource={}'.format(name))

        inputs = metadata.get('input', {})

        self.auto_extend_inputs(inputs)
        self.db_obj = DBResource.from_dict(
            name, {
                'id': name,
                'name': name,
                'actions_path': metadata.get('actions_path', ''),
                'actions': metadata.get('actions', {}),
                'base_name': metadata.get('base_name', ''),
                'base_path': metadata.get('base_path', ''),
                'handler': metadata.get('handler', ''),
                'version': metadata.get('version', ''),
                'meta_inputs': inputs,
                'tags': tags,
                'state': RESOURCE_STATE.created.name,
                'managers': metadata.get('managers', [])
            })
        self.create_inputs(args)

        self.db_obj.save()
        LogItem.new({
            'resource': self.name,
            'action': 'run',
            'log': 'staged',
            'tags': self.tags
        }).save_lazy()
Пример #22
0
    def create_from_spec(self, name, spec, args=None, tags=None):
        args = args or {}
        self.name = name
        if spec:
            if spec.startswith('/'):
                # it's full path, don't use repo
                self.base_path = spec
                metadata = read_meta(spec)
            else:
                repo, spec = Repository.parse(spec)
                metadata = repo.get_metadata(spec)
                self.base_path = repo.get_path(spec)
        else:
            metadata = deepcopy(self._metadata)
            self.base_path = spec  # TODO: remove this old method?

        if tags is None:
            tags = []
        m_tags = metadata.get('tags', [])
        tags.extend(m_tags)
        tags.append('resource={}'.format(name))

        inputs = metadata.get('input', {})

        self.auto_extend_inputs(inputs)
        self.db_obj = DBResource.from_dict(
            name,
            {
                'id': name,
                'name': name,
                'actions_path': metadata.get('actions_path', ''),
                'actions': metadata.get('actions', {}),
                'base_name': metadata.get('base_name', ''),
                'base_path': metadata.get('base_path', ''),
                'handler': metadata.get('handler', ''),
                'version': metadata.get('version', ''),
                'meta_inputs': inputs,
                'tags': tags,
                'state': RESOURCE_STATE.created.name,
                'managers': metadata.get('managers', [])
            })
        self.create_inputs(args)

        self.db_obj.save()
        LogItem.new({
            'resource': self.name,
            'action': 'run',
            'log': 'staged',
            'tags': self.tags}).save_lazy()
Пример #23
0
def update(name, source, overwrite):
    repo = Repository(name)
    prev = len(list(repo.iter_contents()))
    repo.update(source, overwrite)
    now = len(list(repo.iter_contents()))
    diff = now - prev
    if diff:
        click.echo(
            "Updated repository, with {} new resources".format(diff))
    else:
        click.echo(
            "Repository updated".format(diff))
Пример #24
0
def create_resources(base_path, resources, tags=None):
    add_tags = tags
    created_resources = []
    for r in resources:
        resource_name = r['id']
        inputs = r.get('input', {})
        node = r.get('location', None)
        values_from = r.get('values_from')
        spec = r.get('from', None)
        tags = r.get('tags', [])
        if add_tags:
            tags.extend(add_tags)
        is_composer_file = False
        if spec.startswith('./') or spec.endswith('.yaml'):
            spec = os.path.join(base_path, '..', spec)
            spec = os.path.abspath(os.path.normpath(spec))
            is_composer_file = True

        new_resources = create(resource_name, spec, inputs=inputs, tags=tags)
        created_resources += new_resources

        if not spec.startswith('/'):
            repo, parsed_spec = Repository.parse(spec)
            is_composer_file = repo.is_composer_file(spec)
        if not is_composer_file:
            if node:
                node = load_resource(node)
                r = new_resources[0]
                node.connect(r, mapping={})
                r.add_tags('location={}'.format(node.name))

            update_inputs(resource_name, inputs)

            if values_from:
                from_resource = load_resource(values_from)
                from_resource.connect_with_events(r, use_defaults=False)

    return created_resources
Пример #25
0
def create_resources(base_path, resources, tags=None):
    add_tags = tags
    created_resources = []
    for r in resources:
        resource_name = r['id']
        inputs = r.get('input', {})
        node = r.get('location', None)
        values_from = r.get('values_from')
        spec = r.get('from', None)
        tags = r.get('tags', [])
        if add_tags:
            tags.extend(add_tags)
        is_composer_file = False
        if spec.startswith('./') or spec.endswith('.yaml'):
            spec = os.path.join(base_path, '..', spec)
            spec = os.path.abspath(os.path.normpath(spec))
            is_composer_file = True

        new_resources = create(resource_name, spec, inputs=inputs, tags=tags)
        created_resources += new_resources

        if not spec.startswith('/'):
            repo, parsed_spec = Repository.parse(spec)
            is_composer_file = repo.is_composer_file(spec)
        if not is_composer_file:
            if node:
                node = load_resource(node)
                r = new_resources[0]
                node.connect(r, mapping={})
                r.add_tags('location={}'.format(node.name))

            update_inputs(resource_name, inputs)

            if values_from:
                from_resource = load_resource(values_from)
                from_resource.connect_with_events(r, use_defaults=False)

    return created_resources
Пример #26
0
def remove(spec):
    repo, spec = Repository.parse(spec)
    repo.remove_single(spec)
Пример #27
0
def destroy(name):
    repo = Repository(name)
    repo.remove()
Пример #28
0
def test_create_empty():
    repo = Repository('empty')
    repo.create()
    assert 'empty' in Repository.list_repos()
Пример #29
0
def test_simple_create(ct):
    r = Repository('test')
    r.create(ct)
    for k, v in r.get_contents().items():
        assert len(v) == 3
Пример #30
0
def test_simple_create(ct):
    r = Repository('test')
    r.create(ct)
    for k, v in r.get_contents().items():
        assert len(v) == 3
Пример #31
0
def create(name):
    repo = Repository(name)
    repo.create()
    click.echo("Repository created")
Пример #32
0
def repo_r(request, tmpdir_factory):
    path = generator(request, tmpdir_factory)
    r = Repository('rtest')
    r.create(path)
    return r
Пример #33
0
def test_create_empty():
    repo = Repository('empty')
    repo.create()
    assert 'empty' in Repository.list_repos()
Пример #34
0
def test_two_repos(tmpdir):
    rp1 = str(tmpdir) + '/r1'
    rp2 = str(tmpdir) + '/r2'
    generate_structure(rp1, 2)
    generate_structure(rp2, 5)
    r1 = Repository('repo1')
    r1.create(rp1)
    r2 = Repository('repo2')
    r2.create(rp2)
    exp = set(['repo1', 'repo2'])
    got = set(Repository.list_repos())
    assert got.intersection(exp) == exp
    assert Repository.contains('repo1/first:0.0.1')
    assert Repository.contains('repo2/first:0.0.1')
    assert Repository.contains('repo1/first:2.0.0') is False
    assert Repository.contains('repo2/first:2.0.0')

    r2.remove()
    exp = set(['repo1'])
    got = set(Repository.list_repos())
    assert got.intersection(exp) == exp
    assert Repository.contains('repo2/first:2.0.0') is False
Пример #35
0
def test_remove_single(repo_w, spec):
    assert Repository.contains(spec)
    repo_w.remove_single(spec)
    assert Repository.contains(spec) is False
Пример #36
0
def test_guess_version_soft(repo_r, spec, exp, exp_ver):
    assert Repository.contains(spec) is exp
    if exp:
        metadata = Repository.get_metadata(spec)
        assert metadata['version'] == exp_ver
Пример #37
0
def destroy(name):
    repo = Repository(name)
    repo.remove()
Пример #38
0
def remove(spec):
    repo, spec = Repository.parse(spec)
    repo.remove_single(spec)
Пример #39
0
def test_two_repos(tmpdir):
    rp1 = str(tmpdir) + '/r1'
    rp2 = str(tmpdir) + '/r2'
    generate_structure(rp1, 2)
    generate_structure(rp2, 5)
    r1 = Repository('repo1')
    r1.create(rp1)
    r2 = Repository('repo2')
    r2.create(rp2)
    exp = set(['repo1', 'repo2'])
    got = set(Repository.list_repos())
    assert got.intersection(exp) == exp
    assert Repository.contains('repo1/first:0.0.1')
    assert Repository.contains('repo2/first:0.0.1')
    assert Repository.contains('repo1/first:2.0.0') is False
    assert Repository.contains('repo2/first:2.0.0')

    r2.remove()
    exp = set(['repo1'])
    got = set(Repository.list_repos())
    assert got.intersection(exp) == exp
    assert Repository.contains('repo2/first:2.0.0') is False
Пример #40
0
def test_remove_single(repo_w, spec):
    assert Repository.contains(spec)
    repo_w.remove_single(spec)
    assert Repository.contains(spec) is False
Пример #41
0
def repos_path(tmpdir_factory):
    Repository._REPOS_LOCATION = str(tmpdir_factory.mktemp('repositories'))
    repo = Repository('resources')
    repo.create()
Пример #42
0
def test_guess_version_soft(repo_r, spec, exp, exp_ver):
    assert Repository.contains(spec) is exp
    if exp:
        metadata = Repository.get_metadata(spec)
        assert metadata['version'] == exp_ver
Пример #43
0
def repos_path(tmpdir_factory):
    Repository._REPOS_LOCATION = str(tmpdir_factory.mktemp('repositories'))
    repo = Repository('resources')
    repo.create()
Пример #44
0
def repo_r(request, tmpdir_factory):
    path = generator(request, tmpdir_factory)
    r = Repository('rtest')
    r.create(path)
    return r
Пример #45
0
def create(name):
    repo = Repository(name)
    repo.create()
    click.echo("Repository created")