Exemplo n.º 1
0
Arquivo: req.py Projeto: fdev31/pyg
 def install(self):
     self.success = False
     logger.info('Looking for {0} releases on PyPI', self.name)
     p = ReqManager(self)
     try:
         files = p.files()
     except (urllib2.URLError, urllib2.HTTPError) as e:
         raise InstallationError(repr(e.reason) if hasattr(e, 'reason') else e.msg)
     bad_eggs = []
     for pext in ('.tar.gz', '.tar.bz2', '.zip', '.egg'):
         for v, name, hash, url in files[pext]:
             if pext == '.egg' and not right_egg(name):
                 if args_manager['install']['force_egg_install']:
                     bad_eggs.append( (url, name, p.name, hash) )
                 continue
             if ext(name) not in ('.tar.gz', '.tar.bz2', '.zip', '.egg') + WINDOWS_EXT:
                 continue
             logger.info('Best match: {0}=={1}', self.name, v)
             try:
                 self._download_and_install(url, name, p.name, hash)
             except InstallationError:
                 logger.info('Trying another file (if there is one)...')
                 continue
             if not self.version:
                 self.version = v
             break
         if self.success:
             return
     if bad_eggs:
         self._check_bad_eggs(bad_eggs)
     if not self.success:
         raise InstallationError('Error: Cannot find files available for dowloading and installing')
Exemplo n.º 2
0
Arquivo: web.py Projeto: Malex/pyg
    def find(self):
        def _get_all(url):
            match = self._pkg_re.search(url)
            if match is None:
                return None, None, None
            return map(match.group, ('package_name', 'version', 'ext'))
        def _remove_query(url):
            return urlparse.urlunsplit(urlparse.urlsplit(url)[:3] + ('',) * 2)
        def _get_version(filename):
            ## A bit hacky but there is no solution because some packages
            ## are in the form {package_name}-{version}-{something_else}-{?pyx.y}.{ext}
            ## and we cannot predict where is the version in that mess.
            _version_re = re.compile(r'\d[\.\d\w]*')
            parts = name(filename).split('-')
            for part in parts:
                match = _version_re.search(part)
                if match is not None:
                    return match.group()

        found = list(self.package_manager.find())
        if not found:
            logger.warn('Warning: did not find any files on PyPI')
            for link in get_links(self.name, args_manager['install']['packages_url']):
                package_name = _remove_query(link).split('/')[-1]
                version = _get_version(package_name)
                e = ext(package_name)
                if package_name is None or version is None:
                    package_name, version, e = _get_all(link)
                found.append((version, package_name, None, link, e))
        return found
Exemplo n.º 3
0
Arquivo: req.py Projeto: fdev31/pyg
    def _download_and_install(self, url, filename, packname, hash=None):
        fobj = download(url, 'Downloading {0}'.format(self.name))
        if hash is not None:
            logger.info('Checking md5 sum')
            if md5(fobj.getvalue()).hexdigest() != hash:
                logger.fatal('Error: {0} appears to be corrupted', self.name)
                return
        e = ext(filename)
        if e in ('.tar.gz', '.tar.bz2', '.zip'):
            installer = Archive(fobj, e, packname, self.reqset)
        elif e == '.egg':
            installer = Egg(fobj, filename, self.reqset, packname)
        elif is_windows() and e in WINDOWS_EXT:
            installer = Binary(fobj, e, packname)
        else:
            logger.error('Error: unknown filetype: {0}', e, exc=InstallationError)

        ## There is no need to catch exceptions now, this will be done by `pyg.inst.Installer.install`
        installer.install()
        self.success = True
Exemplo n.º 4
0
Arquivo: inst.py Projeto: fdev31/pyg
    def from_file(filepath, packname=None):
        packname = packname or os.path.basename(filepath).split('-')[0]
        reqset = ReqSet(packname)

        e = ext(filepath)
        path = os.path.abspath(filepath)
        if e in ('.tar.gz', '.tar.bz2', '.zip'):
            installer = Archive(open(path), e, packname, reqset)
        elif e in ('.pybundle', '.pyb'):
            installer = Bundle(filepath)
        elif e == '.egg':
            installer = Egg(open(path), path, reqset)
        elif e in ('.exe', '.msi') and is_windows():
            installer = Binary(open(path), e, packname)
        else:
            if tarfile.is_tarfile(path):
                installer = Archive(open(path), None, packname, reqset)
            elif zipfile.is_zipfile(path):
                installer = Archive(open(path), '.zip', packname, reqset)
            else:
                logger.fatal('Error: Cannot install {0}: unknown filetype', packname, exc=InstallationError)
        installer.install()
        Installer._install_deps(reqset, packname)
        logger.success('{0} installed successfully', packname)
Exemplo n.º 5
0
Arquivo: web.py Projeto: fdev31/pyg
 def files(self):
     files = FileMapper(list)
     files.pref = self.pref
     for release in self.find():
         files[ext(release[1])].append(release)
     return files