Пример #1
0
    def test_select_classlist(self, monkeypatch):
        test_class_options = {1: 'one', 2: 'two', 3: 'three'}
        selected_class = 'some_class'

        def mocked_create_class_list_dict():
            return test_class_options

        def mocked_display_class_selection_menu(class_options):
            if class_options != test_class_options:
                raise ValueError  # Ensure called with correct arg.
            return None

        def mocked_take_class_selection(class_options):
            if class_options != test_class_options:
                raise ValueError  # Ensure called with correct arg.
            return selected_class

        monkeypatch.setattr(class_functions, 'create_class_list_dict',
                            mocked_create_class_list_dict)
        monkeypatch.setattr(class_functions, 'display_class_selection_menu',
                            mocked_display_class_selection_menu)
        monkeypatch.setattr(class_functions, 'take_class_selection',
                            mocked_take_class_selection)

        assert select_classlist() == selected_class
Пример #2
0
def assemble_chart_data():
    """
    Collect data/user input for new chart.

    Get classname from user, load class data, take chart data from user.

    Return values for chart_data_dict assembly:
    class_name: str
    chart_name: str
    chart_filename: str
    student_scores: dict
    chart_params: dict

    :return: tuple(str, str, str, dict, dict)
    """

    class_name = select_classlist()  # TODO: warn for empty classlist

    class_data_dict = load_class_data(class_name)

    student_scores: dict = take_score_data(class_name, class_data_dict)

    chart_name = take_chart_name()

    chart_filename = clean_for_filename(chart_name)

    chart_params = set_chart_params()
    # chart options here or before score entry, setting chart params, min, max scores etc

    return class_name, chart_name, chart_filename,  student_scores, chart_params
Пример #3
0
def new_chart(loaded_class: Class = None) -> None:
    """
    Create a new chart with supplied class, user input.

    Prompts user to select class if not provided by caller.
    Take chart name, score data, chart parameters from
    assemble_chart_data, form into chart_data_dict with key-value
    format:
        chart_data_dict = {
            'class_name': class_name,  # str
            'chart_name': chart_name,  # str
            'chart_default_filename': chart_default_filename,  # str
            'chart_params': chart_params,  # dict
            'score-students_dict': student_scores,  # dict
            }

    Then write this data to disk as *.cdf (ChartDataFile), generate and
    save the chart.

    :param loaded_class: Class = None
    :return: None
    """
    if not loaded_class:
        class_id = select_classlist()  # TODO: warn for empty classlist
        loaded_class = definitions.DATABASE.load_class(class_id)

    (chart_name,
     chart_default_filename,
     student_scores,
     chart_params) = assemble_chart_data(loaded_class)

    chart_data_dict = {'class_id': loaded_class.id,
                       'class_name': loaded_class.name,  # str
                       'chart_name': chart_name,  # str
                       'chart_default_filename': chart_default_filename,  # str
                       'chart_params': chart_params,  # dict
                       'score-students_dict': student_scores,  # dict
                       }

    definitions.DATABASE.create_chart(chart_data_dict)

    chart_image_location = generate_chart_image(chart_data_dict)

    # Show image to user, user save image.
    if show_image(chart_image_location):
        user_save_chart_image(chart_data_dict, chart_image_location)