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")
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
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
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" )