Refactor import data loading
This commit is contained in:
parent
5f534dee9f
commit
d6df9b624b
|
|
@ -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]):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue