Beispiel #1
0
    def _connect(self):

        context = hasattr(ssl, "_create_unverified_context") and \
            ssl._create_unverified_context() or None

        if context:
            transport = xmlrpclib.SafeTransport(use_datetime=True,
                                                context=context)
        else:
            transport = xmlrpclib.SafeTransport(use_datetime=True)

        self._server = xmlrpclib.ServerProxy(self._url, transport=transport)
        return True
Beispiel #2
0
    def __init__(self,
                 probe,
                 uri,
                 transport=None,
                 encoding=None,
                 verbose=0,
                 allow_none=0,
                 use_datetime=0):
        xmlrpclib.ServerProxy.__init__(self, uri, transport, encoding, verbose,
                                       allow_none, use_datetime)
        self._probe = probe
        # establish a "logical" server connection

        # get the url
        import urllib
        type, uri = urllib.splittype(uri)
        if type not in ("http", "https"):
            raise IOError("unsupported XML-RPC protocol")
        self.__host, self.__handler = urllib.splithost(uri)
        if not self.__handler:
            self.__handler = "/RPC2"

        if transport is None:
            if type == "https":
                transport = xmlrpclib.SafeTransport(use_datetime=use_datetime)
            else:
                transport = xmlrpclib.Transport(use_datetime=use_datetime)
        self.__transport = transport

        self.__encoding = encoding
        self.__verbose = verbose
        self.__allow_none = allow_none
Beispiel #3
0
    def login(self, switchToMaster=False):
        try:
            self._url = self._protocol + self._host + ':' + self._port
            # On python 2.7.9, HTTPS is verified by default,
            if self._useSSL and self._verifySSL is False:
                context = ssl.SSLContext(
                    ssl.PROTOCOL_SSLv23)  # @UndefinedVariable
                context.verify_mode = ssl.CERT_NONE
                transport = xmlrpclib.SafeTransport(context=context)
            else:
                transport = None

            self._session = XenAPI.Session(self._url, transport=transport)
            self._session.xenapi.login_with_password(self._username,
                                                     self._password)
            self._loggedIn = True
            self._apiVersion = self._session.API_version
            self._poolName = unicode(self.getPoolName())
        except XenAPI.Failure as e:  # XenAPI.Failure: ['HOST_IS_SLAVE', '172.27.0.29'] indicates that this host is an slave of 172.27.0.29, connect to it...
            if switchToMaster and e.details[0] == 'HOST_IS_SLAVE':
                logger.info(
                    '{0} is an Slave, connecting to master at {1} cause switchToMaster is True'
                    .format(self._host, e.details[1]))
                self._host = e.details[1]
                self.login()
            else:
                raise XenFailure(e.details)
Beispiel #4
0
    def __init__(self,
                 uri,
                 transport=None,
                 encoding=None,
                 verbose=0,
                 allow_none=0,
                 use_datetime=0,
                 timeout=default_timeout,
                 raise_errors=True):
        self._pending = []
        # establish a "logical" server connection

        # get the url
        import urllib
        type, uri = urllib.splittype(uri)
        if type not in ("http", "https"):
            raise IOError, "unsupported XML-RPC protocol"
        self.__host, self.__handler = urllib.splithost(uri)
        if not self.__handler:
            self.__handler = "/RPC2"

        if transport is None:
            if type == "https":
                transport = xmlrpclib.SafeTransport(use_datetime=use_datetime)
            else:
                transport = TimeoutTransport(timeout=timeout,
                                             use_datetime=use_datetime)
        self.__transport = transport

        self.__encoding = encoding
        self.__verbose = verbose
        self.__allow_none = allow_none
        self._timeouts = 0
        self._errors = []
        self.raise_errors = raise_errors
Beispiel #5
0
    def setup_connection(self):
        # on *NIX, the proxy can show up either upper or lowercase.
        # Prefer lower case, and prefer HTTPS over HTTP if the
        # NEOS.scheme is https.
        proxy = os.environ.get('http_proxy', os.environ.get('HTTP_PROXY', ''))
        if NEOS.scheme == 'https':
            proxy = os.environ.get('https_proxy',
                                   os.environ.get('HTTPS_PROXY', proxy))
        if proxy:
            self.transport = ProxiedTransport()
            self.transport.set_proxy(proxy)
        elif NEOS.scheme == 'https':
            self.transport = xmlrpclib.SafeTransport()
        else:
            self.transport = xmlrpclib.Transport()

        self.neos = xmlrpclib.ServerProxy("%s://%s:%s" %
                                          (NEOS.scheme, NEOS.host, NEOS.port),
                                          transport=self.transport)

        logger.info("Connecting to the NEOS server ... ")
        try:
            result = self.neos.ping()
            logger.info("OK.")
        except (socket.error, xmlrpclib.ProtocolError,
                six.moves.http_client.BadStatusLine):
            e = sys.exc_info()[1]
            self.neos = None
            logger.info("Fail.")
            logger.warning("NEOS is temporarily unavailable.\n")
    def _xml_rpc_auth(self):
        """
        Authenticates with the server using XML-RPC and returns the cookie's
        name and ID.
        """
        # TODO: This method should be replaced with SafeCookieTransfer class!!!
        import re
        import ssl
        import tempfile
        import xmlrpclib

        try:
            ssl_context = ssl.create_default_context(cafile=self.ca_cert)
            transport = xmlrpclib.SafeTransport(context=ssl_context)
        except TypeError:
            # py < 2.7.9
            transport = xmlrpclib.SafeTransport()


        hub = xmlrpclib.ServerProxy(
            urljoin(self.base_url, 'client'),
            allow_none=True,
            transport=transport,
            verbose=True)

        stdout = sys.stdout
        tmp_file = tempfile.TemporaryFile()
        try:
            sys.stdout = tmp_file
            hub.auth.login_password(self.auth.username, self.auth.password)
            tmp_file.seek(0)
            stdout_content = tmp_file.read()
        except xmlrpclib.Fault:
            raise RuntimeError('Failed to authenticate with the server')
        finally:
            sys.stdout = stdout
            tmp_file.close()

        pattern = re.compile('beaker_auth_token=[\w.-]*')
        results = pattern.findall(stdout_content)
        if not results:
            raise RuntimeError("Cookie not found")

        return {'beaker_auth_token': results[0].split('=')[1]}
Beispiel #7
0
def connect(url):
    try:
        if 'https' in url:
            context = hasattr(ssl, '_create_unverified_context') and ssl._create_unverified_context() or None
            connection = xmlrpclib.ServerProxy(url, transport=xmlrpclib.SafeTransport(use_datetime=True, context=context))
        else:
            connection = xmlrpclib.ServerProxy(url)
        return connection
    except (xmlrpclib.ProtocolError, xmlrpclib.Fault, IOError) as e:
        print "Unable to connect to %s" % url
        sys.exit(1)
Beispiel #8
0
def connect(url):
    try:
        print "Connecting to Server..."
        if 'https' in url:
            context = hasattr(ssl, '_create_unverified_context') and ssl._create_unverified_context() or None
            connection = xmlrpclib.ServerProxy(url, transport=xmlrpclib.SafeTransport(use_datetime=True, context=context))
        else:
            connection = xmlrpclib.ServerProxy(url)
        connection.system.listMethods()
        print "Connection Successful!"
        print "connect-to-server : pass"
        return connection
    except (xmlrpclib.ProtocolError, xmlrpclib.Fault, IOError) as e:
        print "CONNECTION ERROR!"
        print "Unable to connect to %s" % url
        print e
        print "connect-to-server : fail"
        exit(1)
Beispiel #9
0
    def __init__(self,
                 uri,
                 transport=None,
                 encoding=None,
                 verbose=0,
                 allow_none=0,
                 use_datetime=0,
                 timeout=default_timeout,
                 raise_errors=True):
        self._pending = []
        # establish a "logical" server connection

        # get the url
        from six.moves.urllib.parse import urlparse
        parsed_url = urlparse(uri)
        scheme = parsed_url.scheme
        self.__host = parsed_url.netloc
        self.__handler = parsed_url.path
        if scheme not in ("http", "https"):
            raise IOError("unsupported XML-RPC protocol")
        if not self.__handler:
            self.__handler = "/RPC2"

        if transport is None:
            if scheme == "https":
                transport = xmlrpclib.SafeTransport(use_datetime=use_datetime)
            else:
                transport = TimeoutTransport(timeout=timeout,
                                             use_datetime=use_datetime)
        self.__transport = transport

        self.__encoding = encoding
        self.__verbose = verbose
        self.__allow_none = allow_none
        self._timeouts = 0
        self._errors = []
        self.raise_errors = raise_errors
Beispiel #10
0
def refresh_available_addons(force=False, progress_callback=None):
    pypi = xmlrpclib.ServerProxy('https://pypi.python.org/pypi',
                                 transport=xmlrpclib.SafeTransport())
    if progress_callback:
        progress_callback(1, 0)

    pkg_dict = {}
    for data in pypi.search({'keywords': 'orange'}):
        name = data['name']
        order = data['_pypi_ordering']
        if name not in pkg_dict or pkg_dict[name][0] < order:
            pkg_dict[name] = (order, data['version'])

    try:
        import slumber
        readthedocs = slumber.API(base_url='http://readthedocs.org/api/v1/')
    except:
        readthedocs = None

    docs = {}
    if progress_callback:
        progress_callback(len(pkg_dict) + 1, 1)

    with closing(open_addons(flag="c")) as addons:
        for i, (name, (_, version)) in enumerate(pkg_dict.items()):
            installed = addons[
                name.lower()] if name.lower() in addons else None
            if force or not installed or installed.available_version != version:
                try:
                    data = pypi.release_data(name, version)
                    urls = pypi.release_urls(name, version)
                    release_urls = \
                        [ReleaseUrl(url["filename"], url["url"],
                                    url["size"], url["python_version"],
                                    url["packagetype"])
                         for url in urls]
                    if readthedocs:
                        try:
                            docs = readthedocs.project.get(
                                slug=name.lower())['objects'][0]
                        except:
                            docs = {}
                    addons[name.lower()] = OrangeAddOn(
                        name=name,
                        available_version=data['version'],
                        installed_version=installed.installed_version
                        if installed else None,
                        summary=data['summary'],
                        description=data.get('description', ''),
                        author=str((data.get('author', '') or '') + ' ' + (
                            data.get('author_email', '') or '')).strip(),
                        docs_url=data.get('docs_url',
                                          docs.get('subdomain', '')),
                        keywords=data.get('keywords', "").split(","),
                        homepage=data.get('home_page', ''),
                        package_url=data.get('package_url', ''),
                        release_urls=release_urls)
                except Exception:
                    import traceback
                    traceback.print_exc()
                    warnings.warn('Could not load data for the add-on: %s' %
                                  name)

            if progress_callback:
                progress_callback(len(pkg_dict) + 1, i + 2)

    rebuild_index()