[py-svn] r36476 - in py/dist/py/apigen/source: . testing

guido at codespeak.net guido at codespeak.net
Thu Jan 11 13:57:09 CET 2007


Author: guido
Date: Thu Jan 11 13:57:08 2007
New Revision: 36476

Added:
   py/dist/py/apigen/source/linker.py
   py/dist/py/apigen/source/testing/test_linker.py
Log:
(hpk, guido) class to provide lazy linking between html documents


Added: py/dist/py/apigen/source/linker.py
==============================================================================
--- (empty file)
+++ py/dist/py/apigen/source/linker.py	Thu Jan 11 13:57:08 2007
@@ -0,0 +1,36 @@
+import py
+html = py.xml.html
+
+def getrelfspath(dotted_name):
+    # XXX need to make sure its imported on non-py lib 
+    return eval(dotted_name, {"py": py})
+
+class LazyHref(object):
+    def __init__(self, linker, linkid):
+        self._linker = linker
+        self._linkid = linkid
+
+    def __unicode__(self):
+        return unicode(self._linker.get_target(self._linkid))
+
+class Linker(object):
+    def __init__(self):
+        self.root = None
+        self._linkid2target = {}
+
+    def set_root(self, root):
+        assert self.root is None
+        self.root = root
+
+    def repr_link(self, linkid, linkcontent=None):
+        if linkcontent is None:
+            linkcontent = linkid
+        return html.a(linkcontent, href=LazyHref(self, linkid))
+
+    def set_link(self, linkid, target):
+        assert linkid not in self._linkid2target
+        self._linkid2target[linkid] = target
+
+    def get_target(self, linkid):
+        return '%s/%s' % (self.root, self._linkid2target[linkid])
+    

Added: py/dist/py/apigen/source/testing/test_linker.py
==============================================================================
--- (empty file)
+++ py/dist/py/apigen/source/testing/test_linker.py	Thu Jan 11 13:57:08 2007
@@ -0,0 +1,75 @@
+import py
+html = py.xml.html
+from py.__.apigen.source.linker import Linker, getrelfspath
+
+class TestLinker(object):
+    def test_one_lazy_link(self):
+        linker = Linker()
+        linker.set_root('/root')
+        tag = linker.repr_link('py.path.local')
+        linker.set_link('py.path.local', 'py/path/local.html')
+        resolved = tag.unicode()
+        assert (resolved ==
+                '<a href="/root/py/path/local.html">py.path.local</a>')
+    
+    def test_lazy_link_different_text(self):
+        linker = Linker()
+        linker.set_root('/root')
+        content = html.em('foo')
+        tag = linker.repr_link('py.path.local', content)
+        linker.set_link('py.path.local', 'py/path/local.html')
+        resolved = tag.unicode(indent=0)
+        assert (resolved ==
+                '<a href="/root/py/path/local.html"><em>foo</em></a>')
+
+    def test_source_link_getrelfspath(self):
+        linker = Linker()
+        linker.set_root('/root')
+
+        relfspath = getrelfspath('py.path.local')
+        tag = linker.repr_link(relfspath, "sourcelink")
+        linker.set_link(relfspath, "hello/world")
+        resolved = tag.unicode(indent=0)
+        assert (resolved ==
+                '<a href="/root/hello/world">sourcelink</a>')
+
+# considerations for futurue use
+"""
+snippet = create_method_html('foo.bar', dsa, linker)
+snippet.unicode() # links get resolved here?
+
+def create_method_html(dotted_name, dsa, linker):
+    ...
+    # <a href="<linker.root>/py/path/local.html#py.path.local.dirpath">
+    a = linker.make_source_link(dotted_name)
+    ...
+
+def create_source_code_view(srcpath, linker):
+    ...
+    # <a name="py.path.local.dirpath"></a>dirpath()
+    anchor = linker.provide_anchor(dotted_name)
+
+def convert_srcpath_to_htmlpath(srcpath):
+    return 'source/%s.html' % (srcpath,)
+
+def write_sources(root, linker):
+    for fpath in root.visit(fil='*.py'):
+        relpath = fpath.relto(root)
+        htmlpath = convert_srcpath_to_htmlpath(relpath)
+        linker.set_link(relpath, htmlpath)
+        gen_source_code_view(relpath, htmlpath)
+        
+  
+Linker: 
+def make_source_link(self, dotted_name):
+    relpath = py.path.local(inspect.getfile(dottedname).... 
+    anchor = linker.get_anchor_name(dotted_name)
+    #html.a(text, href=<relpath>#anchor)
+    ... upon resolving time ... 
+    linkref = linker.get_html_relpath(relpath)
+    linkref += "#" + anchor 
+
+def _make_anchored_link(self, relpath, anchor, text):
+    #html.a(text, href=<relpath>#anchor)
+
+"""



More information about the pytest-commit mailing list