コード例 #1
0
def dependents(my_component_name, download_dir, releases_dir, components_dir):
    dependents_list = []
    components = c_lib.load_all_components(components_dir, releases_dir)
    for component in components:
        if len(component.releases) > 0:
            series_list = []
            for release in component.releases:
                if release.series not in series_list:
                    series_list.append(release.series)
                    component_parameters = [{
                        "name": component.name,
                        "repo_url": component.repo_url,
                        "series": release.series,
                        "sha": None
                    }]
                    c_lib.download_components(component_parameters,
                                              download_dir)
                    dep_component_dir = os.path.join(download_dir,
                                                     component.name)
                    metadata = get_metadata(dep_component_dir)
                    if metadata:
                        for dependency in metadata['dependencies']:
                            if dependency['name'] == my_component_name:
                                dependents_list.append(component)
    return dependents_list
コード例 #2
0
ファイル: cli.py プロジェクト: mattt416/rpc_component
def compare(releases_dir, components_dir, **kwargs):
    from_ = c_lib.load_all_components(
        components_dir, releases_dir, kwargs["from"]
    )
    to = c_lib.load_all_components(
        components_dir, releases_dir, kwargs["to"]
    )
    to_compare = defaultdict(lambda: [{}, {}])
    for c in from_:
        to_compare[c.name][0] = c
    for c in to:
        to_compare[c.name][1] = c
    comparison = {}
    for name, (f, t) in to_compare.items():
        if f and not t:
            deleted = f.to_dict()
            added = {}
        elif t and not f:
            deleted = {}
            added = t.to_dict()
        else:
            deleted = f.difference(t)
            added = t.difference(f)
        if added or deleted:
            comparison[name] = {"added": added, "deleted": deleted}

    comparison_yaml = yaml.dump(comparison, default_flow_style=False)
    if kwargs["verify"] == "release":
        try:
            s_lib.comparison_added_version_schema.validate(comparison)
        except SchemaError as e:
            raise c_lib.ComponentError(
                "The changes from `{f}` to `{t}` do not represent the "
                "addition of a new release.\nValidation error:"
                "\n{e}\nChanges found:\n{c}".format(
                    f=kwargs["from"],
                    t=kwargs["to"],
                    e=e,
                    c=comparison_yaml,
                )
            )
        else:
            name, data = comparison.popitem()
            version = data["added"]["releases"][0]["versions"][0]["version"]
            component = [c for c in to if c.name == name][0]
            output = component.get_release(version)
    elif kwargs["verify"] == "registration":
        try:
            s_lib.comparison_added_component_schema.validate(comparison)
        except SchemaError as e:
            raise c_lib.ComponentError(
                "The changes from `{f}` to `{t}` do not represent the "
                "registration of a new component.\nValidation error:"
                "\n{e}\nChanges found:\n{c}".format(
                    f=kwargs["from"],
                    t=kwargs["to"],
                    e=e,
                    c=comparison_yaml,
                )
            )
        else:
            name, _ = comparison.popitem()
            component = [c for c in to if c.name == name][0]
            output = component
    else:
        output = comparison

    return output