-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathGetBoardMemberLetters.py
90 lines (72 loc) · 2.76 KB
/
GetBoardMemberLetters.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#!/usr/bin/env python
from os import listdir
import sys
from cdrcgi import Controller
class Control(Controller):
SUBMIT = None
SUBTITLE = "Board Member Letters"
def populate_form(self, page):
"""Add links to the letters which were generated.
Pass:
page - HTMLPage object to which we add the links
"""
if self.filepath:
return self.send_file()
legend = f"PDQ Board Member Letters for Job {self.job}"
fieldset = page.fieldset(legend)
ol = page.B.OL()
params = dict(job=self.job)
for name in listdir(self.job_directory):
if name.endswith(".rtf") and not name.startswith("~"):
params["file"] = name
link = page.menu_link(self.script, name, **params)
ol.append(page.B.LI(link))
fieldset.append(ol)
page.form.append(fieldset)
def send_file(self):
"""Send the requested RTF file and exit."""
with open(self.filepath, "rb") as fp:
file_bytes = fp.read()
headers = (
"Content-Type: application/rtf;charset=utf-8",
f"Content-Length: {len(file_bytes)}",
f"Content-Disposition: attachment; filename={self.filename}",
)
for header in headers:
sys.stdout.buffer.write(header.encode("utf-8"))
sys.stdout.buffer.write(b"\n")
sys.stdout.buffer.write(b"\n")
sys.stdout.buffer.write(file_bytes)
sys.exit(0)
@property
def filename(self):
"""Name of the RTF file to send back to the browser."""
return self.fields.getvalue("file")
@property
def filepath(self):
"""Location of the RTF file to return."""
if not hasattr(self, "_filepath"):
if self.filename is None:
self._filepath = None
else:
self._filepath = f"{self.job_directory}/{self.filename}"
return self._filepath
@property
def job(self):
"""Job for which we will be showing board member letters."""
if not hasattr(self, "_job"):
self._job = self.fields.getvalue("job")
if not self._job:
self.bail("Missing job parameter")
return self._job
@property
def job_directory(self):
"""Location of the generated board member letters."""
if not hasattr(self, "_job_directory"):
mailers = f"{self.session.tier.basedir}/Output/Mailers"
directory = f"{mailers}/Job{self.job}-r"
self._job_directory = directory.replace("\\", "/")
return self._job_directory
if __name__ == "__main__":
"""Don't execute the script if we're loaded as a module."""
Control().run()