Adding initial plugin support for xincludes in documents
authorFredrik Unger <fred@tree.se>
Wed, 4 Apr 2012 12:10:09 +0000 (14:10 +0200)
committerFredrik Unger <fred@tree.se>
Wed, 4 Apr 2012 12:10:09 +0000 (14:10 +0200)
Using the pkg_resources to package xinclude scripts that can be
generaly usable. Initial tests works and once more scripts are
adapted they will be added.

setup.py
treecutter/page.py

index 6bb0cdf1f15c4f516ccb82322c074009008105cc..cb89efeb9d5aace91157e2ad5605e9a9698aab28 100644 (file)
--- a/setup.py
+++ b/setup.py
@@ -7,4 +7,5 @@ setup(name="treecutter",
       version='1',
       packages=['treecutter'],  # python package names here
       scripts=['bin/treecutter'],  # scripts here
+      package_data={'xinclude': ['xinclude/*.py']}
 )
index ce1296026d63b963c1297f01582a657359f00e25..9f27c918e7a257b34ebd85860c199901618d5994 100644 (file)
@@ -5,6 +5,7 @@ import tempfile
 from amara import bindery
 from amara.xslt import transform
 from Cheetah.Template import Template
+from pkg_resources import resource_filename, resource_listdir
 import treecutter.const as const
 from treecutter.tools import mkdir_p
 
@@ -46,14 +47,25 @@ class Page():
                 (p, ext) = os.path.splitext(c.href)
                 if ext in const.valid_scripts:
                     exe = []
-                    exe.append(os.path.join(os.path.abspath(dirname)+'/'+c.href))
+                    script = os.path.join(os.path.abspath(dirname)+'/'+c.href)
+                    if os.path.isfile(script):
+                        exe.append(script)
+                    else:
+                        print resource_listdir('xinclude', '')
+                        print resource_filename('xinclude', c.href)
+                        if c.href in resource_listdir('xinclude', ''):
+                            script = resource_filename('xinclude', c.href)
+                            exe.append(script)
+                        else:
+                            print "Script "+c.href+" in "+self._file+" missing"
                     if c.xml_select(u"//xi:include[@accept-language]"):
                         alang = c.xml_attributes[None, "accept-language"]
                         exe.append("lang="+alang)
                     if c.xml_select(u"//xi:include[@xpointer]"):
                         exe.append("xptr="+c.xpointer)
                     xml = subprocess.Popen(exe,stdout=subprocess.PIPE)
-                    xstr = bindery.parse(str(xml.stdout.read()))
+                    xmlblock = str(xml.stdout.read())
+                    xstr = bindery.parse(xmlblock)
                     idp = c.xml_index_on_parent
                     for x in xstr.xml_children:
                         c.xml_parent.xml_insert(idp,x)