[svn r38036] Some small code cleanups (moved more HTML generation code to html.py).
--HG-- branch : trunk
This commit is contained in:
parent
563ed75651
commit
12b991723e
|
@ -23,7 +23,25 @@ class H(html):
|
|||
pass
|
||||
|
||||
class ClassDef(html.h1):
|
||||
pass
|
||||
def __init__(self, classname, bases, docstring, sourcelink,
|
||||
properties, methods):
|
||||
super(H.ClassDef, self).__init__('class %s(' % classname,)
|
||||
for name, href in bases:
|
||||
link = name
|
||||
if href is not None:
|
||||
link = H.a(name, href=href)
|
||||
self.append(H.BaseDescription(link))
|
||||
self.append('):')
|
||||
self.append(H.Docstring(docstring or '*no docstring available*'))
|
||||
self.append(sourcelink)
|
||||
if properties:
|
||||
self.append(H.h2('properties:'))
|
||||
for name, val in properties:
|
||||
self.append(H.PropertyDescription(name, val))
|
||||
if methods:
|
||||
self.append(H.h2('methods:'))
|
||||
for methodhtml in methods:
|
||||
self.append(methodhtml)
|
||||
|
||||
class MethodDescription(Description):
|
||||
pass
|
||||
|
|
|
@ -355,15 +355,7 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
try:
|
||||
sourcefile = inspect.getsourcefile(cls)
|
||||
except TypeError:
|
||||
sourcelink = 'builtin file, no source available'
|
||||
else:
|
||||
if sourcefile is None:
|
||||
sourcelink = H.div('no source available')
|
||||
else:
|
||||
if sourcefile[-1] in ['o', 'c']:
|
||||
sourcefile = sourcefile[:-1]
|
||||
sourcelink = H.div(H.a('view source',
|
||||
href=self.linker.get_lazyhref(sourcefile)))
|
||||
sourcefile = None
|
||||
|
||||
docstring = cls.__doc__
|
||||
if docstring:
|
||||
|
@ -375,32 +367,35 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
bases = self.build_bases(dotted_name)
|
||||
properties = self.build_properties(cls)
|
||||
methods = self.build_methods(dotted_name)
|
||||
|
||||
if sourcefile is None:
|
||||
sourcelink = H.div('no source available')
|
||||
else:
|
||||
if sourcefile[-1] in ['o', 'c']:
|
||||
sourcefile = sourcefile[:-1]
|
||||
sourcelink = H.div(H.a('view source',
|
||||
href=self.linker.get_lazyhref(sourcefile)))
|
||||
|
||||
snippet = H.ClassDescription(
|
||||
# XXX bases HTML
|
||||
H.ClassDef('%s(' % (clsname,), *bases),
|
||||
H.Docstring(docstring or '*no docstring available*'),
|
||||
sourcelink,
|
||||
*(properties+methods)
|
||||
H.ClassDef(clsname, bases, docstring, sourcelink,
|
||||
properties, methods),
|
||||
)
|
||||
|
||||
return snippet
|
||||
|
||||
def build_bases(self, dotted_name):
|
||||
basehtml = []
|
||||
ret = []
|
||||
bases = self.dsa.get_possible_base_classes(dotted_name)
|
||||
for base in bases:
|
||||
try:
|
||||
obj = self.dsa.get_obj(base.name)
|
||||
except KeyError:
|
||||
basehtml.append(base.name)
|
||||
ret.append((base.name, None))
|
||||
else:
|
||||
href = self.linker.get_lazyhref(base.name)
|
||||
basehtml.append(H.BaseDescription(base.name, href=href))
|
||||
basehtml.append(',')
|
||||
if basehtml:
|
||||
basehtml.pop()
|
||||
basehtml.append('):')
|
||||
return basehtml
|
||||
ret.append((base.name, href))
|
||||
return ret
|
||||
|
||||
def build_properties(self, cls):
|
||||
properties = []
|
||||
|
@ -411,24 +406,17 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
val = '<property object (dynamically calculated value)>'
|
||||
properties.append((attr, val))
|
||||
properties.sort(key=lambda a: a[0]) # sort on name
|
||||
ret = []
|
||||
if properties:
|
||||
ret.append(H.h2('properties:'))
|
||||
for name, val in properties:
|
||||
ret.append(H.PropertyDescription(name, val))
|
||||
return ret
|
||||
return properties
|
||||
|
||||
def build_methods(self, dotted_name):
|
||||
ret = []
|
||||
methods = self.dsa.get_class_methods(dotted_name)
|
||||
if methods:
|
||||
ret.append(H.h2('methods:'))
|
||||
if '__init__' in methods:
|
||||
methods.remove('__init__')
|
||||
methods.insert(0, '__init__')
|
||||
for method in methods:
|
||||
ret += self.build_callable_view('%s.%s' % (dotted_name,
|
||||
method))
|
||||
if '__init__' in methods:
|
||||
methods.remove('__init__')
|
||||
methods.insert(0, '__init__')
|
||||
for method in methods:
|
||||
ret += self.build_callable_view('%s.%s' % (dotted_name,
|
||||
method))
|
||||
return ret
|
||||
|
||||
def build_namespace_view(self, namespace_dotted_name, item_dotted_names):
|
||||
|
@ -455,6 +443,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
def prepare_class_pages(self, classes_dotted_names):
|
||||
passed = []
|
||||
for dotted_name in sorted(classes_dotted_names):
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('preparing: %s\n' % (dotted_name,))
|
||||
parent_dotted_name, _ = split_of_last_part(dotted_name)
|
||||
try:
|
||||
sibling_dotted_names = self.namespace_tree[parent_dotted_name]
|
||||
|
@ -471,6 +461,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
def build_class_pages(self, data, project):
|
||||
""" build the full api pages for a set of classes """
|
||||
for dotted_name, tag, nav, reltargetpath in data:
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('building: %s\n' % (dotted_name,))
|
||||
title = 'api documentation for %s' % (dotted_name,)
|
||||
self.write_page(title, reltargetpath, project, tag, nav)
|
||||
|
||||
|
@ -497,6 +489,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
def prepare_function_pages(self, method_dotted_names):
|
||||
passed = []
|
||||
for dotted_name in sorted(method_dotted_names):
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('preparing: %s\n' % (dotted_name,))
|
||||
# XXX should we create a build_function_view instead?
|
||||
parent_dotted_name, _ = split_of_last_part(dotted_name)
|
||||
sibling_dotted_names = self.namespace_tree[parent_dotted_name]
|
||||
|
@ -509,6 +503,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
|
||||
def build_function_pages(self, data, project):
|
||||
for dotted_name, tag, nav, reltargetpath in data:
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('building: %s\n' % (dotted_name,))
|
||||
title = 'api documentation for %s' % (dotted_name,)
|
||||
self.write_page(title, reltargetpath, project, tag, nav)
|
||||
|
||||
|
@ -521,6 +517,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
function_names = self.dsa.get_function_names()
|
||||
class_names = self.dsa.get_class_names()
|
||||
for dotted_name in sorted(names):
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('preparing: %s\n' % (dotted_name,))
|
||||
if dotted_name in function_names or dotted_name in class_names:
|
||||
continue
|
||||
subitem_dotted_names = self.namespace_tree[dotted_name]
|
||||
|
@ -537,6 +535,8 @@ class ApiPageBuilder(AbstractPageBuilder):
|
|||
|
||||
def build_namespace_pages(self, data, project):
|
||||
for dotted_name, tag, nav, reltargetpath in data:
|
||||
#if self.capture:
|
||||
# self.capture.err.writeorg('building: %s\n' % (dotted_name,))
|
||||
if dotted_name == '':
|
||||
dotted_name = self.dsa.get_module_name().split('/')[-1]
|
||||
title = 'index of %s namespace' % (dotted_name,)
|
||||
|
|
|
@ -116,7 +116,7 @@ class AbstractBuilderTest(object):
|
|||
self.namespace_tree = namespace_tree
|
||||
self.apb = ApiPageBuilder(base, linker, self.dsa,
|
||||
self.fs_root.join(self.pkg_name),
|
||||
namespace_tree, 'root docstring')
|
||||
namespace_tree)
|
||||
self.spb = SourcePageBuilder(base, linker,
|
||||
self.fs_root.join(self.pkg_name))
|
||||
|
||||
|
|
Loading…
Reference in New Issue