def get_metadata_from_repos(repostrs, cachedir): my_repo_metadata = [] for repostr in repostrs: reponame = None baseurl = None proxy = None items = repostr.split(",") for item in items: subitems = item.split(":") if subitems[0] == "name": reponame = subitems[1] if subitems[0] == "baseurl": baseurl = item[8:] if subitems[0] == "proxy": proxy = item[6:] if subitems[0] in ("http", "https", "ftp", "ftps", "file"): baseurl = item if not proxy: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(proxy.split(":")[0]): str(proxy)} makedirs(cachedir + "/" + reponame) url = str(baseurl + "/repodata/repomd.xml") filename = str("%s/%s/repomd.xml" % (cachedir, reponame)) repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}") + 1] patterns = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": patterns = elm.find("%slocation" % ns).attrib['href'] break comps = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group_gz": comps = elm.find("%slocation" % ns).attrib['href'] break if not comps: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group": comps = elm.find("%slocation" % ns).attrib['href'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary_db": primary_type = ".sqlite" break if not primary_type: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary": primary_type = ".xml" break if not primary_type: continue primary = elm.find("%slocation" % ns).attrib['href'] primary = get_metadata_from_repo(baseurl, proxies, cachedir, reponame, primary) if patterns: patterns = get_metadata_from_repo(baseurl, proxies, cachedir, reponame, patterns) if comps: comps = get_metadata_from_repo(baseurl, proxies, cachedir, reponame, comps) """ Get repo key """ try: repokey = get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.warning("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({ "name": reponame, "baseurl": baseurl, "repomd": repomd, "primary": primary, "cachedir": cachedir, "proxies": proxies, "patterns": patterns, "comps": comps, "repokey": repokey }) return my_repo_metadata
def get_metadata_from_repos(repostrs, cachedir): my_repo_metadata = [] for repostr in repostrs: reponame = None baseurl = None proxy = None items = repostr.split(",") for item in items: subitems = item.split(":") if subitems[0] == "name": reponame = subitems[1] if subitems[0] == "baseurl": baseurl = item[8:] if subitems[0] == "proxy": proxy = item[6:] if subitems[0] in ("http", "https", "ftp", "ftps", "file"): baseurl = item if not proxy: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(proxy.split(":")[0]):str(proxy)} makedirs(cachedir + "/" + reponame) url = str(baseurl + "/repodata/repomd.xml") filename = str("%s/%s/repomd.xml" % (cachedir, reponame)) repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}")+1] patterns = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": patterns = elm.find("%slocation" % ns).attrib['href'] break comps = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group_gz": comps = elm.find("%slocation" % ns).attrib['href'] break if not comps: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group": comps = elm.find("%slocation" % ns).attrib['href'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary_db": primary_type=".sqlite" break if not primary_type: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary": primary_type=".xml" break if not primary_type: continue primary = elm.find("%slocation" % ns).attrib['href'] primary = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, primary) if patterns: patterns = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, patterns) if comps: comps = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, comps) """ Get repo key """ try: repokey = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({"name":reponame, "baseurl":baseurl, "repomd":repomd, "primary":primary, "cachedir":cachedir, "proxies":proxies, "patterns":patterns, "comps":comps, "repokey":repokey}) return my_repo_metadata
def get_metadata_from_repos(repos, cachedir): my_repo_metadata = [] for repo in repos: reponame = repo['name'] baseurl = repo['baseurl'] if 'proxy' in repo: proxy = repo['proxy'] else: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(baseurl.split(":")[0]): str(proxy)} makedirs(os.path.join(cachedir, reponame)) url = os.path.join(baseurl, "repodata/repomd.xml") filename = os.path.join(cachedir, reponame, 'repomd.xml') repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}") + 1] filepaths = {} checksums = {} sumtypes = {} for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": filepaths['patterns'] = elm.find("%slocation" % ns).attrib['href'] checksums['patterns'] = elm.find("%sopen-checksum" % ns).text sumtypes['patterns'] = elm.find("%sopen-checksum" % ns).attrib['type'] break for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("group_gz", "group"): filepaths['comps'] = elm.find("%slocation" % ns).attrib['href'] checksums['comps'] = elm.find("%sopen-checksum" % ns).text sumtypes['comps'] = elm.find("%sopen-checksum" % ns).attrib['type'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("primary_db", "primary"): primary_type = elm.attrib["type"] filepaths['primary'] = elm.find("%slocation" % ns).attrib['href'] checksums['primary'] = elm.find("%sopen-checksum" % ns).text sumtypes['primary'] = elm.find("%sopen-checksum" % ns).attrib['type'] break if not primary_type: continue for item in ("primary", "patterns", "comps"): if item not in filepaths: filepaths[item] = None continue if not filepaths[item]: continue filepaths[item] = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filepaths[item], sumtypes[item], checksums[item]) """ Get repo key """ try: repokey = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({ "name": reponame, "baseurl": baseurl, "repomd": repomd, "primary": filepaths['primary'], "cachedir": cachedir, "proxies": proxies, "patterns": filepaths['patterns'], "comps": filepaths['comps'], "repokey": repokey }) return my_repo_metadata
def get_metadata_from_repos(repos, cachedir): my_repo_metadata = [] for repo in repos: reponame = repo['name'] baseurl = repo['baseurl'] if 'proxy' in repo: proxy = repo['proxy'] else: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(baseurl.split(":")[0]):str(proxy)} makedirs(os.path.join(cachedir, reponame)) url = os.path.join(baseurl, "repodata/repomd.xml") filename = os.path.join(cachedir, reponame, 'repomd.xml') repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}")+1] filepaths = {} checksums = {} sumtypes = {} for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": filepaths['patterns'] = elm.find("%slocation" % ns).attrib['href'] checksums['patterns'] = elm.find("%sopen-checksum" % ns).text sumtypes['patterns'] = elm.find("%sopen-checksum" % ns).attrib['type'] break for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("group_gz", "group"): filepaths['comps'] = elm.find("%slocation" % ns).attrib['href'] checksums['comps'] = elm.find("%sopen-checksum" % ns).text sumtypes['comps'] = elm.find("%sopen-checksum" % ns).attrib['type'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] in ("primary_db", "primary"): primary_type = elm.attrib["type"] filepaths['primary'] = elm.find("%slocation" % ns).attrib['href'] checksums['primary'] = elm.find("%sopen-checksum" % ns).text sumtypes['primary'] = elm.find("%sopen-checksum" % ns).attrib['type'] break if not primary_type: continue for item in ("primary", "patterns", "comps"): if item not in filepaths: filepaths[item] = None continue if not filepaths[item]: continue filepaths[item] = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, filepaths[item], sumtypes[item], checksums[item]) """ Get repo key """ try: repokey = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({"name":reponame, "baseurl":baseurl, "repomd":repomd, "primary":filepaths['primary'], "cachedir":cachedir, "proxies":proxies, "patterns":filepaths['patterns'], "comps":filepaths['comps'], "repokey":repokey}) return my_repo_metadata
def get_metadata_from_repos(repos, cachedir): my_repo_metadata = [] for repo in repos: reponame = repo['name'] baseurl = repo['baseurl'] if 'proxy' in repo: proxy = repo['proxy'] else: proxy = get_proxy_for(baseurl) proxies = None if proxy: proxies = {str(baseurl.split(":")[0]):str(proxy)} makedirs(os.path.join(cachedir, reponame)) url = os.path.join(baseurl, "repodata/repomd.xml") filename = os.path.join(cachedir, reponame, 'repomd.xml') repomd = myurlgrab(url, filename, proxies) try: root = xmlparse(repomd) except SyntaxError: raise CreatorError("repomd.xml syntax error.") ns = root.getroot().tag ns = ns[0:ns.rindex("}")+1] patterns = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "patterns": patterns = elm.find("%slocation" % ns).attrib['href'] break comps = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group_gz": comps = elm.find("%slocation" % ns).attrib['href'] break if not comps: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "group": comps = elm.find("%slocation" % ns).attrib['href'] break primary_type = None for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary_db": primary_type=".sqlite" break if not primary_type: for elm in root.getiterator("%sdata" % ns): if elm.attrib["type"] == "primary": primary_type=".xml" break if not primary_type: continue primary = elm.find("%slocation" % ns).attrib['href'] primary = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, primary) if patterns: patterns = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, patterns) if comps: comps = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, comps) """ Get repo key """ try: repokey = _get_metadata_from_repo(baseurl, proxies, cachedir, reponame, "repodata/repomd.xml.key") except CreatorError: repokey = None msger.debug("\ncan't get %s/%s" % (baseurl, "repodata/repomd.xml.key")) my_repo_metadata.append({"name":reponame, "baseurl":baseurl, "repomd":repomd, "primary":primary, "cachedir":cachedir, "proxies":proxies, "patterns":patterns, "comps":comps, "repokey":repokey}) return my_repo_metadata