def remove_friend(self, request):
     print "in remove_friend"
     with db(session):
         friendship = Friendship.query.get((request.userId, request.friendId))  # (user_id, friend_id)
         if friendship:
             session.delete(friendship)
             session.commit()
             return RemoveFriendResponse(friend_removed=True)
         return RemoveFriendResponse(friend_removed=False)
    def answer_lobby_invite(self, request):
        if not isinstance(request, AnswerLobbyInviteRequest):
            return RpcError(message="Wrong message type, expecting AnswerLobbyInviteRequest", error_code=1)
            
        with db(session):
            query_type = Lobby.query.filter(Lobby.lobby_id==request.lobbyId).first()
            if not query_type:
                return RpcError(message="Lobby does not exists", error_code=2)
            accepted_count = LobbyMembership.query.filter(LobbyMembership.lobby_id==request.lobbyId).filter(LobbyMembership.status=="member").count()

            user_lobby = LobbyMembership.query.filter(LobbyMembership.lobby_id==request.lobbyId).filter(LobbyMembership.user_id==request.userId).first()
            if not user_lobby:
                return RpcError(message="Not permitted to the lobby", error_code=30)

            if(request.answer == "accept"):
                if(query_type.game_type >= accepted_count + 1):
                    session.delete(user_lobby)
                    session.add(LobbyMembership(lobby_id=user_lobby.lobby_id, status="member", user_id=user_lobby.user_id))
                    session.commit()
                    return AnswerLobbyInviteResponse(answer=True)
                else:
                    session.delete(user_lobby)
                    session.commit()
                    return RpcError(message="Lobby is full", error_code=31)
                    
            elif(request.answer == "deny"):
                try:
                    session.delete(user_lobby)
                    session.commit()
                    return AnswerLobbyInviteResponse(answer=True)
            
                except Exception as e:
                    return AnswerLobbyInviteResponse(answer=False)
            
            return RpcError(message="Unknown answer should be accept or deny", error_code=3)
 def remove_lobby(self, request):
     if not isinstance(request, RemoveLobbyRequest):
         return RpcError(message="Wrong message type, expecting RemoveLobbyRequest", error_code=1)
     
     try:
         with db(session):
             # Delete from Lobby table
             lobby = Lobby.query.filter(Lobby.lobby_id==request.lobbyId).filter(Lobby.owner_id==request.userId).first()
             if(lobby==None):
                 return RpcError(message="No permission to manage the lobby", error_code=35)
             session.delete(lobby)
         
             # Delete from LobbyMembership
             lobby_membership = LobbyMembership.query.filter(LobbyMembership.lobby_id==request.lobbyId).all()
             for member in lobby_membership:
                 session.delete(member)
             
             session.commit()
             return RemoveLobbyResponse(lobby_removed=True)
             
     except Exception as e:
         return RemoveLobbyResponse(lobby_removed=False)