You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@allura.apache.org by br...@apache.org on 2018/11/08 21:53:45 UTC

[04/10] allura git commit: [#8253] Adding Reactable artifact class

[#8253] Adding Reactable artifact class


Project: http://git-wip-us.apache.org/repos/asf/allura/repo
Commit: http://git-wip-us.apache.org/repos/asf/allura/commit/62df9f20
Tree: http://git-wip-us.apache.org/repos/asf/allura/tree/62df9f20
Diff: http://git-wip-us.apache.org/repos/asf/allura/diff/62df9f20

Branch: refs/heads/master
Commit: 62df9f2079acc7c802fff662da3f78e86e9fbf3f
Parents: e696260
Author: Shalitha <sh...@gmail.com>
Authored: Tue Oct 30 22:02:04 2018 +0530
Committer: Dave Brondsema <db...@slashdotmedia.com>
Committed: Thu Nov 8 21:53:25 2018 +0000

----------------------------------------------------------------------
 Allura/allura/model/artifact.py | 64 ++++++++++++++++++++++++++++++++++++
 Allura/allura/model/discuss.py  |  4 +--
 2 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/allura/blob/62df9f20/Allura/allura/model/artifact.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/artifact.py b/Allura/allura/model/artifact.py
index 7933e7f..21aad0d 100644
--- a/Allura/allura/model/artifact.py
+++ b/Allura/allura/model/artifact.py
@@ -1051,6 +1051,70 @@ class VotableArtifact(MappedClass):
         }
 
 
+class ReactableArtifact(MappedClass):
+
+    """Reaction support for the Artifact. Use as a mixin."""
+
+    class __mongometa__:
+        session = main_orm_session
+        name = 'reaction'
+
+    react_thumbs_up = FieldProperty(int, if_missing=0)
+    react_thumbs_down = FieldProperty(int, if_missing=0)
+    react_laugh = FieldProperty(int, if_missing=0)
+    react_hooray = FieldProperty(int, if_missing=0)
+    react_confused = FieldProperty(int, if_missing=0)
+    react_heart = FieldProperty(int, if_missing=0)
+
+    react_users = FieldProperty({str: None}, if_missing=dict())
+    # dict to store reactions vs usernames
+
+    reaction_list = ['thumbs_up', 'thumbs_down', 'laugh', 'hooray', 'confused', 'heart']
+
+    def post_reaction(self, r, user):
+        current_reaction = self.user_reacted(user)
+        if current_reaction is None:
+            # no prev reactions. simply append
+            if r in self.react_users:
+                self.react_users[r].append(user.username)
+            else:
+                self.react_users[r] = [user.username]
+            self.update_react_count(r, 1)
+        elif current_reaction == r:
+            # prev=current so remove
+            self.react_users[r].remove(user.username)
+            self.update_react_count(r, -1)
+        else:
+            # prev!=currnet so remove prev then append
+            self.react_users[current_reaction].remove(user.username)
+            if r in self.react_users:
+                self.react_users[r].append(user.username)
+            else:
+                self.react_users[r] = [user.username]
+            self.update_react_count(current_reaction, -1)
+            self.update_react_count(r, 1)
+
+    def user_reacted(self, user):
+        for i in self.reaction_list:
+            if i in self.react_users:
+                if user.username in self.react_users[i]:
+                    return i
+        return 
+    
+    def update_react_count(self, r, i):
+        if r == 'thumbs_up':
+            self.react_thumbs_up += i
+        elif r == 'thumbs_down':
+            self.react_thumbs_down += i
+        elif r == 'laugh':
+            self.react_laugh += i
+        elif r == 'hooray':
+            self.react_hooray += i
+        elif r == 'confused':
+            self.react_confused += i
+        elif r == 'heart':
+            self.react_heart += i
+
 class MovedArtifact(Artifact):
 
     class __mongometa__:

http://git-wip-us.apache.org/repos/asf/allura/blob/62df9f20/Allura/allura/model/discuss.py
----------------------------------------------------------------------
diff --git a/Allura/allura/model/discuss.py b/Allura/allura/model/discuss.py
index d6dc8d7..c7fcc27 100644
--- a/Allura/allura/model/discuss.py
+++ b/Allura/allura/model/discuss.py
@@ -36,7 +36,7 @@ from allura.lib import security
 from allura.lib.security import require_access, has_access
 from allura.lib import utils
 from allura.model.notification import Notification, Mailbox
-from .artifact import Artifact, ArtifactReference, VersionedArtifact, Snapshot, Message, Feed
+from .artifact import Artifact, ArtifactReference, VersionedArtifact, Snapshot, Message, Feed, ReactableArtifact
 from .attachments import BaseAttachment
 from .auth import User, ProjectRole, AlluraUserProperty
 from .timeline import ActivityObject
@@ -489,7 +489,7 @@ class PostHistory(Snapshot):
         return result
 
 
-class Post(Message, VersionedArtifact, ActivityObject):
+class Post(Message, VersionedArtifact, ActivityObject, ReactableArtifact):
 
     class __mongometa__:
         name = 'post'