def test_api_register_converter_before_and_after_init( self, app, openapi_version): api = Api() blp = Blueprint('test', 'test', url_prefix='/test') class CustomConverter_1(BaseConverter): pass class CustomConverter_2(BaseConverter): pass app.url_map.converters['custom_str_1'] = CustomConverter_1 app.url_map.converters['custom_str_2'] = CustomConverter_2 api.register_converter(CustomConverter_1, 'custom string 1') api.init_app(app) api.register_converter(CustomConverter_2, 'custom string 2') @blp.route('/1/<custom_str_1:val>') def test_func_1(val): pass @blp.route('/2/<custom_str_2:val>') def test_func_2(val): pass api.register_blueprint(blp) spec = api.spec.to_dict() parameter_1 = spec['paths']['/test/1/{val}']['parameters'][0] parameter_2 = spec['paths']['/test/2/{val}']['parameters'][0] if 'openapi_version' == '2.0': assert parameter_1['type'] == 'custom string 1' assert parameter_2['type'] == 'custom string 2' else: assert parameter_1['schema']['type'] == 'custom string 1' assert parameter_2['schema']['type'] == 'custom string 2'
def test_api_register_converter_before_or_after_init( self, app, openapi_version): app.config['OPENAPI_VERSION'] = openapi_version api = Api() blp = Blueprint('test', 'test', url_prefix='/test') class CustomConverter_1(BaseConverter): pass class CustomConverter_2(BaseConverter): pass def converter12paramschema(converter): return {'type': 'custom string 1'} def converter22paramschema(converter): return {'type': 'custom string 2'} app.url_map.converters['custom_str_1'] = CustomConverter_1 app.url_map.converters['custom_str_2'] = CustomConverter_2 api.register_converter(CustomConverter_1, converter12paramschema) api.init_app(app) api.register_converter(CustomConverter_2, converter22paramschema) @blp.route('/1/<custom_str_1:val>') def test_func_1(val): pass @blp.route('/2/<custom_str_2:val>') def test_func_2(val): pass api.register_blueprint(blp) spec = api.spec.to_dict() parameter_1 = spec['paths']['/test/1/{val}']['parameters'][0] parameter_2 = spec['paths']['/test/2/{val}']['parameters'][0] if openapi_version == '2.0': assert parameter_1['type'] == 'custom string 1' assert parameter_2['type'] == 'custom string 2' else: assert parameter_1['schema']['type'] == 'custom string 1' assert parameter_2['schema']['type'] == 'custom string 2'
def test_api_register_converter_before_or_after_init( self, app, openapi_version): app.config["OPENAPI_VERSION"] = openapi_version api = Api() blp = Blueprint("test", "test", url_prefix="/test") class CustomConverter_1(BaseConverter): pass class CustomConverter_2(BaseConverter): pass def converter12paramschema(converter): return {"type": "custom string 1"} def converter22paramschema(converter): return {"type": "custom string 2"} app.url_map.converters["custom_str_1"] = CustomConverter_1 app.url_map.converters["custom_str_2"] = CustomConverter_2 api.register_converter(CustomConverter_1, converter12paramschema) api.init_app(app) api.register_converter(CustomConverter_2, converter22paramschema) @blp.route("/1/<custom_str_1:val>") def test_func_1(val): pass @blp.route("/2/<custom_str_2:val>") def test_func_2(val): pass api.register_blueprint(blp) spec = api.spec.to_dict() parameter_1 = spec["paths"]["/test/1/{val}"]["parameters"][0] parameter_2 = spec["paths"]["/test/2/{val}"]["parameters"][0] if openapi_version == "2.0": assert parameter_1["type"] == "custom string 1" assert parameter_2["type"] == "custom string 2" else: assert parameter_1["schema"]["type"] == "custom string 1" assert parameter_2["schema"]["type"] == "custom string 2"
def test_api_register_converter(self, app, view_type, register, openapi_version): app.config["OPENAPI_VERSION"] = openapi_version api = Api(app) blp = Blueprint("test", "test", url_prefix="/test") class CustomConverter(BaseConverter): pass def converter2paramschema(converter): return {"type": "custom string", "format": "custom format"} app.url_map.converters["custom_str"] = CustomConverter if register: api.register_converter(CustomConverter, converter2paramschema) if view_type == "function": @blp.route("/<custom_str:val>") def test_func(val): pass else: @blp.route("/<custom_str:val>") class TestMethod(MethodView): def get(self, val): pass api.register_blueprint(blp) spec = api.spec.to_dict() if register: schema = {"type": "custom string", "format": "custom format"} else: schema = {"type": "string"} parameter = {"in": "path", "name": "val", "required": True} if openapi_version == "2.0": parameter.update(schema) else: parameter["schema"] = schema assert spec["paths"]["/test/{val}"]["parameters"] == [parameter]
def test_api_register_converter(self, app, view_type, register, openapi_version): app.config['OPENAPI_VERSION'] = openapi_version api = Api(app) blp = Blueprint('test', 'test', url_prefix='/test') class CustomConverter(BaseConverter): pass def converter2paramschema(converter): return {'type': 'custom string', 'format': 'custom format'} app.url_map.converters['custom_str'] = CustomConverter if register: api.register_converter(CustomConverter, converter2paramschema) if view_type == 'function': @blp.route('/<custom_str:val>') def test_func(val): pass else: @blp.route('/<custom_str:val>') class TestMethod(MethodView): def get(self, val): pass api.register_blueprint(blp) spec = api.spec.to_dict() if register: schema = {'type': 'custom string', 'format': 'custom format'} else: schema = {'type': 'string'} parameter = {'in': 'path', 'name': 'val', 'required': True} if openapi_version == '2.0': parameter.update(schema) else: parameter['schema'] = schema assert spec['paths']['/test/{val}']['parameters'] == [parameter]
def test_api_register_converter(self, app, view_type, custom_format, openapi_version): app.config['OPENAPI_VERSION'] = openapi_version api = Api(app) blp = Blueprint('test', 'test', url_prefix='/test') class CustomConverter(BaseConverter): pass app.url_map.converters['custom_str'] = CustomConverter api.register_converter(CustomConverter, 'custom string', custom_format) if view_type == 'function': @blp.route('/<custom_str:val>') def test_func(val): pass else: @blp.route('/<custom_str:val>') class TestMethod(MethodView): def get(self, val): pass api.register_blueprint(blp) spec = api.spec.to_dict() schema = {'type': 'custom string'} # If custom_format is None (default), it does not appear in the spec if custom_format is not None: schema['format'] = 'custom' parameter = {'in': 'path', 'name': 'val', 'required': True} if openapi_version == '2.0': parameter.update(schema) else: parameter['schema'] = schema assert spec['paths']['/test/{val}']['parameters'] == [parameter]