ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/Reminder/creditcards.py
Revision: 1131
Committed: 2008-12-21T01:48:02-08:00 (16 years, 6 months ago) by douglas
Content type: text/x-python
Original Path: FreeBSDAdmin/Reminder/creditcard.py
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

# User Rev Content
1 douglas 1131 #!/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