def test_render_date(self): date = '{{date|format_date}}' context = {'date': datetime.strptime('01/01/2017', '%d/%m/%Y')} rendered = TemplateRenderer().render(date, **context) self.assertEqual(rendered, '1 January 2017')
def test_render_nested_templatable_property(self): guidance = { 'title': 'Include', 'description': '{{someone_else}}', 'list': [ '{{yourself}}', 'People here on holiday', '{{someone}}', ] } context = {'yourself': 'Joe Bloggs', 'someone': 'Jane Bloggs', 'someone_else': 'John Doe'} rendered = TemplateRenderer().render(guidance, **context) expected = { 'title': 'Include', 'description': 'John Doe', 'list': [ 'Joe Bloggs', 'People here on holiday', 'Jane Bloggs', ] } self.assertEqual(rendered, expected)
def test_render_nested_templatable_property(self): question = Question() question.guidance = [{ 'title': 'Include', 'description': '{{someone_else}}', 'list': ['{{yourself}}', 'People here on holiday', ['{{someone}}']] }] context = { 'yourself': 'Joe Bloggs', 'someone': 'Jane Bloggs', 'someone_else': 'John Doe' } schema = TemplateRenderer().render_schema_items(question, context) expected = [{ 'title': 'Include', 'description': 'John Doe', 'list': ['Joe Bloggs', 'People here on holiday', ['Jane Bloggs']] }] self.assertEqual(schema.guidance, expected)
def test_should_replace_jinja_template_variable_containing_special_characters(self): content = 'How is {{ [answers.first_name[group_instance], answers.last_name[group_instance]] | format_household_name }} ' \ 'related to the people below?' safe_content = TemplateRenderer.safe_content(content) self.assertEqual(safe_content, 'How is … related to the people below?')
def test_render_schema_item(self): title = 'Hello {{name}}' context = {'name': 'Joe Bloggs'} rendered = TemplateRenderer().render(title, **context) self.assertEqual(rendered, 'Hello Joe Bloggs')
def test_should_replace_jinja_template_variable_containing_curly_braces( self): content = 'Is {{ calculate_offset_from_weekday_in_last_whole_week(collection_metadata[started_at], {}, SU) }} correct?' safe_content = TemplateRenderer.safe_content(content) self.assertEqual(safe_content, 'Is … correct?')
def get_view_submission(schema, eq_id, form_type): # pylint: disable=unused-argument session_data = get_session_store().session_data if _is_submission_viewable(schema.json, session_data.submitted_time): submitted_data = data_access.get_by_key(SubmittedResponse, session_data.tx_id) if submitted_data: metadata_context = build_metadata_context_for_survey_completed( session_data) pepper = current_app.eq['secret_store'].get_secret_by_name( 'EQ_SERVER_SIDE_STORAGE_ENCRYPTION_USER_PEPPER') encrypter = StorageEncryption(current_user.user_id, current_user.user_ik, pepper) submitted_data = json.loads( encrypter.decrypt_data(submitted_data.data)) answer_store = AnswerStore( existing_answers=submitted_data.get('answers')) metadata = submitted_data.get('metadata') routing_path = PathFinder(schema, answer_store, metadata, []).get_full_routing_path() schema_context = _get_schema_context(routing_path, 0, metadata, answer_store, schema) rendered_schema = renderer.render(schema.json, **schema_context) summary_rendered_context = build_summary_rendering_context( schema, rendered_schema['sections'], answer_store, metadata) context = { 'summary': { 'groups': summary_rendered_context, 'answers_are_editable': False, 'is_view_submission_response_enabled': is_view_submitted_response_enabled(schema.json), }, 'variables': None, } return render_theme_template( schema.json['theme'], template_name='view-submission.html', metadata=metadata_context, analytics_ua_id=current_app.config['EQ_UA_ID'], survey_id=schema.json['survey_id'], survey_title=TemplateRenderer.safe_content( schema.json['title']), content=context) return redirect( url_for('post_submission.get_thank_you', eq_id=eq_id, form_type=form_type))
def test_render_min_date(self): content = 'The least recent date is {{ min_value(first, second) }}' now = datetime.datetime.utcnow() then = now - datetime.timedelta(seconds=60) context = {'first': now, 'second': then} rendered = TemplateRenderer().render(content, **context) self.assertEqual(rendered, 'The least recent date is {}'.format(then))
def get_session_expired(eq_id, form_type, collection_id): # pylint: disable=unused-argument schema = load_schema_from_params(eq_id, form_type) return render_theme_template( schema['theme'], template_name='session-expired.html', analytics_ua_id=current_app.config['EQ_UA_ID'], survey_title=TemplateRenderer.safe_content(schema['title']))
def test_render_min(self): content = 'The smallest number is {{ min_value(first, second) }}' context = { 'first': 1, 'second': 2 } rendered = TemplateRenderer().render(content, **context) self.assertEqual(rendered, 'The smallest number is 1')
def test_render_min_str(self): content = 'The smallest string is {{ min_value(first, second) }}' context = { 'first': 'zzz', 'second': 'zzz1' } rendered = TemplateRenderer().render(content, **context) self.assertEqual(rendered, 'The smallest string is zzz')
def test_render_date_month_year(self): date = '{{date|format_date}}' context = {'date': '2017-01'} with self.app_request_context('/'): rendered = TemplateRenderer().render(date, **context) self.assertEqual(rendered, "<span class='date'>January 2017</span>")
def test_household_summary_with_no_names(self): description = "<h2 class='neptune'>Your household includes:</h2> " \ '{{ []|format_household_summary }}' context = {} rendered = TemplateRenderer().render(description, **context) self.assertEqual(rendered, "<h2 class='neptune'>Your household includes:</h2> " '')
def test_render_schema_item(self): question = Question() question.title = 'Hello {{name}}' question.templatable_properties = ['title'] context = {'name': 'Joe Bloggs'} schema = TemplateRenderer().render_schema_items(question, context) self.assertEqual(schema.title, 'Hello Joe Bloggs')
def get_sign_out(): logout_user() return render_theme_template( cookie_session.get('theme', 'default'), template_name='signed-out.html', analytics_ua_id=current_app.config['EQ_UA_ID'], account_service_url=cookie_session.get('account_service_url'), survey_title=TemplateRenderer.safe_content( cookie_session.get('survey_title', '')))
def render_template(template, **kwargs): theme = g.schema.json.get('theme') template = '{}.html'.format(template).lower() return render_theme_template(theme, template, survey_title=TemplateRenderer.safe_content( g.schema.json['title']), survey_id=g.schema.json['survey_id'], **kwargs)
def render_template(template_name): tx_id = get_tx_id() user_agent = user_agent_parser.Parse(request.headers.get('User-Agent', '')) return render_theme_template(cookie_session.get('theme', 'default'), template_name=template_name, analytics_ua_id=current_app.config['EQ_UA_ID'], ua=user_agent, tx_id=tx_id, account_service_url=cookie_session.get('account_service_url'), survey_title=TemplateRenderer.safe_content(cookie_session.get('survey_title', '')))
def test_strings_containing_quotes_not_changed(self): title = '{{ [answers.person_name] | format_household_name }}' context = { 'answers': { 'person_name': '"', } } rendered = TemplateRenderer().render(title, **context) self.assertEqual(rendered, '"')
def test_strings_containing_backslashes_are_escaped(self): title = '{{ [answers.person_name] | format_household_name }}' context = { 'answers': { 'person_name': '\\', } } rendered = TemplateRenderer().render(title, **context) self.assertEqual(rendered, '\\')
def render_template(template, **kwargs): theme = g.schema.json.get('theme') template = '{}.html'.format(template).lower() return render_theme_template( theme, template, survey_title=TemplateRenderer.safe_content(g.schema.json['title']), account_service_url=cookie_session.get('account_service_url'), account_service_log_out_url=cookie_session.get( 'account_service_log_out_url'), survey_id=g.schema.json['survey_id'], **kwargs)
def get_page_title_for_location(schema_json, current_location): block = SchemaHelper.get_block_for_location(schema_json, current_location) if block['type'] == 'Interstitial': group = SchemaHelper.get_group(schema_json, current_location.group_id) page_title = '{group_title} - {survey_title}'.format( group_title=group['title'], survey_title=schema_json['title']) elif block['type'] == 'Questionnaire': first_question = next(SchemaHelper.get_questions_for_block(block)) page_title = '{question_title} - {survey_title}'.format( question_title=first_question['title'], survey_title=schema_json['title']) else: page_title = schema_json['title'] return TemplateRenderer.safe_content(page_title)
def get_thank_you(schema, metadata, eq_id, form_type): session_data = get_session_store().session_data completeness = get_completeness(current_user) if session_data.submitted_time: metadata_context = build_metadata_context_for_survey_completed( session_data) view_submission_url = None view_submission_duration = 0 if _is_submission_viewable(schema.json, session_data.submitted_time): view_submission_url = url_for('.get_view_submission', eq_id=eq_id, form_type=form_type) view_submission_duration = humanize.naturaldelta( timedelta(seconds=schema.json['view_submitted_response'] ['duration'])) cookie_message = request.cookies.get('ons_cookie_message_displayed') allow_analytics = analytics_allowed(request) return render_theme_template( schema.json['theme'], template_name='thank-you.html', metadata=metadata_context, analytics_gtm_id=current_app.config['EQ_GTM_ID'], analytics_gtm_env_id=current_app.config['EQ_GTM_ENV_ID'], survey_id=schema.json['survey_id'], survey_title=TemplateRenderer.safe_content(schema.json['title']), is_view_submitted_response_enabled= is_view_submitted_response_enabled(schema.json), view_submission_url=view_submission_url, account_service_url=cookie_session.get('account_service_url'), account_service_log_out_url=cookie_session.get( 'account_service_log_out_url'), view_submission_duration=view_submission_duration, cookie_message=cookie_message, allow_analytics=allow_analytics) routing_path = path_finder.get_full_routing_path() router = Router(schema, routing_path, completeness) next_location = router.get_next_location() return _redirect_to_location(metadata['collection_exercise_sid'], metadata.get('eq_id'), metadata.get('form_type'), next_location)
def get_page_title_for_location(schema, current_location, metadata, answer_store): block = schema.get_block(current_location.block_id) if block['type'] == 'Interstitial': group = schema.get_group(current_location.group_id) page_title = '{group_title} - {survey_title}'.format( group_title=group['title'], survey_title=schema.json['title']) elif block['type'] == 'Question': first_question = next(schema.get_questions_for_block(block)) question_title = get_question_title(first_question, answer_store, schema, metadata, current_location.group_instance) page_title = '{question_title} - {survey_title}'.format( question_title=question_title, survey_title=schema.json['title']) else: page_title = schema.json['title'] return TemplateRenderer.safe_content(page_title)
def render_template(template_name): tx_id = get_tx_id() user_agent = user_agent_parser.Parse(request.headers.get('User-Agent', '')) cookie_message = request.cookies.get('ons_cookie_message_displayed') allow_analytics = analytics_allowed(request) return render_theme_template( cookie_session.get('theme', 'default'), template_name=template_name, analytics_gtm_id=current_app.config['EQ_GTM_ID'], analytics_gtm_env_id=current_app.config['EQ_GTM_ENV_ID'], cookie_message=cookie_message, allow_analytics=allow_analytics, ua=user_agent, tx_id=tx_id, account_service_url=cookie_session.get('account_service_url'), survey_title=TemplateRenderer.safe_content( cookie_session.get('survey_title', '')))
def test_household_summary_values_are_escaped_and_not_encoded(self): description = "<h2 class='neptune'>Your household includes:</h2> " \ '{{ [answers.first_name, answers.middle_names, answers.last_name]|format_household_summary }}' context = { 'answers': { 'first_name': ['Alice', 'Bob', '\\', 'Dave'], 'middle_names': ['', 'Berty', '"', 'Dixon'], 'last_name': ['Aardvark', 'Brown', '!', 'Davies'], } } rendered = TemplateRenderer().render(description, **context) self.assertEqual(rendered, "<h2 class='neptune'>Your household includes:</h2> " '<ul>' '<li>Alice Aardvark</li>' '<li>Bob Berty Brown</li>' r'<li>\ " !</li>' '<li>Dave Dixon Davies</li>' '</ul>')
def get_sign_out(): """ Signs the user first out of eq, then the account service by hitting the account services' logout url. """ account_service_log_out_url = cookie_session.get( 'account_service_log_out_url') logout_user() if account_service_log_out_url: return redirect(account_service_log_out_url) return render_theme_template( cookie_session.get('theme', 'default'), template_name='signed-out.html', analytics_ua_id=current_app.config['EQ_UA_ID'], account_service_url=cookie_session.get('account_service_url'), survey_title=TemplateRenderer.safe_content( cookie_session.get('survey_title', '')))
def _render_template(context, current_location, template, front_end_navigation, metadata_context, previous_url): theme = g.schema_json.get('theme', None) logger.debug("theme selected", theme=theme) session_timeout = current_app.config['EQ_SESSION_TIMEOUT_SECONDS'] schema_session_timeout = g.schema_json.get('session_timeout_in_seconds') if schema_session_timeout is not None and schema_session_timeout < current_app.config[ 'EQ_SESSION_TIMEOUT_SECONDS']: session_timeout = schema_session_timeout session_timeout_prompt = g.schema_json.get( 'session_prompt_in_seconds' ) or current_app.config['EQ_SESSION_TIMEOUT_PROMPT_SECONDS'] survey_data = metadata_context['survey'] url_prefix = '/questionnaire/{}/{}/{}'.format(survey_data['eq_id'], survey_data['form_type'], survey_data['collection_id']) page_title = get_page_title_for_location(g.schema_json, current_location) template = '{}.html'.format(template).lower() feedback_enable = False if settings.FEEDBACK_ENABLED_ALL or request.view_args[ 'form_type'] in settings.FEEDBACK_ENABLED_FOR: feedback_enable = True return render_theme_template( theme, template, meta=metadata_context, content=context, current_location=current_location, analytics_ua_id=current_app.config['EQ_UA_ID'], previous_location=previous_url, navigation=front_end_navigation, survey_title=TemplateRenderer.safe_content(g.schema_json['title']), legal_basis=g.schema_json['legal_basis'], survey_id=g.schema_json['survey_id'], session_timeout=session_timeout, session_timeout_prompt=session_timeout_prompt, url_prefix=url_prefix, page_title=page_title, feedback_enable=feedback_enable, )
def get_sign_out(): """ Signs the user first out of eq, then the account service by hitting the account services' logout url. """ account_service_log_out_url = cookie_session.get('account_service_log_out_url') logout_user() if account_service_log_out_url: return redirect(account_service_log_out_url) cookie_message = request.cookies.get('ons_cookie_message_displayed') allow_analytics = analytics_allowed(request) return render_theme_template(cookie_session.get('theme', 'default'), template_name='signed-out.html', analytics_gtm_id=current_app.config['EQ_GTM_ID'], analytics_gtm_env_id=current_app.config['EQ_GTM_ENV_ID'], cookie_message=cookie_message, allow_analytics=allow_analytics, account_service_url=cookie_session.get('account_service_url'), survey_title=TemplateRenderer.safe_content(cookie_session.get('survey_title', '')))
def get_thank_you(eq_id, form_type, collection_id): # pylint: disable=unused-argument survey_completed_metadata = current_app.eq[ 'session_storage'].get_survey_completed_metadata() schema = load_schema_from_params(eq_id, form_type) if survey_completed_metadata: metadata_context = build_metadata_context_for_survey_completed( survey_completed_metadata) thank_you_template = render_theme_template( schema['theme'], template_name='thank-you.html', meta=metadata_context, analytics_ua_id=current_app.config['EQ_UA_ID'], survey_id=schema['survey_id'], survey_title=TemplateRenderer.safe_content(schema['title'])) if settings.FEEDBACK_ENABLED_ALL or form_type in settings.FEEDBACK_ENABLED_FOR: session['feedback'] = True session['form_type'] = form_type return thank_you_template else: return _redirect_to_latest_location(collection_id, eq_id, form_type, schema)
def get_thank_you(schema, metadata, eq_id, form_type): # pylint: disable=unused-argument session_data = get_session_store().session_data completeness = get_completeness(current_user) if session_data.submitted_time: metadata_context = build_metadata_context_for_survey_completed( session_data) view_submission_url = None view_submission_duration = 0 if _is_submission_viewable(schema.json, session_data.submitted_time): view_submission_url = url_for('.get_view_submission', eq_id=eq_id, form_type=form_type) view_submission_duration = humanize.naturaldelta( timedelta(seconds=schema.json['view_submitted_response'] ['duration'])) return render_theme_template( schema.json['theme'], template_name='thank-you.html', metadata=metadata_context, analytics_ua_id=current_app.config['EQ_UA_ID'], survey_id=schema.json['survey_id'], survey_title=TemplateRenderer.safe_content(schema.json['title']), is_view_submitted_response_enabled= is_view_submitted_response_enabled(schema.json), view_submission_url=view_submission_url, view_submission_duration=view_submission_duration) routing_path = path_finder.get_full_routing_path() collection_id = metadata['collection_exercise_sid'] router = Router(schema, routing_path, completeness) next_location = router.get_next_location() return _redirect_to_location(collection_id, metadata.get('eq_id'), metadata.get('form_type'), next_location)