コード例 #1
0
def test_app_create_with_invalid_view_func():
    app = Flask(__name__, instance_relative_config=True)
    jsonrpc = JSONRPC(app, service_url='/api', enable_web_browsable_api=True)

    # pylint: disable=W0612
    @jsonrpc.method('app.fn2')
    def fn1(s: str) -> str:
        return 'Foo {0}'.format(s)

    with pytest.raises(
            ValueError,
            match='the view function must be either a function or a method'):
        jsonrpc.register(fn1.__new__, name='invalid')

    with app.test_client() as client:
        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn2',
                             'params': [':)']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Foo :)'}
        assert rv.status_code == 200
コード例 #2
0
ファイル: run.py プロジェクト: imfht/flaskapps
        return a / float(b)


app = Flask(__name__)
jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)


@jsonrpc.method('subtract')
def subtract(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
    return a - b


def hello_default_args(string: str = 'Flask JSON-RPC') -> str:
    return 'We salute you {0}'.format(string)


jsonrpc.register(hello_default_args)

my_app = MyApp()
jsonrpc.register(my_app.index)
jsonrpc.register(my_app.greeting)
jsonrpc.register(my_app.args_validate)
jsonrpc.register(my_app.notify)
jsonrpc.register(my_app.fails)
jsonrpc.register(my_app.sum_, name='sum')
jsonrpc.register(my_app.multiply)
jsonrpc.register(my_app.divide)

if __name__ == '__main__':
    app.run(host='0.0.0.0', debug=True)
コード例 #3
0
from flask import Flask
from flask_jsonrpc import JSONRPC

import handler

app = Flask(__name__)
jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)

jsonrpc.register(handler.get_ticket, "tickets.get_ticket")
jsonrpc.register(handler.get_customer_tickets, "tickets.get_customer_tickets")

if __name__ == '__main__':
    app.run(debug=True, use_reloader=True)
コード例 #4
0
def test_app_create():
    app = Flask(__name__, instance_relative_config=True)
    jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)

    # pylint: disable=W0612
    @jsonrpc.method('App.index')
    def index() -> str:
        return 'Welcome to Flask JSON-RPC'

    # pylint: disable=W0612
    @jsonrpc.method('app.fn0')
    def fn0():
        pass

    # pylint: disable=W0612
    @jsonrpc.method('app.fn1')
    def fn1() -> str:
        return 'Bar'

    # pylint: disable=W0612
    @jsonrpc.method('app.fn2')
    def fn2(s: str) -> str:
        return 'Foo {0}'.format(s)

    # pylint: disable=W0612
    def fn3(s: str) -> str:
        return 'Foo {0}'.format(s)

    jsonrpc.register(fn3, name='app.fn3')

    with app.test_client() as client:
        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'App.index',
                             'params': []
                         })
        assert rv.json == {
            'id': 1,
            'jsonrpc': '2.0',
            'result': 'Welcome to Flask JSON-RPC'
        }
        assert rv.status_code == 200

        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn0',
                             'params': []
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': None}
        assert rv.status_code == 200

        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn1',
                             'params': []
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Bar'}
        assert rv.status_code == 200

        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn2',
                             'params': [':)']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Foo :)'}
        assert rv.status_code == 200

        rv = client.post('/api',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn3',
                             'params': [':)']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Foo :)'}
        assert rv.status_code == 200
コード例 #5
0
def test_app_create_multiple_jsonrpc_versions():
    app = Flask(__name__, instance_relative_config=True)
    jsonrpc_v1 = JSONRPC(app, '/api/v1', enable_web_browsable_api=True)
    jsonrpc_v2 = JSONRPC(app, '/api/v2', enable_web_browsable_api=True)

    # pylint: disable=W0612
    @jsonrpc_v1.method('app.fn2')
    def fn1_v1(s: str) -> str:
        return 'v1: Foo {0}'.format(s)

    # pylint: disable=W0612
    @jsonrpc_v2.method('app.fn2')
    def fn1_v2(s: str) -> str:
        return 'v2: Foo {0}'.format(s)

    # pylint: disable=W0612
    @jsonrpc_v1.method('app.fn3')
    def fn3(s: str) -> str:
        return 'Poo {0}'.format(s)

    # pylint: disable=W0612
    @jsonrpc_v2.method('app.fn1')
    def fn2(s: str) -> str:
        return 'Bar {0}'.format(s)

    # pylint: disable=W0612
    def fn4_v1(s: str) -> str:
        return 'Poo {0}'.format(s)

    jsonrpc_v1.register(fn4_v1)

    # pylint: disable=W0612
    def fn4_v2(s: str) -> str:
        return 'Bar {0}'.format(s)

    jsonrpc_v2.register(fn4_v2)

    with app.test_client() as client:
        rv = client.post('/api/v1',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn2',
                             'params': [':)']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'v1: Foo :)'}
        assert rv.status_code == 200

        rv = client.post('/api/v2',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn2',
                             'params': [':D']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'v2: Foo :D'}
        assert rv.status_code == 200

        rv = client.post('/api/v1',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn3',
                             'params': [';)']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Poo ;)'}
        assert rv.status_code == 200

        rv = client.post('/api/v2',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'app.fn1',
                             'params': ['\\oB']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Bar \\oB'}
        assert rv.status_code == 200

        rv = client.post('/api/v1',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'fn4_v1',
                             'params': ['\\oB']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Poo \\oB'}
        assert rv.status_code == 200

        rv = client.post('/api/v2',
                         json={
                             'id': 1,
                             'jsonrpc': '2.0',
                             'method': 'fn4_v2',
                             'params': ['\\oB']
                         })
        assert rv.json == {'id': 1, 'jsonrpc': '2.0', 'result': 'Bar \\oB'}
        assert rv.status_code == 200
コード例 #6
0
#!/usr/bin/python3
import os
from flask import Flask, jsonify, redirect, request
from flask_jsonrpc import JSONRPC
import settings
from settings import logger, env
from controllers.pharmacy import Pharmacy

app = Flask(__name__, instance_relative_config=True)

jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)


@jsonrpc.method('App.index')
def index() -> str:
    return 'Welcome to Pharmacies Finder'


pharmacy = Pharmacy()
jsonrpc.register(pharmacy.SearchNearestPharmacy)

if __name__ == '__main__':
    debug = env.bool('DEBUG', True)
    logger.info("Start App Flask")
    context = None
    if env.bool('SSL_ENABLED', False):
        #TODO: add certificate and key files for production purpose
        context = ('path/to/file.crt', 'path/to/file.key')

    app.run(debug=debug, host='0.0.0.0', ssl_context=context)
コード例 #7
0
def create_app(test_config=None):  # noqa: C901  pylint: disable=W0612
    """Create and configure an instance of the Flask application."""
    app = Flask(__name__, instance_relative_config=True)
    if test_config:
        app.config.update(test_config)

    jsonrpc = JSONRPC(app, '/api', enable_web_browsable_api=True)

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.greeting')
    def greeting(name: str = 'Flask JSON-RPC') -> str:
        return 'Hello {0}'.format(name)

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.echo')
    def echo(string: str, _some: Any = None) -> str:
        return string

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.notify')
    def notify(_string: str = None) -> None:
        pass

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.fails')
    def fails(n: int) -> int:
        if n % 2 == 0:
            return n
        raise ValueError('number is odd')

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.strangeEcho')
    def strangeEcho(string: str,
                    omg: Dict[str, Any],
                    wtf: List[str],
                    nowai: int,
                    yeswai: str = 'Default') -> List[Any]:
        return [string, omg, wtf, nowai, yeswai]

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.sum')
    def sum_(a: Union[int, float], b: Union[int, float]) -> Union[int, float]:
        return a + b

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.decorators')
    @jsonrcp_decorator
    def decorators(string: str) -> str:
        return 'Hello {0}'.format(string)

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.returnStatusCode')
    def return_status_code(s: str) -> Tuple[str, int]:
        return 'Status Code {0}'.format(s), 201

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.returnHeaders')
    def return_headers(s: str) -> Tuple[str, Dict[str, Any]]:
        return 'Headers {0}'.format(s), {'X-JSONRPC': '1'}

    # pylint: disable=W0612
    @jsonrpc.method('jsonrpc.returnStatusCodeAndHeaders')
    def return_status_code_and_headers(
            s: str) -> Tuple[str, int, Dict[str, Any]]:
        return 'Status Code and Headers {0}'.format(s), 400, {'X-JSONRPC': '1'}

    class_app = App()
    jsonrpc.register(class_app.index, name='classapp.index')
    jsonrpc.register(class_app.greeting)
    jsonrpc.register(class_app.hello)
    jsonrpc.register(class_app.echo)
    jsonrpc.register(class_app.notify)
    jsonrpc.register(class_app.fails)

    return app