예제 #1
0
class Comment(db.Document):
    content = db.StringField(required=True)
    tweet = db.ReferenceField("Tweet")
    create_date = db.DateTimeField(default=dt.now)

    commenter = db.ReferenceField(User, dbref=True)

    @classmethod
    def add(cls, content, tweet, commenter):
        c = Comment(content=content, tweet=tweet, commenter=commenter)
        c.save()

        from message import NotifyMessage
        nicknames = find_all_at_users(c.content)
        for nickname in nicknames:
            receiver = User.get_user_by_nickname(nickname)
            NotifyMessage.add(c.notify_render(), c.commenter, receiver)
        return c

    def notify_render(self):
        return render_template("include/comment_notify.html",
                               sender=self.commenter,
                               tweet=self.tweet)

    @classmethod
    def get_comments_bytweetid(cls, tweetid, offset=0, limit=20):
        comment_list = []
        start = offset * limit
        end = offset * limit + limit
        comment_list = cls.objects(
            tweet=tweetid).order_by('-create_date')[start:end]

        return comment_list
예제 #2
0
class PrivateMessage(db.Document):
    content            = db.StringField(required = True)
    sender             = db.ReferenceField(User)
    receiver           = db.ReferenceField(User)
    create_date        = db.DateTimeField(default=dt.now)
    has_read           = db.BooleanField(default=False)

    meta = {
        'allow_inheritance': False,
        'index_types': False,
    }

    @classmethod
    def get_private_message_by_id(cls,id):
        return cls.objects(id=id).first()

    @classmethod
    def add(cls,content,sender,receiver):
        pm      = cls(content=content,sender=sender,receiver=receiver).save()
        notify_user(receiver)
        return pm

    def safe_delete(self):
        self.delete()
        
    @classmethod
    def get_user_private_message_counter(cls,user):
        return len(cls.objects(receiver=user,has_read=False))

    @classmethod
    def get_private_message_for_user(cls,user):
        return cls.objects(receiver=user).order_by("-create_date")

    def read(self,user):
        if user != self.receiver:
            return False
        self.has_read = True
        self.save()
        return True
예제 #3
0
파일: search.py 프로젝트: guoyu07/ezlog2
class DocItem(db.EmbeddedDocument):
    doc = db.ReferenceField(Tweet, required=True)
    score = db.FloatField(required=True)

    meta = {
        'index_types': False,
    }

    def __hash__(self):
        if self.doc is None:
            # For new object
            return super(BaseDocument, self).__hash__()
        else:
            return hash(self.doc)
예제 #4
0
class Follow(db.Document):
    follower = db.ReferenceField(User)
    followed_user = db.ReferenceField(User)

    meta = {
        'allow_inheritance': False,
        'index_types': False,
        'indexes': [
            {
                'fields': ['follower', 'followed_user'],
                'unique': True
            },
        ]
    }

    @classmethod
    def toggle_follow(cls, followerid, followeduserid):
        result = cls.objects(follower=followerid,
                             followed_user=followeduserid).first()
        if result:
            result.delete()
        else:
            cls(follower=followerid, followed_user=followeduserid).save()

    @classmethod
    def get_followers_by_user(cls, user):
        return [
            x.follower
            for x in cls.objects(followed_user=user).only("follower")
        ]

    @classmethod
    def get_followed_users_by_user(cls, user):
        return [
            x.followed_user
            for x in cls.objects(follower=user).only("followed_user")
        ]
예제 #5
0
파일: tweet.py 프로젝트: guoyu07/ezlog2
class Tweet(db.Document):
    content            = db.StringField(required = True)
    type               = db.StringField(default = "text")
    originalid         = db.StringField(default = "")
    retweetid          = db.StringField(default = "")
    retweet_comment    = db.StringField()
    create_date        = db.DateTimeField(default = dt.now)
    extra_pic          = db.StringField(default = "")

    poster             = db.ReferenceField(User, dbref=True)

    meta = {
        'allow_inheritance': False,
        'index_types': False,
    }

    def __ini__(self):
        self._comments = None

    def tweet(self):
        from message import NotifyMessage
        nicknames   = find_all_at_users(self.content)
        self.save()
        for nickname in nicknames:
            receiver = User.get_user_by_nickname(nickname)
            if receiver is not None:
                NotifyMessage.add(self.notify_render(),self.poster,receiver)

    def notify_render(self):
        return render_template("include/tweet_notify.html",
                                sender=self.poster,
                                tweet=self)

    @classmethod
    def retweetit(cls, originalid, comment, poster):
        t   = cls.get_tweet_byid(originalid)
        ret = cls(content         = t.content,
                  originalid      = t.originalid or originalid,
                  retweetid       = originalid,
                  retweet_comment = comment,
                  poster          = poster).save()
        return ret

    def is_retweet(self):
        return self.originalid!=""

    @property
    def original_tweet(self):
        if not self.originalid:
            return None
        return Tweet.objects(id=self.originalid).first()

    @property
    def retweet_tweet(self):
        return Tweet.objects(id=self.retweetid).first()

    @classmethod
    def get_tweets_foruser(cls,user, limit=15, offset=0):
        start           = offset*limit
        end             = offset*limit+limit
        following_users = user.get_following_users()
        tweets = cls.objects(poster__in=[x.id for x in following_users]+[user.id])\
                  .order_by("-create_date")[start:end]
        return tweets

    @classmethod
    def get_users_tweets(cls, user, limit=15, offset=0):
        start       = offset*limit
        end         = offset*limit+limit
        tweets      = cls.objects(poster=user)\
                         .order_by("-create_date")[start:end]
        return tweets


    @classmethod
    def get_newest_tweets(cls,limit = 20, offset =0):
        start       = offset*limit
        end         = offset*limit+limit
        return cls.objects().order_by("-create_date")[start:end]


    @classmethod
    def get_tweet_byid(cls, id):
        tweet = cls.objects(id=id).first()
        return tweet

    def comment_on(self, commenter, content):
        pass

    @property
    def retweet_counter(self):
        return len(Tweet.objects(retweetid=str(self.id)))
    @property
    def comment_counter(self):
        return len(Comment.objects(tweet=self.id))
    @property
    def comments(self):
        self._comments = Comment.get_comments_bytweetid(self.id)
        return self._comments