Add detailed skip reasons showing why PDFs were skipped

This commit is contained in:
nmemmert committed 2025-11-06 10:41:38 -05:00
1 parent 198e57835d
commit a5b26d1324
1 file changed
+33 -22
+33 -22
View File
@@ -59,18 +59,29 @@ def extract_names_from_pdf(pdf_path):
grade = fields.get('Student Grade', {}).get('/V', '').strip() grade = fields.get('Student Grade', {}).get('/V', '').strip()
school = fields.get('Student School', {}).get('/V', '').strip() school = fields.get('Student School', {}).get('/V', '').strip()
if last_name and first_name and grade and school: # Check for missing fields
return { missing_fields = []
'filename': f"{last_name}_{first_name}.pdf", if not last_name:
'last_name': last_name, missing_fields.append('Last Name')
'first_name': first_name, if not first_name:
'grade': grade, missing_fields.append('First Name')
'school': school if not grade:
} missing_fields.append('Student Grade')
else: if not school:
return None 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: except Exception as e:
return None return {'error': f'PDF read error: {str(e)}'}
def process_job(job_id, files): def process_job(job_id, files):
job_queue[job_id]['status'] = 'processing' job_queue[job_id]['status'] = 'processing'
@@ -125,7 +136,10 @@ def process_job(job_id, files):
pdf_path = os.path.join(root, f) pdf_path = os.path.join(root, f)
job_queue[job_id]['progress'] = f'Processing PDF: {f}' job_queue[job_id]['progress'] = f'Processing PDF: {f}'
pdf_info = extract_names_from_pdf(pdf_path) 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"]}' job_queue[job_id]['progress'] = f'Extracted data for {pdf_info["first_name"]} {pdf_info["last_name"]}'
# Create folder structure: Episode/School/Grade/ # Create folder structure: Episode/School/Grade/
school_dir = os.path.join(episode_dir, pdf_info['school']) 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_files.append(('success', os.path.relpath(new_path, episode_dir), new_path))
processed_count += 1 processed_count += 1
job_queue[job_id]['progress'] = f'Organized {processed_count}/{total_files} files' 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: else:
# Single PDF # Single PDF
job_queue[job_id]['progress'] = f'Processing PDF: {filename}' job_queue[job_id]['progress'] = f'Processing PDF: {filename}'
pdf_info = extract_names_from_pdf(filepath) 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"]}' job_queue[job_id]['progress'] = f'Extracted data for {pdf_info["first_name"]} {pdf_info["last_name"]}'
# Create folder structure: Episode/School/Grade/ # Create folder structure: Episode/School/Grade/
school_dir = os.path.join(episode_dir, pdf_info['school']) 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_files.append(('success', os.path.relpath(new_filepath, episode_dir), new_filepath))
processed_count += 1 processed_count += 1
job_queue[job_id]['progress'] = f'Organized {processed_count}/{total_files} files' 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...' job_queue[job_id]['progress'] = 'Creating ZIP archive...'
# Create ZIP of the entire Episode directory structure # 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]['status'] = 'completed'
job_queue[job_id]['processed_files'] = processed_files 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') @app.route('/login')
def login(): def login():
@@ -418,8 +429,8 @@ def jobs():
{% if job.skipped %} {% if job.skipped %}
<p><strong>Skipped Files:</strong></p> <p><strong>Skipped Files:</strong></p>
<ul> <ul>
{% for file in job.skipped %} {% for skip_info in job.skipped %}
<li>{{ file }}</li> <li><strong>{{ skip_info[0] }}</strong>: {{ skip_info[1] }}</li>
{% endfor %} {% endfor %}
</ul> </ul>
{% endif %} {% endif %}