From a9a37d109884c919bd6107dab0eda7d10b0ceada Mon Sep 17 00:00:00 2001 From: Gleb Voropaev Date: Fri, 30 Aug 2019 13:41:14 +0300 Subject: [PATCH 1/2] Added test case (test coverage fix) --- tests/test_swagger.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/tests/test_swagger.py b/tests/test_swagger.py index 859994ae..2529fb00 100644 --- a/tests/test_swagger.py +++ b/tests/test_swagger.py @@ -2042,6 +2042,26 @@ def get(self): client.get_specs(status=500) + def test_recursive_model(self, api, client): + fields = api.model('Person', { + 'name': restplus.fields.String, + 'age': restplus.fields.Integer, + 'birthdate': restplus.fields.DateTime + }) + + fields["children"] = restplus.fields.List( + restplus.fields.Nested(fields), + default=[]) + + @api.route('/recursive-model/') + @api.doc(get={'model': fields}) + class ModelAsDict(restplus.Resource): + @api.marshal_with(fields) + def get(self): + return {} + + client.get_specs(status=200) + def test_clone(self, api, client): parent = api.model('Person', { 'name': restplus.fields.String, From cd264639fb95575f0142b87e14562b7901936e4a Mon Sep 17 00:00:00 2001 From: Mat Gadd Date: Tue, 18 Jun 2019 11:33:07 +0100 Subject: [PATCH 2/2] Fix infinite recursion in swagger.py for circular models, fixes #190 --- flask_restplus/swagger.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/flask_restplus/swagger.py b/flask_restplus/swagger.py index 681b08d2..21e1aeb7 100644 --- a/flask_restplus/swagger.py +++ b/flask_restplus/swagger.py @@ -574,6 +574,8 @@ def register_model(self, model): if name not in self.api.models: raise ValueError('Model {0} not registered'.format(name)) specs = self.api.models[name] + if name in self._registered_models: + return ref(model) self._registered_models[name] = specs if isinstance(specs, ModelBase): for parent in specs.__parents__: