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")
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")
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)
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()