def deserialise_dates(block_json, mapped_answers):
    answer_json_list = SchemaHelper.get_answers_for_block(block_json)

    # Deserialise all dates from the store
    date_answer_ids = [
        a['id'] for a in answer_json_list
        if a['type'] == "Date" or a['type'] == 'MonthYearDate'
    ]

    for date_answer_id in date_answer_ids:
        if date_answer_id in mapped_answers:
            substrings = mapped_answers[date_answer_id].split("/")

            if len(substrings) == 3:
                del mapped_answers[date_answer_id]
                mapped_answers.update({
                    '{answer_id}-day'.format(answer_id=date_answer_id):
                    substrings[0],
                    '{answer_id}-month'.format(answer_id=date_answer_id):
                    substrings[1].lstrip("0"),
                    '{answer_id}-year'.format(answer_id=date_answer_id):
                    substrings[2],
                })
            elif len(substrings) == 2:
                del mapped_answers[date_answer_id]
                mapped_answers.update({
                    '{answer_id}-month'.format(answer_id=date_answer_id):
                    substrings[0].lstrip("0"),
                    '{answer_id}-year'.format(answer_id=date_answer_id):
                    substrings[1],
                })
    return mapped_answers
    def test_form_ids_match_block_answer_ids(self):
        survey = load_schema_file("1_0102.json")

        block_json = SchemaHelper.get_block(survey, "reporting-period")
        error_messages = SchemaHelper.get_messages(survey)

        form = generate_form(block_json, {}, error_messages)

        for answer in SchemaHelper.get_answers_for_block(block_json):
            self.assertTrue(hasattr(form, answer['id']))
        def map_errors(self):
            ordered_errors = []

            answer_json_list = SchemaHelper.get_answers_for_block(block_json)

            for answer_json in answer_json_list:
                if answer_json[
                        'id'] in self.errors and 'parent_answer_id' not in answer_json:
                    ordered_errors += map_subfield_errors(
                        self.errors, answer_json['id'])
                if 'options' in answer_json and 'parent_answer_id' not in answer_json:
                    ordered_errors += map_child_option_errors(
                        self.errors, answer_json)

            return ordered_errors
def get_name_form(block_json, error_messages):
    class NameForm(Form):
        pass

    for answer in SchemaHelper.get_answers_for_block(block_json):
        validate_with = [validators.optional()]

        if answer['mandatory'] is True:
            error_message = error_messages['MANDATORY']
            if 'validation' in answer and 'messages' in answer['validation'] \
                    and 'MANDATORY' in answer['validation']['messages']:
                error_message = answer['validation']['messages']['MANDATORY']

            validate_with = [validators.InputRequired(message=error_message, )]

        # Have to be set this way given hyphenated names
        # are considered invalid in python
        field = StringField(validators=validate_with)

        setattr(NameForm, answer['id'], field)

    return NameForm