forked from fossasia/open-event-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnotifications.py
More file actions
146 lines (120 loc) · 4.17 KB
/
notifications.py
File metadata and controls
146 lines (120 loc) · 4.17 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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
from flask_rest_jsonapi import ResourceDetail, ResourceList, ResourceRelationship
from app.api.bootstrap import api
from app.api.helpers.db import safe_query_kwargs
from app.api.schema.notifications import NotificationActionSchema, NotificationSchema
from app.models import db
from app.models.notification import Notification, NotificationAction
from app.models.user import User
class NotificationListAdmin(ResourceList):
"""
List all the Notification
"""
decorators = (api.has_permission('is_admin'),)
methods = ['GET']
schema = NotificationSchema
data_layer = {'session': db.session, 'model': Notification}
class NotificationList(ResourceList):
"""
List all the Notification
"""
def query(self, view_kwargs):
"""
query method for Notifications list
:param view_kwargs:
:return:
"""
query_ = self.session.query(Notification)
if view_kwargs.get('user_id'):
user = safe_query_kwargs(User, view_kwargs, 'user_id')
query_ = query_.join(User).filter(User.id == user.id)
return query_
def before_create_object(self, data, view_kwargs):
"""
method to create object before post
:param data:
:param view_kwargs:
:return:
"""
if view_kwargs.get('user_id') is not None:
user = safe_query_kwargs(User, view_kwargs, 'user_id')
data['user_id'] = user.id
view_kwargs = True
decorators = (
api.has_permission('is_user_itself', fetch="user_id", model=Notification),
)
methods = ['GET']
schema = NotificationSchema
data_layer = {
'session': db.session,
'model': Notification,
'methods': {'query': query, 'before_create_object': before_create_object},
}
class NotificationDetail(ResourceDetail):
"""
Notification detail by ID
"""
def before_get(self, args, kwargs):
if kwargs.get('notification_action_id'):
notification_action = safe_query_kwargs(
NotificationAction, kwargs, 'notification_action_id',
)
kwargs['id'] = notification_action.notification_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('notification_action_id'):
notification_action = safe_query_kwargs(
NotificationAction, view_kwargs, 'notification_action_id',
)
view_kwargs['id'] = notification_action.notification_id
decorators = (
api.has_permission(
'is_user_itself', methods="PATCH,DELETE", fetch="user_id", model=Notification
),
)
schema = NotificationSchema
data_layer = {
'session': db.session,
'model': Notification,
'methods': {'before_get_object': before_get_object},
}
class NotificationRelationship(ResourceRelationship):
"""
Notification Relationship
"""
decorators = (
api.has_permission('is_user_itself', fetch="user_id", model=Notification),
)
schema = NotificationSchema
methods = ['GET', 'PATCH']
data_layer = {'session': db.session, 'model': Notification}
class NotificationActionList(ResourceList):
"""
List all the Notification-actions
"""
decorators = (api.has_permission('is_admin'),)
methods = ['GET']
schema = NotificationSchema
data_layer = {'session': db.session, 'model': Notification}
class NotificationActionDetail(ResourceDetail):
"""
Notification action detail by ID
"""
decorators = (
api.has_permission('is_user_itself', fetch="user_id", model=Notification),
)
schema = NotificationActionSchema
data_layer = {'session': db.session, 'model': NotificationAction}
class NotificationActionRelationship(ResourceRelationship):
"""
Notification Relationship
"""
decorators = (
api.has_permission('is_user_itself', fetch="user_id", model=Notification),
)
schema = NotificationActionSchema
methods = ['GET', 'PATCH']
data_layer = {'session': db.session, 'model': NotificationAction}