8000 Handle nested documents by tomchristie · Pull Request #13 · core-api/python-openapi-codec · GitHub
[go: up one dir, main page]

Skip to content
This repository was archived by the owner on Mar 18, 2019. It is now read-only.

Handle nested documents #13

Merged
merged 1 commit into from
Sep 30, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion openapi_codec/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from openapi_codec.decode import _parse_document


__version__ = '1.1.1'
__version__ = '1.1.2'


class OpenAPICodec(BaseCodec):
Expand Down
19 changes: 10 additions & 9 deletions openapi_codec/encode.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import coreapi
from coreapi.compat import urlparse
from openapi_codec.utils import get_method, get_encoding, get_location
from openapi_codec.utils import get_method, get_encoding, get_location, get_links_from_document


def generate_swagger_object(document):
Expand D 8000 own Expand Up @@ -35,16 +34,18 @@ def _add_tag_prefix(item):

def _get_links(document):
"""
Return a list of (operation_id, [tags], link)
Return a list of (operation_id, link, [tags])
"""
# Extract all the links from the first or second level of the document.
links = []
for key, link in document.links.items():
links.append((key, link, []))
for key0, obj in document.data.items():
if isinstance(obj, coreapi.Object):
for key1, link in obj.links.items():
links.append((key1, link, [key0]))
for keys, link in get_links_from_document(document):
if len(keys) > 1:
operation_id = '_'.join(keys[1:])
tags = [keys[0]]
else:
operation_id = keys[0]
tags = []
links.append((operation_id, link, tags))

# Determine if the operation ids each have unique names or not.
operation_ids = [item[0] for item in links]
Expand Down
13 changes: 13 additions & 0 deletions openapi_codec/utils.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
def get_links_from_document(node, keys=()):
links = []
for key, link in getattr(node, 'links', {}).items():
# Get all the resources at this level
index = keys + (key,)
links.append((index, link))
for key, child in getattr(node, 'data', {}).items():
# Descend into any nested structures.
index = keys + (key,)
links.extend(get_links_from_document(child, index))
return links


def get_method(link):
method = link.action.lower()
if not method:
Expand Down
0