U
    ó×cc(  ã                   @   sD   d dl Z d dlZejr&d dlmZmZ ddd„ZG dd„ deƒZdS )é    N)ÚOptionalÚListc                 C   sH   d  dd„ tjdd… D ƒ¡}d | |¡}|dkr6|S |d |¡ S dS )	ab  Return the user agent info along with the SDK and Python
    Version information.

    :param sdk_version: Version of the SDK being used.
    :type sdk_version: str
    :param custom_user_agent: Custom User Agent string provided by
        the developer.
    :type custom_user_agent: Optional[str]
    :return: User Agent Info string
    :rtype: str
    Ú.c                 s   s   | ]}t |ƒV  qd S )N)Ústr)Ú.0Úx© r   ú9/tmp/pip-unpacked-wheel-yhqslwpj/ask_sdk_runtime/utils.pyÚ	<genexpr>&   s     z"user_agent_info.<locals>.<genexpr>r   é   zask-python/{} Python/{}Nz {})ÚjoinÚsysÚversion_infoÚformat)Zsdk_versionZcustom_user_agentÚpython_versionÚ
user_agentr   r   r	   Úuser_agent_info   s     ÿr   c                   @   s<   e Zd ZdZg ZdZedd„ ƒZedd„ ƒZedd„ ƒZ	d	S )
ÚUserAgentManagerzÕStatic manager for environment level SDK user agent information.

    Higher level frameworks using the SDK, but not building up on skill builder,
    can use this static class and register their user agents.
    Ú c                   C   s   t jS )z›Get user agent string containing all registered components.

        :return: User agent string with all registered components
        :rtype: str
        )r   Ú_user_agentr   r   r   r	   Úget_user_agent8   s    zUserAgentManager.get_user_agentc                 C   s@   | t jkr<t j | ¡ t  ¡ dkr*| t _nd t  ¡ | ¡t _dS )aK  Registers component to user agent string.

        The component will be appended to the existing user agent string.
        Duplicate components are ignored.

        :param component_name: Name of the component to be registered to
            the user agent string
        :type component_name: str
        :return: None
        r   z{} {}N)r   Ú_componentsÚappendr   r   r   )Zcomponent_namer   r   r	   Úregister_componentB   s    
 ÿz#UserAgentManager.register_componentc                   C   s   g t _dt _dS )zLClear components, reset user agent to empty.

        :return: None
        r   N)r   r   r   r   r   r   r	   ÚclearW   s    zUserAgentManager.clearN)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Ústaticmethodr   r   r   r   r   r   r	   r   /   s   
	
r   )N)r   ÚtypingÚTYPE_CHECKINGr   r   r   Úobjectr   r   r   r   r	   Ú<module>   s
   
