Пример #1
0
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))
Пример #2
0
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
Пример #3
0
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))
Пример #4
0
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)
Пример #5
0
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))
Пример #6
0
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]
Пример #7
0
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)
Пример #8
0
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
    )
Пример #9
0
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
Пример #10
0
 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'))
Пример #11
0
 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')
     )
Пример #12
0
 def test_returns_default_fallback_locale_when_locale_file_is_not_found(self):
     self.assertEqual(
         'Courses',
         translate('coursesLabel', 'unknown-Locale')
     )
Пример #13
0
def show_imprint():
    return render_with_globals(
        'imprint',
        title=translate('imprintLabel', locale().code)
    )