Exemple #1
0
 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
Exemple #2
0
 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
Exemple #3
0
 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
Exemple #4
0
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
Exemple #5
0
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
Exemple #6
0
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