Enable geolocation of address, adding sorting.
authorFredrik Unger <fred@tree.se>
Sun, 11 Nov 2012 16:11:25 +0000 (17:11 +0100)
committerFredrik Unger <fred@tree.se>
Sun, 11 Nov 2012 16:11:25 +0000 (17:11 +0100)
Enabled addition of Organization with Address from the Location field.
This information is geocoded and if found displayed.

Sorting was added to sort event objects, change from the earlier
list of event dictionaries.
Pretty printing turne off not to preformat docbook addresses.

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))