def build_docs_and_install(name, version, findlinks): # pragma no cover tdir = tempfile.mkdtemp() startdir = os.getcwd() os.chdir(tdir) try: tarpath = download_github_tar('OpenMDAO-Plugins', name, version) # extract the repo tar file tar = tarfile.open(tarpath) tar.extractall() tar.close() files = os.listdir('.') files.remove(os.path.basename(tarpath)) if len(files) != 1: raise RuntimeError( "after untarring, found multiple directories: %s" % files) # build sphinx docs os.chdir(files[0]) # should be in distrib directory now check_call(['plugin', 'build_docs', files[0]]) # create an sdist so we can query metadata for distrib dependencies check_call([sys.executable, 'setup.py', 'sdist', '-d', '.']) if sys.platform.startswith('win'): tars = fnmatch.filter(os.listdir('.'), "*.zip") else: tars = fnmatch.filter(os.listdir('.'), "*.tar.gz") if len(tars) != 1: raise RuntimeError("should have found a single archive file," " but found %s instead" % tars) check_call(['easy_install', '-NZ', tars[0]]) # now install any dependencies metadict = get_metadata(tars[0]) reqs = metadict.get('requires', []) done = set() while reqs: r = reqs.pop() if r not in done: done.add(r) ws = WorkingSet() req = Requirement.parse(r) dist = ws.find(req) if dist is None: check_call(['easy_install', '-NZ', '-f', findlinks, r]) dist = ws.find(req) if dist is None: raise RuntimeError("Couldn't find distribution '%s'" % r) dist.activate() dct = get_metadata(dist.egg_name().split('-')[0]) for new_r in dct.get('requires', []): reqs.append(new_r) finally: os.chdir(startdir) shutil.rmtree(tdir, ignore_errors=True)
def build_docs_and_install(name, version, findlinks): # pragma no cover tdir = tempfile.mkdtemp() startdir = os.getcwd() os.chdir(tdir) try: tarpath = download_github_tar('OpenMDAO-Plugins', name, version) # extract the repo tar file tar = tarfile.open(tarpath) tar.extractall() tar.close() files = os.listdir('.') files.remove(os.path.basename(tarpath)) if len(files) != 1: raise RuntimeError("after untarring, found multiple directories: %s" % files) # build sphinx docs os.chdir(files[0]) # should be in distrib directory now check_call(['plugin', 'build_docs', files[0]]) # create an sdist so we can query metadata for distrib dependencies check_call([sys.executable, 'setup.py', 'sdist', '-d', '.']) if sys.platform.startswith('win'): tars = fnmatch.filter(os.listdir('.'), "*.zip") else: tars = fnmatch.filter(os.listdir('.'), "*.tar.gz") if len(tars) != 1: raise RuntimeError("should have found a single archive file," " but found %s instead" % tars) check_call(['easy_install', '-NZ', tars[0]]) # now install any dependencies metadict = get_metadata(tars[0]) reqs = metadict.get('requires', []) done = set() while reqs: r = reqs.pop() if r not in done: done.add(r) ws = WorkingSet() req = Requirement.parse(r) dist = ws.find(req) if dist is None: check_call(['easy_install', '-NZ', '-f', findlinks, r]) dist = ws.find(req) if dist is None: raise RuntimeError("Couldn't find distribution '%s'" % r) dist.activate() dct = get_metadata(dist.egg_name().split('-')[0]) for new_r in dct.get('requires', []): reqs.append(new_r) finally: os.chdir(startdir) shutil.rmtree(tdir, ignore_errors=True)
def build_docs_and_install(name, version, findlinks): # pragma no cover tdir = tempfile.mkdtemp() startdir = os.getcwd() os.chdir(tdir) try: tarpath = download_github_tar('OpenMDAO-Plugins', name, version) # extract the repo tar file tar = tarfile.open(tarpath) tar.extractall() tar.close() files = os.listdir('.') files.remove(os.path.basename(tarpath)) if len(files) != 1: raise RuntimeError("after untarring, found multiple directories: %s" % files) os.chdir(files[0]) # should be in distrib directory now cfg = SafeConfigParser(dict_type=OrderedDict) cfg.readfp(open('setup.cfg', 'r'), 'setup.cfg') if cfg.has_option('metadata', 'requires-dist'): reqs = cfg.get('metadata', 'requires-dist').strip() reqs = reqs.replace(',', ' ') reqs = [n.strip() for n in reqs.split()] else: # couldn't find requires-dist in setup.cfg, so # create an sdist so we can query metadata for distrib dependencies tarname = _bld_sdist_and_install(deps=False) # now find any dependencies metadict = get_metadata(tarname) reqs = metadict.get('requires', []) # install dependencies (some may be needed by sphinx) ws = WorkingSet() for r in reqs: print "Installing dependency '%s'" % r req = Requirement.parse(r) dist = ws.find(req) if dist is None: try: check_call(['easy_install', '-Z', '-f', findlinks, r]) except Exception: traceback.print_exc() # build sphinx docs check_call(['plugin', 'build_docs', files[0]]) # make a new sdist with docs in it and install it tarname = _bld_sdist_and_install() finally: os.chdir(startdir) shutil.rmtree(tdir, ignore_errors=True)
def build_docs_and_install(owner, name, version, findlinks): # pragma no cover tdir = tempfile.mkdtemp() startdir = os.getcwd() os.chdir(tdir) try: tarpath = download_github_tar(owner, name, version) # extract the repo tar file tar = tarfile.open(tarpath) tar.extractall() tar.close() files = os.listdir(".") files.remove(os.path.basename(tarpath)) if len(files) != 1: raise RuntimeError("after untarring, found multiple directories: %s" % files) os.chdir(files[0]) # should be in distrib directory now cfg = SafeConfigParser(dict_type=OrderedDict) try: cfg.readfp(open("setup.cfg", "r"), "setup.cfg") except IOError as io_error: raise IOError, "OpenMDAO plugins must have a setup.cfg: {}".format(io_error), sys.exc_info()[2] try: reqs = cfg.get("metadata", "requires-dist").strip() reqs = reqs.replace(",", " ") reqs = [n.strip() for n in reqs.split()] try: flinks = cfg.get("easy_install", "find_links").strip() flinks = flinks.split("\n") flinks = [n.strip() for n in flinks] flinks.append(findlinks) findlinks = " ".join(flinks) except (NoSectionError, NoOptionError): pass except NoOptionError: # couldn't find requires-dist in setup.cfg, so # create an sdist so we can query metadata for distrib dependencies tarname = _bld_sdist_and_install(deps=False) # now find any dependencies metadict = get_metadata(tarname) reqs = metadict.get("requires", []) # install dependencies (some may be needed by sphinx) ws = WorkingSet() for r in reqs: print "Installing dependency '%s'" % r req = Requirement.parse(r) dist = ws.find(req) if dist is None: try: check_call(["easy_install", "-Z", "-f", findlinks, r]) except Exception: traceback.print_exc() # build sphinx docs check_call(["plugin", "build_docs", files[0]]) # make a new sdist with docs in it and install it tarname = _bld_sdist_and_install() finally: os.chdir(startdir) shutil.rmtree(tdir, ignore_errors=True)