Ejemplo n.º 1
0
    def __init__(self, auth=None, transport=None, config_file=None):
        if config_file is None:
            config_file = CONFIG_FILE
        self.auth = auth
        self.config_file = config_file
        self.settings = config.get_config(self.config_file)

        if transport is None:
            url = self.settings['softlayer'].get('endpoint_url')
            if url is not None and '/rest' in url:
                # If this looks like a rest endpoint, use the rest transport
                transport = transports.RestTransport(
                    endpoint_url=url,
                    proxy=self.settings['softlayer'].get('proxy'),
                    # prevents an exception incase timeout is a float number.
                    timeout=int(
                        self.settings['softlayer'].getfloat('timeout')),
                    user_agent=consts.USER_AGENT,
                    verify=self.settings['softlayer'].getboolean('verify'),
                )
            else:
                # Default the transport to use XMLRPC
                transport = transports.XmlRpcTransport(
                    endpoint_url=url,
                    proxy=self.settings['softlayer'].get('proxy'),
                    timeout=int(
                        self.settings['softlayer'].getfloat('timeout')),
                    user_agent=consts.USER_AGENT,
                    verify=self.settings['softlayer'].getboolean('verify'),
                )

        self.transport = transport
Ejemplo n.º 2
0
 def set_up(self):
     transport = transports.XmlRpcTransport(
         endpoint_url='http://endpoint-url',
     )
     self.env.client = SoftLayer.BaseClient(
         transport=transport,
         auth=auth.BasicAuthentication('username', 'api-key'))
Ejemplo n.º 3
0
def test_verify(request, transport_verify, request_verify, expected):
    request.return_value = get_xmlrpc_response()

    transport = transports.XmlRpcTransport(
        endpoint_url='http://something.com', )

    req = transports.Request()
    req.service = 'SoftLayer_Service'
    req.method = 'getObject'

    if request_verify is not None:
        req.verify = request_verify

    if transport_verify is not None:
        transport.verify = transport_verify

    transport(req)

    request.assert_called_with('POST',
                               'http://something.com/SoftLayer_Service',
                               data=mock.ANY,
                               headers=mock.ANY,
                               cert=mock.ANY,
                               proxies=mock.ANY,
                               timeout=mock.ANY,
                               verify=expected,
                               auth=None)
Ejemplo n.º 4
0
    def test_no_hostname(self):
        try:
            request = transports.Request()
            request.service = 'SoftLayer_Account'
            request.method = 'getObject'
            request.id = 1234

            # This test will fail if 'notvalidsoftlayer.com' becomes a thing
            transport = transports.XmlRpcTransport(
                endpoint_url='http://notvalidsoftlayer.com', )
            transport(request)
        except SoftLayer.TransportError as ex:
            self.assertEqual(ex.faultCode, 0)
        else:
            self.fail('Transport Error Exception Not Raised')
Ejemplo n.º 5
0
    def test_no_hostname(self):
        try:
            request = transports.Request()
            request.endpoint = 'http://notvalidsoftlayer.com'
            request.service = 'SoftLayer_Account'
            request.method = 'getObject'
            request.id = 1234

            # This test will fail if 'notvalidsoftlayer.com' becomes a thing
            transport = transports.XmlRpcTransport()
            transport(request)
        except SoftLayer.SoftLayerAPIError as ex:
            self.assertIn('not known', str(ex))
            self.assertIn('not known', ex.faultString)
            self.assertEqual(ex.faultCode, 0)
        else:
            self.fail('No Exception Raised')
    def set_up(self):
        self.transport = transports.XmlRpcTransport(
            endpoint_url='http://something.com', )
        self.response = requests.Response()
        list_body = six.b('''<?xml version="1.0" encoding="utf-8"?>
<params>
<param>
 <value>
  <array>
   <data/>
  </array>
 </value>
</param>
</params>''')
        self.response.raw = io.BytesIO(list_body)
        self.response.headers['SoftLayer-Total-Items'] = 10
        self.response.status_code = 200
Ejemplo n.º 7
0
    def __init__(self, username=None, api_key=None, endpoint_url=None,
                 timeout=None, auth=None, config_file=None, proxy=None,
                 user_agent=None, transport=None):

        settings = config.get_client_settings(username=username,
                                              api_key=api_key,
                                              endpoint_url=endpoint_url,
                                              timeout=timeout,
                                              auth=auth,
                                              proxy=proxy,
                                              config_file=config_file)
        self.auth = settings.get('auth')

        self.endpoint_url = (settings.get('endpoint_url')
                             or API_PUBLIC_ENDPOINT).rstrip('/')
        self.transport = transport or transports.XmlRpcTransport()

        self.timeout = None
        if settings.get('timeout'):
            self.timeout = float(settings.get('timeout'))
        self.proxy = None
        if settings.get('proxy'):
            self.proxy = settings.get('proxy')
        self.user_agent = user_agent
Ejemplo n.º 8
0
 def set_up(self):
     self.transport = transports.XmlRpcTransport(
         endpoint_url='http://something.com', )
     self.response = mock.MagicMock()
     self.response.content = '''<?xml version="1.0" encoding="utf-8"?>
Ejemplo n.º 9
0
 def set_up(self):
     self.transport = transports.XmlRpcTransport(
         endpoint_url='http://something.com', )
     self.response = get_xmlrpc_response()
Ejemplo n.º 10
0
def create_client_from_env(username=None,
                           api_key=None,
                           endpoint_url=None,
                           timeout=None,
                           auth=None,
                           config_file=None,
                           proxy=None,
                           user_agent=None,
                           transport=None):
    """Creates a SoftLayer API client using your environment.

    Settings are loaded via keyword arguments, environemtal variables and
    config file.

    :param username: an optional API username if you wish to bypass the
        package's built-in username
    :param api_key: an optional API key if you wish to bypass the package's
        built in API key
    :param endpoint_url: the API endpoint base URL you wish to connect to.
        Set this to API_PRIVATE_ENDPOINT to connect via SoftLayer's private
        network.
    :param proxy: proxy to be used to make API calls
    :param integer timeout: timeout for API requests
    :param auth: an object which responds to get_headers() to be inserted into
        the xml-rpc headers. Example: `BasicAuthentication`
    :param config_file: A path to a configuration file used to load settings
    :param user_agent: an optional User Agent to report when making API
        calls if you wish to bypass the packages built in User Agent string
    :param transport: An object that's callable with this signature:
                      transport(SoftLayer.transports.Request)

    Usage:

        >>> import SoftLayer
        >>> client = SoftLayer.create_client_from_env()
        >>> resp = client['Account'].getObject()
        >>> resp['companyName']
        'Your Company'

    """
    settings = config.get_client_settings(username=username,
                                          api_key=api_key,
                                          endpoint_url=endpoint_url,
                                          timeout=timeout,
                                          proxy=proxy,
                                          config_file=config_file)

    # Default the transport to use XMLRPC
    if transport is None:
        transport = transports.XmlRpcTransport(
            endpoint_url=settings.get('endpoint_url'),
            proxy=settings.get('proxy'),
            timeout=settings.get('timeout'),
            user_agent=user_agent,
        )

    # If we have enough information to make an auth driver, let's do it
    if auth is None and settings.get('username') and settings.get('api_key'):

        auth = slauth.BasicAuthentication(
            settings.get('username'),
            settings.get('api_key'),
        )

    return BaseClient(auth=auth, transport=transport)
Ejemplo n.º 11
0
def create_client_from_env(username=None,
                           api_key=None,
                           endpoint_url=None,
                           timeout=None,
                           auth=None,
                           config_file=None,
                           proxy=None,
                           user_agent=None,
                           transport=None,
                           verify=True):
    """Creates a SoftLayer API client using your environment.

    Settings are loaded via keyword arguments, environemtal variables and
    config file.

    :param username: an optional API username if you wish to bypass the
        package's built-in username
    :param api_key: an optional API key if you wish to bypass the package's
        built in API key
    :param endpoint_url: the API endpoint base URL you wish to connect to.
        Set this to API_PRIVATE_ENDPOINT to connect via SoftLayer's private
        network.
    :param proxy: proxy to be used to make API calls
    :param integer timeout: timeout for API requests
    :param auth: an object which responds to get_headers() to be inserted into
        the xml-rpc headers. Example: `BasicAuthentication`
    :param config_file: A path to a configuration file used to load settings
    :param user_agent: an optional User Agent to report when making API
        calls if you wish to bypass the packages built in User Agent string
    :param transport: An object that's callable with this signature:
                      transport(SoftLayer.transports.Request)
    :param bool verify: decide to verify the server's SSL/TLS cert. DO NOT SET
                        TO FALSE WITHOUT UNDERSTANDING THE IMPLICATIONS.

    Usage:

        >>> import SoftLayer
        >>> client = SoftLayer.create_client_from_env()
        >>> resp = client.call('Account', 'getObject')
        >>> resp['companyName']
        'Your Company'

    """
    if config_file is None:
        config_file = CONFIG_FILE
    settings = config.get_client_settings(username=username,
                                          api_key=api_key,
                                          endpoint_url=endpoint_url,
                                          timeout=timeout,
                                          proxy=proxy,
                                          verify=verify,
                                          config_file=config_file)

    if transport is None:
        url = settings.get('endpoint_url')
        if url is not None and '/rest' in url:
            # If this looks like a rest endpoint, use the rest transport
            transport = transports.RestTransport(
                endpoint_url=settings.get('endpoint_url'),
                proxy=settings.get('proxy'),
                timeout=settings.get('timeout'),
                user_agent=user_agent,
                verify=verify,
            )
        else:
            # Default the transport to use XMLRPC
            transport = transports.XmlRpcTransport(
                endpoint_url=settings.get('endpoint_url'),
                proxy=settings.get('proxy'),
                timeout=settings.get('timeout'),
                user_agent=user_agent,
                verify=verify,
            )

    # If we have enough information to make an auth driver, let's do it
    if auth is None and settings.get('username') and settings.get('api_key'):
        # NOTE(kmcdonald): some transports mask other transports, so this is
        # a way to find the 'real' one
        real_transport = getattr(transport, 'transport', transport)

        if isinstance(real_transport, transports.XmlRpcTransport):
            auth = slauth.BasicAuthentication(
                settings.get('username'),
                settings.get('api_key'),
            )

        elif isinstance(real_transport, transports.RestTransport):
            auth = slauth.BasicHTTPAuthentication(
                settings.get('username'),
                settings.get('api_key'),
            )

    return BaseClient(auth=auth, transport=transport, config_file=config_file)
Ejemplo n.º 12
0
 def set_up(self):
     self.transport = transports.XmlRpcTransport()
     self.response = mock.MagicMock()
     self.response.content = '''<?xml version="1.0" encoding="utf-8"?>