Refactor import data loading

This commit is contained in:
Daniel Egger 2023-05-31 21:54:51 +02:00
parent 5f534dee9f
commit d6df9b624b
6 changed files with 39 additions and 39 deletions

View File

@ -5,7 +5,11 @@ from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.core.models import User
from vbv_lernwelt.course.models import Course, CourseSession, CourseSessionUser
from vbv_lernwelt.importer.utils import try_parse_datetime, parse_circle_group_string
from vbv_lernwelt.importer.utils import (
try_parse_datetime,
parse_circle_group_string,
calc_header_tuple_list_from_pyxl_sheet,
)
from vbv_lernwelt.learnpath.models import LearningContentAttendanceCourse, Circle
logger = structlog.get_logger(__name__)
@ -52,13 +56,9 @@ def import_course_sessions_from_excel(course: Course, filename: str):
workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Durchführung"]
header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True):
row_with_header = list(zip(header, row))
cs = create_or_update_course_session(
course, dict(row_with_header), circles=["Fahrzeug"]
)
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
create_or_update_course_session(course, dict(row), circles=["Fahrzeug"])
def create_or_update_course_session(course: Course, data: Dict[str, Any], circles=None):
@ -124,13 +124,9 @@ def import_trainers_from_excel(course: Course, filename: str):
workbook = load_workbook(filename=filename)
sheet = workbook["Schulungen Trainer"]
header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True):
if all(cell_value is None for cell_value in row):
continue
row_with_header = list(zip(header, row))
create_or_update_trainer(course, dict(row_with_header))
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
create_or_update_trainer(course, dict(row))
def create_or_update_trainer(course: Course, data: Dict[str, Any]):

View File

@ -6,6 +6,7 @@ from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession
from vbv_lernwelt.importer.services import create_or_update_course_session
from vbv_lernwelt.importer.utils import calc_header_tuple_list_from_pyxl_sheet
test_dir = os.path.dirname(os.path.abspath(__file__))
@ -20,15 +21,12 @@ class ImportCourseSessionTestCase(TestCase):
)
sheet = workbook["Schulungen Durchführung"]
header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True):
row_with_header = list(zip(header, row))
print(row_with_header)
cs = create_or_update_course_session(
self.course, dict(row_with_header), circles=["Fahrzeug"]
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
print(row)
create_or_update_course_session(
self.course, dict(row), circles=["Fahrzeug"]
)
print(cs.title)
self.assertEqual(CourseSession.objects.count(), 6)

View File

@ -7,6 +7,7 @@ from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
from vbv_lernwelt.importer.services import create_or_update_trainer
from vbv_lernwelt.importer.utils import calc_header_tuple_list_from_pyxl_sheet
test_dir = os.path.dirname(os.path.abspath(__file__))
@ -19,13 +20,9 @@ class ImportStudentsTestCase(TestCase):
workbook = load_workbook(filename=f"{test_dir}/Schulungen_Teilnehmende.xlsx")
sheet = workbook.active
header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True):
if all(cell_value is None for cell_value in row):
continue
row_with_header = list(zip(header, row))
print(row_with_header)
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
print(row)
class CreateOrUpdateCourseSessionTestCase(TestCase):

View File

@ -6,6 +6,7 @@ from openpyxl.reader.excel import load_workbook
from vbv_lernwelt.course.creators.test_course import create_test_course
from vbv_lernwelt.course.models import CourseSession, CourseSessionUser
from vbv_lernwelt.importer.services import create_or_update_trainer
from vbv_lernwelt.importer.utils import calc_header_tuple_list_from_pyxl_sheet
test_dir = os.path.dirname(os.path.abspath(__file__))
@ -20,14 +21,10 @@ class ImportTrainerTestCase(TestCase):
)
sheet = workbook["Schulungen Trainer"]
header = [cell.value for cell in sheet[1]]
for row in sheet.iter_rows(min_row=2, values_only=True):
row_with_header = list(zip(header, row))
if all(cell_value is None for cell_value in row):
continue
print(row_with_header)
create_or_update_trainer(self.course, dict(row_with_header))
tuple_list = calc_header_tuple_list_from_pyxl_sheet(sheet)
for row in tuple_list:
print(row)
create_or_update_trainer(self.course, dict(row))
class CreateOrUpdateCourseSessionTestCase(TestCase):

View File

@ -183,7 +183,7 @@ class TryParseDateTimeTestCase(TestCase):
self.assertEqual(datetime(2023, 6, 9, 13, 30, 0), value)
class ParceCircleGroupStringTestCase(TestCase):
class ParseCircleGroupStringTestCase(TestCase):
def test_withMultipleCircles(self):
value = "Fahrzeug (A, B), Reisen (A), KMU (B)"
self.assertEqual(

View File

@ -96,3 +96,15 @@ def parse_circle_group_string(value: str) -> List[str]:
# re.split() splits the string based on the pattern
return [x.strip() for x in re.split(pattern, value)]
def calc_header_tuple_list_from_pyxl_sheet(sheet):
header = [cell.value for cell in sheet[1]]
result = []
for row in sheet.iter_rows(min_row=2, values_only=True):
if all(cell_value is None for cell_value in row):
continue
result.append(list(zip(header, row)))
return result