From a5b26d1324eab4be2414e5ba805fbc2ba0f6f466 Mon Sep 17 00:00:00 2001 From: nmemmert <67961292+nmemmert@users.noreply.github.com> Date: Thu, 6 Nov 2025 10:41:38 -0500 Subject: [PATCH] Add detailed skip reasons showing why PDFs were skipped --- pdf_renamer.py | 55 ++++++++++++++++++++++++++++++-------------------- 1 file changed, 33 insertions(+), 22 deletions(-) diff --git a/pdf_renamer.py b/pdf_renamer.py index 5410a57..5f3b448 100644 --- a/pdf_renamer.py +++ b/pdf_renamer.py @@ -59,18 +59,29 @@ def extract_names_from_pdf(pdf_path): grade = fields.get('Student Grade', {}).get('/V', '').strip() school = fields.get('Student School', {}).get('/V', '').strip() - if last_name and first_name and grade and school: - return { - 'filename': f"{last_name}_{first_name}.pdf", - 'last_name': last_name, - 'first_name': first_name, - 'grade': grade, - 'school': school - } - else: - return None + # Check for missing fields + missing_fields = [] + if not last_name: + missing_fields.append('Last Name') + if not first_name: + missing_fields.append('First Name') + if not grade: + missing_fields.append('Student Grade') + if not school: + missing_fields.append('Student School') + + if missing_fields: + return {'error': f'Missing or empty fields: {", ".join(missing_fields)}'} + + return { + 'filename': f"{last_name}_{first_name}.pdf", + 'last_name': last_name, + 'first_name': first_name, + 'grade': grade, + 'school': school + } except Exception as e: - return None + return {'error': f'PDF read error: {str(e)}'} def process_job(job_id, files): job_queue[job_id]['status'] = 'processing' @@ -125,7 +136,10 @@ def process_job(job_id, files): pdf_path = os.path.join(root, f) job_queue[job_id]['progress'] = f'Processing PDF: {f}' pdf_info = extract_names_from_pdf(pdf_path) - if pdf_info: + if 'error' in pdf_info: + processed_files.append(('skipped', f, pdf_info['error'])) + job_queue[job_id]['progress'] = f'Skipped {f} - {pdf_info["error"]}' + else: job_queue[job_id]['progress'] = f'Extracted data for {pdf_info["first_name"]} {pdf_info["last_name"]}' # Create folder structure: Episode/School/Grade/ school_dir = os.path.join(episode_dir, pdf_info['school']) @@ -143,14 +157,14 @@ def process_job(job_id, files): processed_files.append(('success', os.path.relpath(new_path, episode_dir), new_path)) processed_count += 1 job_queue[job_id]['progress'] = f'Organized {processed_count}/{total_files} files' - else: - processed_files.append(('skipped', f, None)) - job_queue[job_id]['progress'] = f'Skipped {f} - missing required fields' else: # Single PDF job_queue[job_id]['progress'] = f'Processing PDF: {filename}' pdf_info = extract_names_from_pdf(filepath) - if pdf_info: + if 'error' in pdf_info: + processed_files.append(('skipped', filename, pdf_info['error'])) + job_queue[job_id]['progress'] = f'Skipped {filename} - {pdf_info["error"]}' + else: job_queue[job_id]['progress'] = f'Extracted data for {pdf_info["first_name"]} {pdf_info["last_name"]}' # Create folder structure: Episode/School/Grade/ school_dir = os.path.join(episode_dir, pdf_info['school']) @@ -168,9 +182,6 @@ def process_job(job_id, files): processed_files.append(('success', os.path.relpath(new_filepath, episode_dir), new_filepath)) processed_count += 1 job_queue[job_id]['progress'] = f'Organized {processed_count}/{total_files} files' - else: - processed_files.append(('skipped', filename, None)) - job_queue[job_id]['progress'] = f'Skipped {filename} - missing required fields' job_queue[job_id]['progress'] = 'Creating ZIP archive...' # Create ZIP of the entire Episode directory structure @@ -195,7 +206,7 @@ def process_job(job_id, files): job_queue[job_id]['status'] = 'completed' job_queue[job_id]['processed_files'] = processed_files - job_queue[job_id]['skipped'] = [p[1] for p in processed_files if p[0] == 'skipped'] + job_queue[job_id]['skipped'] = [(p[1], p[2]) for p in processed_files if p[0] == 'skipped'] @app.route('/login') def login(): @@ -418,8 +429,8 @@ def jobs(): {% if job.skipped %}

Skipped Files:

{% endif %}