[42132d7] | 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() |
---|