xinclude: added pic and latests plugins
[treecutter.git] / xinclude / latest.py
diff --git a/xinclude/latest.py b/xinclude/latest.py
new file mode 100755 (executable)
index 0000000..3565578
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/python
+# -*- coding: utf-8 -*-
+
+from dateutil.tz import *
+from datetime import datetime
+from dateutil.parser import parse
+
+import os
+import fnmatch
+
+from lxml import etree
+from lxml.builder import ElementMaker
+import sys
+import re
+
+from treecutter import constants as const
+
+class Latest(object):
+    def __init__(self, count):
+        self.count = count
+        self.events = []
+        for dirname, dirnames, filenames in os.walk('.'):
+            for filename in filenames:
+                if fnmatch.fnmatch(filename, '*index.??.xml'):
+                    file_ = os.path.join(dirname,filename)
+                    doc = etree.parse(file_)
+                    if doc.xpath(
+            u'/db:article/db:info/db:mediaobject/db:imageobject/db:imagedata',
+                               namespaces=const.XPATH):
+                        self.events.append(Doc(doc,dirname))
+
+    def db_xml(self):
+        db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
+        doclist = db.itemizedlist(db.title(u'Latest Projects'))
+        for ev in self.events:
+            doclist.append(ev.db_xml())
+        return doclist
+
+
+class Doc(object):
+    def __init__(self,doc,link):
+        self.pubdate = doc.xpath(u'/db:article/db:info/db:pubdate',
+                               namespaces=const.XPATH)
+        self.fn = doc.xpath(u'/db:article/db:info/db:author/db:personname/db:firstname',
+                               namespaces=const.XPATH)
+        self.ln = doc.xpath(u'/db:article/db:info/db:author/db:personname/db:surname',
+                               namespaces=const.XPATH)
+        self.title = doc.xpath(u'/db:article/db:info/db:title',
+                               namespaces=const.XPATH)
+        self.photo = doc.xpath(
+            u'/db:article/db:info/db:mediaobject/db:imageobject/db:imagedata',
+                               namespaces=const.XPATH)
+        self.link = link
+
+    def db_xml(self):
+        db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
+        lst = db.listitem(
+            db.link(db.inlinemediaobject(
+                    db.imageobject(
+                        db.imagedata(fileref=self.link+'/'+self.photo[0].attrib['fileref'],
+                                     width="198", depth="111"))),
+                    **{const.XLINK+"href": self.link}),
+            db.para("Project: "+self.title[0].text,role="project"),
+            db.para("Author: "+self.fn[0].text+" "+self.ln[0].text,role="author"),
+            db.link("Read Details",**{const.XLINK+"href": self.link})
+            )
+        return lst
+
+if __name__ == "__main__":
+    for arg in sys.argv[1:]:
+        al = arg.split("=")
+        if al[0] == "lang":
+            lang = al[1]
+        if al[0] == "xptr":
+            argument = al[1]
+
+    latest = Latest(argument)
+    exml = latest.db_xml()
+    sys.stdout.write(etree.tostring(exml,encoding='UTF-8',pretty_print=False))