Beispiel #1
0
    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)
Beispiel #2
0
    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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)