def v1_blueprint(app):
    blueprint = APIBlueprint('v1', __name__, url_prefix='/v1')

    @blueprint.route('/foo')
    def foo():
        return 'Foo'

    return blueprint
def test_deprecated_routes(app, v1_blueprint):
    inherited = APIBlueprint('v2',
                             __name__,
                             url_prefix='/v2',
                             inherit_from=v1_blueprint,
                             remapping={'/foo': None})
    app.register_blueprint(inherited)
    app.register_blueprint(v1_blueprint)
    v1_response = app.test_client().get('v1/foo')
    assert v1_response.data == six.b('Foo')
    deprecated_response = app.test_client().get('v2/foo')
    assert deprecated_response.status_code == 404
def test_blueprint_with_inheritance(app, v1_blueprint):
    """
    Verify that parent blueprint routes are copied when a blueprint is
    initialized with an `inherit_from` argument.
    """
    inherited = APIBlueprint('v2',
                             __name__,
                             url_prefix='/v2',
                             inherit_from=v1_blueprint)
    app.register_blueprint(v1_blueprint)
    app.register_blueprint(inherited)
    v1_response = app.test_client().get('/v1/foo')
    assert v1_response.data == six.b('Foo')
    v2_response = app.test_client().get('/v2/foo')
    assert v2_response.data == v1_response.data
def test_same_rule_can_be_registered_with_different_methods(app):
    blueprint = APIBlueprint('blueprint', __name__)

    @blueprint.route('/foo', methods=['GET'])
    def foo():
        return 'Foo'

    @blueprint.route('/foo', methods=['POST'])
    def foo_post():
        return 'Foo POST'

    app.register_blueprint(blueprint)
    get_response = app.test_client().get('/foo')
    assert get_response.data == six.b('Foo')
    post_response = app.test_client().post('/foo')
    assert post_response.data == six.b('Foo POST')
def test_overloaded_route(app, v1_blueprint):
    """
    Verify that an inherited blueprint can overload its routes..
    """
    inherited = APIBlueprint('v2',
                             __name__,
                             url_prefix='/v2',
                             inherit_from=v1_blueprint)

    @inherited.route('/foo')
    def overloaded_foo():
        return 'Overloaded Foo'

    app.register_blueprint(v1_blueprint)
    app.register_blueprint(inherited)
    v1_response = app.test_client().get('/v1/foo')
    assert v1_response.data == six.b('Foo')
    v2_response = app.test_client().get('/v2/foo')
    assert v2_response.data == six.b('Overloaded Foo')
Exemplo n.º 6
0
import kuas_api.modules.error as error
from flask_apiblueprint import APIBlueprint
from kuas_api.modules.json import jsonify

# Create v2 blueprint
api_v2 = APIBlueprint('api_v2', __name__, subdomain='', url_prefix='/v2')


def get_git_revision_short_hash():
    import subprocess
    return subprocess.check_output(['git', 'rev-parse', '--short',
                                    'HEAD']).decode("utf-8").strip("\n")


@api_v2.route('/')
def version_2():
    """Return API version
    """
    return jsonify(name="kuas-api version 2.",
                   version="2",
                   server_revision=get_git_revision_short_hash(),
                   endpoints="https://kuas.grd.idv.tw:14769/v2/")


@api_v2.errorhandler(401)
def unauthorized_error(err):
    return error.error_handle(status=401,
                              developer_message="token expired",
                              user_message="token expired",
                              error_code=401)
Exemplo n.º 7
0
from flask import jsonify

from flask_apiblueprint import APIBlueprint

from sample_api import User, Media
from sample_api.views.v1 import api_v1

remapping = {'/users/list/': '/users/'}

api_v2 = APIBlueprint('api_v2',
                      __name__,
                      subdomain='',
                      url_prefix='/api/v2',
                      inherit_from=api_v1,
                      remapping=remapping)


@api_v2.route('/user/<user_id>/')
def user_info(user_id):
    username = User.query.get(user_id).username
    firstname = User.query.get(user_id).firstname
    return jsonify(data=dict(username=username, firstname=firstname))
Exemplo n.º 8
0
from flask_apiblueprint import APIBlueprint
from kuas_api.modules.json import jsonify
from .doc import auto

# Create v2 blueprint
api_v2 = APIBlueprint(
    'api_v2', __name__,
    subdomain='',
    url_prefix='/v2')


def get_git_revision_short_hash():
    import subprocess
    return subprocess.check_output(
        ['git', 'rev-parse', '--short', 'HEAD']).decode("utf-8").strip("\n")


@api_v2.route('/')
@auto.doc(groups=["public"])
def version_2():
    """Return API version
    """
    return jsonify(
        name="kuas-api version 2.",
        version="2",
        server_revision=get_git_revision_short_hash(),
        endpoints="https://kuas.grd.idv.tw:14769/v2/"
    )


# Add v2 routes
Exemplo n.º 9
0
from flask import jsonify

from flask_apiblueprint import APIBlueprint
from sample_api import User, Media

api_v1 = APIBlueprint('api_v1', __name__, subdomain='', url_prefix='/api/v1')

@api_v1.route('/user/<user_id>/')
def username(user_id):
    username = User.query.get(user_id).username
    return jsonify(username=username)

@api_v1.route('/users/list/')
def users_list():
    users = User.query.all()
    usernames = [{'username': user.username} for user in users]
    return jsonify(data=usernames)

@api_v1.route('/media/<media_id>/')
def media_info(media_id):
    kind = Media.query.get(media_id).kind
    return jsonify(data=dict(kind=kind))


Exemplo n.º 10
0
import io

import flask
from PIL import Image
from flask import abort, make_response
from flask_api.decorators import set_renderers
from flask_api.renderers import JSONRenderer
from flask_apiblueprint import APIBlueprint

from predicts import get_prediction_model
from renderers import JSONAPIRenderer
from utils import check_mimetype, WrongMimeTypeError

api = APIBlueprint("api_v1", __name__)


@api.route("/predict/<string:prediction_model>/", methods=["POST"])
@set_renderers(JSONAPIRenderer, JSONRenderer)
def predict(prediction_model):
    predict_model = get_prediction_model(prediction_model)
    if predict_model:
        image = flask.request.files["image"]
        if flask.request.files.get("image"):
            try:
                # Check image extension (it should be JPEG or PNG)
                check_mimetype(flask.request.files.get("image"))
            except WrongMimeTypeError:
                return abort(400, "Unsupported file")
            image.seek(0)
            image = image.read()
            image = Image.open(io.BytesIO(image))
Exemplo n.º 11
0
# -*- coding: utf-8 -*-

from flask_apiblueprint import APIBlueprint
from kuas_api.views.v2 import api_v2

# Create latest blueprint
latest = APIBlueprint('latest',
                      __name__,
                      subdomain='',
                      url_prefix='/latest',
                      inherit_from=api_v2)