Skip to content
Snippets Groups Projects
Commit 69ef3dbb authored by Millian Poquet's avatar Millian Poquet
Browse files

realist: refactor, lowercase

parent 0192f55d
No related branches found
No related tags found
No related merge requests found
......@@ -9,7 +9,7 @@
let pkgs = nixpkgs.legacyPackages.${system};
in rec {
packages = import ./default.nix { inherit pkgs; };
apps.xls-to-csv = flake-utils.lib.mkApp { drv = packages.ut3_survival; exePath = "/bin/xls-to-csv"; };
apps.realist-students-xls2csv = flake-utils.lib.mkApp { drv = packages.ut3_survival; exePath = "/bin/realist-students-xls2csv"; };
defaultPackage = packages.ut3_survival;
}
);
......
......@@ -28,4 +28,4 @@ dependencies = [
]
[project.scripts]
xls-to-csv = "ut3_survival.cmd.xls_to_csv:main"
realist-students-xls2csv = "ut3_survival.cmd.realist_students_xls_to_csv:main"
......@@ -9,8 +9,9 @@ from ut3_survival import realist
@click.command()
@click.argument('xls_file', required=True, nargs=-1)
@click.option('-o', '--output', default=None, help='If set, parsed students are written as CSV to this file.')
def main(xls_file, output):
students = realist.read_parse_several_xls(xls_file)
@click.option('--lower', is_flag=True, show_default=True, default=False, help='Sets text data to lowercase.')
def main(xls_file, output, lower):
students = realist.read_parse_several_xls(xls_file, lower)
output_file = sys.stdout
if output is not None:
......
......@@ -12,34 +12,51 @@ import xlrd
student_columns = ['id', 'lastname', 'firstname', 'email', 'group']
StudentEntry = namedtuple('StudentEntry', student_columns)
def read_parse_xls(xls_filename: str) -> [StudentEntry]:
def read_parse_xls(xls_filename: str, lower: bool=None) -> [StudentEntry]:
'''Read and parse a XLS file into a list of students.'''
set_lowercase = False
if lower is not None:
if not isinstance(lower, bool):
raise TypeError(f'lower is not a bool (type=type{type(lower)})')
set_lowercase = lower
students_xls = xlrd.open_workbook(xls_filename, logfile=sys.stderr)
group_names = students_xls.sheet_names()
group_names.pop(0) # first XLS sheet is useless
students = []
students = []
for group_name in group_names:
sheet = students_xls.sheet_by_name(group_name)
if sheet.cell_value(1,0) != "GROUPE : " + group_name:
raise AssertionError("SGCE's xls format has changed")
for row in range(3, sheet.nrows):
students.append(StudentEntry(
entry = StudentEntry(
id=sheet.cell_value(row,0),
lastname=sheet.cell_value(row,1),
firstname=sheet.cell_value(row,2),
email=sheet.cell_value(row,3),
group=group_name,
))
)
if set_lowercase:
entry = StudentEntry(
id=entry.id,
lastname=entry.lastname.lower(),
firstname=entry.firstname.lower(),
email=entry.email.lower(),
group=entry.group.lower(),
)
students.append(entry)
return students
def read_parse_several_xls(xls_filenames: [str]) -> [StudentEntry]:
def read_parse_several_xls(xls_filenames: [str], lower: bool=None) -> [StudentEntry]:
'''read_parse_xls wrapper when several files are to be used.'''
all_students = []
for xls_filename in xls_filenames:
try:
students = read_parse_xls(xls_filename)
students = read_parse_xls(xls_filename, lower)
all_students.extend(students)
except Exception as exception:
raise RuntimeError(f"could not read/parse xls file '{xls_filename}'") from exception
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment