Test coverage for vnccollab.content.following
# import transaction
1: from persistent import Persistent
1: from persistent.dict import PersistentDict
1: from persistent.list import PersistentList
1: from AccessControl import getSecurityManager
1: from zope.interface import implements
1: from .interfaces import IFollowing
2: class Following(Persistent):
"""Local utility for follow/unfollow users.
1: """
1: implements(IFollowing)
1: __allow_access_to_unprotected_subobjects__ = True
1: def __init__(self):
1: self._subscribed_to = PersistentDict()
1: self._my_subscribers = PersistentDict()
1: def _auth_user_id(self):
>>>>>> manager = getSecurityManager()
>>>>>> return manager.getUser().getId()
1: def _append(self, data, key, value):
40: if data.get(key, False):
4: if value not in data[key]:
4: data[key].append(value)
else:
36: data[key] = PersistentList()
36: data[key].append(value)
1: def _remove(self, data, key, value):
6: if data.get(key, False) and value in data[key]:
6: data[key].remove(value)
# High Level API Methods
1: def subscribe(self, user1, user2):
"""Subscribe 'user1' to 'user2'.
If user1 is None, get authenticated user id.
"""
20: user = user1 if user1 else self._auth_user_id()
20: if user2 == user:
# do not subscribe to myself
>>>>>> return
20: self._append(self._subscribed_to, user, user2)
20: self._append(self._my_subscribers, user2, user)
1: def unsubscribe(self, user1, user2):
"""Unsubscribe 'user1' from 'user2'.
If user1 is None, get authenticated user id.
"""
3: user = user1 if user1 else self._auth_user_id()
3: if user2 == user:
# nothing to do
>>>>>> return
3: self._remove(self._subscribed_to, user, user2)
3: self._remove(self._my_subscribers, user2, user)
1: def is_following(self, user1, user2):
"""Check if 'user1' is following 'user2'.
If user1 is None, get authenticated user id.
"""
15: user = user1 if user1 else self._auth_user_id()
15: return self._subscribed_to.get(user, False) and \
8: user2 in self._subscribed_to[user]
1: def is_followed_by(self, user1, user2):
"""Check if 'user1' is followed by 'user2'.
If user1 is None, get authenticated user id.
"""
4: user = user1 if user1 else self._auth_user_id()
4: return self._my_subscribers.get(user, False) and \
3: user2 in self._my_subscribers[user]
1: def has_followers(self, user):
"""Check if user is followed by any other user.
If user is None, get authenticated user id.
"""
2: user = user if user else self._auth_user_id()
2: return len(self._my_subscribers.get(user, [])) > 0
1: def has_followings(self, user):
"""Check if user is following anybody.
If user is None, get authenticated user id.
"""
2: user = user if user else self._auth_user_id()
2: return len(self._subscribed_to.get(user, [])) > 0
1: def get_followers(self, user):
"""Get all followers of the user.
If user is None, get authenticated user id.
"""
10: user = user if user else self._auth_user_id()
10: return list(self._my_subscribers.get(user, []))
1: def get_followings(self, user):
"""Get all users the user is following.
If user is None, get authenticated user id.
"""
9: user = user if user else self._auth_user_id()
9: return list(self._subscribed_to.get(user, []))