示例#1
0
    def __init__(self, driver_obj, method_name):
        if inspect.isclass(driver_obj):
            self.driver_cls = driver_obj
        else:
            self.driver_cls = driver_obj.__class__

        self.driver_obj = driver_obj
        self.method_name = method_name
        self.method = getattr(self.driver_obj, method_name, None)

        if not inspect.ismethod(self.method):
            raise NoSuchOperationError()
        method_doc = get_method_docstring(self.driver_cls, method_name)

        if not method_doc:
            raise MethodParsingException('Empty docstring')

        argspec_arg = parse_args(self.method)
        docstring_parse_result = parse_docstring(method_doc, self.driver_cls)
        self.description = docstring_parse_result['description']
        docstring_args = docstring_parse_result['arguments']

        #check vargs
        self.vargs_entries = []
        self.req_vargs_entries = []
        for name, arg_info in docstring_args.items():
            docstring_arg_tmp = docstring_args[name]
            #print docstring_arg_tmp
            entry_kwargs = {
                'name': name,
                'description': docstring_arg_tmp['description'],
                'type_name': docstring_arg_tmp['type_name'],
                'required': (docstring_arg_tmp['required'] or
                                arg_info['required']),
            }

            if not entry_kwargs['required']:
                self.vargs_entries.append(entry_kwargs)
            else:
                self.req_vargs_entries.append(entry_kwargs)

        #update kwargs
        kwargs = set(docstring_args).difference(argspec_arg)
        self.kwargs_entries = []
        for entry in kwargs:
            kwargs_entry = {
                'name':entry,
                'description':docstring_args[entry]['description'],
                'type_name':docstring_args[entry]['type_name'],
                'required':docstring_args[entry]['required']
            }
            self.kwargs_entries.append(kwargs_entry)

        method_return = docstring_parse_result['return']
        self.result_entry = method_return
示例#2
0
    def test_parse_args(self):
        class A(object):
            def update_zone(self, zone, domain, type='master',
                            ttl=None, extra=None):
                pass

        result = parser.parse_args(A.update_zone)
        self.assertEqual(result.keys(),
                         ['zone', 'domain', 'type', 'ttl', 'extra'])
        self.assertEqual(result['zone']['required'], True)
        self.assertEqual(result['type']['required'], False)
        self.assertFalse('default' in result['zone'])
        self.assertTrue('default' in result['ttl'])
示例#3
0
    def test_parse_args(self):
        class A(object):
            def update_zone(self,
                            zone,
                            domain,
                            type='master',
                            ttl=None,
                            extra=None):
                pass

        result = parser.parse_args(A.update_zone)
        self.assertEqual(result.keys(),
                         ['zone', 'domain', 'type', 'ttl', 'extra'])
        self.assertEqual(result['zone']['required'], True)
        self.assertEqual(result['type']['required'], False)
        self.assertFalse('default' in result['zone'])
        self.assertTrue('default' in result['ttl'])