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
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)
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)
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
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
#!/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)
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