예제 #1
0
    def test_help(self):
        command = help.Show(env=environment.Environment())

        output = command.execute({'<module>': None, '<command>': None})
        self.assertTrue('usage: sl help' in output)

        output = command.execute({'<module>': 'help', '<command>': None})
        self.assertTrue('usage: sl help' in output)

        output = command.execute({'<module>': 'server', '<command>': 'list'})
        self.assertTrue('usage: sl server list' in output)
예제 #2
0
    def setUp(self):  # NOQA
        testtools.TestCase.setUp(self)

        self.mocks.clear()

        transport = SoftLayer.XmlRpcTransport(endpoint_url=self.endpoint_url)
        wrapped_transport = SoftLayer.TimingTransport(transport)

        self.client = SoftLayer.BaseClient(transport=wrapped_transport)

        self.env = environment.Environment()
        self.env.client = self.client
        self.set_up()
예제 #3
0
    def test_summary(self):
        command = summary.Summary(client=self.client,
                                  env=environment.Environment())

        output = command.execute({})
        expected = [{'datacenter': 'dal00',
                     'networking': 1,
                     'subnets': 0,
                     'hardware': 1,
                     'IPs': 3,
                     'vs': 1,
                     'vlans': 1}]
        self.assertEqual(expected, formatting.format_output(output, 'python'))
예제 #4
0
    def setUp(self):  # NOQA
        self.env = environment.Environment()

        # Create a crazy mockable, fixture client
        auth = SoftLayer.BasicAuthentication('default-user', 'default-key')
        self.mocks = MockableTransport(SoftLayer.FixtureTransport())
        self.transport = SoftLayer.TimingTransport(self.mocks)
        self.client = SoftLayer.Client(transport=self.transport,
                                       auth=auth,
                                       timeout=10,
                                       endpoint_url='default-endpoint-url')

        self.env.client = self.client
        return self.set_up()
예제 #5
0
def main(args=sys.argv[1:], env=environment.Environment()):
    """Entry point for the command-line client."""
    # Parse Top-Level Arguments
    exit_status = 0
    resolver = CommandParser(env)
    try:
        command, command_args = resolver.parse(args)

        # Set logging level
        debug_level = command_args.get('--debug')
        if debug_level:
            logger = logging.getLogger()
            handler = logging.StreamHandler()
            logger.addHandler(handler)
            logger.setLevel(DEBUG_LOGGING_MAP.get(debug_level, logging.DEBUG))

        kwargs = {
            'proxy': command_args.get('--proxy'),
            'config_file': command_args.get('--config')
        }
        if command_args.get('--timings'):
            client = SoftLayer.TimedClient(**kwargs)
        else:
            client = SoftLayer.Client(**kwargs)

        # Do the thing
        runnable = command(client=client, env=env)
        data = runnable.execute(command_args)
        if data:
            out_format = command_args.get('--format', 'table')
            if out_format not in VALID_FORMATS:
                raise exceptions.ArgumentError('Invalid format "%s"'
                                               % out_format)
            output = formatting.format_output(data, fmt=out_format)
            if output:
                env.out(output)

        if command_args.get('--timings'):
            out_format = command_args.get('--format', 'table')
            api_calls = client.get_last_calls()
            timing_table = formatting.KeyValueTable(['call', 'time'])

            for call, _, duration in api_calls:
                timing_table.add_row([call, duration])

            env.err(formatting.format_output(timing_table, fmt=out_format))

    except exceptions.InvalidCommand as ex:
        env.err(resolver.get_module_help(ex.module_name))
        if ex.command_name:
            env.err('')
            env.err(str(ex))
            exit_status = 1
    except exceptions.InvalidModule as ex:
        env.err(resolver.get_main_help())
        if ex.module_name:
            env.err('')
            env.err(str(ex))
        exit_status = 1
    except docopt.DocoptExit as ex:
        env.err(ex.usage)
        env.err(
            '\nUnknown argument(s), use -h or --help for available options')
        exit_status = 127
    except KeyboardInterrupt:
        env.out('')
        exit_status = 1
    except exceptions.CLIAbort as ex:
        env.err(str(ex.message))
        exit_status = ex.code
    except SystemExit as ex:
        exit_status = ex.code
    except SoftLayer.SoftLayerAPIError as ex:
        if 'invalid api token' in ex.faultString.lower():
            env.out("Authentication Failed: To update your credentials, use "
                    "'sl config setup'")
        else:
            env.err(str(ex))
            exit_status = 1
    except SoftLayer.SoftLayerError as ex:
        env.err(str(ex))
        exit_status = 1
    except Exception:
        import traceback
        env.err("An unexpected error has occured:")
        env.err(traceback.format_exc())
        env.err("Feel free to report this error as it is likely a bug:")
        env.err("    https://github.com/softlayer/softlayer-python/issues")
        exit_status = 1

    sys.exit(exit_status)
예제 #6
0
 def test_get_version_message(self, get_latest_version_mock):
     get_latest_version_mock.return_value = '1.1.1'
     env = environment.Environment()
     result = self.run_command(['--version'], env=env)
     self.assert_no_fail(result)
예제 #7
0
    def test_build_client(self):
        env = environment.Environment()
        result = self.run_command(['vs', 'list'], env=env)

        self.assert_no_fail(result)
        self.assertIsNotNone(env.client)
예제 #8
0
    def test_build_client(self):
        env = environment.Environment()
        result = self.run_command(['vs', 'list'], env=env)

        self.assertEqual(result.exit_code, 0)
        self.assertIsNotNone(env.client)
예제 #9
0
 def set_up(self):
     self.env = environment.Environment()