1 | #!/usr/bin/env python |
---|
2 | |
---|
3 | import csv |
---|
4 | import datetime |
---|
5 | import os.path |
---|
6 | |
---|
7 | from mechanize import Browser |
---|
8 | |
---|
9 | import downloader |
---|
10 | import sapweb |
---|
11 | |
---|
12 | class RfpDownloader(object): |
---|
13 | def __init__(self, br=None): |
---|
14 | if not br: |
---|
15 | br = Browser() |
---|
16 | self.br = br |
---|
17 | self._make_dirs() |
---|
18 | self.csrftoken = None |
---|
19 | |
---|
20 | def _make_dirs(self, ): |
---|
21 | label = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M') |
---|
22 | basepath = os.path.dirname(downloader.pathtpl) |
---|
23 | self.dirname = os.path.join(basepath, label+"-rfps") |
---|
24 | self.docs_dir = os.path.join(self.dirname, 'docs') |
---|
25 | os.makedirs(self.docs_dir) # makes all parents, so dirname too |
---|
26 | |
---|
27 | def getRfpsCsv(self, ): |
---|
28 | self.br.open(downloader.baseurl + 'vouchers/generate/rfps.csv') |
---|
29 | if self.br.viewing_html(): |
---|
30 | print self.br.response().get_data() |
---|
31 | assert not self.br.viewing_html() |
---|
32 | downloaded_rfps_name = os.path.join(self.dirname, "inbound.csv") |
---|
33 | data = self.br.response().get_data() |
---|
34 | with open(downloaded_rfps_name, 'w') as fd: |
---|
35 | fd.write(data) |
---|
36 | return downloaded_rfps_name |
---|
37 | |
---|
38 | def _manage_csrf(self, ): |
---|
39 | if self.csrftoken: return |
---|
40 | cookiejar = self.br._ua_handlers["_cookies"].cookiejar |
---|
41 | for cookie in cookiejar: |
---|
42 | if cookie.name == 'csrftoken': |
---|
43 | assert self.csrftoken == None |
---|
44 | self.csrftoken = cookie.value |
---|
45 | self.br.addheaders.append(('X-CSRFToken', self.csrftoken)) |
---|
46 | |
---|
47 | def putRfpsCsv(self, results): |
---|
48 | upload_name = os.path.join(self.dirname, "outbound.csv") |
---|
49 | with open(upload_name, 'w') as fd: |
---|
50 | writer = csv.DictWriter(fd, ['id', 'rfp_number'], extrasaction='ignore') |
---|
51 | writer.writeheader() |
---|
52 | for result in results: |
---|
53 | writer.writerow(result) |
---|
54 | with open(upload_name, 'r') as fd: |
---|
55 | data = fd.read() |
---|
56 | self._manage_csrf() |
---|
57 | self.br.open(downloader.baseurl + 'vouchers/generate/rfps.csv', data) |
---|
58 | print self.br.response().get_data() |
---|
59 | assert not self.br.viewing_html() |
---|
60 | |
---|
61 | def process(self): |
---|
62 | downloader.login2Admin(self.br) |
---|
63 | rfp_name = self.getRfpsCsv() |
---|
64 | with open(rfp_name, 'r') as rfps: |
---|
65 | created = sapweb.create_rfps(rfps, self.docs_dir) |
---|
66 | self.putRfpsCsv(created) |
---|
67 | |
---|
68 | if __name__ == '__main__': |
---|
69 | d = RfpDownloader() |
---|
70 | d.process() |
---|