1
1
from flask_rest_jsonapi import ResourceDetail , ResourceList , ResourceRelationship
2
+ import urllib .error
2
3
3
4
from app .api .bootstrap import api
4
5
from app .api .helpers .db import safe_query
6
+ from app .api .helpers .exceptions import UnprocessableEntity
5
7
from app .api .schema .event_topics import EventTopicSchema
6
8
from app .models import db
9
+ from app .api .helpers .files import create_system_image
7
10
from app .models .event import Event
8
11
from app .models .event_sub_topic import EventSubTopic
9
12
from app .models .event_topic import EventTopic
@@ -14,10 +17,41 @@ class EventTopicList(ResourceList):
14
17
"""
15
18
List and create event topics
16
19
"""
20
+ def after_create_object (self , event_topic , data , view_kwargs ):
21
+ """
22
+ after create method to save roles for users and add the user as an accepted role(organizer)
23
+ :param event_topic:
24
+ :param data:
25
+ :param view_kwargs:
26
+ :return:
27
+ """
28
+ if data .get ('system_image_url' ):
29
+ try :
30
+ uploaded_image = create_system_image (data ['system_image_url' ], unique_identifier = event_topic .id )
31
+ except (urllib .error .HTTPError , urllib .error .URLError ):
32
+ raise UnprocessableEntity (
33
+ {'source' : 'attributes/system-image-url' }, 'Invalid Image URL'
34
+ )
35
+ except IOError :
36
+ raise UnprocessableEntity (
37
+ {'source' : 'attributes/system-image-url' }, 'Image is absent at URL'
38
+ )
39
+ else :
40
+ try :
41
+ uploaded_image = create_system_image (unique_identifier = event_topic .id )
42
+ except IOError :
43
+ raise UnprocessableEntity (
44
+ {'source' : '' }, 'Default Image is absent in server'
45
+ )
46
+
47
+ self .session .query (EventTopic ).filter_by (id = event_topic .id ).update (uploaded_image )
48
+ self .session .commit ()
49
+
17
50
decorators = (api .has_permission ('is_admin' , methods = "POST" ),)
18
51
schema = EventTopicSchema
19
52
data_layer = {'session' : db .session ,
20
- 'model' : EventTopic }
53
+ 'model' : EventTopic ,
54
+ 'methods' : {'after_create_object' : after_create_object }}
21
55
22
56
23
57
class EventTopicDetail (ResourceDetail ):
@@ -49,11 +83,41 @@ def before_get_object(self, view_kwargs):
49
83
else :
50
84
view_kwargs ['id' ] = None
51
85
86
+ def before_update_object (self , event_topic , data , view_kwargs ):
87
+ """
88
+ method to save image urls before updating event object
89
+ :param event_topic:
90
+ :param data:
91
+ :param view_kwargs:
92
+ :return:
93
+ """
94
+ if data .get ('system_image_url' ):
95
+ try :
96
+ uploaded_image = create_system_image (data ['system_image_url' ], unique_identifier = event_topic .id )
97
+ except (urllib .error .HTTPError , urllib .error .URLError ):
98
+ raise UnprocessableEntity (
99
+ {'source' : 'attributes/system-image-url' }, 'Invalid Image URL'
100
+ )
101
+ except IOError :
102
+ raise UnprocessableEntity (
103
+ {'source' : 'attributes/system-image-url' }, 'Image is absent at URL'
104
+ )
105
+ else :
106
+ try :
107
+ uploaded_image = create_system_image (unique_identifier = event_topic .id )
108
+ except IOError :
109
+ raise UnprocessableEntity (
110
+ {'source' : '' }, 'Default Image is absent in server'
111
+ )
112
+
113
+ data ['system_image_url' ] = uploaded_image ['system_image_url' ]
114
+
52
115
decorators = (api .has_permission ('is_admin' , methods = "PATCH,DELETE" ),)
53
116
schema = EventTopicSchema
54
117
data_layer = {'session' : db .session ,
55
118
'model' : EventTopic ,
56
119
'methods' : {
120
+ 'before_update_object' : before_update_object ,
57
121
'before_get_object' : before_get_object
58
122
}}
59
123
0 commit comments