sitemap: support for draft, levels and templates
[treecutter.git] / treecutter / docbook.py
index 32cff722ed72211e414d265250a72ece77202da0..9e970c98b679b2d8b81146e99e0e3141fac02d65 100644 (file)
@@ -2,6 +2,7 @@
 
 import os
 import subprocess
+import re
 
 from lxml import etree
 from lxml.builder import ElementMaker
@@ -11,7 +12,7 @@ from time import time
 
 import treecutter.constants as const
 from treecutter.image import Image
-from treecutter.tools import warning
+#from treecutter.tools import warning
 
 class Docbook():
     """Class representing a docbook document"""
@@ -29,6 +30,31 @@ class Docbook():
            ta = unicode(ta[0].text)
         return (t, ta)
 
+    def status(self):
+        status = self._doc.xpath(u'/db:article[@status]',namespaces=const.XPATH)
+        if status:
+            return unicode(status[0].get('status'))
+        return None
+
+    def role(self):
+        art = self._doc.xpath(u'/db:article[@role]',namespaces=const.XPATH)
+        if art:
+            return unicode(art[0].get('role'))
+        return 'index'
+
+    def userlevel(self):
+        lvl = self._doc.xpath(u'/db:article[@userlevel]',namespaces=const.XPATH)
+        if lvl:
+            lvlstr = unicode(lvl[0].get('userlevel'))
+            return {
+                'Level 1': 1,
+                'Level 2': 2,
+                'Level 3': 3,
+                'Level 4': 4,
+                'Level 5': 5,
+            }.get(lvlstr, 0)
+        return 0
+
     def expand_imageobjects(self):
         cwd = os.getcwd()
         db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
@@ -63,7 +89,7 @@ class Docbook():
             if ext in const.valid_scripts:
                 exe = []
                 script = os.path.join(os.path.abspath(self._dirname)+'/'+href)
-                if os.path.isfile(script):
+                if os.path.isfile(script) and os.access(script, os.X_OK):
                     exe.append(script)
                 else:
                     if href in resource_listdir('xinclude', ''):
@@ -75,6 +101,8 @@ class Docbook():
                     exe.append("lang="+alang)
                 if xpointer:
                     exe.append("xptr="+xpointer)
+                if exe == []:
+                    continue
                 print "  executing %15s" % (href),
                 ts = time()
                 os.chdir(self._dirname)
@@ -82,10 +110,10 @@ class Docbook():
                                        stderr=subprocess.PIPE)
                 (stdout, stderr) = xml.communicate()
                 #print xml.returnvalue
-                if stderr:
-                    warning("%s : %s" % (" ".join(exe),stderr))
-                    warning(stdout)
-                    exit
+#                if stderr:
+#                    warning("%s : %s" % (" ".join(exe),stderr))
+#                    warning(stdout)
+#                    exit
                 os.chdir(cwd)
                 te = time()
                 print " [%5.2f s]  (%s)" % (round(te-ts,2),xpointer)
@@ -95,6 +123,9 @@ class Docbook():
                 idp.insert(idp.index(c)+1,xstr)
                 idp.remove(c)
 
+    def xinclude(self):
+        self._doc.xinclude()
+
     def collect_links(self):
         res = []
         for r in self._doc.xpath(u"//db:link[@xlink:href]",namespaces=const.XPATH):