[py-svn] r36570 - in py/dist/py/apigen: . testing
guido at codespeak.net
guido at codespeak.net
Fri Jan 12 14:06:45 CET 2007
Author: guido
Date: Fri Jan 12 14:06:35 2007
New Revision: 36570
Modified:
py/dist/py/apigen/htmlgen.py
py/dist/py/apigen/testing/test_apigen_example.py
Log:
Building function page navigation, small HTML beautifications.
Modified: py/dist/py/apigen/htmlgen.py
==============================================================================
--- py/dist/py/apigen/htmlgen.py (original)
+++ py/dist/py/apigen/htmlgen.py Fri Jan 12 14:06:35 2007
@@ -6,13 +6,13 @@
class ClassDescription(html.div):
pass
- class ClassDef(html.div):
+ class ClassDef(html.h1):
pass
class MethodDescription(html.div):
pass
- class MethodDef(html.div):
+ class MethodDef(html.h2):
pass
class ParameterDescription(html.div):
@@ -43,7 +43,7 @@
docstring = func.__doc__
local_methodname = func.__name__
snippet = H.MethodDescription(
- H.MethodDef(local_methodname, "(", params, "):"),
+ H.MethodDef(local_methodname, params, ":"),
H.Docstring(docstring),
)
return snippet
@@ -55,7 +55,7 @@
docstring = func.__doc__
local_methodname = func.__name__
snippet = H.MethodDescription(
- H.MethodDef(local_methodname, "(", params, "):"),
+ H.MethodDef(local_methodname, params, ":"),
H.Docstring(docstring),
# XXX more info here...
)
@@ -84,6 +84,7 @@
H.ClassDef('%s(' % (cls.__name__,), *basehtml),
H.Docstring(docstring),
)
+ snippet.append(H.h2('Functions:'))
for method in methods:
snippet += build_short_method_view(linker, dsa, '%s.%s' % (dotted_name,
method))
@@ -98,8 +99,6 @@
return H.Navigation('navigation')
def build_class_navigation(linker, dsa, dotted_name):
- # import dotted name
- # build nav from sub items + parent
navitems = []
path = dotted_name.split('.')
indent = 0
@@ -137,6 +136,45 @@
# build nav from self + parent + parent's items
return H.Navigation('navigation')
+def build_function_navigation(linker, dsa, dotted_name):
+ navitems = []
+ path = dotted_name.split('.')
+ indent = 0
+ if len(path) > 1:
+ parent_dotted_name = '.'.join(path[:-1])
+ navitems.append(indent * 2 * u'\xa0')
+ try:
+ obj = dsa.get_obj(parent_dotted_name)
+ except KeyError:
+ navitems.append(parent_dotted_name)
+ navitems.append(H.br())
+ indent += 1
+ navitems.append(indent * 2 * u'\xa0')
+ navitems.append(H.NavigationItem(
+ H.a(dotted_name,
+ href=linker.get_lazyhref(dotted_name))))
+ else:
+ navitems.append(H.NavigationItem(
+ H.a(parent_dotted_name,
+ href=linker.get_lazyhref(
+ parent_dotted_name))))
+ navitems.append(H.br())
+ indent += 1
+ navitems.append(indent * 2 * u'\xa0')
+ navitems.append(H.NavigationItem(
+ H.a(dotted_name.split('.')[-1],
+ href=linker.get_lazyhref(dotted_name))))
+ navitems.append(H.br())
+ indent += 1
+ for funcname in dsa.get_class_methods(dotted_name):
+ func_dotted_name = '%s.%s' % (dotted_name, funcname)
+ navitems.append(indent * 2 * u'\xa0')
+ navitems.append(H.NavigationItem(
+ H.a(funcname,
+ href=linker.get_lazyhref(func_dotted_name))))
+ navitems.append(H.br())
+ return H.Navigation(*navitems)
+
# the build_*_pages methods all do two-pass page generation (first pass builds
# the link db, second uses it)
def build_source_pages(linker, base):
@@ -166,7 +204,8 @@
dsa.get_class_methods(dotted_name)]
build_method_api_pages(project, linker, dsa, base, method_dotted_names)
for dotted_name, tag, nav, reltargetpath in passed:
- page = wrap_page(project, linker, tag, nav)
+ page = wrap_page(project, linker,
+ 'api documentation for %s' % (dotted_name,), tag, nav)
content = page.unicode()
targetpath = base.ensure(reltargetpath)
targetpath.write(content.encode("utf8"))
@@ -174,20 +213,41 @@
def build_method_api_pages(project, linker, dsa, base, methods_dotted_names):
passed = []
for dotted_name in methods_dotted_names:
+ print 'building full method view for', dotted_name
+ tag = build_full_method_view(linker, dsa, dotted_name)
+ nav = build_class_navigation(linker, dsa,
+ '.'.join(dotted_name.split('.')[:-1]))
+ reltargetpath = "api/%s.html" % (dotted_name,)
+ linker.set_link(dotted_name, reltargetpath)
+ passed.append((dotted_name, tag, nav, reltargetpath))
+ for dotted_name, tag, nav, reltargetpath in passed:
+ page = wrap_page(project, linker,
+ 'api documentation for %s' % (dotted_name,), tag, nav)
+ content = page.unicode()
+ targetpath = base.join(reltargetpath)
+ targetpath.ensure()
+ targetpath.write(content.encode("utf8"))
+
+def build_function_api_pages(project, linker, dsa, base, methods_dotted_names):
+ passed = []
+ for dotted_name in methods_dotted_names:
+ print 'building function view for', dotted_name
+ # XXX should we call build_full_function_view instead?
tag = build_full_method_view(linker, dsa, dotted_name)
- nav = build_method_navigation(linker, dotted_name)
+ nav = build_function_navigation(linker, dsa, dotted_name)
reltargetpath = "api/%s.html" % (dotted_name,)
linker.set_link(dotted_name, reltargetpath)
passed.append((dotted_name, tag, nav, reltargetpath))
for dotted_name, tag, nav, reltargetpath in passed:
- page = wrap_page(project, linker, tag, nav)
+ page = wrap_page(project, linker,
+ 'api documentation for %s' % (dotted_name,), tag, nav)
content = page.unicode()
targetpath = base.join(reltargetpath)
targetpath.ensure()
targetpath.write(content.encode("utf8"))
-def wrap_page(project, linker, contentel, navel):
- page = LayoutPage(project, 'XXX Page Title', nav=navel)
+def wrap_page(project, linker, title, contentel, navel):
+ page = LayoutPage(project, title, nav=navel)
page.set_content(contentel)
return page
Modified: py/dist/py/apigen/testing/test_apigen_example.py
==============================================================================
--- py/dist/py/apigen/testing/test_apigen_example.py (original)
+++ py/dist/py/apigen/testing/test_apigen_example.py Fri Jan 12 14:06:35 2007
@@ -27,6 +27,7 @@
temp.ensure('pkg/somesubclass.py').write(py.code.Source("""
from someclass import SomeClass
class SomeSubClass(SomeClass):
+ " docstring somesubclass "
def get_somevar(self):
return self.somevar + 1
"""))
@@ -64,9 +65,9 @@
print html
parseString(html)
- def test_build_method_api_pages(self):
- base = py.test.ensuretemp('build_method_api_pages')
- build_method_api_pages(self.project, self.linker, self.dsa, base,
+ def test_build_function_api_pages(self):
+ base = py.test.ensuretemp('build_function_api_pages')
+ build_function_api_pages(self.project, self.linker, self.dsa, base,
['pkg.sub.func'])
funcfile = base.join('api/pkg.sub.func.html')
assert funcfile.check()
More information about the pytest-commit
mailing list