Improving status report, changing to rsync by adding function publish for output.
[treecutter.git] / src / tree-cutter.py
index db93a6d0d0ef978392573e577bf5b5e8e6f1b037..0dd68b65fb3be70ec6e0652179a7d3f490d6dd28 100755 (executable)
@@ -7,15 +7,21 @@ import re
 import tempfile
 import errno
 import time
+import argparse
 from amara import bindery
 from amara.xslt import transform
 from Cheetah.Template import Template
 
-dist = os.path.dirname(os.getcwd())
-style = "default"
-style_xslt = dist+"/style/"+style+"/docbook.xsl"
-style_tmpl = dist+"/style/"+style+"/index.html.tmpl"
-outputdir = dist+"/htdocs/"
+parser = argparse.ArgumentParser(description='Process docbook article tree.')
+parser.add_argument('--style', nargs='?',
+                    default=os.path.dirname(os.getcwd())+'/style/default/')
+parser.add_argument('--output', nargs='?',
+                    default=os.path.dirname(os.getcwd())+'/htdocs/')
+args = parser.parse_args()
+
+style_xslt = args.style+"docbook.xsl"
+style_tmpl = args.style+"index.en.html.tmpl"
+outputdir = args.output
 
 valid_scripts = ['.py','.pl']
 MAXLEVEL = 10000
@@ -28,6 +34,12 @@ def mkdir_p(path):
             pass
         else: raise
 
+def publish(src,target):
+    cmd = ["rsync","-a",src,target]
+    retcode = subprocess.call(cmd)
+    if retcode:
+        print 'Error: '+' '.join(cmd)+' Returncode ['+str(retcode)+']'
+
 def generateSitemap():
   sitemap = []
   try:
@@ -56,12 +68,13 @@ def generateSitemap():
 
         if title and menu:
           found = 0
-          base = os.path.splitext(xfile)[0]
-          link = base.translate(None,'.').replace('index','')
+          base = xfile.split('.')[1]
+          link = base.replace('index','')
           level = len(filter(None,re.split(r'(/\w*/)',link)))
           page = dict(title=unicode(doc.article.info.title),
                       menu=unicode(doc.article.info.titleabbrev),
-                      output=os.path.join(dirname,filename.replace('xml','html')),
+                      output=os.path.join(dirname,
+                                          filename.replace('xml','html')),
                       exe=exe,
                       file=xfile,
                       level=level)
@@ -71,7 +84,7 @@ def generateSitemap():
               l.update(page)
           if not found:
             print "adding "+link+" to sitemap"
-            dd = dict(link=link) 
+            dd = dict(link=link)
             dd.update(page)
             sitemap.append(dd)
   sfile = open('sitemap.txt','w')
@@ -81,8 +94,9 @@ def generateSitemap():
   return sitemap
 
 def expandXincludeTxt(page):
-  doc = bindery.parse(page['file'],prefixes={u'db': u'http://docbook.org/ns/docbook',
-                                             u'xi': u'http://www.w3.org/2001/XInclude'})
+  doc = bindery.parse(page['file'],
+                      prefixes={u'db': u'http://docbook.org/ns/docbook',
+                                u'xi': u'http://www.w3.org/2001/XInclude'})
   if page['exe']:
     code  = doc.xml_select(u"//xi:include[@parse='text']")
     for c in code:
@@ -125,18 +139,17 @@ def genMenu(page,sitemap,slevel,elevel):
   title = None
   sm = []
   if elevel == MAXLEVEL or elevel == 1:
-    sm = sitemap        
+    sm = sitemap
   else:
     idx = sitemap.index(page)
     while (sitemap[idx]['level'] == page['level']):
       idx = idx-1
     title = sitemap[idx]['menu']
     idx = idx+1
-    while (sitemap[idx]['level'] == page['level']):
+    while (idx < len(sitemap) and sitemap[idx]['level'] == page['level']):
       sm.append(sitemap[idx])
       idx = idx+1
   oldlevel = slevel
-
   html = '<ul>\n'
   for p in sm:
     if slevel > p['level'] or elevel < p['level']:
@@ -164,26 +177,27 @@ def writeToTemplate(page,doc,sitemap):
   (menu,menuname) = genMenu(page,sitemap,1,MAXLEVEL)
   (levelmenu,levelname) = genMenu(page,sitemap,page['level'],page['level'])
   template = Template(file=style_tmpl,
-                      searchList=[{'menu':menu},
+                      searchList=[{'title':page['title']},
+                                  {'menu':menu},
                                   {'article':doc},
                                   {'levelmenu':levelmenu},
                                   {'levelname':levelname}])
-  outfile = outputdir+page['output']
-  d = os.path.split(outfile)[0]
-  if d != '':
-    mkdir_p(d)
-  out = open(outfile, 'w')
+  outfile = args.output+page['output']
+  out = open('result', 'w')
   out.write(str(template))
+  out.close()
+  publish('result',outfile)
+  os.remove('result')
 
 sitemap = generateSitemap()
 for page in sitemap:
   t1 = time.time()
-  print "Page : "+page['link'],
+  print "Page : %-30s %30s" % (page['link'],
+                      time.ctime(os.stat(page['file']).st_mtime)),
   doc = expandXincludeTxt(page)
   pubdoc = xsltConvert(doc)
   writeToTemplate(page,pubdoc,sitemap)
-#  publishResources()
+  publish(args.style+"css", args.output)
+  publish(args.style+"images",args.output)
   t2 = time.time()
-  print "["+str(round(t2-t1,2))+"]  done."
-
-
+  print "[%5.2f s]" % (round(t2-t1,2))