o
    /_Wc(                     @   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   sD   d dd tjdd D }d| |}|du r|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	   7D:\Flask\env\Lib\site-packages\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 )
UserAgentManagerzStatic 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 )zGet 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   sF   | t jvr!t j|  t  dkr| t _dS dt  | t _dS 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   r   )r   typingTYPE_CHECKINGr   r   r   objectr   r	   r	   r	   r
   <module>   s   
