diff --git a/zesje/pregrader.py b/zesje/pregrader.py index 71b946e05a3c77ae3f85930a9401fd7da64d2d83..2df7de65f76a799a5dc049d49ede42c42ec7ccfe 100644 --- a/zesje/pregrader.py +++ b/zesje/pregrader.py @@ -13,7 +13,7 @@ import cv2 import numpy as np -from zesje.database import db, Solution, Problem +from zesje.database import db, Solution, Problem, ProblemWidget from zesje.images import guess_dpi, get_box, fix_corner_markers @@ -26,20 +26,23 @@ def add_feedback_to_solution(page, page_img, corner_keypoints): page_img: image of the page barcode: data from the barcode on the page """ - problems_on_page = Problem.query.filter(Problem.widget.page == page).all() + widgets = ProblemWidget.filter(ProblemWidget.page == page).all() + + problems_on_page = [widget.problem for widget in widgets] for problem in problems_on_page: for mc_option in problem.mc_options: - sol = Solution.query.filter(Solution.problem_id == problem.id).one_or_none() + if mc_option: + sol = Solution.query.filter(Solution.problem_id == problem.id).one_or_none() - box = (mc_option.x, mc_option.y) + box = (mc_option.x, mc_option.y) - corner_keypoints = fix_corner_markers(corner_keypoints, page_img.shape) + corner_keypoints = fix_corner_markers(corner_keypoints, page_img.shape) - # check if box is filled - if box_is_filled(box, page_img, corner_keypoints): - sol.feedback.append(mc_option.feedback) - db.session.commit() + # check if box is filled + if box_is_filled(box, page_img, corner_keypoints): + sol.feedback.append(mc_option.feedback) + db.session.commit() def box_is_filled(box, page_img, corner_keypoints, marker_margin=72/2.54, threshold=225, cut_padding=0.1, box_size=11): diff --git a/zesje/scans.py b/zesje/scans.py index e4f93a57e287f17962323375141d6c1da58d6975..f32c0ff1debff0434fcf06fc4244ee4b262527be 100644 --- a/zesje/scans.py +++ b/zesje/scans.py @@ -77,22 +77,22 @@ def _process_pdf(scan_id, app_config): total = PyPDF2.PdfFileReader(open(pdf_path, "rb")).getNumPages() failures = [] - try: - for image, page in extract_images(pdf_path): - report_progress(f'Processing page {page} / {total}') - try: - success, description = process_page( - image, exam_config, output_directory - ) - if not success: - print(description) - failures.append(page) - except Exception as e: - report_error(f'Error processing page {page}: {e}') - return - except Exception as e: - report_error(f"Failed to read pdf: {e}") - raise + # try: + for image, page in extract_images(pdf_path): + report_progress(f'Processing page {page} / {total}') + # try: + success, description = process_page( + image, exam_config, output_directory + ) + if not success: + print(description) + failures.append(page) + # except Exception as e: + # report_error(f'Error processing page {e.__cause__}') + return + # except Exception as e: + # report_error(f"Failed to read pdf: {e}") + # raise if failures: processed = total - len(failures)