Commit 305612ce0b26292dd36032fe3f08d483321c7fe7

Authored by Miguel Barão
1 parent 9eecad27
Exists in master and in 1 other branch dev

- simplified several things in initdb

Showing 1 changed file with 13 additions and 29 deletions   Show diff stats
initdb.py
... ... @@ -5,9 +5,7 @@ import csv
5 5 import argparse
6 6 import re
7 7 import string
8   -from sys import exit
9 8 from concurrent.futures import ThreadPoolExecutor
10   -import asyncio
11 9  
12 10 # installed packages
13 11 import bcrypt
... ... @@ -17,27 +15,6 @@ import sqlalchemy as sa
17 15 from models import Base, Student
18 16  
19 17  
20   -# replace password by hash for a single student
21   -def hashpw(student):
22   - pw = student.get('pw', student['uid']).encode('utf-8')
23   - print('.', end='', flush=True)
24   - hashed_pw = bcrypt.hashpw(pw, bcrypt.gensalt())
25   - student['pw'] = hashed_pw
26   -
27   -
28   -async def hash_all_passwords(executor, students):
29   - loop = asyncio.get_event_loop()
30   - tasks = [loop.run_in_executor(executor, hashpw, s) for s in students]
31   - await asyncio.wait(tasks) # block until all tasks are done
32   - print()
33   -
34   -# ===========================================================================
35   -# SIIUE names have alien strings like "(TE)" and are sometimes capitalized
36   -# We remove them so that students dont keep asking what it means
37   -def fix(name):
38   - return string.capwords(re.sub('\(.*\)', '', name).strip())
39   -
40   -
41 18 # ===========================================================================
42 19 # Parse command line options
43 20 def parse_commandline_arguments():
... ... @@ -85,6 +62,8 @@ def parse_commandline_arguments():
85 62  
86 63  
87 64 # ===========================================================================
  65 +# SIIUE names have alien strings like "(TE)" and are sometimes capitalized
  66 +# We remove them so that students dont keep asking what it means
88 67 def get_students_from_csv(filename):
89 68 try:
90 69 csvreader = csv.DictReader(open(filename, encoding='iso-8859-1'), delimiter=';', quotechar='"', skipinitialspace=True)
... ... @@ -94,13 +73,21 @@ def get_students_from_csv(filename):
94 73 else:
95 74 students = [{
96 75 'uid': s['N.º'],
97   - 'name': fix(s['Nome'])
  76 + 'name': string.capwords(re.sub('\(.*\)', '', s['Nome']).strip())
98 77 } for s in csvreader]
99 78  
100 79 return students
101 80  
102 81  
103 82 # ===========================================================================
  83 +# replace password by hash for a single student
  84 +def hashpw(student):
  85 + print('.', end='', flush=True)
  86 + pw = student.get('pw', student['uid']).encode('utf-8')
  87 + student['pw'] = bcrypt.hashpw(pw, bcrypt.gensalt())
  88 +
  89 +
  90 +# ===========================================================================
104 91 def insert_students_into_db(session, students):
105 92 try:
106 93 # --- start db session ---
... ... @@ -167,10 +154,8 @@ if __name__=='__main__':
167 154 for s in students:
168 155 s['pw'] = args.pw
169 156  
170   - executor = ThreadPoolExecutor()
171   - event_loop = asyncio.get_event_loop()
172   - event_loop.run_until_complete(hash_all_passwords(executor, students))
173   - event_loop.close()
  157 + with ThreadPoolExecutor() as executor:
  158 + executor.map(hashpw, students)
174 159  
175 160 # --- database stuff
176 161 print(f'Using database: ', args.db)
... ... @@ -183,7 +168,6 @@ if __name__=='__main__':
183 168 print(f'Inserting {len(students)}')
184 169 insert_students_into_db(session, students)
185 170  
186   - # print(args.update)
187 171 for s in args.update:
188 172 print(f'Updating password of: {s}')
189 173 u = session.query(Student).get(s)
... ...