diff options
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.py | 71 |
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): |