Source code for bootstrap_py.pypi

# -*- coding: utf-8 -*-
"""bootstrap_py.pypi."""
import sys
import socket
from bootstrap_py.exceptions import BackendFailure, Conflict
if sys.version_info < (3, 0):
    import xmlrpclib as xmlrpc_client
else:
    from xmlrpc import client as xmlrpc_client

#: PyPI XML-RPC API url
PYPI_URL = 'https://pypi.python.org/pypi'


[docs]def package_existent(name): """search package. * :class:`bootstrap_py.exceptions.Conflict` exception occurs when user specified name has already existed. * :class:`bootstrap_py.exceptions.BackendFailure` exception occurs when PyPI service is down. :param str name: package name """ if sys.version_info < (3, 0): try: result = search_package(name) except (socket.error, xmlrpc_client.ProtocolError) as exc: raise BackendFailure(exc) else: try: result = search_package(name) except (socket.gaierror, TimeoutError, ConnectionRefusedError, xmlrpc_client.ProtocolError) as exc: raise BackendFailure(exc) if len(result): msg = ('[error] "{0}" is registered already in PyPI.\n' '\tSpecify another package name.').format(name) raise Conflict(msg)
[docs]def search_package(name): """search package. :param str name: package name :rtype: list :return: package name list """ client = xmlrpc_client.ServerProxy(PYPI_URL) return [pkg for pkg in client.search({'name': name}) if pkg.get('name') == name]