def get(self): """ Gets all events that have been created. URL Args: category (str): The category you want the events for. If category is 'all', then this will return all events. Any sub_categories will also be queried for events. """ category = request.args.get("category", "all") if category == 'all': events = Event.query(ancestor=Event.root_key()) else: category = PointCategory.get_from_name(category) if category is None: response = jsonify(message="Category does not exist") response.status_code = 404 return response keys = [] keys.append(category.key) keys.extend(category.sub_categories) events = Event.query(Event.point_category.IN(keys), ancestor=Event.root_key()) events = events.order(Event.date) out = {'events': []} for event in events: out['events'].append({ "name": event.name, "date": event.date.strftime('%m/%d/%Y'), "point-category": event.point_category.get().name, }) return jsonify(**out)
def post(self): """ Creates a new event. """ data = request.form # Don't allow duplicate events event = Event.get_from_name(data['name']) if event is not None: response = jsonify(message="Duplicate resource") response.status_code = 409 return response # Get the point category by name point_category = PointCategory.get_from_name(data['point-category']) if point_category is None: raise Exception("Unknonwn point category: " + data['point-category']) new_event = Event(parent=Event.root_key()) new_event.date = datetime.strptime(data['date'], "%Y-%m-%d") new_event.name = data['name'] new_event.point_category = point_category.key new_event.put() # Make sure there are point records for this event new_event.populate_records() response = jsonify() response.status_code = 201 response.headers['location'] = "/api/events/" + new_event.name.replace(" ", "") return response