[py-svn] r35439 - in py/dist/py/apigen/rest: . testing
fijal at codespeak.net
fijal at codespeak.net
Thu Dec 7 16:04:47 CET 2006
Author: fijal
Date: Thu Dec 7 16:04:45 2006
New Revision: 35439
Modified:
py/dist/py/apigen/rest/genrest.py
py/dist/py/apigen/rest/testing/test_rest.py
Log:
Added SourceView link viewer
Modified: py/dist/py/apigen/rest/genrest.py
==============================================================================
--- py/dist/py/apigen/rest/genrest.py (original)
+++ py/dist/py/apigen/rest/genrest.py Thu Dec 7 16:04:45 2006
@@ -17,16 +17,9 @@
There should exist various classes for that, different for Trac,
different for CVSView, etc.
"""
- def getlink(self, filename, lineno):
+ def getlink(self, filename, lineno, funcname):
raise NotImplementedError("Abstract link writer")
-class ViewVC(AbstractLinkWriter):
- """ Link writer for ViewVC version control viewer
- """
- def __init__(self, basepath):
- # XXX: should try to guess from a working copy of svn
- self.basepath = basepath
-
def getpkgpath(self, filename):
# XXX: very simple thing
path = py.path.local(filename).dirpath()
@@ -37,7 +30,14 @@
except py.error.ENOENT:
return path
- def getlink(self, filename, lineno):
+class ViewVC(AbstractLinkWriter):
+ """ Link writer for ViewVC version control viewer
+ """
+ def __init__(self, basepath):
+ # XXX: should try to guess from a working copy of svn
+ self.basepath = basepath
+
+ def getlink(self, filename, lineno, funcname):
path = str(self.getpkgpath(filename))
assert filename.startswith(path), (
"%s does not belong to package %s" % (filename, path))
@@ -49,17 +49,34 @@
relname = relname.replace(sep, '/')
return ('%s:%s' % (filename, lineno),
self.basepath + relname[1:] + '?view=markup')
+
+class SourceView(AbstractLinkWriter):
+ def __init__(self, baseurl):
+ self.baseurl = baseurl
+
+ def getlink(self, filename, lineno, funcname):
+ pkgpath = self.getpkgpath(filename)
+ assert filename.startswith(str(pkgpath)), (
+ "%s does not belong to package %s" % (filename, pkgpath))
+ relname = filename[len(str(pkgpath)):]
+ if relname.endswith('.pyc'):
+ relname = relname[:-1]
+ sep = py.std.os.sep
+ if sep != '/':
+ relname = relname.replace(sep, '/')
+ return "%s:%s" % (relname, funcname),\
+ "%s%s#%s" % (self.baseurl, relname, funcname)
class DirectPaste(AbstractLinkWriter):
""" No-link writer (inliner)
"""
- def getlink(self, filename, lineno):
+ def getlink(self, filename, lineno, funcname):
return ('%s:%s' % (filename, lineno), "")
class DirectFS(AbstractLinkWriter):
""" Creates links to the files on the file system (for local docs)
"""
- def getlink(self, filename, lineno):
+ def getlink(self, filename, lineno, funcname):
return ('%s:%s' % (filename, lineno), 'file://%s' % (filename,))
class PipeWriter(object):
@@ -446,7 +463,8 @@
for line in call_site:
lineno = line.lineno - line.code.firstlineno
linkname, linktarget = self.linkgen.getlink(line.code.filename,
- line.lineno + 1)
+ line.lineno + 1,
+ funcname)
if linktarget:
tbrest.append(Paragraph(Link(linkname, linktarget)))
else:
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 Thu Dec 7 16:04:45 2006
@@ -8,7 +8,7 @@
from py.__.apigen.rest.genrest import ViewVC, RestGen, PipeWriter, \
DirWriter, FileWriter, \
DirectPaste, DirectFS, \
- HTMLDirWriter
+ HTMLDirWriter, SourceView
from py.__.apigen.tracer.tracer import Tracer
from py.__.apigen.tracer.docstorage import DocStorage
@@ -61,20 +61,20 @@
def test_direct_link():
fname = cut_pyc(__file__)
- title, link = DirectPaste().getlink(fname, 2)
+ title, link = DirectPaste().getlink(fname, 2, "")
assert title == '%s:%s' % (fname, 2)
assert link == ''
def test_viewvc_link():
vcview = ViewVC("http://codespeak.net/viewvc/")
fname = cut_pyc(__file__)
- title, link = vcview.getlink(fname, 0)
+ title, link = vcview.getlink(fname, 0, "")
assert title == '%s:%s' % (fname, 0)
assert link == ('http://codespeak.net/viewvc/py/apigen/rest/'
'testing/test_rest.py?view=markup')
def test_fs_link():
- title, link = DirectFS().getlink('/foo/bar/baz.py', 100)
+ title, link = DirectFS().getlink('/foo/bar/baz.py', 100, "func")
assert title == '/foo/bar/baz.py:100'
assert link == 'file:///foo/bar/baz.py'
@@ -417,3 +417,23 @@
r = RestGen(ds, lg, DirWriter(tempdir))
r.write()
self.check_rest(tempdir)
+
+ def test_sourceview(self):
+ class A:
+ def method(self):
+ pass
+
+ descs = {'A':A}
+ ds = DocStorage().from_dict(descs)
+ t = Tracer(ds)
+ t.start_tracing()
+ A().method()
+ t.end_tracing()
+ lg = SourceView('http://localhost:8000')
+ tempdir = temppath.ensure("sourceview", dir=True)
+ r = RestGen(ds, lg, DirWriter(tempdir))
+ r.write()
+ self.check_rest(tempdir)
+ 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
+
More information about the py-svn
mailing list