ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/Reminder/creditcard.py
Revision: 1131
Committed: 2008-12-21T01:48:02-08:00 (16 years, 6 months ago) by douglas
Content type: text/x-python
File size: 2511 byte(s)
Log Message:
I, for one, welcome our new Google overlords. At least their Calendar integration with my G1.

File Contents

# Content
1 #!/usr/local/bin/python
2 # Credit Card
3 #
4 # Douglas Thrift
5 #
6 # $Id$
7
8 import atom
9 import base64
10 from ConfigParser import SafeConfigParser
11 from datetime import date, timedelta
12 import gdata.calendar
13 import gdata.calendar.service
14 import optparse
15 import os.path
16
17 def decode(string):
18 return base64.b64decode(string.decode('rot13'))
19
20 if __name__ == '__main__':
21 parser = optparse.OptionParser()
22
23 parser.add_option('-D', '--debug', action = 'store_true', dest = 'debug')
24
25 options = parser.parse_args()[0]
26 parser = SafeConfigParser()
27 service = gdata.calendar.service.CalendarService()
28
29 parser.read([os.path.expanduser('~/.creditcard')])
30 service.ClientLogin(parser.get('google', 'username'), decode(parser.get('google', 'password')))
31
32 for section in filter(lambda section: section != 'google', parser.sections()):
33 exec 'import %s' % section
34 exec "bank = %s.Bank(parser.get(section, 'username'), decode(parser.get(section, 'password')), options.debug)" % section
35
36 for account in parser.get(section, 'accounts').split(','):
37 name, account = account.rsplit(' ', 1)
38 due = bank(account)
39 today = date.today()
40
41 if due <= today:
42 continue
43
44 title = '%s Due' % name
45 query = gdata.calendar.service.CalendarEventQuery('default', 'private', 'full', '"%s"' % title)
46 query.start_min = str(today)
47 events = service.CalendarQuery(query).entry
48
49 if events == []:
50 event = gdata.calendar.CalendarEventEntry()
51 event.title = atom.Title(text = title)
52 event.transparency = gdata.calendar.Transparency()
53 event.transparency.value = 'TRANSPARENT'
54 event.visibility = gdata.calendar.Visibility()
55 event.visibility.value = 'PRIVATE'
56
57 event.when.append(gdata.calendar.When(start_time = str(due), end_time = str(due + timedelta(1))))
58 event.when[0].reminder.append(gdata.calendar.Reminder(minutes = 10))
59
60 service.InsertEvent(event, '/calendar/feeds/default/private/full')
61 else:
62 for index, event in enumerate(filter(lambda event: event.title.text == title, events)):
63 if index == 0:
64 event.transparency.value = 'TRANSPARENT'
65 event.visibility.value = 'PRIVATE'
66 event.when[0].start_time = str(due)
67 event.when[0].end_time = str(due + timedelta(1))
68
69 if event.when[0].reminder != []:
70 event.when[0].reminder[0].minutes = str(10)
71 else:
72 event.when[0].reminder.append(gdata.calendar.Reminder(minutes = 10))
73
74 service.UpdateEvent(event.GetEditLink().href, event)
75 else:
76 service.DeleteEvent(event.GetEditLink().href)

Properties

Name Value
svn:executable *
svn:keywords Id