From 008eaaae8c6836b2e84b7ec29640d9ded6d57332 Mon Sep 17 00:00:00 2001 From: Fredrik Unger Date: Sun, 11 Nov 2012 17:11:25 +0100 Subject: [PATCH] Enable geolocation of address, adding sorting. 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 | 32 ++++++++++++++++++++++++++++---- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/xinclude/events.py b/xinclude/events.py index 35c79e0..a0fd96a 100755 --- a/xinclude/events.py +++ b/xinclude/events.py @@ -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)) -- 2.30.2