Add detailed skip reasons showing why PDFs were skipped
This commit is contained in:
1 parent
198e57835d
commit
a5b26d1324
1 file changed
+33
-22
+33
-22
@@ -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 %}
|
||||||
|
|||||||
Reference in new issue
Block a user