Esempio n. 1
0
    def change_listing_mode(self, session_key, listing_mode):
        '''
        로그인한 user의 listing mode (글 목록 정렬 방식) 를 변경한다.

        @type  session_key: string
        @param session_key: 사용자 Login Session (must be SYSOP)
        @type  listing_mode: int
        @param listing_mode: 글 목록 정렬 방식 (ArticleManager 참고)
        @return:
            1. 성공했을 경우: void
            2. 실패했을 경우 : Invalid Operation
        '''
        if listing_mode < 0 or 1 < listing_mode:
            raise InvalidOperation('wrong listing mode')

        session = model.Session()
        user = self._get_user_by_session(session, session_key)
        user_id = user.id
        try:
            user.listing_mode = listing_mode
            session.commit()
            session.close()
        except InvalidRequestError:
            session.close()
            raise InvalidOperation('database error')

        # Cache update
        ara_memcached.clear_memcached(self.get_listing_mode, user_id)
Esempio n. 2
0
    def change_listing_mode(self, session_key, listing_mode):
        '''
        로그인한 user의 listing mode (글 목록 정렬 방식) 를 변경한다.

        @type  session_key: string
        @param session_key: 사용자 Login Session (must be SYSOP)
        @type  listing_mode: int
        @param listing_mode: 글 목록 정렬 방식 (ArticleManager 참고)
        @return:
            1. 성공했을 경우: void
            2. 실패했을 경우 : Invalid Operation
        '''
        if listing_mode < 0 or 1 < listing_mode:
            raise InvalidOperation('wrong listing mode')

        session = model.Session()
        user = self._get_user_by_session(session, session_key)
        user_id = user.id
        try:
            user.listing_mode = listing_mode
            session.commit()
            session.close()
        except InvalidRequestError:
            session.close()
            raise InvalidOperation('database error')

        # Cache update
        ara_memcached.clear_memcached(self.get_listing_mode, user_id)
Esempio n. 3
0
    def modify_user(self, session_key, user_modification):
        '''
        password를 제외한 회원 정보 수정

        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  user_reg_infot: ttypes.UserModification
        @param user_reg_infot: 변경할 사용자 정보
        @rtype: void
        @return:
            1. modify 성공: void
            2. modify 실패:
                1. 로그인되지 않은 유저: InvalidOperation('NOT_LOGGEDIN'
                2. 데이터베이스 오류: InvalidOperation('DATABASE_ERROR'
                3. 양식이 맞지 않음(부적절한 NULL값 등): 'WRONG_DICTIONARY'
        '''
        session_info = self.engine.login_manager.get_session(session_key)
        username = smart_unicode(session_info.username)

        if not is_keys_in_dict(user_modification.__dict__,
                               USER_PUBLIC_MODIFIABLE_WHITELIST):
            raise InvalidOperation('wrong input')
        session = model.Session()
        user = self._get_user(session, username)

        for key, value in user_modification.__dict__.items():
            # 문자열에 한하여 smart_unicode 로 변환하여 저장한다
            if type(value) in [str, unicode]:
                setattr(user, key, smart_unicode(value))
            else:
                setattr(user, key, value)
        session.commit()
        session.close()

        # Member Manager Cache
        ara_memcached.clear_memcached(self.get_listing_mode, session_info.id)
Esempio n. 4
0
    def modify_user(self, session_key, user_modification):
        '''
        password를 제외한 회원 정보 수정

        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  user_reg_infot: ttypes.UserModification
        @param user_reg_infot: 변경할 사용자 정보
        @rtype: void
        @return:
            1. modify 성공: void
            2. modify 실패:
                1. 로그인되지 않은 유저: InvalidOperation('NOT_LOGGEDIN'
                2. 데이터베이스 오류: InvalidOperation('DATABASE_ERROR'
                3. 양식이 맞지 않음(부적절한 NULL값 등): 'WRONG_DICTIONARY'
        '''
        session_info = self.engine.login_manager.get_session(session_key)
        username = smart_unicode(session_info.username)

        if not is_keys_in_dict(user_modification.__dict__,
                               USER_PUBLIC_MODIFIABLE_WHITELIST):
            raise InvalidOperation('wrong input')
        session = model.Session()
        user = self._get_user(session, username)

        for key, value in user_modification.__dict__.items():
            # 문자열에 한하여 smart_unicode 로 변환하여 저장한다
            if type(value) in [str, unicode]:
                setattr(user, key, smart_unicode(value))
            else:
                setattr(user, key, value)
        session.commit()
        session.close()

        # Member Manager Cache
        ara_memcached.clear_memcached(self.get_listing_mode, session_info.id)
Esempio n. 5
0
            boards = [session.query(model.Board).filter_by(id=x).one() for x in board_ids]
        except NoResultFound, MultipleResultsFound:
            session.close()
            raise InvalidOperation("Not a valid board id")

        session.query(model.SelectedBoards).filter_by(user_id=user.id).delete()
        session.flush()

        for board in boards:
            selected_board = model.SelectedBoards(user, board)
            session.add(selected_board)
        session.commit()
        session.close()

        # Cache update
        ara_memcached.clear_memcached(self.get_selected_boards, session_key)

    __public__ = [
            authenticate,
            register_,
            backdoor_confirm,
            confirm,
            cancel_confirm,
            is_registered,
            is_registered_nickname,
            is_registered_email,
            get_info,
            modify_password,
            modify_password_sysop,
            modify_password_with_token,
            modify_user,
Esempio n. 6
0
 def _clear_cache(self, board=False, category=False):
     if category:
         ara_memcached.clear_memcached(self.get_category_list)
         ara_memcached.clear_memcached(self.get_category_dict)
     if board:
         ara_memcached.clear_memcached(self.get_board_list)
         ara_memcached.clear_memcached(self.get_board_dict)
     if category or board:
         ara_memcached.clear_memcached(self.get_category_and_board_list)
         ara_memcached.clear_memcached(self.get_category_and_board_dict)
Esempio n. 7
0
            boards = [
                session.query(model.Board).filter_by(id=x).one()
                for x in board_ids
            ]
        except NoResultFound, MultipleResultsFound:
            session.close()
            raise InvalidOperation("Not a valid board id")

        session.query(model.SelectedBoards).filter_by(user_id=user.id).delete()
        session.flush()

        for board in boards:
            selected_board = model.SelectedBoards(user, board)
            session.add(selected_board)
        session.commit()
        session.close()

        # Cache update
        ara_memcached.clear_memcached(self.get_selected_boards, session_key)

    __public__ = [
        authenticate, register_, backdoor_confirm, confirm, cancel_confirm,
        is_registered, is_registered_nickname, is_registered_email, get_info,
        modify_password, modify_password_sysop, modify_password_with_token,
        modify_user, modify_authentication_email, query_by_username,
        query_by_nick, remove_user, search_user, send_id_recovery_email,
        send_password_recovery_email, is_sysop, logout_process,
        get_activated_users, set_selected_boards, get_selected_boards,
        update_last_logout_time, get_listing_mode, get_listing_mode_by_key
    ]