Skip to content
Open
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
9 changes: 9 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
sudo: false
language: python
python:
- "2.7"
- "3.4"
- "3.5"
- "3.6"
install: pip install tox-travis
script: tox
18 changes: 16 additions & 2 deletions bottle_swagger.py
Original file line number Diff line number Diff line change
Expand Up @@ -107,14 +107,15 @@ def _validate_response(swagger_op, result):

def _swagger_op(self, route):
# Convert bottle "<param>" style path params to swagger "{param}" style
path = re.sub(r'/<(.+?)>', r'/{\1}', route.rule)
path = re.sub(r'/<(.+?)(:.+)?>', r'/{\1}', route.rule)
return self.swagger.get_op_for_request(request.method, path)

def _is_swagger_schema_route(self, route):
return self.serve_swagger_schema and route.rule == self.swagger_schema_url


class BottleIncomingRequest(IncomingRequest):

def __init__(self, bottle_request):
self.request = bottle_request
self.path = bottle_request.url_args
Expand All @@ -134,11 +135,24 @@ def headers(self):
def form(self):
return self.request.forms


class BottleOutgoingResponse(OutgoingResponse):

def __init__(self, bottle_response, response_json):
self.response = bottle_response
self.response_json = response_json
self.content_type = bottle_response.content_type if bottle_response.content_type else 'application/json'

def json(self):
return self.response_json

@property
def content_type(self):
return self.response.content_type if self.response.content_type else 'application/json'

@property
def headers(self):
return self.response.headers

@property
def text(self):
return self.response.status
6 changes: 5 additions & 1 deletion test/test_bottle_swagger.py
Original file line number Diff line number Diff line change
Expand Up @@ -196,6 +196,10 @@ def test_path_parameters(self):
response = self._test_request(url="/thing/123", route_url="/thing/<thing_id>")
self.assertEqual(response.status_int, 200)

def test_path_parameters_regex(self):
response = self._test_request(url="/thing/123", route_url="/thing/<thing_id:re:[0-9]+>")
self.assertEqual(response.status_int, 200)

def test_query_parameters(self):
response = self._test_request(url="/thing_query?thing_id=123", route_url="/thing_query")
self.assertEqual(response.status_int, 200)
Expand All @@ -213,7 +217,7 @@ def test_get_swagger_schema(self):
bottle_app.install(self._make_swagger_plugin())
test_app = TestApp(bottle_app)
response = test_app.get(SwaggerPlugin.DEFAULT_SWAGGER_SCHEMA_URL)
self.assertEquals(response.json, self.SWAGGER_DEF)
self.assertEqual(response.json, self.SWAGGER_DEF)

def _test_request(self, swagger_plugin=None, method='GET', url='/thing', route_url=None, request_json=VALID_JSON,
response_json=VALID_JSON, headers=None, content_type='application/json'):
Expand Down
2 changes: 1 addition & 1 deletion tox.ini
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
[tox]
envlist=py27,py34,py35,cov
envlist=py27,py34,py35,py36,cov

[testenv]
commands=python -m unittest discover test
Expand Down