From 8b3c151aeb123a7ac8850b1adca54a88c3d78211 Mon Sep 17 00:00:00 2001 From: Matt Flaherty Date: Tue, 7 May 2019 15:58:37 +0100 Subject: [PATCH 1/3] In register_model() when working with SchemaModel type, also recursively register nested models. --- flask_restplus/swagger.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/flask_restplus/swagger.py b/flask_restplus/swagger.py index d98cb5d0..550d2093 100644 --- a/flask_restplus/swagger.py +++ b/flask_restplus/swagger.py @@ -16,7 +16,7 @@ from werkzeug.routing import parse_rule from . import fields -from .model import Model, ModelBase +from .model import SchemaModel, Model, ModelBase from .reqparse import RequestParser from .utils import merge, not_none, not_none_sorted from ._http import HTTPStatus @@ -557,6 +557,12 @@ def register_model(self, model): if isinstance(specs, Model): for field in itervalues(specs): self.register_field(field) + if isinstance(specs, SchemaModel): + for prop in itervalues(specs._schema['properties']): + if ('$ref' in prop): + name = prop['$ref'].rsplit('/', 1).pop() + if name in self.api.models: + self.register_model(self.api.models[name]) return ref(model) def register_field(self, field): From bdbe7ba2dff9952cfe4410ca9448ce3f3e19905b Mon Sep 17 00:00:00 2001 From: flayman Date: Tue, 7 May 2019 17:01:43 +0100 Subject: [PATCH 2/3] Update CHANGELOG.rst Added "In register_model() when working with SchemaModel type, also recursively register nested models" --- CHANGELOG.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index 88b1ba4e..32434344 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -11,6 +11,7 @@ Current - Fix `@api.expect(..., validate=False)` decorators for an :class:`Api` where `validate=True` is set on the constructor (:issue:`609`, :pr:`610`) - Ensure `basePath` is always a path - Hide Namespaces with all hidden Resources from Swagger documentation +- In register_model() when working with SchemaModel type, also recursively register nested models 0.12.1 (2018-09-28) ------------------- From e02060e38672bc62357ad40ee020190811599be1 Mon Sep 17 00:00:00 2001 From: Matt Flaherty Date: Fri, 17 May 2019 16:51:10 +0100 Subject: [PATCH 3/3] Working with example from PR #555 --- flask_restplus/swagger.py | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/flask_restplus/swagger.py b/flask_restplus/swagger.py index 550d2093..d355f9ad 100644 --- a/flask_restplus/swagger.py +++ b/flask_restplus/swagger.py @@ -557,12 +557,11 @@ def register_model(self, model): if isinstance(specs, Model): for field in itervalues(specs): self.register_field(field) - if isinstance(specs, SchemaModel): - for prop in itervalues(specs._schema['properties']): - if ('$ref' in prop): - name = prop['$ref'].rsplit('/', 1).pop() - if name in self.api.models: - self.register_model(self.api.models[name]) + if isinstance(specs, SchemaModel) and 'definitions' in specs._schema: + for key, defn in iteritems(specs._schema['definitions']): + if key not in self.api.models: + self.register_model(self.api.schema_model(key, defn)) + del(specs._schema['definitions']) return ref(model) def register_field(self, field):