Skip to content

Commit 577542c

Browse files
committed
do not raise error in weird use case
1 parent ecc8f2c commit 577542c

File tree

2 files changed

+18
-10
lines changed

2 files changed

+18
-10
lines changed

flask_rest_jsonapi/api.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,11 @@ def oauth_manager(self, oauth_manager):
9898
@self.app.before_request
9999
def before_request():
100100
endpoint = request.endpoint
101-
resource = self.app.view_functions[endpoint].view_class
101+
resource = None
102+
if endpoint:
103+
resource = getattr(self.app.view_functions[endpoint], 'view_class', None)
102104

103-
if not getattr(resource, 'disable_oauth'):
105+
if resource and not getattr(resource, 'disable_oauth', None):
104106
scopes = request.args.get('scopes')
105107

106108
if getattr(resource, 'schema'):
@@ -145,19 +147,20 @@ def build_scope(resource, method):
145147

146148
return '_'.join([prefix, resource.schema.opts.type_])
147149

148-
def permission_manager(self, permission_manager):
150+
def permission_manager(self, permission_manager, with_decorators=True):
149151
"""Use permission manager to enable permission for API
150152
151153
:param callable permission_manager: the permission manager
152154
"""
153155
self.check_permissions = permission_manager
154156

155-
for resource in self.resource_registry:
156-
if getattr(resource, 'disable_permission', None) is not True:
157-
for method in getattr(resource, 'methods', ('GET', 'POST', 'PATCH', 'DELETE')):
158-
setattr(resource,
159-
method.lower(),
160-
self.has_permission()(getattr(resource, method.lower())))
157+
if with_decorators:
158+
for resource in self.resource_registry:
159+
if getattr(resource, 'disable_permission', None) is not True:
160+
for method in getattr(resource, 'methods', ('GET', 'POST', 'PATCH', 'DELETE')):
161+
setattr(resource,
162+
method.lower(),
163+
self.has_permission()(getattr(resource, method.lower())))
161164

162165
def has_permission(self, *args, **kwargs):
163166
"""Decorator used to check permissions before to call resource manager method"""

flask_rest_jsonapi/resource.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,7 +93,12 @@ def dispatch_request(self, *args, **kwargs):
9393
if isinstance(data, dict):
9494
data.update({'jsonapi': {'version': '1.0'}})
9595

96-
return make_response(json.dumps(data, cls=JSONEncoder), status_code, headers)
96+
if isinstance(data, str):
97+
json_reponse = data
98+
else:
99+
json_reponse = json.dumps(data, cls=JSONEncoder)
100+
101+
return make_response(json_reponse, status_code, headers)
97102

98103

99104
class ResourceList(with_metaclass(ResourceMeta, Resource)):

0 commit comments

Comments
 (0)