class AccountNotificationSaw(SelenolService): """Mark a notification as saw.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountNotificationSaw, self).__init__(['account', 'notification', 'saw'], connection, session) @selenol_params( user=get_user_from_session(), notification=get_object_from_content(AccountNotification, ['notification_id']), ) def on_request(self, user, notification): """Request method. :param user: User that is executing the request. :param notification: Notification to be mark as saw. """ if notification.user_id != user.id: raise SelenolUnauthorizedException() notification.saw_at = datetime.now() self.session.commit() return notification_serializer(notification)
class AccountGroupAcceptPendingRequest(SelenolService): """Accepts a group pending request.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupAcceptPendingRequest, self).__init__(['account', 'group', 'accept_pending_request'], connection, session) @selenol_params(user=get_user_from_session(), membership_request=get_object_from_content( AccountMembershipRequest, ['membership_request_id'])) def on_request(self, user, membership_request): """Request method. :param message: Original message. :param user: User that is executing the request. :param user_content: User to be accepted to the group. :param group: Group where the user was requesting membership. """ if membership_request.group.creator_id != user.id: raise SelenolUnauthorizedException() if membership_request.replied_at: raise SelenolInvalidArgumentException("membership_request_id", membership_request.id) membership_request.replied_at = datetime.now() self.session.commit() return group_serializer(membership_request.group)
class AccountGroupUser(SelenolService): """Returns all the users in a given group.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupUser, self).__init__(['account', 'group', 'user'], connection, session) @selenol_params( user=get_user_from_session(), user_content=get_object_from_content(AccountUser, ['user_id']), ) def on_request(self, user, user_content): """Request method. :param user: User that is executing the request. :param user_content: User to be accepted to the group. """ if user.id != user_content.id: raise SelenolUnauthorizedException() return user_groups_serializer(user)
class AccountGroupWaitingRequests(SelenolService): """Returns all the waiting requests for a group.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupWaitingRequests, self).__init__( ['account', 'group', 'waiting_requests'], connection, session) @selenol_params( user=get_user_from_session(), user_content=get_object_from_content(AccountUser, ['user_id']), ) def on_request(self, user, user_content): """Request method. :param user: User that is executing the request. :param user_content: User to be accepted to the group. """ if user.id != user_content.id: raise SelenolUnauthorizedException() return [group_membership_request_serializer(unreplied_request) for unreplied_request in user_content.membership_requests.filter( AccountMembershipRequest.replied_at.is_(None))]
def test_get_object_from_content(mock_service, mock_message): """Test get_object_from_content method.""" selenol_message = SelenolMessage(mock_message) # Value exists. mock_message['content']['content']['foo'] = 43 assert get_object_from_content(int, ['foo'])(mock_service, selenol_message) == 43 # Value does not exist in the database try: mock_message['content']['content']['foo'] = False get_object_from_content(int, ['foo'])(mock_service, selenol_message) assert False, 'The object doesnt exist, it throw an exception' except SelenolInvalidArgumentException as ex: assert ex.argument == ['foo'] assert not ex.value
class AccountGroupRequest(SelenolService): """Creates a group membership request for a user.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupRequest, self).__init__(['account', 'group', 'request'], connection, session) @selenol_params(user=get_user_from_session(), user_content=get_object_from_content( AccountUser, ['user_id']), group=get_object_from_content(AccountGroup, ['group_id'])) def on_request(self, user, user_content, group): """Request method. :param user: User that is executing the request. :param user_content: User to be accepted to the group. :param group: Group where the user was requesting membership. """ if user.id != user_content.id: raise SelenolUnauthorizedException() if group.creator_id == user.id or group.users.filter( AccountUser.id == user.id).count(): raise SelenolInvalidArgumentException('group_id', group.id) membership = AccountMembershipRequest(user_id=user_content.id, group_id=group.id, requested_at=datetime.now()) self.session.add(membership) self.session.commit() return group_membership_request_serializer(membership)
class AccountGroupInfo(SelenolService): """Returns information about a sepecific group.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupInfo, self).__init__(['account', 'group', 'info'], connection, session) @selenol_params(group=get_object_from_content(AccountGroup, ['group_id'])) def on_request(self, group): """Request method. :param group: Griup that is executing the request. """ return group_serializer(group)
class AccountUserInfo(SelenolService): """Returns information about a sepecific user.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountUserInfo, self).__init__(['account', 'user', 'info'], connection, session) @selenol_params(user=get_object_from_content(AccountUser, ['user_id'])) def on_request(self, user): """Request method. :param user: User that is executing the request. """ return user_serializer(user)
class AccountGroupCreate(SelenolService): """Creates groups.""" def __init__(self, connection=None, session=None): """Constructor. :param connection: Backend string connection. :param session: Database session creator. """ super(AccountGroupCreate, self).__init__(['account', 'group', 'create'], connection, session) @selenol_params(user=get_user_from_session(), user_content=get_object_from_content( AccountUser, ['user_id']), group_name=get_value_from_content(['name'])) def on_request(self, user, user_content, group_name): """Request method. :param user: User that is executing the request. :param user_content: User to be accepted to the group. :param group_name: Name of the new group. """ if user.id != user_content.id: raise SelenolUnauthorizedException() if len(group_name) <= 0: raise SelenolInvalidArgumentException('name', group_name) if self.session.query(AccountGroup).filter( AccountGroup.name == group_name).one_or_none(): raise SelenolInvalidArgumentException('name', group_name) group = AccountGroup(name=group_name, created=datetime.now(), creator_id=user_content.id) self.session.add(group) self.session.commit() return group_serializer(group)