def getEventById(eid): user = get_mobile_or_web_user() event = db.session.query(Events).get(eid) if event.endTime > datetime.utcnow(): return jsonify(Events=Events.build_event_dict(event, user)) else: return jsonify(msg='Event not found'), 404
def mobile_savedevents(): username = get_jwt_identity() user = db.session.query(Users).filter(Users.email == username).first() saved_events = [] for event in user.savedevents: if event.endTime >= datetime.utcnow(): saved_events.append(event) saved_events.sort(key=lambda Events: Events.startTime) saved_events = [ Events.build_event_dict(event, user) for event in saved_events ] return jsonify(Events=saved_events)
def get_events_by_user(): user = get_mobile_or_web_user() rank = db.session.query(Ranks).filter(Ranks.uid == user.id).first().rank if rank == 1 or rank == 2: events = [ Events.build_event_dict(event, user) for event in db.session.query(Events).filter( Events.postedUid == user.id).order_by('starttimestamp') ] return jsonify(Events=events), 200 else: return jsonify(success=False, response="Forbidden"), 403
def savedEvents(uid): # TODO: CRITICAL CRITICAL NO ACTUAL AUTHENTICATION GOING ON HERE # TODO: LOGGED IN USER IN REQUEST MUST BE VERIFIED # TODO: ANYONE CAN ACCESS THIS BY ENTERING THE UID IN URL user = db.session.query(Users).filter( Users.id == uid).first() # TODO: Change this to get saved_events = [] for event in user.savedevents: if event.endTime > datetime.utcnow(): saved_events.append(event) saved_events.sort(key=lambda Events: Events.startTime) saved_events = [ Events.build_event_dict(event, user) for event in saved_events ] return jsonify(Events=saved_events)
def UpdateEvent(eid): allowed = False past = True user = get_mobile_or_web_user() event = db.session.query(Events).get(eid) if not rankAssocAdmin(user): return jsonify(msg='Forbidden'), 403 if event.postedUid == user.id: allowed = True if event.endTime > datetime.utcnow(): past = False #first get the event data and make sure the user is the owner if request.method == 'GET': if allowed: if past: return jsonify( success=True, past=past, response="This event has passed and cannot be edited", Events=Events.build_event_dict(event, user)), 201 else: return jsonify(success=True, past=past, Events=Events.build_event_dict(event, user)), 201 else: return jsonify( success=False, response= "This event does not exist or it's you're not the owner"), 400 elif request.method == 'PUT': if allowed and not past: startTime = datetime.strptime(request.form['starttimestamp'], '%Y-%m-%d %H:%M:%S.%f%z') endTime = datetime.strptime(request.form['endtimestamp'], '%Y-%m-%d %H:%M:%S.%f%z') startTime = startTime.utcfromtimestamp(startTime.timestamp()) endTime = endTime.utcfromtimestamp(endTime.timestamp()) ftitle = request.form['title'] fbriefDescription = request.form['briefdescription'] ffullDescription = request.form['fulldescription'] fstartTime = startTime fendTime = endTime fplace = request.form['place'] fcategoryname = request.form['categoryname'] # foreign key fcontactEmail = request.form['contactemail'] # user email fcontactPhone = request.form['contactphone'] #CAN'T CHANGE IMAGE # file = fimage # extension = os.path.splitext(file.filename)[1] # rand = ''.join( # random.choices(string.ascii_letters + string.digits, k=5)) # Generate random stuff to make name unique # f_name = ftitle + rand + extension # f_name = f_name.replace(" ", "").strip() # file.save(os.path.join(app.config['upload_folder'], f_name)) event.title = ftitle # event.imageurl = '/upload/' + f_name event.briefDescription = fbriefDescription event.fullDescription = ffullDescription event.startTime = fstartTime # fstartTime,//convert these to datetime event.endTime = fendTime # fendTime, event.place = fplace event.categoryname = fcategoryname event.contactEmail = fcontactEmail event.contactPhone = fcontactPhone db.session.commit() return jsonify(success=True), 201 else: return jsonify( success=False, response="You're not allowed to edit this event"), 400
def getEvents(): # events = [Events.build_event_dict(event) for event in db.session.query(Events).all()] # return jsonify(Events=events) """ FOR MOBILE CLIENTS: TOKEN MUST BE SENT IF SAVE_FLAG FEATURE WANTS TO BE USED If method == GET Returns a list of events ordered by start time ?page=<int> is required example: /events?page=1 page must start at 1, will return the first 10 events. To filter by categories add the following: ?category=<String> example: /events?page=1&category=engineering (order doesn't matter) if succesful, will return json with the following format: [Events={ [{ EVENT VARIABLES HERE }] }] if method == POST Body must contain the event variables. Datetimes must contain timezone returns json containing success and the newly created event """ if request.method == 'GET': user = get_mobile_or_web_user() try: category_name = None if 'category' in request.args: category_name = request.args['category'] page = int(request.args['page']) - 1 if category_name is None: events = [ Events.build_event_dict(event, user) for event in db.session.query(Events).filter( Events.endTime > datetime.utcnow()).order_by( 'starttimestamp').limit(10).offset(page * 10) ] else: events = [ Events.build_event_dict(event, user) for event in db.session.query(Events).filter( Events.categoryname == category_name, Events.endTime > datetime.utcnow()).order_by( 'starttimestamp').limit(10).offset(page * 10) ] return jsonify(Events=events), 200 except (KeyError, ValueError) as e: # log exception return jsonify(msg='Malformed request'), 400 elif request.method == 'POST': user = get_mobile_or_web_user() if not rankAssocAdmin(user): return jsonify(response='You are NOT ALLOWED'), 400 else: startTime = datetime.strptime(request.form['starttimestamp'], '%Y-%m-%d %H:%M:%S.%f%z') endTime = datetime.strptime(request.form['endtimestamp'], '%Y-%m-%d %H:%M:%S.%f%z') startTime = startTime.utcfromtimestamp(startTime.timestamp()) endTime = endTime.utcfromtimestamp(endTime.timestamp()) ftitle = request.form['title'] fimage = request.files['imageurl'] fbriefDescription = request.form['briefdescription'] ffullDescription = request.form['fulldescription'] fstartTime = startTime fendTime = endTime fplace = request.form['place'] fcategoryname = request.form['categoryname'] # foreign key fcontactEmail = request.form['contactemail'] # user email fcontactPhone = request.form['contactphone'] file = fimage extension = os.path.splitext(file.filename)[1] rand = ''.join( random.choices( string.ascii_letters + string.digits, k=5)) # Generate random stuff to make name unique f_name = rand + extension f_name = f_name.replace(" ", "").strip() file.save(os.path.join(app.config['upload_folder'], f_name)) newEvent = Events( title=ftitle, imageurl='/upload/' + f_name, briefDescription=fbriefDescription, fullDescription=ffullDescription, startTime=fstartTime, # fstartTime,//convert these to datetime endTime=fendTime, # fendTime, place=fplace, categoryname=fcategoryname, contactEmail=fcontactEmail, contactPhone=fcontactPhone, postedUid=user.id, postedTimeStamp=datetime.utcnow()) new_event_analytic = EventAnalytics(event=newEvent) checkTitle = db.session.query(Events).filter( Events.title == ftitle).first() checkUid = db.session.query(Events).filter( Events.postedUid == user.id).first() if checkTitle and checkTitle.postedUid == user.id: return jsonify( success=False, response="You already posted an event with this title" ), 400 else: db.session.add(newEvent) db.session.add(new_event_analytic) db.session.commit() return jsonify(success=True, Event=Events.build_event_dict(newEvent, user)), 201 # Event=Events.build_user_dict(newEvent) elif request.method == 'PUT': user = get_mobile_or_web_user() if user is None: return jsonify(msg='Forbidden'), 403 eid = request.form['eid']