2 # -*- coding: utf-8 -*-
4 from getpass import getpass
5 from dateutil.tz import *
6 from datetime import datetime
7 from dateutil.parser import parse
10 from urlparse import urlparse
11 from lxml import etree
12 from lxml.builder import ElementMaker
15 from treecutter import constants as const
19 def __init__(self, uri):
23 if uri.scheme == 'file':
24 with open(self.uri.path, 'r') as f:
27 if uri.scheme == 'http':
29 print "http not yet implemented"
30 if uri.scheme == 'https':
32 headers = {"User-Agent": "Mozilla/5.0",
33 "Content-Type": "text/xml",
36 headers['authorization'] = "Basic %s" % (("%s:%s" % (self.uri.username, pw)).encode('base64')[:-1])
37 handle = httplib.HTTPSConnection(self.uri.hostname,self.uri.port)
38 res = handle.request('GET', self.uri.path, "", headers)
39 r = handle.getresponse()
41 print "Failed to connect! Wrong Password ?"
45 headers = ['dtstart','summary','location','description']
46 for cal in vobject.readComponents(self.data):
47 for ev in cal.vevent_list:
51 for p in ev.getChildren():
52 details[p.name.lower()] = p.value
53 self.events.append(Event(details))
55 def filter(self,query):
56 (key, name) = query.split(':')
59 for ev in self.events:
60 if ev.start.year == int(name):
65 sortedevents = sorted(events, key=lambda k: k['dtstart'], reverse=True)
68 db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
69 evlist = db.variablelist(db.title(u'Stammtisch träffar'),
71 for ev in self.events:
72 evlist.append(ev.db_xml())
77 def __init__(self,ev):
78 self.start = ev['dtstart']
79 self.end = ev['dtend']
80 self.summary = ev['summary']
81 self.location = ev['location']
82 self.description = ev['description']
85 db = ElementMaker(namespace=const.DB_NS, nsmap=const.NSMAP)
86 # Build paragraphs from the description
87 paras = db.listitem(role="description")
88 for p in re.split('\n\n',unicode(self.description)):
89 paras.append(db.para(p,role="desc"))
91 lst = db.varlistentry(
92 db.term(db.date(self.start.strftime('%Y %b %d'),role='calendar')),
93 db.listitem(db.para(self.summary),db.variablelist(
96 db.listitem(db.para(self.start.strftime('%H:%M')))
100 db.listitem(db.para(self.location))
103 db.term("Beskrivning"),
111 # ln = db.link("Text",**{XLINK+"href": "https://"})
113 if __name__ == "__main__":
114 for arg in sys.argv[1:]:
121 (uristr,query) = argument.split('|')
122 uri = urlparse(uristr)
125 exml = events.db_xml()
128 #print(etree.tostring(cxml, pretty_print=True))
129 #sys.stdout.write(out.encode('utf-8'))
130 sys.stdout.write(etree.tostring(exml,encoding='UTF-8',pretty_print=True))