20
20
# todo: re-implement with saml auth and requests, as alternative to selenium
21
21
22
22
23
- __version__ = "0.2.0 "
23
+ __version__ = "0.2.1 "
24
24
25
25
# timeout for selenium waits, in seconds
26
26
TIMEOUT = 10
@@ -60,7 +60,7 @@ def get_parser() -> ArgumentParser:
60
60
# selenium cookies
61
61
parser .add_argument ("--cookie-file" , type = Path , default = DEFAULT_ARG_COOKIE_FILE )
62
62
parser .add_argument (
63
- "--no-save-cookies" , dest = "do_save_cookies " , action = "store_false"
63
+ "--no-save-cookies" , dest = "save_cookies " , action = "store_false"
64
64
)
65
65
parser .add_argument (
66
66
"--delete-cookies" ,
@@ -81,6 +81,20 @@ def get_parser() -> ArgumentParser:
81
81
return parser
82
82
83
83
84
+ class Args :
85
+ username : str
86
+ password : str
87
+ exam_number : str
88
+ submit_url : str
89
+ file : Path
90
+ dry_run : bool
91
+ cookie_file : Path
92
+ save_cookies : bool
93
+ delete_cookies : bool
94
+ headless : bool
95
+ chromium : bool
96
+
97
+
84
98
def save_cookies (driver : WebDriver , fp : Path ):
85
99
cookies = driver .get_cookies ()
86
100
with open (fp , "w" ) as f :
@@ -123,7 +137,9 @@ def upload(driver: WebDriver, file_name: str, dry_run: bool):
123
137
input_checkbox .submit ()
124
138
125
139
126
- def ensure_details (current : str , prompt : Optional [str ] = None , hide : bool = False ) -> str :
140
+ def ensure_details (
141
+ current : str , prompt : Optional [str ] = None , hide : bool = False
142
+ ) -> str :
127
143
if current is not None :
128
144
return current
129
145
@@ -151,7 +167,7 @@ def do(
151
167
# username/password login page
152
168
if driver .current_url == URL_LOGIN :
153
169
print ("Logging in.." )
154
- username = ensure_details (username , ' Enter username: ' )
170
+ username = ensure_details (username , " Enter username: " )
155
171
password = ensure_details (password , hide = True )
156
172
login (driver , username , password )
157
173
wait .until (
@@ -160,7 +176,7 @@ def do(
160
176
# exam number login page
161
177
elif driver .current_url == URL_EXAM_NUMBER :
162
178
print ("Entering exam number.." )
163
- exam_number = ensure_details (exam_number , ' Enter exam number: ' )
179
+ exam_number = ensure_details (exam_number , " Enter exam number: " )
164
180
enter_exam_number (driver , exam_number )
165
181
wait .until (ec .url_to_be (submit_url ))
166
182
# logged in, upload page
@@ -191,38 +207,27 @@ def resolve_submit_url(submit_url: str) -> str:
191
207
def main ():
192
208
# load arguments
193
209
parser = get_parser ()
194
- args = parser .parse_args ()
195
-
196
- username : str = args .username
197
- password : str = args .password
198
- exam_number : str = args .exam_number
199
- submit_url : str = args .submit_url
200
- fp : Path = args .file
201
- dry_run : bool = args .dry_run
202
- cookie_path : Path = args .cookie_file
203
- do_save_cookies : bool = args .do_save_cookies
204
- delete_cookies : bool = args .delete_cookies
205
- headless : bool = args .headless
206
- chromium : bool = args .chromium
210
+ args = Args ()
211
+ parser .parse_args (namespace = args )
207
212
208
213
# check zip to be uploaded exists
209
- if not fp .is_file ():
210
- print (f"File doesn't exist '{ fp } '." )
214
+ if not args . file .is_file ():
215
+ print (f"File doesn't exist '{ args . file } '." )
211
216
sys .exit (1 )
212
- print (f"Found file '{ fp } '." )
213
- file_name = str (fp .resolve ())
217
+ print (f"Found file '{ args . file } '." )
218
+ file_name = str (args . file .resolve ())
214
219
215
220
# verify arguments
216
- submit_url = resolve_submit_url (submit_url )
221
+ submit_url = resolve_submit_url (args . submit_url )
217
222
218
223
# webdriver setup
219
224
# options
220
225
driver_options = webdriver .ChromeOptions ()
221
- if headless :
226
+ if args . headless :
222
227
driver_options .add_argument ("--headless" )
223
228
224
229
# auto installer
225
- if chromium :
230
+ if args . chromium :
226
231
chrome_type = ChromeType .CHROMIUM
227
232
else :
228
233
chrome_type = ChromeType .GOOGLE
@@ -233,26 +238,26 @@ def main():
233
238
driver .implicitly_wait (TIMEOUT )
234
239
235
240
# load cookies
236
- if delete_cookies :
237
- cookie_path .unlink (missing_ok = True )
238
- elif do_save_cookies :
239
- load_cookies (driver , cookie_path )
241
+ if args . delete_cookies :
242
+ args . cookie_file .unlink (missing_ok = True )
243
+ elif args . save_cookies :
244
+ load_cookies (driver , args . cookie_file )
240
245
241
246
# run
242
247
do (
243
248
driver = driver ,
244
249
submit_url = submit_url ,
245
- username = username ,
246
- password = password ,
247
- exam_number = exam_number ,
250
+ username = args . username ,
251
+ password = args . password ,
252
+ exam_number = args . exam_number ,
248
253
file_name = file_name ,
249
- dry_run = dry_run ,
254
+ dry_run = args . dry_run ,
250
255
)
251
256
252
257
# save cookies
253
- if do_save_cookies :
258
+ if args . save_cookies :
254
259
print ("Saving cookies." )
255
- save_cookies (driver , cookie_path )
260
+ save_cookies (driver , args . cookie_file )
256
261
257
262
258
263
if __name__ == "__main__" :
0 commit comments