Commit df573134e81d06b3134bd6cf96062d397a121d44

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

modified initdb_from_csv.py to create fake students if no csv is provided

Showing 1 changed file with 41 additions and 17 deletions   Show diff stats
initdb_from_csv.py
1 #!/usr/bin/env python3 1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*- 2 # -*- coding: utf-8 -*-
3 3
  4 +import sys
4 import sqlite3 5 import sqlite3
5 import csv 6 import csv
6 import argparse 7 import argparse
@@ -10,6 +11,7 @@ import string @@ -10,6 +11,7 @@ import string
10 import re 11 import re
11 12
12 # SIIUE names have alien strings like "(TE)" and are sometimes capitalized 13 # SIIUE names have alien strings like "(TE)" and are sometimes capitalized
  14 +# We remove them so that students dont keep asking what it means
13 def fixname(s): 15 def fixname(s):
14 return string.capwords(re.sub('\(.*\)', '', s).strip()) 16 return string.capwords(re.sub('\(.*\)', '', s).strip())
15 17
@@ -47,25 +49,47 @@ sql_cmd = '''PRAGMA foreign_keys = ON; @@ -47,25 +49,47 @@ sql_cmd = '''PRAGMA foreign_keys = ON;
47 # --------- Parse command line options ----------- 49 # --------- Parse command line options -----------
48 argparser = argparse.ArgumentParser(description='Create new database from a CSV file (SIIUE format)') 50 argparser = argparse.ArgumentParser(description='Create new database from a CSV file (SIIUE format)')
49 argparser.add_argument('--db', default='students.db', type=str, help='database filename') 51 argparser.add_argument('--db', default='students.db', type=str, help='database filename')
50 -argparser.add_argument('csvfile', type=str, help='CSV filename') 52 +argparser.add_argument('csvfile', nargs='?', type=str, default='', help='CSV filename')
51 args = argparser.parse_args() 53 args = argparser.parse_args()
52 54
  55 +db_exists = os.path.exists(args.db)
53 56
54 -# --------- Parse CSV --------  
55 -with open(args.csvfile, encoding='iso-8859-1') as csvfile: # SIIUE format  
56 - reader = csv.DictReader(csvfile, delimiter=';', quotechar='"')  
57 - db_exists = os.path.exists(args.db) 57 +with sqlite3.connect(args.db) as c:
  58 + # use existing or create new database schema
  59 + if db_exists:
  60 + print('-> Using previous database "{}"...'.format(args.db))
  61 + else:
  62 + print('-> Creating new database "{}"...'.format(args.db))
  63 + c.executescript(sql_cmd)
58 64
59 - with sqlite3.connect(args.db) as c:  
60 - if not db_exists:  
61 - print('Creating new database "{}"...'.format(args.db))  
62 - c.executescript(sql_cmd)  
63 - c.execute('INSERT INTO students VALUES (?,?,?)', ('0', 'Professor', ''))  
64 - else:  
65 - print('Database "{}" already exists.'.format(args.db)) 65 + # get students
  66 + if args.csvfile:
  67 + csvfile = open(args.csvfile, encoding='iso-8859-1')
  68 + print('-> Using students from CSV file "{}"...'.format(args.csvfile))
  69 + students = genstudent(csv.DictReader(csvfile, delimiter=';', quotechar='"'))
  70 + else:
  71 + print('-> Creating fake students numbered 1 to 5...'.format(args.csvfile))
  72 + students = [
  73 + ('1', 'Student1', ''),
  74 + ('2', 'Student2', ''),
  75 + ('3', 'Student3', ''),
  76 + ('4', 'Student4', ''),
  77 + ('5', 'Student5', '')
  78 + ]
66 79
67 - print('Inserting students into database... ', end='')  
68 - try:  
69 - c.executemany('INSERT INTO students VALUES (?,?,?)', genstudent(reader))  
70 - except sqlite3.IntegrityError:  
71 - print('\rStudents already in the database. Aborting!!!') 80 + # insert students into database
  81 + print('-> Inserting students into database... ')
  82 + try:
  83 + c.executemany('INSERT INTO students VALUES (?,?,?)', students)
  84 + except sqlite3.IntegrityError:
  85 + print('** ERROR ** Students already exist. Aborted!')
  86 + sys.exit(1)
  87 +
  88 + # insert professor into database
  89 + print('-> Inserting professor (id=0)...')
  90 + try:
  91 + c.execute('INSERT INTO students VALUES (?,?,?)', ('0', 'Professor', ''))
  92 + except sqlite3.IntegrityError:
  93 + print('** WARNING ** Professor already exists.')
  94 +
  95 +print('Done.')