source: client/rfp.py @ 45a52c6

Last change on this file since 45a52c6 was 42132d7, checked in by Alex Dehnert <adehnert@…>, 11 years ago

Working RFP downloader and creator

  • Property mode set to 100755
File size: 2.3 KB
Line 
1#!/usr/bin/env python
2
3import csv
4import datetime
5import os.path
6
7from mechanize import Browser
8
9import downloader
10import sapweb
11
12class 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
68if __name__ == '__main__':
69    d = RfpDownloader()
70    d.process()
Note: See TracBrowser for help on using the repository browser.