Ejemplo n.º 1
0
 def test_is_keys_in_dict(self):
     self.assertEqual(
         True,
         libs.is_keys_in_dict({
             'user_id': 1,
             'dummy': 'garbages'
         }, ['user_id']))
     self.assertEqual(
         False,
         libs.is_keys_in_dict({
             'user_id': 1,
             'dummy': 'garbages'
         }, ['username']))
Ejemplo n.º 2
0
    def add_welcome(self, session_key, notice_reg_dic):
        '''
        관리자용 welcome 추가 함수

        >>> notice_reg_dic = { 'content':'hahahah', 'due_date':'2008,7,14', 'weight':'1' }
        >>> notice.add_welcome(SYSOP_session_key, notice_reg_dic)
        >>> notice.add_welcome(user_session_key, notice_reg_dic)
        Traceback (most recent calls top):
            ...
        InvalidOperation
        
        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  notice_reg_dic: dictionary
        @param notice_reg_dic: Notice Dictionary
        @rtype: void
        @return:
            1. welcome 페이지 추가에 성공하였을 때: void
            2. welcome 페이지 추가에 실패하였을 때:
                1. 시삽이 아닐 때: InvalidOperation Exception
                2. 데이터베이스 오류: InternalError Exception
        '''

        notice_reg_dic = notice_reg_dic.__dict__

        notice_reg_dic['due_date'] = timestamp2datetime(
                notice_reg_dic['due_date'])

        if not is_keys_in_dict(notice_reg_dic, NOTICE_ADD_WHITELIST):
            raise InvalidOperation('wrong dictionary')

        if not self.engine.member_manager.is_sysop(session_key):
            raise InvalidOperation('not sysop')

        session = model.Session()
        try:
            # Register welcome to db
            welcome= model.Welcome(**notice_reg_dic)
            session.save(welcome)
            session.commit()
            session.close()
            return
        except Exception, e:
            session.rollback()
            session.close()
            raise InternalError('database error')
Ejemplo n.º 3
0
    def add_banner(self, session_key, notice_reg_dic):
        '''
        관리자용 배너 추가 함수
        이 아래의 doctest 는 작동하지 않으니 무시할 것.
       
        >>> notice_reg_dic = { 'content':'hahahah', 'due_date':'2008,7,14', 'weight':'1' }
        >>> notice.add_banner(SYSOP_session_key, WrittenNotice(**notice_reg_dic))
        >>> notice.add_banner(user_session_key, notice_reg_dic)
        Traceback (most recent calls top):
            ...
        InvalidOperation
        
        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  notice_reg_dic: ttypes.WrittenNotice 
        @param notice_reg_dic: Notice Dictionary
        @rtype: int
        @return:
            1. 배너 페이지 추가에 성공하였을 때: 추가된 배너의 id
            2. 배너 페이지 추가에 실패하였을 때:
                1. 시삽이 아닐 때: InvalidOperation Exception
                2. 데이터베이스 오류: InternalError Exception
        '''
        notice_reg_dic = notice_reg_dic.__dict__
        notice_reg_dic['due_date'] = timestamp2datetime(
                notice_reg_dic['due_date'])

        if not is_keys_in_dict(notice_reg_dic, NOTICE_ADD_WHITELIST):
            raise InvalidOperation('wrong dictionary')

        if not self.engine.member_manager.is_sysop(session_key):
            raise InvalidOperation('not sysop')

        session = model.Session()
        try:
            # Register welcome to db
            banner = model.Banner(**notice_reg_dic)
            session.add(banner)
            session.commit()
            banner_id = banner.id
            session.close()
            return banner_id
        except Exception, e:
            session.rollback()
            session.close()
            raise InternalError('database error')
Ejemplo n.º 4
0
    def add_welcome(self, session_key, notice_reg_dic):
        '''
        관리자용 welcome 추가 함수

        >>> notice_reg_dic = { 'content':'hahahah', 'due_date':'2008,7,14', 'weight':'1' }
        >>> notice.add_welcome(SYSOP_session_key, notice_reg_dic)
        >>> notice.add_welcome(user_session_key, notice_reg_dic)
        Traceback (most recent calls top):
            ...
        InvalidOperation
        
        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  notice_reg_dic: dictionary
        @param notice_reg_dic: Notice Dictionary
        @rtype: void
        @return:
            1. welcome 페이지 추가에 성공하였을 때: void
            2. welcome 페이지 추가에 실패하였을 때:
                1. 시삽이 아닐 때: InvalidOperation Exception
                2. 데이터베이스 오류: InternalError Exception
        '''

        notice_reg_dic = notice_reg_dic.__dict__

        notice_reg_dic['due_date'] = timestamp2datetime(
            notice_reg_dic['due_date'])

        if not is_keys_in_dict(notice_reg_dic, NOTICE_ADD_WHITELIST):
            raise InvalidOperation('wrong dictionary')

        if not self.engine.member_manager.is_sysop(session_key):
            raise InvalidOperation('not sysop')

        session = model.Session()
        try:
            # Register welcome to db
            welcome = model.Welcome(**notice_reg_dic)
            session.save(welcome)
            session.commit()
            session.close()
            return
        except Exception, e:
            session.rollback()
            session.close()
            raise InternalError('database error')
Ejemplo n.º 5
0
    def add_banner(self, session_key, notice_reg_dic):
        '''
        관리자용 배너 추가 함수
        이 아래의 doctest 는 작동하지 않으니 무시할 것.
       
        >>> notice_reg_dic = { 'content':'hahahah', 'due_date':'2008,7,14', 'weight':'1' }
        >>> notice.add_banner(SYSOP_session_key, WrittenNotice(**notice_reg_dic))
        >>> notice.add_banner(user_session_key, notice_reg_dic)
        Traceback (most recent calls top):
            ...
        InvalidOperation
        
        @type  session_key: string
        @param session_key: 사용자 Login Session
        @type  notice_reg_dic: ttypes.WrittenNotice 
        @param notice_reg_dic: Notice Dictionary
        @rtype: int
        @return:
            1. 배너 페이지 추가에 성공하였을 때: 추가된 배너의 id
            2. 배너 페이지 추가에 실패하였을 때:
                1. 시삽이 아닐 때: InvalidOperation Exception
                2. 데이터베이스 오류: InternalError Exception
        '''
        notice_reg_dic = notice_reg_dic.__dict__
        notice_reg_dic['due_date'] = timestamp2datetime(
            notice_reg_dic['due_date'])

        if not is_keys_in_dict(notice_reg_dic, NOTICE_ADD_WHITELIST):
            raise InvalidOperation('wrong dictionary')

        if not self.engine.member_manager.is_sysop(session_key):
            raise InvalidOperation('not sysop')

        session = model.Session()
        try:
            # Register welcome to db
            banner = model.Banner(**notice_reg_dic)
            session.add(banner)
            session.commit()
            banner_id = banner.id
            session.close()
            return banner_id
        except Exception, e:
            session.rollback()
            session.close()
            raise InternalError('database error')
Ejemplo n.º 6
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)
Ejemplo n.º 7
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)
Ejemplo n.º 8
0
 def test_is_keys_in_dict(self):
     self.assertEqual(True,
             libs.is_keys_in_dict({'user_id': 1, 'dummy': 'garbages'}, ['user_id']))
     self.assertEqual(False,
             libs.is_keys_in_dict({'user_id': 1, 'dummy': 'garbages'}, ['username']))