[py-svn] r36282 - in py/dist/py/apigen: rest rest/testing source tracer
fijal at codespeak.net
fijal at codespeak.net
Mon Jan 8 16:50:21 CET 2007
Author: fijal
Date: Mon Jan 8 16:50:20 2007
New Revision: 36282
Modified:
py/dist/py/apigen/rest/genrest.py
py/dist/py/apigen/rest/testing/test_rest.py
py/dist/py/apigen/source/server.py
py/dist/py/apigen/tracer/docstorage.py
Log:
Add a link to source viewer.
Modified: py/dist/py/apigen/rest/genrest.py
==============================================================================
--- py/dist/py/apigen/rest/genrest.py (original)
+++ py/dist/py/apigen/rest/genrest.py Mon Jan 8 16:50:20 2007
@@ -17,6 +17,9 @@
There should exist various classes for that, different for Trac,
different for CVSView, etc.
"""
+ def getlinkobj(self, obj, name):
+ return None
+
def getlink(self, filename, lineno, funcname):
raise NotImplementedError("Abstract link writer")
@@ -57,6 +60,8 @@
self.baseurl = baseurl[:-1]
def getlink(self, filename, lineno, funcname):
+ if filename.endswith('.pyc'):
+ filename = filename[:-1]
if filename is None:
return "<UNKNOWN>:%s" % funcname,""
pkgpath = self.getpkgpath(filename)
@@ -73,6 +78,13 @@
return "%s:%s" % (relname, funcname),\
"%s%s#%s" % (self.baseurl, relname, funcname)
+ def getlinkobj(self, name, obj):
+ try:
+ filename = sys.modules[obj.__module__].__file__
+ return self.getlink(filename, 0, name)
+ except AttributeError:
+ return None
+
class DirectPaste(AbstractLinkWriter):
""" No-link writer (inliner)
"""
@@ -272,6 +284,9 @@
for cls, bases, functions in classes:
rest = [Title('class: %s' % (cls,), belowchar='='),
LiteralBlock(self.dsa.get_doc(cls))]
+ # link to source
+ self.dsa.get_class_definition(cls)
+
if bases:
rest.append(Title('base classes:', belowchar='^')),
for base in bases:
@@ -378,8 +393,12 @@
else:
title = Title('function: %s' % (functionname,),
belowchar=belowchar)
+
lst = [title, LiteralBlock(self.dsa.get_doc(functionname)),
LiteralBlock(self.dsa.get_function_definition(functionname))]
+ link_to_function = self.linkgen.getlinkobj(functionname, self.dsa.get_obj(functionname))
+ if link_to_function:
+ lst.insert(1, Paragraph(Text("source: "), Link(*link_to_function)))
opar = Paragraph(Strong('origin'), ":")
if origin:
Modified: py/dist/py/apigen/rest/testing/test_rest.py
==============================================================================
--- py/dist/py/apigen/rest/testing/test_rest.py (original)
+++ py/dist/py/apigen/rest/testing/test_rest.py Mon Jan 8 16:50:20 2007
@@ -437,3 +437,20 @@
assert tempdir.join('traceback_A.method.0.txt').open().read().find(
'.. _`/py/apigen/rest/testing/test\_rest.py\:A.method`: http://localhost:8000/py/apigen/rest/testing/test_rest.py#A.method') != -1
+ def test_sourceview_fun(self):
+ def f():
+ pass
+
+ descs = {'f':f}
+ ds = DocStorage().from_dict(descs)
+ t = Tracer(ds)
+ t.start_tracing()
+ f()
+ t.end_tracing()
+ tempdir = temppath.ensure("sourceview_fun", dir=True)
+ lg = SourceView('http://localhost:8000')
+ r = RestGen(ds, lg, DirWriter(tempdir))
+ r.write()
+ self.check_rest(tempdir)
+ assert tempdir.join('function_f.txt').open().read().find(
+ '.. _`/py/apigen/rest/testing/test\_rest.py\:f`: http://localhost:8000/py/apigen/rest/testing/test_rest.py#f') != -1
Modified: py/dist/py/apigen/source/server.py
==============================================================================
--- py/dist/py/apigen/source/server.py (original)
+++ py/dist/py/apigen/source/server.py Mon Jan 8 16:50:20 2007
@@ -41,7 +41,7 @@
return f
def _main():
- server.start_server(handler=Handler, start_new=False)
+ server.start_server(handler=Handler)
if __name__ == '__main__':
_main()
Modified: py/dist/py/apigen/tracer/docstorage.py
==============================================================================
--- py/dist/py/apigen/tracer/docstorage.py (original)
+++ py/dist/py/apigen/tracer/docstorage.py Mon Jan 8 16:50:20 2007
@@ -288,6 +288,9 @@
retval.append(desc)
return retval
+ def get_class_definition(self, name):
+ desc = self.ds.descs[name]
+
def desc_from_pyobj(self, pyobj, name):
for desc in self.ds.descs.values():
if isinstance(desc, ClassDesc) and desc.pyobj is pyobj:
@@ -299,3 +302,5 @@
# and make sure we'll not try to link to it directly
return desc
+ def get_obj(self, name):
+ return self.ds.descs[name].pyobj
More information about the py-svn
mailing list