def get(self, event_id): event = Event.get({u'id': event_id}) if not event: raise HTTPError(404) if not event.user_can_access(self.get_user()): raise HTTPError(401) self.output({u'attendants': Attendant.find({u'event': event_id}).serializable(name=True)})
def get(self, revision): ''' TODO - enforce user restrictions ''' #grab the event from the database event = Event.get({u'revision': revision}) if event is None: raise HTTPError(404) if not event.user_can_access(self.get_user()): raise HTTPError(401) response = {'event': event.serializable()} #give the user the attendance info if they asked for it if self.request.arguments.get('attendants'): response['attendants'] = Attendant.find({u'event': event[u'id']}).serializable(name=True) self.output(response)
def get(self): ''' Gets a list of events ''' #store username for later use username = self.get_session()[u'username'] user = User.get({u'username': username}) #grab the sorting/filtering types from the args #funky names avoid conflict with python builtins q_sort = self.get_argument(u'sort', u'soon') q_filter = self.get_argument(u'filter', u'invited') category = self.get_argument(u'category', None) if not q_filter in (u'invited', u'creator', u'public'): raise HTTPError(404) #prep the geospatial info lat = self.get_argument('lat', None) lng = self.get_argument('lng', None) if lat is not None and lng is not None: where = [float(lat), float(lng)] elif q_sort == u'nearby': raise HTTPError(403) events_invited = [ObjectId(att[u'event']) for att in Attendant.find({u'user': user[u'id']})] #prep filtering if q_filter == 'invited': q_filter = {'$or': [ {u'creator': username}, {u'_id': {'$in': events_invited}}, { u'broadcast': True, u'creator': {'$in': user.following()} } ]} elif q_filter == u'creator': q_filter = {u'creator': self.get_argument(u'username', username), u'$or': [{u'_id': {'$in': events_invited}}, {u'broadcast': True}, {u'broadcast': False, u'creator': username}]} elif q_filter == u'public': q_filter = {u'broadcast': True} if category is not None: q_filter[u'category'] = category # This can be uncommented when mongogb gets support for $and # # Limit to nearby times # q_filter.update({'$or': [{u'when': {u'$lt': timestamp() + UNTIL_LIMIT, # u'$gt': timestamp() - SINCE_LIMIT}}, # {u'when': None}]}) # Handle geo sorting if q_sort == u'nearby': #set the sort q_filter.update({u'posted_from': {u'$near': where}}) #use 'soon' as a secondary sort q_sort = u'soon' # Run the query events = db.objects.event.find(q_filter, limit=30) #perform the required sorting if q_sort == u'created': events.sort(u'created', direction=DESCENDING) elif q_sort == u'soon': events.sort(u'when', direction=DESCENDING) events.sort(u'created', direction=DESCENDING) #output the results result = {u'events': [e[u'revision'] for e in events]} self.write(result)