summaryrefslogtreecommitdiffstats
path: root/utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py
diff options
context:
space:
mode:
Diffstat (limited to 'utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py')
-rw-r--r--utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py71
1 files changed, 60 insertions, 11 deletions
diff --git a/utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py b/utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py
index 2d688a80a..0939b0d68 100644
--- a/utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py
+++ b/utils/test/result_collection_api/tornado_swagger_ui/tornado_swagger/swagger.py
@@ -4,6 +4,7 @@
import inspect
from functools import wraps
import epydoc.markup
+from HTMLParser import HTMLParser
import tornado.web
from settings import default_settings, models
from handlers import swagger_handlers
@@ -11,6 +12,30 @@ from handlers import swagger_handlers
__author__ = 'serena'
+class EpytextParser(HTMLParser):
+ a_text = False
+
+ def __init__(self, tag):
+ HTMLParser.__init__(self)
+ self.tag = tag
+ self.data = None
+
+ def handle_starttag(self, tag, attr):
+ if tag == self.tag:
+ self.a_text = True
+
+ def handle_endtag(self, tag):
+ if tag == self.tag:
+ self.a_text = False
+
+ def handle_data(self, data):
+ if self.a_text:
+ self.data = data
+
+ def get_data(self):
+ return self.data
+
+
class DocParser(object):
def __init__(self):
self.notes = None
@@ -31,7 +56,7 @@ class DocParser(object):
for field in fields:
tag = field.tag()
arg = field.arg()
- body = field.body().to_plaintext(None).strip()
+ body = field.body()
self._get_parser(tag)(arg=arg, body=body)
return doc
@@ -51,7 +76,7 @@ class DocParser(object):
def _parse_param(self, **kwargs):
arg = kwargs.get('arg', None)
- body = kwargs.get('body', None)
+ body = self._get_body(**kwargs)
self.params.setdefault(arg, {}).update({
'name': arg,
'description': body,
@@ -65,14 +90,14 @@ class DocParser(object):
def _parse_type(self, **kwargs):
arg = kwargs.get('arg', None)
- body = kwargs.get('body', None)
+ body = self._get_body(**kwargs)
self.params.setdefault(arg, {}).update({
'name': arg,
'dataType': body
})
def _parse_rtype(self, **kwargs):
- body = kwargs.get('body', None)
+ body = self._get_body(**kwargs)
self.responseClass = body
def _parse_property(self, **kwargs):
@@ -83,25 +108,32 @@ class DocParser(object):
def _parse_ptype(self, **kwargs):
arg = kwargs.get('arg', None)
- body = kwargs.get('body', None)
- self.properties.setdefault(arg, {}).update({
- 'type': body
- })
+ code = self._parse_epytext_para('code', **kwargs)
+ link = self._parse_epytext_para('link', **kwargs)
+ if code is None:
+ self.properties.setdefault(arg, {}).update({
+ 'type': link
+ })
+ elif code == 'list':
+ self.properties.setdefault(arg, {}).update({
+ 'type': 'array',
+ 'items': {'type': link}
+ })
def _parse_return(self, **kwargs):
arg = kwargs.get('arg', None)
- body = kwargs.get('body', None)
+ body = self._get_body(**kwargs)
self.responseMessages.append({
'code': arg,
'message': body
})
def _parse_notes(self, **kwargs):
- body = kwargs.get('body', '')
+ body = self._get_body(**kwargs)
self.notes = self._sanitize_doc(body)
def _parse_description(self, **kwargs):
- body = kwargs.get('body', '')
+ body = self._get_body(**kwargs)
self.summary = self._sanitize_doc(body)
def _not_supported(self, **kwargs):
@@ -111,6 +143,23 @@ class DocParser(object):
def _sanitize_doc(comment):
return comment.replace('\n', '<br/>') if comment else comment
+ @staticmethod
+ def _get_body(**kwargs):
+ body = kwargs.get('body', None)
+ return body.to_plaintext(None).strip() if body else body
+
+ @staticmethod
+ def _parse_epytext_para(tag, **kwargs):
+ def _parse_epytext(tag, body):
+ epytextParser = EpytextParser(tag)
+ epytextParser.feed(str(body))
+ data = epytextParser.get_data()
+ epytextParser.close()
+ return data
+
+ body = kwargs.get('body', None)
+ return _parse_epytext(tag, body) if body else body
+
class model(DocParser):
def __init__(self, cls=None, *args, **kwargs):