Ejemplo n.º 1
0
    def wants_to_be_friends_with(origin_username, destiny_username):
        """Declares an intention from origin to be friends with destiny, sending a request to
        destiny or confirming the relation if the inverse had been previously stated.
        Returns a FriendshipState which can be request_sent or friends depending on the previous."""
        Logger(__name__).info(
            'Username {} wants to be friends with {}.'.format(
                origin_username, destiny_username))
        # retrieve the DB user representations
        origin_user = User._get_one({'username': origin_username})
        destiny_user = User._get_one({'username': destiny_username})

        # if one of them was not found raise exception
        if origin_user is None or destiny_user is None:
            raise UserNotFoundException

        # if destiny had NOT already wanted to be friends with origin
        if origin_username not in destiny_user['friends']:
            return Friendship._send_request_from_to(origin_username,
                                                    destiny_username)

        # if destiny is already friends with origin
        if Friendship._are_friends(origin_username, destiny_username):
            raise AlreadyFriendsException

        # only other cases are: invitation already sent or needed confirmation
        # and this first case should not be possible
        assert _user(destiny_username
                     )['friends'][origin_username] == FRIENDSHIP_STATE_SENT
        assert _user(origin_username)['friends'][
            destiny_username] == FRIENDSHIP_STATE_RECEIVED

        # so now it should be confirmed
        return Friendship._confirm_friends(origin_username, destiny_username)
Ejemplo n.º 2
0
 def _are_friends(username1, username2):
     Logger(__name__).info(
         'Evaluating whether users {} and {} are friends.'.format(
             username1, username2))
     if username2 in _user(username1)['friends'] and \
             _user(username1)['friends'][username2] == FRIENDSHIP_STATE_FRIENDS:
         return True
     return False
Ejemplo n.º 3
0
 def get_friendship_state_from_to(origin_username, destiny_username):
     """Returns one of the friendship states according to how origin sees the relationship."""
     origin_user_obj = _user(origin_username)
     if _user(destiny_username) is None:
         raise UserNotFoundException
     if destiny_username not in origin_user_obj['friends']:
         return FRIENDSHIP_STATE_NOT_FRIENDS
     return origin_user_obj['friends'][destiny_username]
Ejemplo n.º 4
0
    def _confirm_friends(username1, username2):
        Logger(__name__).info(
            'Confirming friendship between users {} and {}.'.format(
                username1, username2))
        assert username2 in _user(username1)['friends']
        assert username1 in _user(username2)['friends']

        # user1['friends'][user2['username']] = FRIENDSHIP_STATE_FRIENDS
        Friendship._change_friendship_in_to(username1, username2,
                                            FRIENDSHIP_STATE_FRIENDS)

        # user2['friends'][user1['username']] = FRIENDSHIP_STATE_FRIENDS
        Friendship._change_friendship_in_to(username2, username1,
                                            FRIENDSHIP_STATE_FRIENDS)

        return FRIENDSHIP_STATE_FRIENDS
Ejemplo n.º 5
0
 def _had_sent_request(origin_username, destiny_username):
     Logger(__name__).info(
         'Evaluating whether user {} wanted to be friends with {} '
         'beforehand.'.format(origin_username, destiny_username))
     if _user(destiny_username
              )['friends'][origin_username] == FRIENDSHIP_STATE_RECEIVED:
         return True
     return False
Ejemplo n.º 6
0
 def _get_friends_of(username):
     user_obj = _user(username)
     if user_obj is None:
         raise UserNotFoundException
     return [
         friend_id
         for friend_id, friendship_state in user_obj["friends"].items()
         if friendship_state == FRIENDSHIP_STATE_FRIENDS
     ]
Ejemplo n.º 7
0
    def _reject_friendship(username1, username2):
        Logger(__name__).info(
            'Rejecting friendship between users {} and {}.'.format(
                username1, username2))

        # previous_state = user1['friends'].pop(user2["username"])
        previous_state = _user(username1)['friends'][username2]
        Friendship._delete_friendship_in(username1, username2)

        # user2['friends'].pop(user1["username"])
        Friendship._delete_friendship_in(username2, username1)

        return previous_state