Пример #1
0
 def search(self, query, index_url, search_summery):
     pypi = xmlrpclib.ServerProxy(index_url)
     args = {'name': query}
     if search_summery:
         args['summary'] = query
     hits = pypi.search(args, 'or')
     return hits
Пример #2
0
    def search_packages_info(self, query, index_url):
        """
        Gather details from installed distributions. Print distribution name,
        version, location, and installed files. Installed files requires a
        pip generated 'installed-files.txt' in the distributions '.egg-info'
        directory.
        """
        installed_packages = dict([(p.project_name.lower(), p)
                                   for p in pkg_resources.working_set])
        for name in query:
            normalized_name = name.lower()
            if normalized_name in installed_packages:
                dist = installed_packages[normalized_name]

                required_by = []
                for _, p in installed_packages.iteritems():
                    if dist.project_name.lower() in [
                            dep.project_name.lower() for dep in p.requires()
                    ]:
                        required_by += [p.project_name]
                    else:
                        for e in p.extras:
                            if dist.project_name.lower() in [
                                    dep.project_name.lower()
                                    for dep in p.requires([e])
                            ]:
                                required_by += ["%s[%s]" % (p.project_name, e)]
                extras = {}
                requires = [dep.project_name for dep in dist.requires()]
                make_ext = lambda pkg_name: (pkg_name, True if pkg_name in
                                             installed_packages else False)
                for e in dist.extras:
                    extras[e] = [
                        make_ext(dep.project_name.lower())
                        for dep in dist.requires([e])
                        if dep.project_name not in requires
                    ]

                pypi = xmlrpclib.ServerProxy(index_url)
                pypi_releases = pypi.package_releases(dist.project_name)
                pypi_version = pypi_releases[0] if pypi_releases else 'UNKNOWN'

                package = {
                    'name': dist.project_name,
                    'version': dist.version,
                    'pypi_version': pypi_version,
                    'location': dist.location,
                    'requires': requires,
                    'required_by': required_by,
                    'extras': extras,
                    'metadata': PkgInfoParsed(dist),
                    'exports': pkg_resources.get_entry_map(dist)
                }
                filelist = os.path.join(dist.location,
                                        dist.egg_name() + '.egg-info',
                                        'installed-files.txt')
                if os.path.isfile(filelist):
                    package['files'] = filelist
                yield package
Пример #3
0
def do_version_info(options):
    """
    List all installed packages with his versions and version info from PyPi
    """
    local_only = True # exclude globally-installed packages in a virtualenv
    dependency_links = []
    for dist in pkg_resources.working_set:
        if dist.has_metadata('dependency_links.txt'):
            dependency_links.extend(
                dist.get_metadata_lines('dependency_links.txt'),
            )
    
    installed_info = []
    for dist in get_installed_distributions(local_only=local_only):
        req = dist.as_requirement() # pkg_resources.Requirement() instance
        project_name = req.project_name
        specs = req.specs
        version = specs[0][1]
        installed_info.append((project_name, version))
        
    max_name_len = max([len(i[0]) for i in installed_info])
    max_ver_len = max([len(i[1]) for i in installed_info])
    if max_name_len<20:
        max_name_len = 20
    if max_ver_len<20:
        max_ver_len = 20
    max_len_others = get_terminal_size()[0] - max_name_len - max_ver_len - 7    
    
    table_header = " package name".ljust(max_name_len)
    table_header += " installed version".ljust(max_ver_len)
    table_header += "  versions on PyPi".ljust(max_len_others)
    print c.colorize(table_header, opts=("underscore",))
    
    for project_name, version in installed_info:
        print project_name.ljust(max_name_len),
        print version.ljust(max_ver_len),
               
        # http://wiki.python.org/moin/PyPiXmlRpc
        client = xmlrpclib.ServerProxy(INDEX_URL)
        versions = client.package_releases(project_name)
        
        if not versions:
            print c.colorize("No version found at PyPi!", foreground="yellow")
        else:
            latest = highest_version(versions)
            older_versions = [v for v in versions if latest!=v]
            pypi_info = "%s" % latest
            if older_versions:
                pypi_info += " - %s" % ", ".join(older_versions)

            if len(pypi_info)>max_len_others:
                pypi_info = pypi_info[:max_len_others] + " ..."
            
            print pypi_info
Пример #4
0
 def search(self, query, index_url):
     pypi = xmlrpclib.ServerProxy(index_url,
                                  pip.download.xmlrpclib_transport)
     hits = pypi.search({'name': query, 'summary': query}, 'or')
     return hits
Пример #5
0
 def search(self, query, index_url):
     pypi = xmlrpclib.ServerProxy(index_url)
     hits = pypi.search({'name': query, 'summary': query}, 'or')
     return hits
Пример #6
0
 def pypi(self):
     """I want to delay doing this, since might not be necessary"""
     if self.__pypi is None:
         self.__pypi = xmlrpclib.ServerProxy(self.search_url)
     return self.__pypi