def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get('eggproxy', 'index') if not eggs_dir: eggs_dir = config.get('eggproxy', 'eggs_directory') if not os.path.isdir(eggs_dir): print 'You must create the %r directory' % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy(PackageIndex(index_url=index_url)) self.eggs_dir = eggs_dir
def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get("eggproxy", "index") if not eggs_dir: eggs_dir = config.get("eggproxy", "eggs_directory") if not os.path.isdir(eggs_dir): create_eggs_directory = config.getboolean("eggproxy", "create_eggs_directory") if create_eggs_directory: print "Creating the %r directory" % eggs_dir os.makedirs(eggs_dir) else: print "You must create the %r directory" % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy(PackageIndex(index_url=index_url)) self.eggs_dir = eggs_dir
class EggProxyApp(object): def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get('eggproxy', 'index') if not eggs_dir: eggs_dir = config.get('eggproxy', 'eggs_directory') if not os.path.isdir(eggs_dir): print 'You must create the %r directory' % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy(PackageIndex(index_url=index_url)) self.eggs_dir = eggs_dir def __call__(self, environ, start_response): path = [part for part in environ.get('PATH_INFO', '').split('/') if part] if len(path) > 2: raise ValueError, "too many components in url" if len(path) > 0 and path[-1] == 'index.html': path.pop() path_len = len(path) if path_len == 0: filename = self.checkBaseIndex() elif path_len == 1: if path[0] == "favicon.ico": return HTTPNotFound()(environ, start_response) filename = self.checkPackageIndex(path[0]) else: filename = self.checkEggFor(path[0], path[1]) if filename is None: return HTTPNotFound()(environ, start_response) return FileApp(filename)(environ, start_response) def checkBaseIndex(self): filename = os.path.join(self.eggs_dir, 'index.html') if not os.path.exists(filename): self.eggs_index_proxy.updateBaseIndex(self.eggs_dir) return filename def checkPackageIndex(self, package_name): filename = os.path.join(self.eggs_dir, package_name, 'index.html') if not os.path.exists(filename): try: self.eggs_index_proxy.updatePackageIndex( package_name, eggs_dir=self.eggs_dir) except PackageNotFound: return None elif ALWAYS_REFRESH: # Force refresh try: self.eggs_index_proxy.updatePackageIndex( package_name, eggs_dir=self.eggs_dir) except PackageNotFound: pass else: # Just use the proxied copy. pass return filename def checkEggFor(self, package_name, eggname): filename = os.path.join(self.eggs_dir, package_name, eggname) if not os.path.exists(filename): try: self.eggs_index_proxy.updateEggFor(package_name, eggname, eggs_dir=self.eggs_dir) except ValueError: return None return filename
class EggProxyApp(object): def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get("eggproxy", "index") if not eggs_dir: eggs_dir = config.get("eggproxy", "eggs_directory") if not os.path.isdir(eggs_dir): create_eggs_directory = config.getboolean("eggproxy", "create_eggs_directory") if create_eggs_directory: print "Creating the %r directory" % eggs_dir os.makedirs(eggs_dir) else: print "You must create the %r directory" % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy(PackageIndex(index_url=index_url)) self.eggs_dir = eggs_dir def __call__(self, environ, start_response): path = [part for part in environ.get("PATH_INFO", "").split("/") if part] if len(path) > 2: raise ValueError, "too many components in url" if len(path) > 0 and path[-1] == "index.html": path.pop() path_len = len(path) if path_len == 0: filename = self.checkBaseIndex() elif path_len == 1: if path[0] == "favicon.ico": return HTTPNotFound()(environ, start_response) filename = self.checkPackageIndex(path[0]) else: filename = self.checkEggFor(path[0], path[1]) if filename is None: return HTTPNotFound()(environ, start_response) return FileApp(filename)(environ, start_response) def checkBaseIndex(self): filename = os.path.join(self.eggs_dir, "index.html") if not os.path.exists(filename) or ALWAYS_REFRESH: self.eggs_index_proxy.updateBaseIndex(self.eggs_dir) return filename def checkPackageIndex(self, package_name): filename = os.path.join(self.eggs_dir, package_name, "index.html") if not os.path.exists(filename): try: self.eggs_index_proxy.updatePackageIndex(package_name, eggs_dir=self.eggs_dir) except PackageNotFound: return None elif ALWAYS_REFRESH: # Force refresh try: self.eggs_index_proxy.updatePackageIndex(package_name, eggs_dir=self.eggs_dir) except PackageNotFound: pass else: # Just use the proxied copy. pass return filename def checkEggFor(self, package_name, eggname): filename = os.path.join(self.eggs_dir, package_name, eggname) logger.debug("Asking for package:%s egg:%s" % (package_name, eggname)) if not os.path.exists(filename): logger.debug("Not in cache, start downloading..") try: self.eggs_index_proxy.updateEggFor(package_name, eggname, eggs_dir=self.eggs_dir) except ValueError as e: logger.debug("Download error:%s" % (e)) if not os.path.exists(filename): open(filename, "w").write("") logger.debug("Writing empty file at:%s" % (filename)) return None else: logger.debug("Found in cache:%s" % (filename)) if os.path.getsize(filename) == 0: return None return filename
class EggProxyApp(object): def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get('eggproxy', 'index') if not eggs_dir: eggs_dir = config.get('eggproxy', 'eggs_directory') if not os.path.isdir(eggs_dir): print 'You must create the %r directory' % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy( PackageIndex(index_url=index_url.split())) self.eggs_dir = eggs_dir def __call__(self, environ, start_response): path = [ part for part in environ.get('PATH_INFO', '').split('/') if part ] if len(path) > 2: raise ValueError, "too many components in url" if len(path) > 0 and path[-1] == 'index.html': path.pop() path_len = len(path) if path_len == 0: filename = self.checkBaseIndex() elif path_len == 1: if path[0] == "favicon.ico": return HTTPNotFound()(environ, start_response) filename = self.checkPackageIndex(path[0]) else: filename = self.checkEggFor(path[0], path[1]) if filename is None: return HTTPNotFound()(environ, start_response) return FileApp(filename)(environ, start_response) def checkBaseIndex(self): filename = os.path.join(self.eggs_dir, 'index.html') if not os.path.exists(filename) or ALWAYS_REFRESH: self.eggs_index_proxy.updateBaseIndex(self.eggs_dir) return filename def checkPackageIndex(self, package_name): filename = os.path.join(self.eggs_dir, package_name, 'index.html') if not os.path.exists(filename): try: self.eggs_index_proxy.updatePackageIndex( package_name, eggs_dir=self.eggs_dir) except PackageNotFound: return None elif ALWAYS_REFRESH: # Force refresh try: self.eggs_index_proxy.updatePackageIndex( package_name, eggs_dir=self.eggs_dir) except PackageNotFound: pass else: # Just use the proxied copy. pass return filename def checkEggFor(self, package_name, eggname): filename = os.path.join(self.eggs_dir, package_name, eggname) if not os.path.exists(filename): try: self.eggs_index_proxy.updateEggFor(package_name, eggname, eggs_dir=self.eggs_dir) except ValueError: return None return filename
class EggProxyApp(object): def __init__(self, index_url=None, eggs_dir=None): if not index_url: index_url = config.get('eggproxy', 'index') if not eggs_dir: eggs_dir = config.get('eggproxy', 'eggs_directory') if not os.path.isdir(eggs_dir): print 'You must create the %r directory' % eggs_dir sys.exit() self.eggs_index_proxy = IndexProxy(PackageIndex(index_url=index_url)) self.eggs_dir = eggs_dir def __call__(self, environ, start_response): path = [part for part in environ.get('PATH_INFO', '').split('/') if part] if len(path) > 2: raise ValueError, "too many components in url" if len(path) > 0 and path[-1] == 'index.html': path.pop() path_len = len(path) if path_len == 0: filename = self.checkBaseIndex() elif path_len == 1: if path[0] == "favicon.ico": return HTTPNotFound()(environ, start_response) filename = self.checkPackageIndex(path[0]) else: filename = self.checkEggFor(path[0], path[1]) if filename is None: return HTTPNotFound()(environ, start_response) return FileApp(filename)(environ, start_response) def isOutDated(self, file_path): """A file is outdated if it does not exists or if its modification date is older than (now - update_interval) """ if ALWAYS_REFRESH: return True if os.path.exists(file_path): time_limit = int(time()) - UPDATE_INTERVAL mtime = getmtime(file_path) return mtime < time_limit return True def checkBaseIndex(self): filename = os.path.join(self.eggs_dir, 'index.html') if self.isOutDated(filename): self.eggs_index_proxy.updateBaseIndex(self.eggs_dir) return filename def checkPackageIndex(self, package_name): filename = os.path.join(self.eggs_dir, package_name, 'index.html') if self.isOutDated(filename): try: self.eggs_index_proxy.updatePackageIndex( package_name, eggs_dir=self.eggs_dir) except PackageNotFound: return None return filename def checkEggFor(self, package_name, eggname): filename = os.path.join(self.eggs_dir, package_name, eggname) if not os.path.exists(filename): try: self.eggs_index_proxy.updateEggFor(package_name, eggname, eggs_dir=self.eggs_dir) except ValueError: return None return filename