def validate_space_token_combination(errors, space_id, access_token, is_preview=False): """Validates if client is authenticated.""" try: Contentful.create_client(space_id, access_token, is_preview, environ.get('CONTENTFUL_HOST', None)) except HTTPError as e: token_field = 'previewToken' if is_preview else 'deliveryToken' if e.status_code == 401: error_label = 'deliveryKeyInvalidLabel' if is_preview: error_label = 'previewKeyInvalidLabel' append_error_message(errors, token_field, translate(error_label, locale().code)) elif e.status_code == 404: append_error_message( errors, 'spaceId', translate('spaceOrTokenInvalid', locale().code)) else: append_error_message( errors, token_field, translate('somethingWentWrongLabel', locale().code))
def breadcrumbs(path, locale_code): """Generated breadcrumb data from a path on a specific locale. :param path: URL Path to generate breadcrumbs from. :param locale_code: Locale into which translate known parts of the breadcrumbs. :return: Array of dictionaries with breadcrumb information. Usage: >>> breadcrumbs('/', 'en-US') [{'url': '/', 'label': 'Home'}] >>> breadcrumbs('/courses/hello-world', 'de-DE') [{'url': '/', 'label': 'Startseite'}, {'url': '/courses', 'label': 'Kurse'}, {'url': '/courses/hello-world', 'label': 'hello-world'}] """ crumbs = [] crumbs.append({'url': '/', 'label': translate('homeLabel', locale_code)}) parts = path.split('/')[1:] for index, part in enumerate(parts): label = part.replace('-', ' ') if is_translation_available('{0}Label'.format(label), locale_code): label = translate('{0}Label'.format(label), locale_code) path = '/'.join(parts[0:index + 1]) crumbs.append({'url': '/{0}'.format(path), 'label': label}) return crumbs
def format_meta_title(title, locale): """Formats the title and localizes it. :param title: Current page title. :param locale: Desired locale. :return: Localized formatted string. """ if not title: return translate('defaultTitle', locale) return "{0} — {1}".format(title.capitalize(), translate('defaultTitle', locale))
def show_settings(): current_space_id = space_id() current_delivery_token = delivery_token() current_preview_token = preview_token() errors = check_errors(current_space_id, current_delivery_token, current_preview_token) if errors: restore_session_to_last_valid_values() space = contentful().space(api_id()) return render_with_globals( 'settings', title=translate('settingsLabel', locale().code), errors=errors, has_errors=bool(errors), success=False, space=space, is_using_custom_credentials=is_using_custom_credentials(session), space_id=current_space_id, delivery_token=current_delivery_token, preview_token=current_preview_token, host=request.url_root)
def check_field_required(errors, element, field_name): """Checks if a required field is present.""" if not element: append_error_message(errors, field_name, translate('fieldIsRequiredLabel', locale().code))
def current_api(): """Returns the currently selected API data.""" api_data = { 'cda': { 'label': translate('contentDeliveryApiLabel', locale().code), 'id': 'cda' }, 'cpa': { 'label': translate('contentPreviewApiLabel', locale().code), 'id': 'cpa' } } try: return api_data[api_id()] except KeyError: return api_data[DEFAULT_API]
def reset_settings(): session.pop('space_id', None) session.pop('delivery_token', None) session.pop('preview_token', None) session.pop('editorial_features', None) space = contentful().space(api_id()) return render_with_globals('settings', title=translate('settingsLabel', locale().code), errors={}, has_errors=False, success=False, space=space, host=request.url_root)
def show_courses(): courses = contentful().courses(api_id(), locale().code) categories = contentful().categories(api_id(), locale().code) if should_attach_entry_state(api_id(), session): for course in courses: attach_entry_state(course) return render_with_globals( 'courses', title='{0} ({1})'.format( translate('allCoursesLabel', locale().code), len(courses) ), courses=courses, categories=categories )
def save_settings(): space_id = request.values.get('spaceId', None) delivery_token = request.values.get('deliveryToken', None) preview_token = request.values.get('previewToken', None) editorial_features = bool(request.values.get('editorialFeatures', False)) errors = check_errors(space_id, delivery_token, preview_token) if not errors: update_session_for('space_id', space_id) update_session_for('delivery_token', delivery_token) update_session_for('preview_token', preview_token) update_session_for('editorial_features', editorial_features) space = contentful().space(api_id()) return render_with_globals( 'settings', title=translate('settingsLabel', locale().code), errors=errors, has_errors=bool(errors), success=not bool(errors), space=space, host=request.url_root), 201 if not errors else 409
def test_returns_translated_string_when_symbol_is_found_for_locale(self): self.assertEqual('Courses', translate('coursesLabel', 'en-US')) self.assertEqual('Kurse', translate('coursesLabel', 'de-DE'))
def test_returns_an_error_string_when_symbol_is_not_found_for_locale(self): self.assertEqual( 'Translation not found for doesntExist in en-US', translate('doesntExist', 'en-US') )
def test_returns_default_fallback_locale_when_locale_file_is_not_found(self): self.assertEqual( 'Courses', translate('coursesLabel', 'unknown-Locale') )
def show_imprint(): return render_with_globals( 'imprint', title=translate('imprintLabel', locale().code) )