def get(self): condition = self.get_argument('q') if ':' in condition: field, value = condition.split(':') else: raise HTTPError(400, "condition's format field:value") handle_q = { 'author': lambda userkey: Loud.query\ .filter(Loud.user.has(User.userkey==userkey))\ .filter(Loud.status!=Loud.DONE), 'position': lambda data: Loud.query\ .get_by_cycle2(*data.split(',')), 'key': lambda data: Loud.query\ .get_by_cycle_key(*data.split(',')), } if field in handle_q: q = QDict( q=condition, v=value, sort=self.get_argument('qs'), start=int(self.get_argument('st')), num=int(self.get_argument('qn')), ) query_louds = handle_q[field](q.v) # composite the results collection total = query_louds.count() query_dict = { 'q': q.q, 'qs': q.sort, 'st': q.start, 'qn': q.num, } loud_collection = { 'louds': [e.loud2dict() for e in query_louds.order_by(q.sort).limit(q.num).offset(q.start)], 'total': total, 'link': self.full_uri(query_dict), } if q.start + q.num < total: query_dict['st'] = q.start + q.num loud_collection['next'] = self.full_uri(query_dict) if q.start > 0: query_dict['st'] = max(q.start - q.num, 0) loud_collection['prev'] = self.full_uri(query_dict) gmt_now = datetime.datetime.utcnow() self.set_header('Last-Modified', pretty_time_str(gmt_now)) # make etag prepare self.cur_louds = loud_collection['louds'] else: raise HTTPError(400, "Bad Request, search condtion is not allowed.") self.render_json(loud_collection)
def get(self): msg = ReadMessage(self.current_user.id, self.last_modified_time) messages = msg.getMessages() message_collection = { 'messages': messages, 'total': len(messages), 'link': self.full_uri(), } self.set_header('Last-Modified', pretty_time_str(datetime.datetime.utcnow())) self.render_json(message_collection)
def get(self, pid): if pid: prize = Prize.query.get(pid) if not prize: raise HTTPError(404) info = prize.prize2dict() self.render_json(info) else: q = QDict( #uid=self.get_argument('uid'), sort=self.get_argument('qs'), start=int(self.get_argument('st')), num=int(self.get_argument('qn')), ) query_prizes = Prize.query.filter(Prize.user_id==self.current_user.id) total = query_prizes.count() query_dict = { #'uid': q.uid, 'qs': q.sort, 'st': q.start, 'qn': q.num, } prize_collection = { 'prizes': [e.prize2dict() for e in query_prizes.order_by(q.sort).limit(q.num).offset(q.start)], 'total': total, 'stars': query_prizes.filter(Prize.has_star==True).count(), 'link': self.full_uri(query_dict), } if q.start + q.num < total: query_dict['st'] = q.start + q.num reply_collection['next'] = self.full_uri(query_dict) if q.start > 0: query_dict['st'] = max(q.start - q.num, 0) reply_collection['prev'] = self.full_uri(query_dict) self.set_header('Last-Modified', pretty_time_str(datetime.datetime.utcnow())) self.render_json(prize_collection)
def get(self, city): query_dict = {'city_label': city, 'status': 'show'} pos = self.get_argument('pos', None) if pos: lat, lon = pos.split(',') query_dict['_location'] = {'$maxDistance': 0.091, '$near': [float(lon), float(lat)]} condition = self.get_argument('q') if ':' in condition: field, value = condition.split(':') else: raise HTTPError(400, "condition's format field:value") # process functions def do_tag(tag): query_dict['tags'] = tag return db.Entry.find(query_dict) def do_key(data): rqs = [e.lower() for e in re.split('\s+', data) if e] regex = re.compile(r'%s' % '|'.join(rqs), re.IGNORECASE) query_dict['$or'] = [{'title': regex}, {'brief': regex}, {'desc': regex}, {'tags': {'$in': rqs}}] return db.Entry.find(query_dict) handle_q = { 'tag': do_tag, 'key': do_key, } if field in handle_q: q = QDict( q=condition, v=value, start=int(self.get_argument('st')), num=int(self.get_argument('qn')), ) cur_entry = handle_q[field](q.v) # composite the results collection total = cur_entry.count() query_dict = { 'q': utf8(q.q), 'st': q.start, 'qn': q.num, } entries = cur_entry.skip(q.start).\ limit(q.num) entry_collection = { 'entries': [self.make_rest(e, 'entries') for e in entries], 'total': total, 'link': self.full_uri(query_dict), } if q.start + q.num < total: query_dict['st'] = q.start + q.num entry_collection['next'] = self.full_uri(query_dict) if q.start > 0: query_dict['st'] = max(q.start - q.num, 0) entry_collection['prev'] = self.full_uri(query_dict) gmt_now = datetime.datetime.utcnow() self.set_header('Last-Modified', pretty_time_str(gmt_now)) # make etag prepare self.cur_entries = entry_collection['entries'] else: raise HTTPError(400, "Bad Request, search condtion is not allowed.") self.render_json(entry_collection)