Exemple #1
0
 def test_major_with_known_link(self):
     assert berkeley.degree_program_url_for_major('English BA') == \
         'http://guide.berkeley.edu/undergraduate/degree-programs/english/'
     assert berkeley.degree_program_url_for_major('Peace & Conflict Studies BA') == \
         'http://guide.berkeley.edu/undergraduate/degree-programs/peace-conflict-studies/'
     assert berkeley.degree_program_url_for_major('History BA') == \
         'http://guide.berkeley.edu/undergraduate/degree-programs/history/'
     assert berkeley.degree_program_url_for_major('History of Art BA') == \
         'http://guide.berkeley.edu/undergraduate/degree-programs/art-history/'
Exemple #2
0
def merge_sis_profile_plans(academic_status, sis_profile):
    sis_profile['plans'] = []
    for student_plan in academic_status.get('studentPlans', []):
        academic_plan = student_plan.get('academicPlan', {})
        # SIS majors come in five flavors.
        if academic_plan.get('type', {}).get('code') not in ['MAJ', 'SS', 'SP', 'HS', 'CRT']:
            continue
        plan = academic_plan.get('plan', {})
        major = plan.get('description')
        plan_feed = {
            'degreeProgramUrl': degree_program_url_for_major(major),
            'description': major,
        }
        # Find the latest expected graduation term from any plan.
        expected_graduation_term = student_plan.get('expectedGraduationTerm', {}).get('id')
        if expected_graduation_term and expected_graduation_term > sis_profile.get('expectedGraduationTerm', {}).get('id', '0'):
            sis_profile['expectedGraduationTerm'] = {
                'id': expected_graduation_term,
                'name': term_name_for_sis_id(expected_graduation_term),
            }
        # Add program unless plan code indicates undeclared.
        if plan.get('code') != '25000U':
            program = student_plan.get('academicPlan', {}).get('academicProgram', {}).get('program', {})
            plan_feed['program'] = program.get('description')
        # Add plan unless it's a duplicate.
        if not next((p for p in sis_profile['plans'] if p.get('description') == plan_feed.get('description')), None):
            sis_profile['plans'].append(plan_feed)
 def generate_academic_plans_feed(self, rows_for_student):
     majors = []
     minors = []
     subplans = []
     for row in rows_for_student:
         plan = {
             'degreeProgramUrl':
             degree_program_url_for_major(row['plan']),
             'description':
             row['plan'],
             'program':
             row['program'],
             'status':
             'Active'
             if row['status'] == 'Active in Program' else row['status'],
         }
         if 'MIN' == row['plan_type']:
             minors.append(plan)
         else:
             majors.append(plan)
         if row['subplan']:
             subplans.append(row['subplan'])
     return {
         'plans': majors,
         'plansMinor': minors,
         'subplans': subplans,
     }
def merge_sis_profile_plans(academic_status, sis_profile):
    plans = []
    plans_minor = []
    subplans = set()
    for student_plan in academic_status.get('studentPlans', []):
        academic_plan = student_plan.get('academicPlan', {})
        # SIS majors come in five flavors, plus a sixth for minors.
        if academic_plan.get('type', {}).get('code') not in ['MAJ', 'SS', 'SP', 'HS', 'CRT', 'MIN']:
            continue
        plan = academic_plan.get('plan', {})
        description = plan.get('description')
        plan_feed = {
            'degreeProgramUrl': degree_program_url_for_major(description),
            'description': description,
        }
        # Find the latest expected graduation term from any plan.
        expected_graduation_term = student_plan.get('expectedGraduationTerm', {}).get('id')
        if expected_graduation_term and expected_graduation_term > sis_profile.get('expectedGraduationTerm', {}).get('id', '0'):
            sis_profile['expectedGraduationTerm'] = {
                'id': expected_graduation_term,
                'name': term_name_for_sis_id(expected_graduation_term),
            }

        program = student_plan.get('academicPlan', {}).get('academicProgram', {}).get('program', {})
        plan_feed['program'] = program.get('formalDescription') or program.get('description')

        # Add plan status.
        plan_status = student_plan.get('statusInPlan', {}).get('status')
        if plan_status:
            plan_feed['status'] = plan_status.get('formalDescription') or plan_status.get('description')
            # We generally prefer the 'formalDescription', but our formality has limits.
            if plan_feed['status'] == 'Active in Program':
                plan_feed['status'] = 'Active'
        else:
            # A plan with no status is considered discontinued. (NS-689)
            plan_feed['status'] = 'Discontinued'

        # Add plan unless it's a duplicate.
        if academic_plan.get('type', {}).get('code') == 'MIN':
            plan_collection = plans_minor
        else:
            plan_collection = plans
        if not next((p for p in plan_collection if p.get('description') == plan_feed.get('description')), None):
            plan_collection.append(plan_feed)

        # Add any subplans.
        for academic_subplan in student_plan.get('academicSubPlans', []):
            subplan_description = academic_subplan.get('subPlan', {}).get('description')
            if subplan_description:
                subplans.add(subplan_description)

    sis_profile['plans'] = sorted(plans, key=itemgetter('description'))
    sis_profile['plansMinor'] = sorted(plans_minor, key=itemgetter('description'))
    sis_profile['subplans'] = sorted(list(subplans))
Exemple #5
0
def merge_intended_majors(intended_majors_feed, sis_profile):
    if intended_majors_feed:
        intended_majors = [{
            'code':
            im.split(' :: ')[0],
            'description':
            im.split(' :: ')[1],
            'degreeProgramUrl':
            degree_program_url_for_major(im.split(' :: ')[1]),
        } for im in intended_majors_feed.split(' || ')]
        sis_profile['intendedMajors'] = sorted(intended_majors,
                                               key=itemgetter('description'))
def merge_intended_majors(intended_majors_feed):
    intended_majors = None
    if intended_majors_feed:
        unique_codes = []
        intended_majors = []
        for intended_major in intended_majors_feed.split(' || '):
            code = intended_major.split(' :: ')[0]
            if code not in unique_codes:
                unique_codes.append(code)
                description = intended_major.split(' :: ')[1]
                intended_majors.append({
                    'code': code,
                    'description': description,
                    'degreeProgramUrl': degree_program_url_for_major(description),
                })
        intended_majors = sorted(intended_majors, key=itemgetter('description'))
    return intended_majors
Exemple #7
0
 def test_major_without_a_link(self):
     assert berkeley.degree_program_url_for_major(
         'English for Billiards Players MS') is None
     assert berkeley.degree_program_url_for_major(
         'Altaic Language BA') is None
     assert berkeley.degree_program_url_for_major('Entomology BS') is None