byceps/byceps

View on GitHub
byceps/blueprints/api/v1/snippet/views.py

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
"""
byceps.blueprints.api.v1.snippet.views
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

:Copyright: 2014-2024 Jochen Kupperschmidt
:License: Revised BSD (see `LICENSE` file for details)
"""

from flask import jsonify

from byceps.blueprints.api.decorators import api_token_required
from byceps.blueprints.site.snippet.templating import get_rendered_snippet_body
from byceps.services.snippet import snippet_service
from byceps.services.snippet.models import SnippetScope
from byceps.util.framework.blueprint import create_blueprint
from byceps.util.views import create_empty_json_response


blueprint = create_blueprint('snippet_api', __name__)


@blueprint.get(
    '/by_name/<scope_type>/<scope_name>/<snippet_name>/<language_code>'
)
@api_token_required
def get_snippet_by_name(scope_type, scope_name, snippet_name, language_code):
    """Return the current version of the snippet with that name in that
    scope.
    """
    scope = SnippetScope(scope_type, scope_name)
    version = snippet_service.find_current_version_of_snippet_with_name(
        scope, snippet_name, language_code
    )
    if version is None:
        return create_empty_json_response(404)

    content = {'body': get_rendered_snippet_body(version)}

    return jsonify(
        {
            'version': version.id,
            'content': content,
        }
    )