Dannyar608 commited on
Commit
e0625a2
·
verified ·
1 Parent(s): 02f8008

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +72 -93
app.py CHANGED
@@ -332,58 +332,53 @@ class TranscriptParser:
332
  'format': 'miami_dade' # Add format identifier
333
  }
334
 
335
- # Parse student information with more robust checks
336
- student_info_lines = []
337
  for i, line in enumerate(lines):
338
- logging.debug(f"Processing line: {line}") # Added debug logging
339
  if "DORAL ACADEMY HIGH SCHOOL" in line:
340
- # Get the next 4 lines (or fewer if we're at the end)
341
- student_info_lines = lines[i:i+5]
342
- break
343
-
344
- if student_info_lines:
345
- try:
346
- # Parse school and cohort info - more defensive
347
- school_info_parts = student_info_lines[0].split('|')
348
- if len(school_info_parts) > 2:
349
- data['student_info']['school'] = school_info_parts[1].strip() if len(school_info_parts) > 1 else ''
350
- data['student_info']['district'] = school_info_parts[2].strip() if len(school_info_parts) > 2 else ''
351
 
352
- # Parse student name and ID - more defensive
353
- if len(student_info_lines) > 1:
354
- name_id_line = student_info_lines[1].split('-')
355
- if len(name_id_line) > 1:
356
- name_parts = name_id_line[1].split(',')
357
  if len(name_parts) > 1:
358
- data['student_info']['student_id'] = name_id_line[0].strip()
359
  data['student_info']['student_name'] = name_parts[1].strip() + " " + name_parts[0].strip()
360
 
361
- # Parse academic info - more defensive
362
- if len(student_info_lines) > 2:
363
- academic_info = student_info_lines[2].split('|')
364
- if len(academic_info) > 5:
365
- data['student_info']['current_grade'] = academic_info[1].split(':')[1].strip() if ':' in academic_info[1] else ''
366
- data['student_info']['graduation_year'] = academic_info[2].strip()
367
- data['student_info']['weighted_gpa'] = academic_info[3].split(':')[1].strip() if ':' in academic_info[3] else ''
368
- data['student_info']['community_service_date'] = academic_info[4].split(':')[1].strip() if ':' in academic_info[4] else ''
369
- data['student_info']['total_credits_earned'] = academic_info[5].split(':')[1].strip() if ':' in academic_info[5] else ''
370
-
371
- # Validate we got the essential student info
372
- if not data['student_info'].get('student_name'):
373
- logging.warning("Failed to parse student name")
374
- if strict_mode:
375
- raise ValueError("Could not parse student name from transcript")
376
-
377
- except Exception as e:
378
- logging.warning(f"Error parsing student info: {str(e)}")
379
- if strict_mode:
380
- raise
 
 
 
381
 
382
  # Parse graduation requirements
383
  requirements_start = None
384
  requirements_end = None
385
  for i, line in enumerate(lines):
386
- logging.debug(f"Processing line: {line}") # Added debug logging
387
  if "Code" in line and "Description" in line and "Required" in line:
388
  requirements_start = i + 1
389
  if requirements_start and "Total" in line:
@@ -392,26 +387,21 @@ class TranscriptParser:
392
 
393
  if requirements_start and requirements_end:
394
  for line in lines[requirements_start:requirements_end]:
395
- try:
396
- if '|' in line:
397
- parts = [p.strip() for p in line.split('|') if p.strip()]
398
- if len(parts) >= 6:
399
- req = {
400
- 'code': parts[0],
401
- 'description': parts[1],
402
- 'required': parts[2],
403
- 'waived': parts[3],
404
- 'completed': parts[4],
405
- 'status': parts[5]
406
- }
407
- data['graduation_requirements'].append(req)
408
- except Exception as e:
409
- logging.warning(f"Error parsing requirement line: {line} - {str(e)}")
410
- if strict_mode:
411
- raise
412
 
413
  # Parse total line
414
- try:
415
  total_line = lines[requirements_end]
416
  total_parts = [p.strip() for p in total_line.split('|') if p.strip()]
417
  if len(total_parts) >= 5:
@@ -419,15 +409,10 @@ class TranscriptParser:
419
  data['summary']['total_waived'] = total_parts[2]
420
  data['summary']['total_completed'] = total_parts[3]
421
  data['summary']['completion_percentage'] = total_parts[4]
422
- except Exception as e:
423
- logging.warning(f"Error parsing requirements summary: {str(e)}")
424
- if strict_mode:
425
- raise
426
 
427
  # Parse course history
428
  course_history_start = None
429
  for i, line in enumerate(lines):
430
- logging.debug(f"Processing line: {line}") # Added debug logging
431
  if "Requirement" in line and "School Year" in line and "GradeLv1" in line:
432
  course_history_start = i + 1
433
  break
@@ -435,33 +420,28 @@ class TranscriptParser:
435
  if course_history_start:
436
  current_requirement = None
437
  for line in lines[course_history_start:]:
438
- try:
439
- if '|' in line:
440
- parts = [p.strip() for p in line.split('|') if p.strip()]
441
-
442
- # Check if this is a new requirement line
443
- if len(parts) >= 2 and parts[0] and parts[0] in [req['code'] for req in data['graduation_requirements']]:
444
- current_requirement = parts[0]
445
- parts = parts[1:] # Remove the requirement code
446
-
447
- if len(parts) >= 9:
448
- course = {
449
- 'requirement': current_requirement,
450
- 'school_year': parts[0],
451
- 'grade_level': parts[1],
452
- 'course_number': parts[2],
453
- 'description': parts[3],
454
- 'term': parts[4],
455
- 'district_number': parts[5],
456
- 'fg': parts[6],
457
- 'included': parts[7],
458
- 'credits': parts[8]
459
- }
460
- data['course_history'].append(course)
461
- except Exception as e:
462
- logging.warning(f"Error parsing course line: {line} - {str(e)}")
463
- if strict_mode:
464
- raise
465
 
466
  # Calculate graduation status
467
  try:
@@ -475,9 +455,8 @@ class TranscriptParser:
475
  }
476
  data['graduation_status'] = graduation_status
477
  except Exception as e:
478
- logging.warning(f"Error calculating graduation status: {str(e)}")
479
  if strict_mode:
480
- raise
481
 
482
  return data
483
 
 
332
  'format': 'miami_dade' # Add format identifier
333
  }
334
 
335
+ # Parse student information
336
+ student_info_found = False
337
  for i, line in enumerate(lines):
 
338
  if "DORAL ACADEMY HIGH SCHOOL" in line:
339
+ # School info line
340
+ school_info = line.split('|')
341
+ if len(school_info) > 1:
342
+ data['student_info']['school'] = school_info[1].strip()
343
+ data['student_info']['district'] = school_info[2].strip() if len(school_info) > 2 else ''
 
 
 
 
 
 
344
 
345
+ # Student ID and name line
346
+ if i+1 < len(lines):
347
+ student_line = lines[i+1].split('-')
348
+ if len(student_line) > 1:
349
+ name_parts = student_line[1].split(',')
350
  if len(name_parts) > 1:
351
+ data['student_info']['student_id'] = student_line[0].strip()
352
  data['student_info']['student_name'] = name_parts[1].strip() + " " + name_parts[0].strip()
353
 
354
+ # Academic info line
355
+ if i+2 < len(lines):
356
+ academic_info = lines[i+2].split('|')
357
+ if len(academic_info) > 1:
358
+ data['student_info']['current_grade'] = academic_info[1].split(':')[1].strip() if ':' in academic_info[1] else academic_info[1].strip()
359
+ if len(academic_info) > 2:
360
+ data['student_info']['graduation_year'] = academic_info[2].strip()
361
+ if len(academic_info) > 3:
362
+ gpa_part = academic_info[3].strip()
363
+ if 'Weighted GPA' in gpa_part:
364
+ data['student_info']['weighted_gpa'] = gpa_part.split(':')[1].strip() if ':' in gpa_part else ''
365
+ elif 'Un-weighted GPA' in gpa_part:
366
+ data['student_info']['unweighted_gpa'] = gpa_part.split(':')[1].strip() if ':' in gpa_part else ''
367
+ if len(academic_info) > 4:
368
+ data['student_info']['community_service_date'] = academic_info[4].split(':')[1].strip() if ':' in academic_info[4] else ''
369
+ if len(academic_info) > 5:
370
+ data['student_info']['total_credits_earned'] = academic_info[5].split(':')[1].strip() if ':' in academic_info[5] else ''
371
+
372
+ student_info_found = True
373
+ break
374
+
375
+ if not student_info_found and strict_mode:
376
+ raise ValueError("Could not find student information section")
377
 
378
  # Parse graduation requirements
379
  requirements_start = None
380
  requirements_end = None
381
  for i, line in enumerate(lines):
 
382
  if "Code" in line and "Description" in line and "Required" in line:
383
  requirements_start = i + 1
384
  if requirements_start and "Total" in line:
 
387
 
388
  if requirements_start and requirements_end:
389
  for line in lines[requirements_start:requirements_end]:
390
+ if '|' in line:
391
+ parts = [p.strip() for p in line.split('|') if p.strip()]
392
+ if len(parts) >= 6:
393
+ req = {
394
+ 'code': parts[0],
395
+ 'description': parts[1],
396
+ 'required': parts[2],
397
+ 'waived': parts[3],
398
+ 'completed': parts[4],
399
+ 'status': parts[5]
400
+ }
401
+ data['graduation_requirements'].append(req)
 
 
 
 
 
402
 
403
  # Parse total line
404
+ if requirements_end < len(lines):
405
  total_line = lines[requirements_end]
406
  total_parts = [p.strip() for p in total_line.split('|') if p.strip()]
407
  if len(total_parts) >= 5:
 
409
  data['summary']['total_waived'] = total_parts[2]
410
  data['summary']['total_completed'] = total_parts[3]
411
  data['summary']['completion_percentage'] = total_parts[4]
 
 
 
 
412
 
413
  # Parse course history
414
  course_history_start = None
415
  for i, line in enumerate(lines):
 
416
  if "Requirement" in line and "School Year" in line and "GradeLv1" in line:
417
  course_history_start = i + 1
418
  break
 
420
  if course_history_start:
421
  current_requirement = None
422
  for line in lines[course_history_start:]:
423
+ if '|' in line:
424
+ parts = [p.strip() for p in line.split('|') if p.strip()]
425
+
426
+ # Check if this is a new requirement line
427
+ if len(parts) >= 2 and parts[0] and parts[0] in [req['code'] for req in data['graduation_requirements']]:
428
+ current_requirement = parts[0]
429
+ parts = parts[1:] # Remove the requirement code
430
+
431
+ if len(parts) >= 9:
432
+ course = {
433
+ 'requirement': current_requirement,
434
+ 'school_year': parts[0],
435
+ 'grade_level': parts[1],
436
+ 'course_number': parts[2],
437
+ 'description': parts[3],
438
+ 'term': parts[4],
439
+ 'district_number': parts[5],
440
+ 'fg': parts[6],
441
+ 'included': parts[7],
442
+ 'credits': parts[8]
443
+ }
444
+ data['course_history'].append(course)
 
 
 
 
 
445
 
446
  # Calculate graduation status
447
  try:
 
455
  }
456
  data['graduation_status'] = graduation_status
457
  except Exception as e:
 
458
  if strict_mode:
459
+ raise ValueError(f"Error calculating graduation status: {str(e)}")
460
 
461
  return data
462