Example #1
0
    def _parse_dependencies(raw):
        # compatibility with legacy dependency format
        if isinstance(raw, dict) and "name" in raw:
            raw = [raw]

        if isinstance(raw, dict):
            result = []
            for name, version in raw.items():
                if "/" in name:
                    owner, name = name.split("/", 1)
                    result.append(dict(owner=owner, name=name,
                                       version=version))
                else:
                    result.append(dict(name=name, version=version))
            return result

        if isinstance(raw, list):
            for i, dependency in enumerate(raw):
                if isinstance(dependency, dict):
                    for k, v in dependency.items():
                        if k not in ("platforms", "frameworks", "authors"):
                            continue
                        raw[i][k] = util.items_to_list(v)
                else:
                    raw[i] = {"name": dependency}
            return raw
        raise ManifestParserError(
            "Invalid dependencies format, should be list or dictionary")
Example #2
0
    def _get_lib_id_from_installed(self, filters):
        if filters["name"].startswith("id="):
            return int(filters["name"][3:])
        package_dir = self.get_package_dir(
            filters["name"], filters.get("requirements", filters.get("version"))
        )
        if not package_dir:
            return None
        manifest = self.load_manifest(package_dir)
        if "id" not in manifest:
            return None

        for key in ("frameworks", "platforms"):
            if key not in filters:
                continue
            if key not in manifest:
                return None
            if not util.items_in_list(
                util.items_to_list(filters[key]), util.items_to_list(manifest[key])
            ):
                return None

        if "authors" in filters:
            if "authors" not in manifest:
                return None
            manifest_authors = manifest["authors"]
            if not isinstance(manifest_authors, list):
                manifest_authors = [manifest_authors]
            manifest_authors = [
                a["name"]
                for a in manifest_authors
                if isinstance(a, dict) and "name" in a
            ]
            filter_authors = filters["authors"]
            if not isinstance(filter_authors, list):
                filter_authors = [filter_authors]
            if not set(filter_authors) <= set(manifest_authors):
                return None

        return int(manifest["id"])
    def load_manifest(self):
        assert isfile(join(self.path, "library.json"))
        manifest = util.load_json(join(self.path, "library.json"))
        assert "name" in manifest

        # replace "espressif" old name dev/platform with ESP8266
        if "platforms" in manifest:
            manifest['platforms'] = [
                "espressif8266" if p == "espressif" else p
                for p in util.items_to_list(manifest['platforms'])
            ]

        return manifest
Example #4
0
    def _get_lib_id_from_installed(self, filters):
        if filters['name'].startswith("id="):
            return int(filters['name'][3:])
        package_dir = self.get_package_dir(
            filters['name'], filters.get("requirements",
                                         filters.get("version")))
        if not package_dir:
            return None
        manifest = self.load_manifest(package_dir)
        if "id" not in manifest:
            return None

        for key in ("frameworks", "platforms"):
            if key not in filters:
                continue
            if key not in manifest:
                return None
            if not util.items_in_list(
                    util.items_to_list(filters[key]),
                    util.items_to_list(manifest[key])):
                return None

        if "authors" in filters:
            if "authors" not in manifest:
                return None
            manifest_authors = manifest['authors']
            if not isinstance(manifest_authors, list):
                manifest_authors = [manifest_authors]
            manifest_authors = [
                a['name'] for a in manifest_authors
                if isinstance(a, dict) and "name" in a
            ]
            filter_authors = filters['authors']
            if not isinstance(filter_authors, list):
                filter_authors = [filter_authors]
            if not set(filter_authors) <= set(manifest_authors):
                return None

        return int(manifest['id'])
Example #5
0
    def load_manifest(self):
        assert isfile(join(self.path, "library.json"))
        manifest = util.load_json(join(self.path, "library.json"))
        assert "name" in manifest

        # replace "espressif" old name dev/platform with ESP8266
        if "platforms" in manifest:
            manifest['platforms'] = [
                "espressif8266" if p == "espressif" else p
                for p in util.items_to_list(manifest['platforms'])
            ]

        return manifest
Example #6
0
    def _parse_dependencies(raw):
        # compatibility with legacy dependency format
        if isinstance(raw, dict) and "name" in raw:
            raw = [raw]

        if isinstance(raw, dict):
            return [dict(name=name, version=version) for name, version in raw.items()]
        if isinstance(raw, list):
            for i, dependency in enumerate(raw):
                assert isinstance(dependency, dict)
                for k, v in dependency.items():
                    if k not in ("platforms", "frameworks", "authors"):
                        continue
                    if "*" in v:
                        del raw[i][k]
                    raw[i][k] = util.items_to_list(v)
            return raw
        raise ManifestParserError(
            "Invalid dependencies format, should be list or dictionary"
        )