4
4
5
5
from numpy import number
6
6
from flask import make_response , request , jsonify , Blueprint
7
+ < << << << HEAD
8
+ == == == =
9
+ from flask_cors import cross_origin
10
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
7
11
8
12
import sys
9
13
10
14
sys .path .insert (0 , ".." ) # import parent folder
11
15
16
+ < << << << HEAD
12
17
from controllers .controllerMapper import TicketController , TicketStatusController
18
+ == == == =
19
+ from controllers .controllerMapper import TicketController
20
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
13
21
from models .models import TicketEvents
14
22
from utils import (
15
23
AlchemyEncoder ,
16
24
alchemyConverter ,
17
25
)
18
26
27
+ < << << << HEAD
19
28
# from flask_cognito_lib.decorators import auth_required
20
29
21
30
ticket_bp = Blueprint ("ticket_bp" , __name__ , url_prefix = "ticket" )
22
31
23
32
ticket_controller = TicketController ()
24
33
ticket_status_controller = TicketStatusController ()
25
34
PIECES_SEPERATOR = ",+-"
35
+ == == == =
36
+ ticket_bp = Blueprint ("ticket_bp" , __name__ , url_prefix = "ticket" )
37
+
38
+ # TODO: USER BASED AUTH
39
+
40
+ ticket_controller = TicketController ()
41
+
42
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
26
43
"""
27
44
Route expects requests of format:
28
45
@@ -80,7 +97,12 @@ def ticket_get_all_with_status(status): # create ticket
80
97
81
98
82
99
@ticket_bp .route ("/" , methods = ["POST" ])
100
+ < << << << HEAD
83
101
#@auth_required()
102
+ == == == =
103
+ @cross_origin (supports_credentials = True )
104
+ @require_appkey
105
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
84
106
def ticket_post (): # create ticket
85
107
print ("Creating ticket from the following JSON:" )
86
108
print (request .data )
@@ -110,6 +132,7 @@ def ticket_edit(ticket_id): # create ticket
110
132
ticket_dict ["pieces" ] = PIECES_SEPERATOR .join (ticket_dict ["pieces" ])
111
133
ticket_event = ticket_controller ._create_base_event (ticket_dict )
112
134
135
+ < << << << HEAD
113
136
response = {"ticketId" : ticket_event .ticketId }
114
137
return make_response (json .dumps (response ))
115
138
@@ -127,20 +150,56 @@ def get_clean_filters_dict(immutable_args):
127
150
if "limit" in sql_filters :
128
151
del sql_filters ["limit" ]
129
152
return sql_filters
153
+ == == == =
154
+ return {"success" }
130
155
131
156
157
+ # http://127.0.0.1:6767/api/ticket/?start=2022-01-01T00:00:00&end=2022-04-04T00:00:00&shipperName=Eric%20Shea
158
+ # curl http://127.0.0.1:6767/api/ticket/?shipperName
159
+ # # curl http://127.0.0.1:6767/api/ticket?key=a
160
+ # # curl http://127.0.0.1:6767/api/ticket/?start=2022-01-01T00:00:00Z&end=2022-04-04T00:00:00Z
161
+ >> >> >> > 32 dee55d98864ba43414c8757ab4abe2e4881f66
162
+
163
+ def corsify (resp ):
164
+ resp = make_response (json .dumps (resp ))
165
+ resp .headers ['Access-Control-Allow-Origin' ] = '*'
166
+ resp .headers ['Access-Control-Allow-Headers' ] = ['Origin' , 'X-Requested-With' , 'Content-Type' , 'Accept' ]
167
+ return resp
168
+
169
+ < << << << HEAD
132
170
def validate_date_format (date_text ):
133
171
try :
134
172
return datetime .strptime (date_text , "%Y-%m-%dT%H:%M:%S" )
135
173
except ValueError :
136
174
raise ValueError ("Incorrect data format, should be %Y-%m-%dT%H:%M:%S" )
137
175
176
+ == == == =
177
+ def get_clean_filters_dict (immutable_args ):
178
+ sql_filters = dict (immutable_args )
179
+ if "start" in sql_filters :
180
+ del sql_filters ["start" ]
181
+ if "end" in sql_filters :
182
+ del sql_filters ["end" ]
183
+ if "limit" in sql_filters :
184
+ del sql_filters ["limit" ]
185
+ return sql_filters
186
+
187
+ def validate_date_format (date_text ):
188
+ try :
189
+ return datetime .strptime (date_text , "%Y-%m-%dT%H:%M:%S" )
190
+ except ValueError :
191
+ raise ValueError ("Incorrect data format, should be %Y-%m-%dT%H:%M:%S" )
192
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
138
193
139
194
def default_start ():
140
195
dt_start = validate_date_format ("1900-01-01T00:00:00" )
141
196
return dt_start
142
197
198
+ def default_end ():
199
+ dt_end = validate_date_format ("2100-01-01T00:00:00" )
200
+ return dt_end
143
201
202
+ < << << << HEAD
144
203
def default_end ():
145
204
dt_end = validate_date_format ("2100-01-01T00:00:00" )
146
205
return dt_end
@@ -168,9 +227,45 @@ def ticket_get_all():
168
227
for ticket in res :
169
228
ticket ["pieces" ] = ticket ["pieces" ].split (PIECES_SEPERATOR )
170
229
ticket ["ticketStatus" ]["currentStatus" ] = ticket ["ticketStatus" ]["currentStatus" ].value
230
+ == == == =
231
+ @ticket_bp .route ("/" , methods = ["GET" ])
232
+ @cross_origin (supports_credentials = True )
233
+ # @require_appkey
234
+ def ticket_get_all ():
235
+ filters = request .args or {}
236
+ sql_filters = get_clean_filters_dict (filters )
237
+ limit = 5000 if "limit" not in filters else filters ["limit" ]
238
+
239
+ dt_start = validate_date_format (filters ["start" ]) if "start" in filters else default_start ()
240
+ dt_end = validate_date_format (filters ["end" ]) if "end" in filters else default_end ()
241
+
242
+ data = ticket_controller ._get_latest_event_objects_in_range (dt_start , dt_end , sql_filters , number_of_res = limit )
243
+
244
+ res = alchemyConverter (data )
245
+
246
+ return corsify (res )
247
+
248
+
249
+ @ticket_bp .route ("/<ticket_id>" , methods = ["GET" ])
250
+ @cross_origin (supports_credentials = True )
251
+ # @require_appkey
252
+ def ticket_get (ticket_id ):
253
+ filters = request .args .get ("filters" ) or {}
254
+
255
+
256
+ sql_filters = get_clean_filters_dict (filters )
257
+ sql_filters ["ticketId" ] = ticket_id
258
+ data = ticket_controller ._get_latest_event_objects_in_range (
259
+ default_start (), default_end (), filters = sql_filters
260
+ )
261
+
262
+ res = alchemyConverter (data [0 ])
263
+ return corsify (res )
264
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
171
265
172
266
return make_response (json .dumps (res , cls = AlchemyEncoder ))
173
267
268
+ < << << << HEAD
174
269
175
270
def get_single (ticket_id ):
176
271
filters = request .args .get ("filters" ) or {}
@@ -189,11 +284,38 @@ def ticket_get(ticket_id):
189
284
data = get_single (ticket_id )
190
285
res = alchemyConverter (data )
191
286
return make_response (json .dumps (res , cls = AlchemyEncoder ))
192
-
287
+ == == == =
288
+ {
289
+ "datetime" : "value" ,
290
+ "filters" : {
291
+ "field1" : "value1" ,
292
+ "field2" : "value2" ,
293
+ ....
294
+ }
295
+ }
193
296
194
297
"""
195
- Route expects requests of format:
196
298
299
+
300
+
301
+ # @ticket_bp.route("/attribute/{attribute_name}", methods=["GET"])
302
+ # @require_appkey
303
+ # def ticket_attribute_get(attribute_name):
304
+
305
+ # filters.extend({"ticket_id": ticket_id})
306
+
307
+ # latest_ticket = ticket_controller._get_latest_event_objects(
308
+ # number_of_res=number_of_res, filters=filters
309
+ # )
310
+
311
+ # res = alchemyConverter(latest_ticket)
312
+ # response = json.dumps(res, cls=AlchemyEncoder)
313
+ >>>>>>> 32dee55d98864ba43414c8757ab4abe2e4881f66
314
+
315
+ # return response
316
+
317
+
318
+ <<<<<<< HEAD
197
319
{
198
320
"datetime" : "value",
199
321
"filters" : {
@@ -204,6 +326,9 @@ def ticket_get(ticket_id):
204
326
}
205
327
206
328
"""
329
+ == == == =
330
+
331
+ >> >> >> > 32 dee55d98864ba43414c8757ab4abe2e4881f66
207
332
208
333
"""
209
334
Route expects requests of format:
@@ -223,3 +348,29 @@ def ticket_get(ticket_id):
223
348
224
349
"""
225
350
351
+ < << << << HEAD
352
+ == == == =
353
+
354
+ @ticket_bp .route ("/<ticket_id>" , methods = ["PUT" ])
355
+ @cross_origin (supports_credentials = True )
356
+ @require_appkey
357
+ def ticket_update (ticket_id ):
358
+
359
+ update_dict = request .form ["update_dict" ]
360
+
361
+ # remove ticketId and ticketEventId if present
362
+ update_dict .pop (ticket_controller .primary_key , None )
363
+ update_dict .pop (TicketEvents .non_prim_identifying_column_name , None )
364
+
365
+ filters = request .form ["filters" ]
366
+ filters .extend ({"ticket_id" : ticket_id })
367
+
368
+ updated_object = ticket_controller ._modify_latest_object (
369
+ update_dict , filters = filters
370
+ )
371
+
372
+ res = alchemyConverter (updated_object )
373
+ response = json .dumps (res , cls = AlchemyEncoder )
374
+
375
+ return response
376
+ > >> >> >> 32 dee55d98864ba43414c8757ab4abe2e4881f66
0 commit comments