#!/usr/bin/env python3 # -*- coding: utf-8 -*- import csv import argparse import re import string import sys from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from models import Base, Student, Test, Question # SIIUE names have alien strings like "(TE)" and are sometimes capitalized # We remove them so that students dont keep asking what it means def fix(name): return string.capwords(re.sub('\(.*\)', '', name).strip()) # =========================================================================== # Parse command line options argparser = argparse.ArgumentParser(description='Create new database from a CSV file (SIIUE format)') argparser.add_argument('--db', default='students.db', type=str, help='database filename') argparser.add_argument('csvfile', nargs='?', type=str, default='', help='CSV filename') args = argparser.parse_args() # =========================================================================== engine = create_engine('sqlite:///{}'.format(args.db), echo=False) # Criate schema if needed Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) # --- start session --- try: session = Session() # add administrator and fake student accounts session.add_all([ Student(id='0', name='Professor', password=''), Student(id='student1', name='Student1', password=''), Student(id='student2', name='Student2', password=''), Student(id='student3', name='Student3', password=''), Student(id='student4', name='Student4', password=''), Student(id='student5', name='Student5', password=''), ]) # add enrolled students from csv file if args.csvfile: try: csvreader = csv.DictReader(open(args.csvfile, encoding='iso-8859-1'), delimiter=';', quotechar='"') except EnvironmentError: print('CSV file "{0}" not found!'.format(args.csvfile)) else: session.add_all([Student(id=r['N.º'], name=fix(r['Nome']), password='') for r in csvreader]) session.commit() except Exception: session.rollback() print('Erro: Dados já existentes na base de dados?') sys.exit(1) else: n = session.query(Student).count() print('Base de dados inicializada com {} utilizadores.'.format(n)) # --- end session ---