Пример #1
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        exists_santa = True
        person_id = ''
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        santa = is_santa(persistence_attr['santa'], person_id)

        subscription = is_skill_product(handler_input)
        if 'msg' in persistence_attr['session']:
            speak_output = _(data.WISH_ADD_NO_MSG)
        else:
            speak_output = _(data.NO_MSG)

        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}
        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #2
0
    def test_set_request_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)
        attributes_manager.request_attributes = {"key": "value"}

        assert attributes_manager.request_attributes == {"key": "value"}, (
            "AttributesManager fails to set the request attributes")
Пример #3
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        exists_santa = True
        person_id = None
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        santa = is_santa(persistence_attr['santa'], person_id)

        subscription = is_skill_product(handler_input)
        if 'msg' in persistence_attr['session']:
            #1分経過してたら無効
            logger.error(int(datetime.now().strftime('%s')), exc_info=True)
            logger.error(int(persistence_attr['session']['dt']), exc_info=True)
            if int(datetime.now().strftime('%s')) - int(
                    persistence_attr['session']['dt']) > 60:
                speak_output = _(data.WISH_ADD_TIMEOUT_MSG)
                return (handler_input.response_builder.speak(speak_output).ask(
                    speak_output).response)
        else:
            speak_output = _(data.WISH_ADD_NO_MSG)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        if 'msg' not in persistence_attr:
            persistence_attr['msg'] = []
        idx = len(persistence_attr['msg'])
        txt = persistence_attr['session']['msg']
        persistence_attr['msg'].append({})
        persistence_attr['msg'][idx]['txt'] = txt
        persistence_attr['msg'][idx]['person_id'] = "{}".format(person_id)
        if person_id != "" and person_id is not None:
            speak_output = _(data.WISH_ADD_MSG).format(person_id, txt)
        else:
            speak_output = _(data.WISH_ADD_NONAME_MSG).format(txt)

        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}
        logger.error(persistence_attr, exc_info=True)
        logger.error(speak_output, exc_info=True)
        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).response)
Пример #4
0
    def test_set_session_attributes_to_out_of_session_request_envelope(self):
        request_envelope = RequestEnvelope(
            version=None, session=None, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        attributes_manager._request_envelope.session = None
        with self.assertRaises(AttributesManagerException) as exc:
            attributes_manager.session_attributes = {"key": "value"}

        assert "Cannot set SessionAttributes to out of session request!" in str(exc.exception), (
            "AttributesManager should raise error when trying to set session "
            "attributes to out of session request")
Пример #5
0
    def test_set_persistent_attributes_without_persistence_adapter(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        with self.assertRaises(AttributesManagerException) as exc:
            attributes_manager.persistent_attributes = {"key": "value"}

        assert "Cannot set PersistentAttributes without persistence adapter!" in str(exc.exception), (
            "AttributesManager should raise error when trying to set "
            "persistent attributes without persistence adapter")
Пример #6
0
    def test_set_persistent_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=MockPersistenceAdapter())

        attributes_manager.persistent_attributes = {"key": "value"}

        assert attributes_manager.persistent_attributes == {
            "key": "value"}, (
            "AttributesManager fails to set the persistent attributes")
Пример #7
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        person_id = ''
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        password = get_resolved_query(handler_input.request_envelope.request,
                                      "password")
        message_number = get_resolved_query(
            handler_input.request_envelope.request, "message_number")
        logger.info(password, exc_info=True)
        if 'password' in persistence_attr['session']:
            if str(persistence_attr['session']['password']) == password:
                mymsg_id = int(persistence_attr['session']['delete'])
                logger.info(mymsg_id, exc_info=True)
                del persistence_attr['msg'][mymsg_id]
                del persistence_attr['session']['delete']
                del persistence_attr['session']['password']
                speak_output = _(data.WISH_DELETE_MSG)
            elif (str(persistence_attr['session']['password']) == 'a'
                  and int(message_number) > 0):
                idx = int(message_number) - 1
                del persistence_attr['msg'][idx]
                del persistence_attr['session']['delete']
                del persistence_attr['session']['password']
                speak_output = _(
                    data.WISH_DELETE_PARENT_MSG).format(message_number)
            else:
                speak_output = _(data.WISH_DELETE_NG_MSG)
        else:
            speak_output = _(data.WISH_DELETE_NON_MSG)

        logger.info(persistence_attr['session'], exc_info=True)
        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}
        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #8
0
    def test_delete_persistent_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=MockPersistenceAdapter())

        attributes_manager.persistent_attributes = {"key": "value"}
        attributes_manager.delete_persistent_attributes()

        assert attributes_manager._persistence_adapter.attributes == {}, (
            "AttributesManager fails to delete persistent attributes via "
            "persistence adapter")
Пример #9
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        person_id = ''
        logger.info(request_envelope.context.system, exc_info=True)
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.WISH_DELETE_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        # 親か子か
        personClass = ''
        if 'personClass' in persistence_attr[person_id]:
            personClass = persistence_attr[person_id]['personClass']
        else:
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)

        confirm = '消しません'
        resolved_value = get_resolved_value(
            handler_input.request_envelope.request, "confirm")
        resolved_id = get_resolved_id(handler_input.request_envelope.request,
                                      "confirm")
        if (resolved_value is not None):
            # Dialogを用いてるので原則として値は入ってくる
            confirm = resolved_value

        if confirm == '消します' and 'wish' in persistence_attr[person_id]:
            del (persistence_attr[person_id]['wish'])
            speak_output = _(data.WISH_DELETE_YES_MSG).format(
                persistence_attr[person_id])
        elif confirm == '消します':
            speak_output = _(data.WISH_DELETE_NON_MSG).format(
                persistence_attr[person_id])
        else:
            speak_output = _(data.WISH_DELETE_NO_MSG).format(
                persistence_attr[person_id])

        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #10
0
    def test_save_persistent_attributes_without_changing_persistent_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=MockPersistenceAdapter())

        attributes_manager.save_persistent_attributes()

        assert attributes_manager._persistence_adapter.attributes == {
            "key_1": "v1", "key_2": "v2"}, (
            "AttributesManager should do nothing if persistent attributes "
            "has not been changed")
Пример #11
0
    def test_set_session_attributes(self):
        session = Session(
            new=None, session_id=None, user=None,
            attributes={"mockKey": "mockValue"}, application=None)
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        attributes_manager.session_attributes = {
            "mockKey": "updatedMockValue"}

        assert attributes_manager.session_attributes == {
            "mockKey": "updatedMockValue"}, (
            "AttributesManager fails to set the session attributes")
    def test_save_persistent_attributes_without_persistence_adapter(self):
        request_envelope = RequestEnvelope(version=None,
                                           session=None,
                                           context=None,
                                           request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        with self.assertRaises(AttributesManagerException) as exc:
            attributes_manager.save_persistent_attributes()

        assert "Cannot save PersistentAttributes without persistence adapter!" in str(
            exc.exception), (
                "AttributesManager should raise error when trying to save "
                "persistent attributes without persistence adapter")
Пример #13
0
    def handle(self, handler_input):
        # type: (HandlerInput) -> Response
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)

        logger.info(request_envelope.context.system, exc_info=True)
        logger.info(request_envelope.context.system.person, exc_info=True)
        #DynamoDbをTest
        persistence_attr = attributes_manager.persistent_attributes
        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}

        exists_santa = True
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}

        speak_output = ''
        person_id = ''
        # test用 'person_id': 'amzn1.ask.person.AHCN7IHVHTQBKRDNNDBYSWZRJISPUHOJEEZZW6MML255REWY2YOQFETSBE7STDPDAXOJUWBPIL5ZV6WZ5555HMZVI6YPKIVDWGOEL7KB'}
        if request_envelope.context.system.person is None and exists_santa == False:
            # パーソナライズ無効
            speak_output = _(data.LAUNCH_NOT_PERSONALIZE)
            return (
                handler_input.response_builder.speak(speak_output).response)
        elif exists_santa == False:
            # サンタ登録
            speak_output = _(data.LAUNCH_NO_SANTA)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        elif request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        santa = is_santa(persistence_attr['santa'], person_id)

        if santa == True:
            speak_output = _(data.LAUNCH_IS_PARENT).format(person_id)
        else:
            speak_output = _(data.LAUNCH_IS_CHILD).format(person_id)

        attributes_manager.save_persistent_attributes()
        logger.info(persistence_attr, exc_info=True)
        logger.info(speak_output, exc_info=True)
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
    def test_attributes_manager_with_no_request_envelope(self):
        with self.assertRaises(AttributesManagerException) as exc:
            self.attributes_manager = AttributesManager(request_envelope=None)

        assert "RequestEnvelope cannot be none!" in str(exc.exception), (
            "AttributesManager should raise error when requestEnvelope is "
            "none")
Пример #15
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.context.system, exc_info=True)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)

        persistence_attr = attributes_manager.persistent_attributes

        speak_output = _(data.WELCOME_MESSAGE)
        person_id = ''
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.ANSWER_CLASS_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        if person_id not in persistence_attr:
            persistence_attr[person_id] = {}
        if 'personClass' in persistence_attr[person_id]:
            #登録済
            pass

        personCount = get_count_person(persistence_attr)
        resolved_value = get_resolved_value(
            handler_input.request_envelope.request, "class")
        subscription = is_skill_product(handler_input)
        if (resolved_value is not None and resolved_value == "パパ"):
            if personCount[0] < 1 or subscription == True:
                persistence_attr[person_id]['personClass'] = 'parent'
                speak_output = _(data.ANSWER_CLASS_IS_PARENT).format(
                    person_id, person_id)
            else:
                speak_output = _(data.ANSWER_CLASS_LIMIT_MSG)
        else:
            if personCount[1] < 2 or subscription == True:
                persistence_attr[person_id]['personClass'] = 'child'
                speak_output = _(data.ANSWER_CLASS_IS_CHILD).format(person_id)
            else:
                speak_output = _(data.ANSWER_CLASS_LIMIT_MSG)

        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #16
0
    def test_get_initial_request_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        assert attributes_manager.request_attributes == {}, (
            "AttributesManager fails to set the initial request attributes "
            "to be {}")
Пример #17
0
 def setUp(self) -> None:
     skill = CustomSkill(skill_configuration=sb.skill_configuration)
     req = update_request(message_request, 'en-US')
     request_envelope = skill.serializer.deserialize(
         payload=json.dumps(req), obj_type=RequestEnvelope)
     attributes_manager = AttributesManager(
         request_envelope=request_envelope,
         persistence_adapter=skill.persistence_adapter)
     self.handler_input = HandlerInput(request_envelope, attributes_manager)
     self.handler = sb.lambda_handler()
Пример #18
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.context.system, exc_info=True)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)

        persistence_attr = attributes_manager.persistent_attributes
        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}

        person_id = ''
        exists_santa = True
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        speak_output = _(data.WELCOME_MESSAGE)
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.ANSWER_CLASS_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)

        resolved_value = get_resolved_value(
            handler_input.request_envelope.request, "class")
        if (resolved_value is not None and resolved_value == "サンタ"):
            persistence_attr['santa']['id'] = person_id
            speak_output = _(data.ANSWER_CLASS_IS_PARENT).format(
                person_id, person_id)
        elif exists_santa == False:
            speak_output = _(data.ANSWER_CLASS_IS_NG).format(person_id)
        else:
            speak_output = _(data.ANSWER_CLASS_IS_CHILD).format(person_id)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)

        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).response)
Пример #19
0
    def handle(self, handler_input):
        # type: (HandlerInput) -> Response
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)

        logger.info(request_envelope.context, exc_info=True)
        logger.info(request_envelope.context.system, exc_info=True)
        logger.info(request_envelope.context.system.person, exc_info=True)
        #DynamoDbをTest
        persistence_attr = attributes_manager.persistent_attributes

        speak_output = ''
        person_id = ''
        # test用 'person_id': 'amzn1.ask.person.AHCN7IHVHTQBKRDNNDBYSWZRJISPUHOJEEZZW6MML255REWY2YOQFETSBE7STDPDAXOJUWBPIL5ZV6WZ5555HMZVI6YPKIVDWGOEL7KB'}
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.LAUNCH_NOT_PERSONALIZE)
            return (
                handler_input.response_builder.speak(speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        if person_id not in persistence_attr:
            persistence_attr[person_id] = {}
        if 'personClass' not in persistence_attr[person_id]:
            speak_output = _(data.LAUNCH_NOT_CLASS)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        personClass = persistence_attr[person_id]['personClass']

        if personClass == 'parent':
            speak_output = _(data.LAUNCH_IS_PARENT).format(person_id)
        else:
            speak_output = _(data.LAUNCH_IS_CHILD).format(person_id)

        attributes_manager.save_persistent_attributes()
        logger.info(persistence_attr, exc_info=True)
        logger.info(speak_output, exc_info=True)
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #20
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        person_id = ''
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.WISH_LIST_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        # パパかどうか
        personClass = ''
        if 'personClass' in persistence_attr[person_id]:
            personClass = persistence_attr[person_id]['personClass']
        else:
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)

        reprompt = True
        if 'wish' in persistence_attr[person_id] and personClass == 'child':
            speak_output = _(data.WISH_LIST_CHILD_MSG).format(
                persistence_attr[person_id]['wish'][0])
        elif 'wish' not in persistence_attr[
                person_id] and personClass == 'child':
            speak_output = _(data.WISH_LIST_NONE_CHILD_MSG)
        elif personClass == 'parent':
            speak_output = ''
            for child_id in persistence_attr:
                if 'wish' in persistence_attr[child_id]:
                    speak_output += _(data.WISH_LIST_PARENT_MSG).format(
                        child_id, persistence_attr[child_id]['wish'][0])
            if speak_output != '':
                speak_output += '伝言は以上です。さてどうしましょうか。もう一度聞く場合には「伝言を聞く」と言ってください'
            else:
                speak_output = _(data.WISH_LIST_NONE_PARENT_MSG).format(
                    persistence_attr[person_id])
                reprompt = False

        logger.info(speak_output, exc_info=True)
        logger.info(persistence_attr, exc_info=True)
        if reprompt == True:
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            return (
                handler_input.response_builder.speak(speak_output).response)
Пример #21
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = _(data.WISH_ADD_MSG)

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        person_id = ''
        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.WISH_ADD_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        # 親か子か
        personClass = ''
        if 'personClass' in persistence_attr[person_id]:
            personClass = persistence_attr[person_id]['personClass']
        else:
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)

        query = get_resolved_query(handler_input.request_envelope.request,
                                   "query")
        if (query is not None and personClass == 'child'):
            # Dialogを用いてるので原則として値は入ってくる
            persistence_attr[person_id]['wish'] = [query]
            speak_output = _(data.WISH_ADD_MSG).format(query)
        elif (query is not None and personClass == 'parent'):
            persistence_attr[person_id]['wish'] = [query]
            speak_output = _(data.WISH_ADD_PARENT_MSG).format(query)
        else:
            speak_output = _(data.WISH_ADD_MSG).format('聞き取れませんでした')

        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)
Пример #22
0
def create_handler_input(slots: Dict[str, Slot],
                         attributes: Dict) -> HandlerInput:
    request_envelope = RequestEnvelope(version="v1",
                                       session=Session(attributes=attributes),
                                       request=IntentRequest(
                                           request_id=str(uuid4()),
                                           intent=Intent(name="test intent",
                                                         slots=slots)))
    attributes_manager = AttributesManager(request_envelope=request_envelope)
    handler_input = HandlerInput(request_envelope=request_envelope,
                                 attributes_manager=attributes_manager)
    return handler_input
Пример #23
0
    def test_get_persistent_attributes(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=MockPersistenceAdapter())

        assert attributes_manager.persistent_attributes == {
            "key_1": "v1", "key_2": "v2"}, (
            "AttributesManager fails to get persistent attributes from "
            "persistent adapter")
Пример #24
0
    def test_get_default_session_attributes_from_new_session_request_envelope(self):
        session = Session(
            new=True, session_id=None, user=None,
            attributes=None, application=None)
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        assert attributes_manager.session_attributes == {}, (
            "AttributesManager fails to get default session attributes from "
            "new session request envelope")
Пример #25
0
    def test_get_session_attributes_from_out_of_session_request_envelope(self):
        request_envelope = RequestEnvelope(
            version=None, session=None, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        attributes_manager._request_envelope.session = None
        with self.assertRaises(AttributesManagerException) as exc:
            test_session_attributes = attributes_manager.session_attributes

        assert "Cannot get SessionAttributes from out of session request!" in str(exc.exception), (
            "AttributesManager should raise error when trying to get session "
            "attributes from out of session envelope")
Пример #26
0
    def test_get_session_attributes_from_in_session_request_envelope(self):
        session = Session(
            new=None, session_id=None, user=None,
            attributes={"mockKey": "mockValue"}, application=None)
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope)

        assert attributes_manager.session_attributes == {
            "mockKey": "mockValue"}, (
            "AttributesManager fails to get session attributes from in "
            "session request envelope")
Пример #27
0
    def test_get_persistent_attributes_with_calling_get_persistent_attributes_multiple_times(self):
        session = Session()
        request_envelope = RequestEnvelope(
            version=None, session=session, context=None, request=None)
        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=MockPersistenceAdapter())

        attributes_manager.persistent_attributes
        attributes_manager.persistent_attributes
        attributes_manager.persistent_attributes
        attributes_manager.persistent_attributes

        assert attributes_manager._persistence_adapter.get_count == 1, (
            "AttributesManager should make only 1 get_attributes call "
            "during multiple get_persistent_attributes calls")
Пример #28
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = ''

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}

        person_id = ''
        exists_santa = True
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        santa = is_santa(persistence_attr['santa'], person_id)

        if request_envelope.context.system.person is None:
            # パーソナライズ無効
            speak_output = _(data.WISH_LIST_NOT_PERSONALIZE)
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            person_id = request_envelope.context.system.person.person_id

        reprompt = True
        mymsg_id = -1
        mymsg = ''
        if 'msg' not in persistence_attr:
            persistence_attr['msg'] = []
        idx = len(persistence_attr['msg'])
        for msg in range(len(persistence_attr['msg'])):
            if persistence_attr['msg'][msg][
                    'person_id'] == person_id and person_id != '':
                mymsg = persistence_attr['msg'][msg]['txt']
                mymsg_id = msg
        if mymsg != '' and santa == False:
            x = random.randrange(1000, 9999)
            persistence_attr['session']['password'] = x
            persistence_attr['session']['delete'] = mymsg_id
            speak_output = _(data.WISH_LIST_CHILD_MSG).format(mymsg, x)
        elif mymsg == '' and santa == False:
            speak_output = _(data.WISH_LIST_NONE_CHILD_MSG)
        elif len(persistence_attr['msg']) < 1:
            speak_output = _(data.WISH_LIST_NONE_PARENT_MSG)
        else:
            speak_output = ''
            for msg in range(len(persistence_attr['msg'])):
                logger.info(persistence_attr['msg'][msg]['person_id'],
                            exc_info=True)
                if (persistence_attr['msg'][msg]['person_id'] is not None
                        and persistence_attr['msg'][msg]['person_id'] != 'None'
                        and persistence_attr['msg'][msg]['person_id'] != ''):
                    speak_output += _(data.WISH_LIST_PARENT_EXT_MSG).format(
                        msg + 1, persistence_attr['msg'][msg]['person_id'],
                        persistence_attr['msg'][msg]['txt'])
                else:
                    speak_output += _(data.WISH_LIST_PARENT_MSG).format(
                        msg + 1, persistence_attr['msg'][msg]['txt'])
            if speak_output != '':
                speak_output += '願い事は以上です。さて次は何をしましょうか。「一番めの願い事を削除」のように言うと願い事の削除もできますよ。'
                persistence_attr['session']['password'] = '******'
                persistence_attr['session']['delete'] = 'a'
            else:
                speak_output = _(data.WISH_LIST_NONE_PARENT_MSG)

        logger.info(speak_output, exc_info=True)
        logger.info(persistence_attr, exc_info=True)
        attributes_manager.save_persistent_attributes()
        if reprompt == True:
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        else:
            return (
                handler_input.response_builder.speak(speak_output).response)
Пример #29
0
    def handle(self, handler_input):
        _ = handler_input.attributes_manager.request_attributes["_"]
        request_envelope = handler_input.request_envelope
        logger.info(request_envelope.request, exc_info=True)
        speak_output = _(data.WISH_ADD_MSG)

        attributes_manager = AttributesManager(
            request_envelope=request_envelope, persistence_adapter=adapter)
        persistence_attr = attributes_manager.persistent_attributes
        persistence_attr['session'] = {'dt': datetime.now().strftime('%s')}
        exists_santa = True
        person_id = ''
        if 'santa' not in persistence_attr or 'id' not in persistence_attr[
                'santa']:
            #初回起動
            exists_santa = False
            persistence_attr['santa'] = {}
            return AnswerClassIntentHandler(AbstractRequestHandler).handle(
                handler_input)
        if request_envelope.context.system.person is not None:
            person_id = request_envelope.context.system.person.person_id

        santa = is_santa(persistence_attr['santa'], person_id)

        query = get_resolved_query(handler_input.request_envelope.request,
                                   "query")
        subscription = is_skill_product(handler_input)
        if 'msg' not in persistence_attr:
            persistence_attr['msg'] = []
        idx = len(persistence_attr['msg'])
        if (query is not None and santa == False):
            # Dialogを用いてるので原則として値は入ってくる
            if idx < 3 or subscription == True:
                #persistence_attr['santa'][len]['msg'] = query
                persistence_attr['session']['msg'] = query
                if person_id != "" and person_id is not None:
                    speak_output = _(data.WISH_ADD_CONFIRM_MSG).format(
                        person_id, query)
                else:
                    speak_output = _(
                        data.WISH_ADD_CONFIRM_NONAME_MSG).format(query)
            else:
                speak_output = _(data.WISH_ADD_LIMIT_MSG)
            attributes_manager.save_persistent_attributes()
            return (handler_input.response_builder.speak(speak_output).ask(
                speak_output).response)
        elif (query is not None and santa == True):
            if idx < 3 or subscription == True:
                logger.info(idx, exc_info=True)
                persistence_attr['msg'].append({})
                persistence_attr['msg'][idx]['txt'] = query
                persistence_attr['msg'][idx]['person_id'] = person_id
                speak_output = _(data.WISH_ADD_PARENT_MSG).format(query)
            else:
                speak_output = _(data.WISH_ADD_LIMIT_MSG)
        else:
            speak_output = _(data.WISH_ADD_MSG).format('聞き取れませんでした')

        attributes_manager.save_persistent_attributes()
        return (handler_input.response_builder.speak(speak_output).ask(
            speak_output).response)