예제 #1
0
    def load_all_photos_by_likes(self, db, cursor, limit=10):
        sql = (
            "SELECT photos.id, photos.fb_id, photos.filename, photos.caption, \
           photos.owner_id, photos.state, photos.created_at, photos.approved_at, \
           likes_count.count \
           FROM photos \
           LEFT JOIN (SELECT photo_id, count(*) AS count FROM likes GROUP BY photo_id) AS likes_count \
           ON photos.id = likes_count.photo_id \
           ORDER BY likes_count.count DESC, \
           photos.approved_at DESC LIMIT %d"
            % limit
        )

        try:
            cursor.execute(sql)
            data = cursor.fetchall()

            for row in data:
                photo = Photo()
                photo.load_from_tuple(row)

                self.photos_list.append(photo)

            return self.photos_list
        except Exception, e:
            raise e
예제 #2
0
    def load_after(self, timestamp, limit, state, cursor):
        sql = "SELECT id, fb_id, filename, caption, owner_id, state, \
           created_at, approved_at \
           FROM photos \
           WHERE state = %s AND approved_at > %s \
           ORDER BY approved_at ASC LIMIT %s"

        try:
            cursor.execute(sql, (state, timestamp, limit))
            data = cursor.fetchall()

            for row in data:
                photo = Photo()
                photo.load_from_tuple(row)

                self.photos_list.append(photo)

            return self.photos_list
        except Exception, e:
            raise e
예제 #3
0
    def load_by_likes(self, photo_id, db, cursor):
        # select photos where like < likes_for(photo_id)
        # union
        # select photos where like = likes_for(photo_id) and timestamp < timestamp_for(photo_id)
        curr_photo = Photo()
        curr_photo.load_from_db(photo_id, cursor)
        curr_photo_likes = curr_photo.like_count(db, cursor)
        curr_photo_approve_timestamp = curr_photo.get_dict()["approved_at"]

        sql = "SELECT photos.id, photos.fb_id, photos.filename, photos.caption, \
           photos.owner_id, photos.state, photos.created_at, photos.approved_at, \
           likes_count.count \
           FROM photos \
           LEFT JOIN (SELECT photo_id, count(*) AS count FROM likes GROUP BY photo_id) AS likes_count \
           ON photos.id = likes_count.photo_id \
           WHERE likes_count.count = %s \
           AND photos.approved_at < %s \
           \
           UNION \
           \
           SELECT photos.id, photos.fb_id, photos.filename, photos.caption, \
           photos.owner_id, photos.state, photos.created_at, photos.approved_at, \
           likes_count.count \
           FROM photos \
           LEFT JOIN (SELECT photo_id, count(*) AS count FROM likes GROUP BY photo_id) AS likes_count \
           ON photos.id = likes_count.photo_id \
           WHERE likes_count.count < %s"

        try:
            cursor.execute(sql, (curr_photo_likes, curr_photo_approve_timestamp, curr_photo_likes))
            data = cursor.fetchall()

            for row in data:
                photo = Photo()
                photo.load_from_tuple(row)

                self.photos_list.append(photo)

            return self.photos_list
        except Exception, e:
            raise e
예제 #4
0
    def load(self, offset, limit, state, cursor):
        sql = (
            "SELECT id, fb_id, filename, caption, owner_id, state, created_at \
           FROM photos \
           WHERE state = '%s' LIMIT %d OFFSET %d"
            % (state, limit, offset)
        )

        try:
            cursor.execute(sql)
            data = cursor.fetchall()

            for row in data:
                photo = Photo()
                photo.load_from_tuple(row)

                self.photos_list.append(photo)

            return self.photos_list
        except Exception, e:
            raise e