def test_should_append_additional_user_agent_using_userAgentManager(self):
        additional_user_agent = "test_string"
        sdk_user_agent = user_agent_info(sdk_version=__version__)
        mock_request_handler = mock.MagicMock(spec=AbstractRequestHandler)
        mock_request_handler.can_handle.return_value = True
        mock_response = Response()
        mock_request_handler.handle.return_value = mock_response
        self.sb.add_request_handler(request_handler=mock_request_handler)

        mock_request_envelope_payload = {
            "context": {
                "System": {
                    "application": {
                        "applicationId": "test"
                    }
                }
            }
        }

        self.sb.skill_id = "test"
        lambda_handler = self.sb.lambda_handler()

        UserAgentManager.register_component(
            component_name=additional_user_agent)

        response_envelope = lambda_handler(event=mock_request_envelope_payload,
                                           context=None)

        self.assertEqual(
            "{} {}".format(additional_user_agent,
                           sdk_user_agent), response_envelope["userAgent"],
            "Response envelope doesn't have correct user agent when adding "
            "using UserAgentManager")
 def test_single_component_registered(self):
     test_component = "foo"
     UserAgentManager.register_component(test_component)
     self.assertEqual(
         test_component, UserAgentManager.get_user_agent(),
         "UserAgent Manager didn't register single component to "
         "user agent")
Ejemplo n.º 3
0
    def __init__(self, skill_configuration):
        # type: (SkillConfiguration) -> None
        """Top level container for Request Dispatcher,
        Persistence Adapter and Api Client.

        :param skill_configuration: Configuration object that holds
            information about different components needed to build the
            skill object.
        :type skill_configuration: SkillConfiguration
        """
        self.persistence_adapter = skill_configuration.persistence_adapter
        self.api_client = skill_configuration.api_client
        self.serializer = DefaultSerializer()
        self.skill_id = skill_configuration.skill_id
        self.custom_user_agent = skill_configuration.custom_user_agent
        self.loaders = skill_configuration.loaders
        self.renderer = skill_configuration.renderer

        self.request_dispatcher = GenericRequestDispatcher(
            options=skill_configuration)

        UserAgentManager.register_component(
            user_agent_info(sdk_version=__version__))
        if skill_configuration.custom_user_agent is not None:
            UserAgentManager.register_component(
                component_name=skill_configuration.custom_user_agent)
 def test_multi_component_registered(self):
     test_component_1 = "foo"
     test_component_2 = "bar"
     UserAgentManager.register_component(test_component_1)
     UserAgentManager.register_component(test_component_2)
     self.assertEqual(
         '{} {}'.format(test_component_1, test_component_2),
         UserAgentManager.get_user_agent(),
         "UserAgent Manager didn't register single component to "
         "user agent")
Ejemplo n.º 5
0
    def add_custom_user_agent(self, user_agent):
        # type: (str) -> None
        """Adds the user agent to the skill instance.

        This method adds the passed in user_agent to the skill, which is
        reflected in the skill's response envelope.

        :param user_agent: Custom User Agent string provided by the developer.
        :type user_agent: str
        :rtype: None
        """
        UserAgentManager.register_component(component_name=user_agent)
Ejemplo n.º 6
0
    def invoke(self, request_envelope, context):
        # type: (RequestEnvelope, Any) -> ResponseEnvelope
        """Invokes the dispatcher, to handle the request envelope and
        return a response envelope.

        :param request_envelope: Request Envelope instance containing
            request information
        :type request_envelope: RequestEnvelope
        :param context: Context passed during invocation
        :type context: Any
        :return: Response Envelope generated by handling the request
        :rtype: ResponseEnvelope
        """
        if (self.skill_id is not None
                and request_envelope.context.system.application.application_id
                != self.skill_id):
            raise AskSdkException("Skill ID Verification failed!!")

        if self.api_client is not None:
            api_token = request_envelope.context.system.api_access_token
            api_endpoint = request_envelope.context.system.api_endpoint
            api_configuration = ApiConfiguration(serializer=self.serializer,
                                                 api_client=self.api_client,
                                                 authorization_value=api_token,
                                                 api_endpoint=api_endpoint)
            factory = ServiceClientFactory(api_configuration=api_configuration)
        else:
            factory = None

        template_factory = TemplateFactory(template_loaders=self.loaders,
                                           template_renderer=self.renderer)

        attributes_manager = AttributesManager(
            request_envelope=request_envelope,
            persistence_adapter=self.persistence_adapter)

        handler_input = HandlerInput(request_envelope=request_envelope,
                                     attributes_manager=attributes_manager,
                                     context=context,
                                     service_client_factory=factory,
                                     template_factory=template_factory)

        response = self.request_dispatcher.dispatch(
            handler_input=handler_input)  # type: Response
        session_attributes = None

        if request_envelope.session is not None:
            session_attributes = (
                handler_input.attributes_manager.session_attributes)

        return ResponseEnvelope(response=response,
                                version=RESPONSE_FORMAT_VERSION,
                                session_attributes=session_attributes,
                                user_agent=UserAgentManager.get_user_agent())
 def test_components_user_agent_cleared(self):
     UserAgentManager.register_component('foo')
     UserAgentManager.register_component('bar')
     UserAgentManager.clear()
     self.assertEqual('', UserAgentManager.get_user_agent(),
                      "UserAgent Manager didn't clear user agent")
 def test_user_agent_initialized(self):
     self.assertEqual(
         '', UserAgentManager.get_user_agent(),
         "UserAgent Manager didn't initialize user agent as empty string")
 def tearDown(self):
     UserAgentManager.clear()