def doc(self): client = self.client buf = ViewList() name = client.wsdl.wsdl.get( 'name', client.wsdl.wsdl.get('targetNamespace', '(unnamed)')) title = 'Web Service: %s' % name buf.append(title, '<autowsdl>') buf.append('=' * len(title), '<autowsdl>') buf.append('', '<autowsdl>') buf.append('Methods', '<autowsdl>') buf.append('-------', '<autowsdl>') buf.append('', '<autowsdl>') buf.append( "Methods are accessible under the ``service`` attribute " "of a client instance.", '<autowsdl>') buf.append('', '<autowsdl>') for entry in dir(client.service): # print 'method', entry if entry.startswith('_') or entry == 'method_class': continue item = getattr(client.service, entry) try: doc = self.doc_method(item.method) if doc is not None: buf.extend(doc) except AttributeError, e: print "failed method", entry, e pass
def doc(self): client = self.client buf = ViewList() name = client.wsdl.wsdl.get( 'name', client.wsdl.wsdl.get('targetNamespace', '(unnamed)')) title = 'Web Service: %s' % name buf.append(title, '<autowsdl>') buf.append('=' * len(title), '<autowsdl>') buf.append('', '<autowsdl>') buf.append('Methods', '<autowsdl>') buf.append('-------', '<autowsdl>') buf.append('', '<autowsdl>') buf.append("Methods are accessible under the ``service`` attribute " "of a client instance.", '<autowsdl>') buf.append('', '<autowsdl>') for entry in dir(client.service): # print 'method', entry if entry.startswith('_') or entry == 'method_class': continue item = getattr(client.service, entry) try: doc = self.doc_method(item.method) if doc is not None: buf.extend(doc) except AttributeError, e: print "failed method", entry, e pass
def generate_rst(what, name, members, undoc, add_content, document, lineno, indent='', filename_set=None, check_module=False): env = document.settings.env # find out what to import if what == 'module': mod = obj = name objpath = [] elif what in ('class', 'exception', 'function'): mod, obj = rpartition(name, '.') if not mod and hasattr(env, 'autodoc_current_module'): mod = env.autodoc_current_module if not mod: mod = env.currmodule objpath = [obj] else: mod_cls, obj = rpartition(name, '.') if not mod_cls and hasattr(env, 'autodoc_current_class'): mod_cls = env.autodoc_current_class if not mod_cls: mod_cls = env.currclass mod, cls = rpartition(mod_cls, '.') if not mod and hasattr(env, 'autodoc_current_module'): mod = env.autodoc_current_module if not mod: mod = env.currmodule objpath = [cls, obj] result = ViewList() if mod is None: warning = document.reporter.warning( 'don\'t know which module to import for documenting %r ' '(try placing a "module" or "currentmodule" directive in the document, ' 'or giving an explicit module name)' % name, line=lineno) return [warning], result try: todoc = module = __import__(mod, None, None, ['foo']) if filename_set is not None and hasattr(module, '__file__') and module.__file__: modfile = module.__file__ if modfile.lower().endswith('.pyc') or modfile.lower().endswith('.pyo'): modfile = modfile[:-1] filename_set.add(modfile) for part in objpath: todoc = getattr(todoc, part) if check_module: # only checking __module__ for members not given explicitly if hasattr(todoc, '__module__'): if todoc.__module__ != mod: return [], result docstring = todoc.__doc__ except (ImportError, AttributeError): warning = document.reporter.warning( 'autodoc can\'t import/find %s %r, check your spelling ' 'and sys.path' % (what, str(name)), line=lineno) return [warning], result # add directive header try: if what == 'class': args = inspect.formatargspec(*inspect.getargspec(todoc.__init__)) if args[1:7] == 'self, ': args = '(' + args[7:] elif args == '(self)': args = '()' elif what in ('function', 'method'): args = inspect.formatargspec(*inspect.getargspec(todoc)) if what == 'method': if args[1:7] == 'self, ': args = '(' + args[7:] elif args == '(self)': args = '()' else: args = '' except: args = '' if len(objpath) == 2: qualname = '%s.%s' % (cls, obj) else: qualname = obj result.append(indent + '.. %s:: %s%s' % (what, qualname, args), '<autodoc>') result.append('', '<autodoc>') # the module directive doesn't like content if what != 'module': indent += ' ' # add docstring content if what == 'module' and env.config.automodule_skip_lines and docstring: docstring = '\n'.join(docstring.splitlines() [env.config.automodule_skip_lines:]) # get the encoding of the docstring module = getattr(todoc, '__module__', None) if module is not None and docstring is not None: docstring = docstring.decode(get_module_charset(module)) docstring = prepare_docstring(docstring) for i, line in enumerate(docstring): result.append(indent + line, '<docstring of %s>' % name, i) # add source content, if present if add_content: for line, src in zip(add_content.data, add_content.items): result.append(indent + line, src[0], src[1]) if not members or what in ('function', 'method', 'attribute'): return [], result env.autodoc_current_module = mod if objpath: env.autodoc_current_class = objpath[0] warnings = [] # add members, if possible _all = members == ['__all__'] members_check_module = False if _all: if what == 'module': # for implicit module members, check __module__ to avoid documenting # imported objects members_check_module = True all_members = sorted(inspect.getmembers(todoc)) else: all_members = [(mname, getattr(todoc, mname)) for mname in members] for (membername, member) in all_members: if _all and membername.startswith('_'): continue doc = getattr(member, '__doc__', None) if not undoc and not doc: continue if what == 'module': if isinstance(member, types.FunctionType): memberwhat = 'function' elif isinstance(member, types.ClassType) or \ isinstance(member, type): if issubclass(member, base_exception): memberwhat = 'exception' else: memberwhat = 'class' else: # XXX: todo -- attribute docs continue else: if callable(member): memberwhat = 'method' elif isinstance(member, property): memberwhat = 'attribute' else: # XXX: todo -- attribute docs continue full_membername = name + '.' + membername subwarn, subres = generate_rst(memberwhat, full_membername, ['__all__'], undoc, None, document, lineno, indent, check_module=members_check_module) warnings.extend(subwarn) result.extend(subres) env.autodoc_current_module = None env.autodoc_current_class = None return warnings, result
def generate_rst(what, name, members, inherited, undoc, add_content, document, lineno, indent='', filename_set=None, check_module=False): env = document.settings.env # find out what to import if what == 'module': mod = obj = name objpath = [] elif what in ('class', 'exception', 'function'): mod, obj = rpartition(name, '.') if not mod and hasattr(env, 'autodoc_current_module'): mod = env.autodoc_current_module if not mod: mod = env.currmodule objpath = [obj] else: mod_cls, obj = rpartition(name, '.') if not mod_cls and hasattr(env, 'autodoc_current_class'): mod_cls = env.autodoc_current_class if not mod_cls: mod_cls = env.currclass mod, cls = rpartition(mod_cls, '.') if not mod and hasattr(env, 'autodoc_current_module'): mod = env.autodoc_current_module if not mod: mod = env.currmodule objpath = [cls, obj] result = ViewList() docstrings = [] if mod is None: warning = document.reporter.warning( 'don\'t know which module to import for documenting %r ' '(try placing a "module" or "currentmodule" directive in the document, ' 'or giving an explicit module name)' % name, line=lineno) return [warning], result try: todoc = module = __import__(mod, None, None, ['foo']) if filename_set is not None and hasattr( module, '__file__') and module.__file__: modfile = module.__file__ if modfile.lower().endswith('.pyc') or modfile.lower().endswith( '.pyo'): modfile = modfile[:-1] filename_set.add(modfile) for part in objpath: todoc = getattr(todoc, part) if check_module: # only checking __module__ for members not given explicitly if hasattr(todoc, '__module__'): if todoc.__module__ != mod: return [], result if getattr(todoc, '__doc__', None): docstrings.append(todoc.__doc__) except (ImportError, AttributeError): warning = document.reporter.warning( 'autodoc can\'t import/find %s %r, check your spelling ' 'and sys.path' % (what, str(name)), line=lineno) return [warning], result # add directive header try: if what == 'class': args = inspect.formatargspec(*inspect.getargspec(todoc.__init__)) if args[1:7] == 'self, ': args = '(' + args[7:] elif args == '(self)': args = '()' elif what in ('function', 'method'): args = inspect.formatargspec(*inspect.getargspec(todoc)) if what == 'method': if args[1:7] == 'self, ': args = '(' + args[7:] elif args == '(self)': args = '()' else: args = '' except Exception: args = '' if len(objpath) == 2: qualname = '%s.%s' % (cls, obj) else: qualname = obj result.append(indent + '.. %s:: %s%s' % (what, qualname, args), '<autodoc>') result.append('', '<autodoc>') # the module directive doesn't want content if what != 'module': indent += ' ' # add docstring content if what == 'module' and env.config.automodule_skip_lines and docstrings[0]: docstrings[0] = '\n'.join( docstring.splitlines()[env.config.automodule_skip_lines:]) # for classes, what the "docstring" is can be controlled via an option if what in ('class', 'exception'): content = env.config.autoclass_content if content in ('both', 'init'): initdocstring = getattr(todoc, '__init__', None).__doc__ # for new-style classes, no __init__ means default __init__ if initdocstring == object.__init__.__doc__: initdocstring = None if initdocstring: if content == 'init': docstrings = [initdocstring] else: docstrings.append('\n\n' + initdocstring) # the default is only the class docstring # get the encoding of the docstring module = getattr(todoc, '__module__', None) if module is not None: charset = get_module_charset(module) docstrings = [docstring.decode(charset) for docstring in docstrings] for docstring in docstrings: docstring = prepare_docstring(docstring) for i, line in enumerate(docstring): result.append(indent + line, '<docstring of %s>' % name, i) # add source content, if present if add_content: for line, src in zip(add_content.data, add_content.items): result.append(indent + line, src[0], src[1]) if not members or what in ('function', 'method', 'attribute'): return [], result env.autodoc_current_module = mod if objpath: env.autodoc_current_class = objpath[0] warnings = [] # add members, if possible _all = members == ['__all__'] members_check_module = False if _all: if what == 'module': # for implicit module members, check __module__ to avoid documenting # imported objects members_check_module = True all_members = inspect.getmembers(todoc) else: if inherited: # getmembers() uses dir() which pulls in members from all base classes all_members = inspect.getmembers(todoc) else: # __dict__ contains only the members directly defined in the class all_members = sorted(todoc.__dict__.iteritems()) else: all_members = [(mname, getattr(todoc, mname)) for mname in members] for (membername, member) in all_members: if _all and membername.startswith('_'): continue doc = getattr(member, '__doc__', None) if not undoc and not doc: continue if what == 'module': if isinstance(member, types.FunctionType): memberwhat = 'function' elif isinstance(member, types.ClassType) or \ isinstance(member, type): if issubclass(member, base_exception): memberwhat = 'exception' else: memberwhat = 'class' else: # XXX: todo -- attribute docs continue else: if callable(member): memberwhat = 'method' elif isdescriptor(member): memberwhat = 'attribute' else: # XXX: todo -- attribute docs continue full_membername = name + '.' + membername subwarn, subres = generate_rst(memberwhat, full_membername, ['__all__'], inherited, undoc, None, document, lineno, indent, check_module=members_check_module) warnings.extend(subwarn) result.extend(subres) env.autodoc_current_module = None env.autodoc_current_class = None return warnings, result
memberwhat = 'attribute' else: # XXX: todo -- attribute docs continue full_membername = fullname + '.' + membername subwarn, subres = generate_rst(memberwhat, full_membername, ['__all__'], options, None, document, lineno, indent, check_module=members_check_module) warnings.extend(subwarn) if subres is not None: result.extend(subres) env.autodoc_current_module = None env.autodoc_current_class = None return warnings, result def _auto_directive(dirname, arguments, options, content, lineno, content_offset, block_text, state, state_machine): what = dirname[4:] # strip "auto" name = arguments[0] genopt = Options() members = options.get('members', []) genopt.inherited_members = 'inherited-members' in options if genopt.inherited_members and not members:
continue else: if callable(member): memberwhat = 'method' elif isdescriptor(member): memberwhat = 'attribute' else: # XXX: todo -- attribute docs continue full_membername = fullname + '.' + membername subwarn, subres = generate_rst(memberwhat, full_membername, ['__all__'], options, None, document, lineno, indent, check_module=members_check_module) warnings.extend(subwarn) if subres is not None: result.extend(subres) env.autodoc_current_module = None env.autodoc_current_class = None return warnings, result def _auto_directive(dirname, arguments, options, content, lineno, content_offset, block_text, state, state_machine): what = dirname[4:] # strip "auto" name = arguments[0] genopt = Options() members = options.get('members', []) genopt.inherited_members = 'inherited-members' in options if genopt.inherited_members and not members: