#!/usr/bin/env python import csv import datetime import os.path from mechanize import Browser import downloader import sapweb class RfpDownloader(object): def __init__(self, br=None): if not br: br = Browser() self.br = br self._make_dirs() self.csrftoken = None def _make_dirs(self, ): label = datetime.datetime.now().strftime('%Y-%m-%d-%H-%M') basepath = os.path.dirname(downloader.pathtpl) self.dirname = os.path.join(basepath, label+"-rfps") self.docs_dir = os.path.join(self.dirname, 'docs') os.makedirs(self.docs_dir) # makes all parents, so dirname too def getRfpsCsv(self, ): self.br.open(downloader.baseurl + 'vouchers/generate/rfps.csv') if self.br.viewing_html(): print self.br.response().get_data() assert not self.br.viewing_html() downloaded_rfps_name = os.path.join(self.dirname, "inbound.csv") data = self.br.response().get_data() with open(downloaded_rfps_name, 'w') as fd: fd.write(data) return downloaded_rfps_name def _manage_csrf(self, ): if self.csrftoken: return cookiejar = self.br._ua_handlers["_cookies"].cookiejar for cookie in cookiejar: if cookie.name == 'csrftoken': assert self.csrftoken == None self.csrftoken = cookie.value self.br.addheaders.append(('X-CSRFToken', self.csrftoken)) def putRfpsCsv(self, results): upload_name = os.path.join(self.dirname, "outbound.csv") with open(upload_name, 'w') as fd: writer = csv.DictWriter(fd, ['id', 'rfp_number'], extrasaction='ignore') writer.writeheader() for result in results: writer.writerow(result) with open(upload_name, 'r') as fd: data = fd.read() self._manage_csrf() self.br.open(downloader.baseurl + 'vouchers/generate/rfps.csv', data) print self.br.response().get_data() assert not self.br.viewing_html() def process(self): downloader.login2Admin(self.br) rfp_name = self.getRfpsCsv() with open(rfp_name, 'r') as rfps: created = sapweb.create_rfps(rfps, self.docs_dir) self.putRfpsCsv(created) if __name__ == '__main__': d = RfpDownloader() d.process()