Enable geolocation of address, adding sorting.
[treecutter.git] / xinclude / events.py
index 35c79e0ca2894bb51b3c62901755a694399e2c7a..a0fd96a478826b4595401075e15c59508926a8eb 100755 (executable)
@@ -12,6 +12,9 @@ from lxml import etree
 from lxml.builder import ElementMaker
 import sys
 import re
+
+from address import Address
+from contact import Organization
 from treecutter import constants as const
 
 
@@ -61,8 +64,14 @@ class Events(object):
                     fev.append(ev)
         self.events = fev
 
-    def sort(self,order):
-        sortedevents = sorted(events, key=lambda k: k['dtstart'], reverse=True)
+    def geocode(self):
+        for ev in self.events:
+            ev.geocode()
+
+    def sorted(self,order):
+        if order == 'start':
+            self.events.sort(key=lambda x: x.start, reverse=True)
+
 
     def db_xml(self):
         db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
@@ -79,8 +88,21 @@ class Event(object):
         self.end = ev['dtend']
         self.summary = ev['summary']
         self.location = ev['location']
+        self.org = None
         self.description = ev['description']
 
+    def geocode(self):
+        addrlist = self.location.split(',')
+        addrfmt = "org,street,postcode,city"
+        adict = addrfmt.split(',')
+        argdict = dict(zip(adict,addrlist))
+        self.org = Organization(argdict['org'])
+        del argdict['org']
+        addr = Address(**argdict)
+        self.org.add_address(addr)
+        addr.geocode()
+
+
     def db_xml(self):
         db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
         # Build paragraphs from the description
@@ -97,7 +119,7 @@ class Event(object):
                         ),
                     db.varlistentry(
                         db.term("Plats"),
-                        db.listitem(db.para(self.location))
+                        db.listitem(db.para(self.org.db_xml()))
                         ),
                     db.varlistentry(
                         db.term("Beskrivning"),
@@ -122,9 +144,11 @@ if __name__ == "__main__":
     uri = urlparse(uristr)
     events = Events(uri)
     events.filter(query)
+    events.geocode()
+    events.sorted('start')
     exml = events.db_xml()
     #clean_db(exml)
 
     #print(etree.tostring(cxml, pretty_print=True))
     #sys.stdout.write(out.encode('utf-8'))
-    sys.stdout.write(etree.tostring(exml,encoding='UTF-8',pretty_print=True))
+    sys.stdout.write(etree.tostring(exml,encoding='UTF-8',pretty_print=False))