Esempio n. 1
0
    def set_assessment_content(self, unit, assessment_content, errors=None):
        """Updates the content of an assessment."""
        if errors is None:
            errors = []

        path = self._app_context.fs.impl.physical_to_logical(
            self.get_assessment_filename(unit.unit_id))
        root_name = 'assessment'

        try:
            content, noverify_text = verify.convert_javascript_to_python(
                assessment_content, root_name)
            assessment = verify.evaluate_python_expression_from_text(
                content, root_name, verify.Assessment().scope, noverify_text)
        except Exception:  # pylint: disable-msg=broad-except
            errors.append('Unable to parse %s:\n%s' % (
                root_name,
                str(sys.exc_info()[1])))
            return

        verifier = verify.Verifier()
        try:
            verifier.verify_assessment_instance(assessment, path)
        except verify.SchemaException:
            errors.append('Error validating %s\n' % root_name)
            return

        fs = self.app_context.fs
        fs.put(
            path, vfs.string_to_stream(assessment_content),
            is_draft=not unit.now_available)
Esempio n. 2
0
def load_csv_course(app_context):
    """Loads course data from the CSV files."""
    logging.info('Initializing datastore from CSV files.')

    unit_file = os.path.join(app_context.get_data_home(), 'unit.csv')
    lesson_file = os.path.join(app_context.get_data_home(), 'lesson.csv')

    # Check files exist.
    if (not app_context.fs.isfile(unit_file) or
        not app_context.fs.isfile(lesson_file)):
        return None, None

    unit_stream = app_context.fs.open(unit_file)
    lesson_stream = app_context.fs.open(lesson_file)

    # Verify CSV file integrity.
    units = verify.read_objects_from_csv_stream(
        unit_stream, verify.UNITS_HEADER, verify.Unit)
    lessons = verify.read_objects_from_csv_stream(
        lesson_stream, verify.LESSONS_HEADER, verify.Lesson)
    verifier = verify.Verifier()
    verifier.verify_unit_fields(units)
    verifier.verify_lesson_fields(lessons)
    verifier.verify_unit_lesson_relationships(units, lessons)
    assert verifier.errors == 0
    assert verifier.warnings == 0

    # Load data from CSV files into a datastore.
    units = verify.read_objects_from_csv_stream(
        app_context.fs.open(unit_file), verify.UNITS_HEADER, Unit12,
        converter=verify.UNIT_CSV_TO_DB_CONVERTER)
    lessons = verify.read_objects_from_csv_stream(
        app_context.fs.open(lesson_file), verify.LESSONS_HEADER, Lesson12,
        converter=verify.LESSON_CSV_TO_DB_CONVERTER)
    return units, lessons
Esempio n. 3
0
def verify_assessment(assessment_text):
    """Parses and semantically verifies assessment."""
    assessment = AssessmentParser13.parse_string_in_scope(
        assessment_text, verify.Assessment().scope, 'assessment')
    assert assessment
    verifier = verify.Verifier()
    verifier.verify_assessment_instance(assessment, 'test')
Esempio n. 4
0
def verify_activity(activity_text):
    """Parses and semantically verifies activity."""
    activity = ActivityParser13.parse_string_in_scope(
        activity_text, verify.Activity().scope, 'activity')
    assert activity
    verifier = verify.Verifier()
    verifier.verify_activity_instance(activity, 'test')
Esempio n. 5
0
    def test_assets_and_date(self):
        """Verify semantics of all asset and data files."""

        def echo(unused_message):
            pass

        warnings, errors = verify.Verifier().load_and_verify_model(echo)
        assert not errors and not warnings
Esempio n. 6
0
def load_csv_course(app_context):
    """Loads course data from the CSV files."""
    logging.info('Initializing datastore from CSV files')

    unit_file = os.path.join(app_context.get_data_home(), 'unit.csv')
    lesson_file = os.path.join(app_context.get_data_home(), 'lesson.csv')
    biblio_file = os.path.join(app_context.get_data_home(), 'biblio.csv')

    # Load and validate data from CSV files.
    units = verify.read_objects_from_csv_stream(app_context.fs.open(unit_file),
                                                verify.UNITS_HEADER,
                                                verify.Unit)
    lessons = verify.read_objects_from_csv_stream(
        app_context.fs.open(lesson_file), verify.LESSONS_HEADER, verify.Lesson)
    references = verify.read_objects_from_csv_stream(
        app_context.fs.open(biblio_file), verify.BIBLIO_HEADER,
        verify.Reference)

    verifier = verify.Verifier()
    verifier.verify_unit_fields(units)
    verifier.verify_lesson_fields(lessons)
    verifier.verify_unit_lesson_relationships(units, lessons)
    assert verifier.errors == 0
    assert verifier.warnings == 0

    # Load data from CSV files into a datastore.
    new_units = []
    new_lessons = []
    new_references = []
    units = verify.read_objects_from_csv_stream(app_context.fs.open(unit_file),
                                                verify.UNITS_HEADER, Unit)
    lessons = verify.read_objects_from_csv_stream(
        app_context.fs.open(lesson_file), verify.LESSONS_HEADER, Lesson)
    references = verify.read_objects_from_csv_stream(
        app_context.fs.open(biblio_file), verify.BIBLIO_HEADER, Reference)

    for unit in units:
        entity = Unit()
        copy_attributes(unit, entity, verify.UNIT_CSV_TO_DB_CONVERTER)
        new_units.append(entity)
    for lesson in lessons:
        entity = Lesson()
        copy_attributes(lesson, entity, verify.LESSON_CSV_TO_DB_CONVERTER)
        new_lessons.append(entity)
    for reference in references:
        entity = Reference()
        copy_attributes(reference, entity, verify.BIBLIO_CSV_TO_DB_CONVERTER)
        new_references.append(entity)

    return new_units, new_lessons, new_references