11from src .schemas import ensure_schema , ensure_logged_in_user , ensure_role
22from src import util
3- import json
3+ from datetime import date , datetime
44
55def tidy_results (res ):
66 """
@@ -11,6 +11,16 @@ def tidy_results(res):
1111 del i ['password' ]
1212 return res
1313
14+ def stringify_timestamps (res ):
15+ """
16+ Function used to stringify timestamps from datetime format
17+ """
18+ for obj in res :
19+ if "timestamps" in obj ["day_of" ]:
20+ for event in obj ["day_of" ]["timestamps" ]:
21+ for i in range (len (obj ["day_of" ]["timestamps" ].get (event ))):
22+ obj ["day_of" ]["timestamps" ].get (event )[i ] = obj ["day_of" ]["timestamps" ].get (event )[i ] .isoformat ()
23+ return res
1424
1525@ensure_schema ({
1626 "type" : "object" ,
@@ -62,8 +72,8 @@ def user_read(event, context, user):
6272 if user ['registration_status' ] in ['unregistered' , 'registered' , 'rejected' ]:
6373 if 'travelling_from' in user and 'reimbursement' in user ['travelling_from' ]:
6474 del user ['travelling_from' ]['reimbursement' ]
65-
66- return {"statusCode" : 200 , "body" : [json . dumps (user , default = str )]}
75+
76+ return {"statusCode" : 200 , "body" : [stringify_timestamps (user )]}
6777
6878
6979@ensure_role ([['director' , 'organizer' ]], on_failure = lambda e , c , u , * a : user_read (e , c , u ))
@@ -77,7 +87,7 @@ def organizer_read(event, context, user):
7787
7888 # otherwise, the organizer submitted query is ran on the database and results are returned
7989 user_coll = util .coll ('users' )
80- return {"statusCode" : 200 , "body" : json . dumps (tidy_results (list (user_coll .find (event ['query' ])), default = str ))}
90+ return {"statusCode" : 200 , "body" : stringify_timestamps (tidy_results (list (user_coll .find (event ['query' ]))))}
8191
8292
8393@ensure_schema ({
@@ -102,5 +112,5 @@ def read_info(event, context, user=None):
102112 tests = util .coll ('users' )
103113
104114 if event .get ('aggregate' , False ):
105- return {"statusCode" : 200 , "body" : json . dumps (list (tests .aggregate (event ['query' ])), default = str )}
106- return {"statusCode" : 200 , "body" : json . dumps (tidy_results (list (tests .find (event ['query' ]))), default = str )}
115+ return {"statusCode" : 200 , "body" : stringify_timestamps (list (tests .aggregate (event ['query' ])))}
116+ return {"statusCode" : 200 , "body" : stringify_timestamps (tidy_results (list (tests .find (event ['query' ]))))}
0 commit comments