[Checkins] SVN: zope.app.apidoc/trunk/ Improved static apidoc to create standalone static apidoc.

Julian Bonilla gator99 at gmail.com
Wed Sep 26 13:08:54 EDT 2007


Log message for revision 80118:
  Improved static apidoc to create standalone static apidoc.

Changed:
  U   zope.app.apidoc/trunk/buildout.cfg
  U   zope.app.apidoc/trunk/setup.py
  U   zope.app.apidoc/trunk/src/zope/app/apidoc/static.py
  U   zope.app.apidoc/trunk/src/zope/app/apidoc/utilities.py

-=-
Modified: zope.app.apidoc/trunk/buildout.cfg
===================================================================
--- zope.app.apidoc/trunk/buildout.cfg	2007-09-26 16:46:16 UTC (rev 80117)
+++ zope.app.apidoc/trunk/buildout.cfg	2007-09-26 17:08:54 UTC (rev 80118)
@@ -1,9 +1,13 @@
 [buildout]
 develop = .
-parts = test
+parts = test static-apidoc
 find-links = http://download.zope.org/distribution/
 
 [test]
 recipe = zc.recipe.testrunner
 defaults = ['--tests-pattern', '^f?tests$']
 eggs = zope.app.apidoc [test]
+
+[static-apidoc]
+recipe = zc.recipe.egg
+eggs = zope.app.apidoc
\ No newline at end of file

Modified: zope.app.apidoc/trunk/setup.py
===================================================================
--- zope.app.apidoc/trunk/setup.py	2007-09-26 16:46:16 UTC (rev 80117)
+++ zope.app.apidoc/trunk/setup.py	2007-09-26 17:08:54 UTC (rev 80118)
@@ -70,6 +70,9 @@
                             static=['mechanize'],
                             ),
       include_package_data = True,
-
+      entry_points = """
+        [console_scripts]
+        static-apidoc = zope.app.apidoc.static:main
+        """,
       zip_safe = False,
       )

Modified: zope.app.apidoc/trunk/src/zope/app/apidoc/static.py
===================================================================
--- zope.app.apidoc/trunk/src/zope/app/apidoc/static.py	2007-09-26 16:46:16 UTC (rev 80117)
+++ zope.app.apidoc/trunk/src/zope/app/apidoc/static.py	2007-09-26 17:08:54 UTC (rev 80118)
@@ -118,6 +118,11 @@
 
 class OnlineBrowser(mechanize.Browser, object):
 
+    def __init__(self, factory=None, history=None, request_class=None):
+        if factory == None:
+            factory = ApiDocDefaultFactory()
+        mechanize.Browser.__init__(self, factory, history, request_class)
+
     def setUserAndPassword(self, user, pw):
         """Specify the username and password to use for the retrieval."""
         hash = base64.encodestring(user+':'+pw).strip()
@@ -339,7 +344,36 @@
         # files.
         self.browser.close()
 
+class ApiDocDefaultFactory(mechanize._html.DefaultFactory):
+    """Based on sgmllib."""
+    def __init__(self, i_want_broken_xhtml_support=False):
+        mechanize._html.Factory.__init__(
+            self,
+            forms_factory=mechanize._html.FormsFactory(),
+            links_factory=ApiDocLinksFactory(),
+            title_factory=mechanize._html.TitleFactory(),
+            is_html_p=mechanize._html.make_is_html(allow_xhtml=i_want_broken_xhtml_support),
+            )
 
+class ApiDocLinksFactory(mechanize._html.LinksFactory):
+
+    def __init__(self,
+                 link_parser_class=None,
+                 link_class=Link,
+                 urltags=None,
+                 ):
+        if urltags is None:
+
+            urltags = {
+                "a": "href",
+                "area": "href",
+                "frame": "src",
+                "iframe": "src",
+                "link": "href",
+                "script": "src",
+                }
+        mechanize._html.LinksFactory.__init__(self, link_parser_class, link_class, urltags)
+
 ###############################################################################
 # Command-line UI
 

Modified: zope.app.apidoc/trunk/src/zope/app/apidoc/utilities.py
===================================================================
--- zope.app.apidoc/trunk/src/zope/app/apidoc/utilities.py	2007-09-26 16:46:16 UTC (rev 80117)
+++ zope.app.apidoc/trunk/src/zope/app/apidoc/utilities.py	2007-09-26 17:08:54 UTC (rev 80118)
@@ -17,6 +17,7 @@
 """
 __docformat__ = 'restructuredtext'
 
+import cgi
 import re
 import sys
 import types
@@ -324,6 +325,11 @@
 
     text = dedentString(text)
 
+    if not isinstance(text, unicode):
+        text = text.decode('latin-1', 'replace')
+    # We need to escape all HTML
+    text = cgi.escape(text)
     source = createObject(format, text)
+
     renderer = getMultiAdapter((source, TestRequest()))
     return renderer.render()



More information about the Checkins mailing list