Skip to content

Commit a40cf4c

Browse files
authored
Merge pull request #94 from guokr/sanic
fix current_scopes request undefined
2 parents fdfac96 + 1317fad commit a40cf4c

File tree

4 files changed

+78
-4
lines changed

4 files changed

+78
-4
lines changed

swagger_py_codegen/sanic.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,18 @@
33
from collections import OrderedDict
44

55
from .base import Code, CodeGenerator
6-
from .jsonschema import Schema, SchemaGenerator, build_default
6+
from .jsonschema import build_default, build_data
77

88
SUPPORT_METHODS = ['get', 'post', 'put', 'delete', 'patch', 'options', 'head']
99

1010

11+
class Schema(Code):
12+
13+
template = 'sanic/schemas.tpl'
14+
dest_template = '%(package)s/%(module)s/schemas.py'
15+
override = True
16+
17+
1118
class Router(Code):
1219

1320
template = 'sanic/routers.tpl'
@@ -66,6 +73,12 @@ class UIIndex(Code):
6673
dest_template = '%(package)s/static/swagger-ui/index.html'
6774

6875

76+
class SchemaGenerator(CodeGenerator):
77+
78+
def _process(self):
79+
yield Schema(build_data(self.swagger))
80+
81+
6982
def _swagger_to_sanic_url(url, swagger_path_node):
7083
types = {
7184
'integer': 'int',

swagger_py_codegen/templates/sanic/blueprint.tpl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ from .validators import security
88

99

1010
@security.scopes_loader
11-
def current_scopes():
11+
def current_scopes(request):
1212
return {{ scopes_supported }}
1313

1414
bp = Blueprint('{{ blueprint }}', __name__)
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
# -*- coding: utf-8 -*-
2+
3+
# TODO: datetime support
4+
5+
{% include '_do_not_change.tpl' %}
6+
7+
base_path = '{{base_path}}'
8+
9+
{% for name, value in schemas.items() %}
10+
{{ name }} = {{ value }}
11+
{%- endfor %}
12+
13+
validators = {
14+
{%- for name, value in validators.items() %}
15+
{{ name }}: {{ value }},
16+
{%- endfor %}
17+
}
18+
19+
filters = {
20+
{%- for name, value in filters.items() %}
21+
{{ name }}: {{ value }},
22+
{%- endfor %}
23+
}
24+
25+
scopes = {
26+
{%- for name, value in scopes.items() %}
27+
{{ name }}: {{ value }},
28+
{%- endfor %}
29+
}
30+
31+
32+
class Current(object):
33+
34+
request = None
35+
36+
37+
current = Current()
38+
39+
40+
class Security(object):
41+
42+
def __init__(self):
43+
super(Security, self).__init__()
44+
self._loader = lambda x: []
45+
46+
@property
47+
def scopes(self):
48+
return self._loader(current.request)
49+
50+
def scopes_loader(self, func):
51+
self._loader = func
52+
return func
53+
54+
security = Security()
55+
56+
57+
{{ merge_default }}
58+
59+
{{ normalize }}
60+

swagger_py_codegen/templates/sanic/validators.tpl

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ from sanic.request import RequestParameters
1717
from jsonschema import Draft4Validator
1818

1919
from .schemas import (
20-
validators, filters, scopes, security, base_path, normalize)
20+
validators, filters, scopes, security, base_path, normalize, current)
2121

2222

2323
def unpack(value):
@@ -115,6 +115,7 @@ def request_validate(view):
115115
def wrapper(*args, **kwargs):
116116
request = args[1]
117117
endpoint = _path_to_endpoint(request.uri_template)
118+
current.request = request
118119
# scope
119120
if (endpoint, request.method) in scopes and not set(
120121
scopes[(endpoint, request.method)]).issubset(set(security.scopes)):
@@ -144,7 +145,7 @@ def response_filter(view):
144145
request = args[1]
145146
resp = view(*args, **kwargs)
146147

147-
from inspect import isawaitable
148+
from inspect import isawaitable
148149
if isawaitable(resp):
149150
resp = await resp
150151
if isinstance(resp, HTTPResponse):

0 commit comments

Comments
 (0)