ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/repos/FreeBSDAdmin/Reminder/shellmc.py
Revision: 1178
Committed: 2009-05-17T14:30:08-07:00 (16 years, 1 month ago) by douglas
Content type: text/x-python
File size: 2450 byte(s)
Log Message:
Checkpoint the current state of the code.

File Contents

# User Rev Content
1 douglas 1145 # Shell MasterCard
2 douglas 1131 #
3     # Douglas Thrift
4     #
5     # $Id$
6    
7 douglas 1178 from __future__ import with_statement
8     from ClientForm import FormParser
9     import common
10 douglas 1131 from datetime import datetime
11 douglas 1178 from mechanize import LinkNotFoundError
12 douglas 1131 import re
13     import website
14    
15 douglas 1178 class _FormParser(FormParser):
16     def __init__(self, *args, **kwargs):
17     FormParser.__init__(self, *args, **kwargs)
18    
19     def do_input(self, attributes):
20     self.__enable(attributes)
21     FormParser.do_input(self, attributes)
22    
23     def start_select(self, attributes):
24     self.__name = None
25    
26     for name, value in attributes:
27     if name == 'name':
28     self.__name = value
29    
30     self.__enable(attributes)
31     FormParser.start_select(self, attributes)
32    
33     def end_select(self):
34     if self.__name == 'download_date':
35     self.do_option([('value', 'Activity Since Last Statement')])
36     elif self.__name == 'download_format':
37     self.do_option([('value', 'QIF')])
38    
39     FormParser.end_select(self)
40    
41     def __enable(self, attributes):
42     try:
43     attributes.remove(('disabled', 'disabled'))
44     except ValueError:
45     pass
46    
47     class Bank(website.Website, common.Bank):
48 douglas 1145 PAYMENT_DUE = re.compile(r'[A-Z][a-z]{2}\. \d{1,2}, \d{4}')
49    
50 douglas 1131 def __init__(self, username, password, debug):
51 douglas 1178 website.Website.__init__(self, debug, factory = website.Factory(_FormParser))
52 douglas 1131
53 douglas 1145 self.browser.open('http://www.shellmc.accountonline.com/')
54 douglas 1131 self.browser.select_form(name = 'LOGIN')
55    
56     self.browser['USERNAME'] = username
57     self.browser['PASSWORD'] = password
58    
59     self.browser.submit()
60    
61 douglas 1178 def __del__(self):
62     try:
63     self.browser.follow_link(text_regex = 'Log Out')
64     except (AttributeError, LinkNotFoundError):
65     pass
66    
67     def download(self, account):
68     try:
69     balance = self.Soup(self._follow_link(text_regex = account)).find(attrs = {'class': 'curr_balance'}).string
70    
71     self._follow_link(text_regex = 'View/Download Your Statement')
72     self.browser.select_form(name = 'download_statement')
73    
74     self.browser.form.action = 'https://www.accountonline.com/cards/svc/StatementDownload.do?dateRange=unbilled&viewType=qif'
75     self.browser['download_date'] = ['Activity Since Last Statement']
76     self.browser['download_format'] = ['QIF']
77    
78     return 'unbilled.qif', self._submit().read(), balance
79     finally:
80     self._back()
81    
82 douglas 1145 def due(self, account):
83 douglas 1131 try:
84 douglas 1178 return datetime.strptime(self.PAYMENT_DUE.search(self.Soup(self._follow_link(text_regex = account)).find(text = re.compile('Payment Due')).findNext(text = self.PAYMENT_DUE)).group(0), '%b. %d, %Y').date()
85 douglas 1131 finally:
86 douglas 1178 self._back()

Properties

Name Value
svn:keywords Id
svn:mergeinfo