forked from fossasia/open-event-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathroles.py
More file actions
100 lines (89 loc) · 2.95 KB
/
roles.py
File metadata and controls
100 lines (89 loc) · 2.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
from flask_rest_jsonapi import ResourceDetail, ResourceList
from app.api.bootstrap import api
from app.api.helpers.db import safe_query_kwargs
from app.api.helpers.errors import UnprocessableEntityError
from app.api.schema.roles import RoleSchema
from app.models import db
from app.models.role import Role
from app.models.role_invite import RoleInvite
from app.models.users_events_role import UsersEventsRoles
class RoleList(ResourceList):
"""
List and create role
"""
decorators = (api.has_permission('is_admin', methods="POST"),)
schema = RoleSchema
data_layer = {'session': db.session, 'model': Role}
class RoleDetail(ResourceDetail):
"""
Role detail by id
"""
def before_get_object(self, view_kwargs):
"""
before get method to get the resource id for fetching details
:param view_kwargs:
:return:
"""
if view_kwargs.get('role_invite_id') is not None:
role_invite = safe_query_kwargs(RoleInvite, view_kwargs, 'role_invite_id')
if role_invite.role_id is not None:
view_kwargs['id'] = role_invite.role_id
else:
view_kwargs['id'] = None
if view_kwargs.get('users_events_role_id') is not None:
users_events_role = safe_query_kwargs(
UsersEventsRoles,
view_kwargs,
'users_events_role_id',
)
if users_events_role.role_id is not None:
view_kwargs['id'] = users_events_role.role_id
else:
view_kwargs['id'] = None
def before_update_object(self, role, data, view_kwargs):
"""
Method to edit object
:param role:
:param data:
:param view_kwargs:
:return:
"""
if data.get('name'):
if data['name'] in [
'owner',
'organizer',
'coorganizer',
'registrar',
'moderator',
'attendee',
'track_organizer',
]:
raise UnprocessableEntityError(
{'data': 'name'}, "The given name cannot be updated"
)
def before_delete_object(self, obj, kwargs):
"""
method to check proper resource name before deleting
:param obj:
:param kwargs:
:return:
"""
if obj.name in [
'owner',
'organizer',
'coorganizer',
'registrar',
'moderator',
'attendee',
'track_organizer',
]:
raise UnprocessableEntityError(
{'data': 'name'}, "The resource with given name cannot be deleted"
)
decorators = (api.has_permission('is_admin', methods="PATCH,DELETE"),)
schema = RoleSchema
data_layer = {
'session': db.session,
'model': Role,
'methods': {'before_get_object': before_get_object},
}