[py-svn] r37774 - py/trunk/py/doc

guido at codespeak.net guido at codespeak.net
Thu Feb 1 23:30:53 CET 2007


Author: guido
Date: Thu Feb  1 23:30:51 2007
New Revision: 37774

Modified:
   py/trunk/py/doc/conftest.py
   py/trunk/py/doc/test_conftest.py
Log:
Adding support for checking generated API links (for link roles).


Modified: py/trunk/py/doc/conftest.py
==============================================================================
--- py/trunk/py/doc/conftest.py	(original)
+++ py/trunk/py/doc/conftest.py	Thu Feb  1 23:30:51 2007
@@ -15,7 +15,7 @@
 ) 
 
 _initialized = False
-def checkdocutils(): 
+def checkdocutils(path): 
     global _initialized
     try:
         import docutils
@@ -23,8 +23,8 @@
         py.test.skip("docutils not importable")
     if not _initialized:
         from py.__.rest import directive
-        directive.register_linkrole('api', resolve_linkrole)
-        directive.register_linkrole('source', resolve_linkrole)
+        directive.register_linkrole('api', get_resolve_linkrole(path))
+        directive.register_linkrole('source', get_resolve_linkrole(path))
         _initialized = True
 
 def restcheck(path):
@@ -32,7 +32,7 @@
     if hasattr(path, 'localpath'):
         localpath = path.localpath
     _checkskip(localpath)
-    checkdocutils() 
+    checkdocutils(localpath) 
     import docutils.utils
 
     try: 
@@ -234,24 +234,34 @@
             return self.ReSTChecker(p, parent=self) 
 Directory = DocDirectory
 
-def resolve_linkrole(name, text):
-    if name == 'api':
-        if text == 'py':
-            return 'py', '../../apigen/api/index.html'
-        assert text.startswith('py.'), (
-            'api link "%s" does not point to the py package') % (text,)
-        dotted_name = text
-        if dotted_name.find('(') > -1:
-            dotted_name = dotted_name[:text.find('(')]
-        dotted_name = '.'.join(dotted_name.split('.')[1:]) # remove pkg root
-        return text, '../../apigen/api/%s.html' % (dotted_name,)
-    elif name == 'source':
-        assert text.startswith('py/'), ('source link "%s" does not point '
-                                        'to the py package') % (text,)
-        relpath = '/'.join(text.split('/')[1:])
-        if relpath.endswith('/') or not relpath:
-            relpath += 'index.html'
-        else:
-            relpath += '.html'
-        return text, '../../apigen/source/%s' % (relpath,)
-
+def get_resolve_linkrole(checkpath=None):
+    # XXX yuck...
+    def resolve_linkrole(name, text):
+        if name == 'api':
+            if text == 'py':
+                ret = ('py', '../../apigen/api/index.html')
+            else:
+                assert text.startswith('py.'), (
+                    'api link "%s" does not point to the py package') % (text,)
+                dotted_name = text
+                if dotted_name.find('(') > -1:
+                    dotted_name = dotted_name[:text.find('(')]
+                # remove pkg root
+                dotted_name = '.'.join(dotted_name.split('.')[1:])
+                ret = (text, '../../apigen/api/%s.html' % (dotted_name,))
+        elif name == 'source':
+            assert text.startswith('py/'), ('source link "%s" does not point '
+                                            'to the py package') % (text,)
+            relpath = '/'.join(text.split('/')[1:])
+            if relpath.endswith('/') or not relpath:
+                relpath += 'index.html'
+            else:
+                relpath += '.html'
+            ret = (text, '../../apigen/source/%s' % (relpath,))
+        if checkpath:
+            if not py.path.local(checkpath).join(ret[1]).check():
+                raise AssertionError(
+                    '%s linkrole: %s points to non-existant path %s' % (
+                     name, ret[0], ret[1]))
+        return ret
+    return resolve_linkrole

Modified: py/trunk/py/doc/test_conftest.py
==============================================================================
--- py/trunk/py/doc/test_conftest.py	(original)
+++ py/trunk/py/doc/test_conftest.py	Thu Feb  1 23:30:51 2007
@@ -70,7 +70,8 @@
     assert len(l+l2) == 3
 
 def test_resolve_linkrole():
-    from py.__.doc.conftest import resolve_linkrole
+    from py.__.doc.conftest import get_resolve_linkrole
+    resolve_linkrole = get_resolve_linkrole(None)
     assert resolve_linkrole('api', 'py.foo.bar') == (
         'py.foo.bar', '../../apigen/api/foo.bar.html')
     assert resolve_linkrole('api', 'py.foo.bar()') == (
@@ -86,3 +87,14 @@
         'py/', '../../apigen/source/index.html')
     py.test.raises(AssertionError, 'resolve_linkrole("source", "/foo/bar/")')
 
+def test_resolve_linkrole_relpath():
+    from py.__.doc.conftest import get_resolve_linkrole
+    pypath = tmpdir.join('py')
+    docpath = pypath.join('doc')
+    apipath = tmpdir.join('apigen/api')
+    apipath.ensure('foo.bar.html')
+    resolve_linkrole = get_resolve_linkrole(docpath)
+    
+    assert resolve_linkrole('api', 'py.foo.bar')
+    py.test.raises(AssertionError, "resolve_linkrole('api', 'py.foo.baz')")
+


More information about the py-svn mailing list