def main():
    options_names = [
        'STAT 310',
        'STAT 410',
        'ECON 243',
        'ECON 443',
        'STAT 421',
        'STAT 449',
        'STAT 486']
    options = []
    for course_name in options_names:
        course = models.get_course(course_name)
        if course:
            options.append(course)

    fcam_requirements = models.CoursesRequirement(
        name='FCAM Requirements',
        options=options,
        num_required=4)

    courses_taken_names = ['STAT 310', 'COMP 182', 'STAT 410']
    courses_taken = []
    for course_name in courses_taken_names:
        course = models.get_course(course_name)
        if course:
            courses_taken.append(course)

    print fcam_requirements.progress(courses_taken)
def comp_sci_math_and_science_group():
    # Compute Math and Science Requirements
    calculus = [models.get_course(course) for course in ['MATH 101', 'MATH 102']]
    assert (None not in calculus)
    calculus_requirement = models.CoursesRequirement(
        name='Introductory calculus',
        num_required=2)
    calculus_requirement.load_courses(calculus)
    calculus_requirement.put()

    advanced_calculus = [models.get_course(course) for course in ['MATH 211', 'MATH 212', 'MATH 221', 'MATH 222']]
    assert (None not in advanced_calculus)
    advanced_calculus_requirement = models.CoursesRequirement(
        name='Advanced calculus',
        num_required=1)
    advanced_calculus_requirement.load_courses(advanced_calculus)
    advanced_calculus_requirement.put()

    probability = [models.get_course(course) for course in ['STAT 310','STAT 331']]
    assert (None not in probability)
    probability_requirement = models.CoursesRequirement(
        name='Probability',
        num_required=1)
    probability_requirement.load_courses(probability)
    probability_requirement.put()

    # linear_algebra = [models.get_course(course) for course in ['MATH 355','MATH 354','CAAM 335']]
    # assert (None not in linear_algebra)
    # linear_algebra_requirement = models.CoursesRequirement(
    #     name='Linear Algebra',
    #     num_required=1)
    # linear_algebra_requirement.load_courses(linear_algebra)
    # linear_algebra_requirement.put()
    
    physics1 = [models.get_course(course) for course in ['PHYS 101', 'PHYS 111','PHYS 125']]
    assert (None not in physics1)
    physics1_requirement = models.CoursesRequirement(
        name='Physics Mechanics',
        num_required=1)
    physics1_requirement.load_courses(physics1)
    physics1_requirement.put()

    physics2 = [models.get_course(course) for course in ['PHYS 102', 'PHYS 112','PHYS 126']]
    assert (None not in physics2)
    physics2_requirement = models.CoursesRequirement(
        name='Physics E+M',
        num_required=1)
    physics2_requirement.load_courses(physics2)
    physics2_requirement.put()
    
    math_and_science_group = models.RequirementGroup(name='Math and Science')
    # for req in [calculus_requirement, advanced_calculus_requirement, probability_requirement, linear_algebra_requirement, physics1_requirement, physics2_requirement]:
    for req in [calculus_requirement, advanced_calculus_requirement, probability_requirement, physics1_requirement, physics2_requirement]:
        math_and_science_group.requirements.append(req.key())
    math_and_science_group.put()

    return math_and_science_group
def main():
    subject = models.Subject.gql('WHERE code=:1', 'COMP').get()

    upper_level = models.CourseRangeRequirement(
        name='Upper-Level Requirements',
        subject_options=[subject],
        num_required=2,
        lower_range=447,
        upper_range=999)

    comp_450 = models.get_course('COMP 450')
    comp_446 = models.get_course('COMP 446')
    courses_taken = [comp_450, comp_446]

    print upper_level.progress(courses_taken)
    def post(self):
        session = get_current_session()
        if not session.has_key('net_id'):
            return
        user = models.get_user(session['net_id'])

        if not user:
            data['error'] = "Invalid User"
            self.response.out.write(json.dumps(data))
            return

        data = json.loads(self.request.get('json'))
        logging.info(data)

        course = models.get_course(data['course'])

        if not course:
            data['error'] = "Invalid Course"
            self.response.out.write(json.dumps(data))
            return

        term = models.Term.gql('WHERE code=:1', str(data['term'])).get()


        if not term:
            data['error'] = "Invalid Term"
            self.response.out.write(json.dumps(data))
            return

        coursetaken = models.CourseTaken(user = user, course = course, term = term)
        coursetaken.put()
        data['success'] = 1
        self.response.out.write(json.dumps(data))
def comp_sci_core_group():
    # Compute CS Core requirements
    intro = [models.get_course(course) for course in ['COMP 140', 'COMP 160']]
    assert (None not in intro)
    intro_requirement = models.CoursesRequirement(
        name='Introductory CS',
        num_required=1)
    intro_requirement.load_courses(intro)
    # intro_requirement.load_excluded()
    intro_requirement.put()


    algorithms = [models.get_course('COMP 182')]
    assert (None not in algorithms)
    algorithms_requirement = models.CoursesRequirement(
        name='Algorithms',
        num_required=1)
    algorithms_requirement.load_courses(algorithms)
    algorithms_requirement.put()


    programming = [models.get_course('COMP 215')]
    assert (None not in programming)
    programming_requirement = models.CoursesRequirement(
        name='Programming',
        num_required=1)
    programming_requirement.load_courses(programming)
    programming_requirement.put()
    
    hardware = [models.get_course('ELEC 220')]
    assert (None not in hardware)
    hardware_requirement = models.CoursesRequirement(
        name='Hardware',
        num_required=1)
    hardware_requirement.load_courses(hardware)
    hardware_requirement.put()

    systems = [models.get_course('COMP 221')]
    assert (None not in systems)
    systems_requirement = models.CoursesRequirement(
        name='Systems',
        num_required = 1)
    systems_requirement.load_courses(systems)
    systems_requirement.put()
    
    object_programming = [models.get_course('COMP 310')]
    assert (None not in object_programming)
    object_programming_requirement = models.CoursesRequirement(
        name='Object Oriented Programming',
        num_required=1)
    object_programming_requirement.load_courses(object_programming)
    object_programming_requirement.put()
    
    parallel = [models.get_course('COMP 322')]
    assert (None not in parallel)
    parallel_requirement = models.CoursesRequirement(
        name='Parallel Programming',
        num_required=1)
    parallel_requirement.load_courses(parallel)
    parallel_requirement.put()
    
    
    programming_languages = [models.get_course(course) for course in ['COMP 411', 'COMP 412']]
    assert (None not in programming_languages)
    programming_languages_requirement = models.CoursesRequirement(
        name='Programming Languages',
        num_required=1)
    programming_languages_requirement.load_courses(programming_languages)
    programming_languages_requirement.put()

    os = [models.get_course('COMP 421')]
    assert (None not in os)
    os_requirement = models.CoursesRequirement(
        name='Operating Systems',
        num_required=1)
    os_requirement.load_courses(os)
    os_requirement.put()

    cs_theory = [models.get_course(course) for course in ['COMP 481', 'COMP 482']]
    assert (None not in cs_theory)
    cs_theory_requirement = models.CoursesRequirement(
        name='Computer Science Theory',
        num_required=1)
    cs_theory_requirement.load_courses(cs_theory)
    cs_theory_requirement.put()


    core_group = models.RequirementGroup(name='CS Core')
    for req in [intro_requirement, algorithms_requirement, programming_requirement, hardware_requirement, systems_requirement, object_programming_requirement, programming_languages_requirement, os_requirement, cs_theory_requirement]:
        core_group.requirements.append(req.key())
    core_group.put()
    return core_group