U
    kuf"                     @  sh   d Z ddlmZ ddlZddlmZmZ ddlmZ ddl	m
Z
 e
rTddl	mZmZ G dd	 d	eZdS )
z	Base API.    )annotationsN)ABCabstractmethod)Path)TYPE_CHECKING)IteratorLiteralc                
   @  s>  e Zd ZdZdgddddddddd	d
dZdddddZdddddZeeddddZ	eeddddZ
eeddddZeeddddZeeddddZeeddddZeeddd d!Zeeddd"d#Zeeddd$d%Zeeddd&d'Zeeddd(d)Zeeddd*d+Zeeddd,d-Zeeddd.d/Zeeddd0d1Zeeddd2d3Zed4dd5d6Zed4dd7d8Zed4dd9d:Zed4dd;d<Zed4dd=d>Zed4dd?d@Zed4ddAdBZed4ddCdDZ ed4ddEdFZ!ed4ddGdHZ"ed4ddIdJZ#ed4ddKdLZ$ed4ddMdNZ%ed4ddOdPZ&ed4ddQdRZ'ed4ddSdTZ(dUddVdWZ)dUddXdYZ*dUddZd[Z+dUdd\d]Z,d^dd_d`Z-d^ddadbZ.d^ddcddZ/d^ddedfZ0dS )hPlatformDirsABCz-Abstract base class for platform directories.NFTz
str | Nonezstr | None | Literal[False]boolNone)appname	appauthorversionroaming	multipathopinionensure_existsreturnc                 C  s.   || _ || _|| _|| _|| _|| _|| _dS )aX  
        Create a new platform directory.

        :param appname: See `appname`.
        :param appauthor: See `appauthor`.
        :param version: See `version`.
        :param roaming: See `roaming`.
        :param multipath: See `multipath`.
        :param opinion: See `opinion`.
        :param ensure_exists: See `ensure_exists`.
        N)r   r   r   r   r   r   r   )selfr   r   r   r   r   r   r    r   4/tmp/pip-unpacked-wheel-kvdkdwa_/platformdirs/api.py__init__   s    zPlatformDirsABC.__init__str)baser   c                 G  sX   t |dd  }| jr4|| j | jr4|| j tjj|d f| }| | |S )N   r   )listr   appendr   ospathjoin_optionally_create_directory)r   r   paramsr   r   r   r   _append_app_name_and_versionC   s    
z,PlatformDirsABC._append_app_name_and_version)r   r   c                 C  s   | j rt|jddd d S )NT)parentsexist_ok)r   r   mkdirr   r   r   r   r   r    M   s    z,PlatformDirsABC._optionally_create_directory)r   c                 C  s   dS )z(:return: data directory tied to the userNr   r   r   r   r   user_data_dirQ   s    zPlatformDirsABC.user_data_dirc                 C  s   dS )z':return: data directory shared by usersNr   r'   r   r   r   site_data_dirV   s    zPlatformDirsABC.site_data_dirc                 C  s   dS )z*:return: config directory tied to the userNr   r'   r   r   r   user_config_dir[   s    zPlatformDirsABC.user_config_dirc                 C  s   dS )z-:return: config directory shared by the usersNr   r'   r   r   r   site_config_dir`   s    zPlatformDirsABC.site_config_dirc                 C  s   dS )z):return: cache directory tied to the userNr   r'   r   r   r   user_cache_dire   s    zPlatformDirsABC.user_cache_dirc                 C  s   dS )z(:return: cache directory shared by usersNr   r'   r   r   r   site_cache_dirj   s    zPlatformDirsABC.site_cache_dirc                 C  s   dS )z):return: state directory tied to the userNr   r'   r   r   r   user_state_diro   s    zPlatformDirsABC.user_state_dirc                 C  s   dS )z':return: log directory tied to the userNr   r'   r   r   r   user_log_dirt   s    zPlatformDirsABC.user_log_dirc                 C  s   dS )z-:return: documents directory tied to the userNr   r'   r   r   r   user_documents_diry   s    z"PlatformDirsABC.user_documents_dirc                 C  s   dS )z-:return: downloads directory tied to the userNr   r'   r   r   r   user_downloads_dir~   s    z"PlatformDirsABC.user_downloads_dirc                 C  s   dS )z,:return: pictures directory tied to the userNr   r'   r   r   r   user_pictures_dir   s    z!PlatformDirsABC.user_pictures_dirc                 C  s   dS )z*:return: videos directory tied to the userNr   r'   r   r   r   user_videos_dir   s    zPlatformDirsABC.user_videos_dirc                 C  s   dS )z):return: music directory tied to the userNr   r'   r   r   r   user_music_dir   s    zPlatformDirsABC.user_music_dirc                 C  s   dS )z+:return: desktop directory tied to the userNr   r'   r   r   r   user_desktop_dir   s    z PlatformDirsABC.user_desktop_dirc                 C  s   dS )z+:return: runtime directory tied to the userNr   r'   r   r   r   user_runtime_dir   s    z PlatformDirsABC.user_runtime_dirc                 C  s   dS )z*:return: runtime directory shared by usersNr   r'   r   r   r   site_runtime_dir   s    z PlatformDirsABC.site_runtime_dirr   c                 C  s
   t | jS )z#:return: data path tied to the user)r   r(   r'   r   r   r   user_data_path   s    zPlatformDirsABC.user_data_pathc                 C  s
   t | jS )z":return: data path shared by users)r   r)   r'   r   r   r   site_data_path   s    zPlatformDirsABC.site_data_pathc                 C  s
   t | jS )z%:return: config path tied to the user)r   r*   r'   r   r   r   user_config_path   s    z PlatformDirsABC.user_config_pathc                 C  s
   t | jS )z(:return: config path shared by the users)r   r+   r'   r   r   r   site_config_path   s    z PlatformDirsABC.site_config_pathc                 C  s
   t | jS )z$:return: cache path tied to the user)r   r,   r'   r   r   r   user_cache_path   s    zPlatformDirsABC.user_cache_pathc                 C  s
   t | jS )z#:return: cache path shared by users)r   r-   r'   r   r   r   site_cache_path   s    zPlatformDirsABC.site_cache_pathc                 C  s
   t | jS )z$:return: state path tied to the user)r   r.   r'   r   r   r   user_state_path   s    zPlatformDirsABC.user_state_pathc                 C  s
   t | jS )z":return: log path tied to the user)r   r/   r'   r   r   r   user_log_path   s    zPlatformDirsABC.user_log_pathc                 C  s
   t | jS )z(:return: documents path tied to the user)r   r0   r'   r   r   r   user_documents_path   s    z#PlatformDirsABC.user_documents_pathc                 C  s
   t | jS )z(:return: downloads path tied to the user)r   r1   r'   r   r   r   user_downloads_path   s    z#PlatformDirsABC.user_downloads_pathc                 C  s
   t | jS )z':return: pictures path tied to the user)r   r2   r'   r   r   r   user_pictures_path   s    z"PlatformDirsABC.user_pictures_pathc                 C  s
   t | jS )z%:return: videos path tied to the user)r   r3   r'   r   r   r   user_videos_path   s    z PlatformDirsABC.user_videos_pathc                 C  s
   t | jS )z$:return: music path tied to the user)r   r4   r'   r   r   r   user_music_path   s    zPlatformDirsABC.user_music_pathc                 C  s
   t | jS )z&:return: desktop path tied to the user)r   r5   r'   r   r   r   user_desktop_path   s    z!PlatformDirsABC.user_desktop_pathc                 C  s
   t | jS )z&:return: runtime path tied to the user)r   r6   r'   r   r   r   user_runtime_path   s    z!PlatformDirsABC.user_runtime_pathc                 C  s
   t | jS )z%:return: runtime path shared by users)r   r7   r'   r   r   r   site_runtime_path   s    z!PlatformDirsABC.site_runtime_pathzIterator[str]c                 c  s   | j V  | jV  dS )z4:yield: all user and site configuration directories.N)r*   r+   r'   r   r   r   iter_config_dirs   s    z PlatformDirsABC.iter_config_dirsc                 c  s   | j V  | jV  dS )z+:yield: all user and site data directories.N)r(   r)   r'   r   r   r   iter_data_dirs   s    zPlatformDirsABC.iter_data_dirsc                 c  s   | j V  | jV  dS )z,:yield: all user and site cache directories.N)r,   r-   r'   r   r   r   iter_cache_dirs   s    zPlatformDirsABC.iter_cache_dirsc                 c  s   | j V  | jV  dS )z.:yield: all user and site runtime directories.N)r6   r7   r'   r   r   r   iter_runtime_dirs   s    z!PlatformDirsABC.iter_runtime_dirszIterator[Path]c                 c  s   |   D ]}t|V  qdS )z.:yield: all user and site configuration paths.N)rH   r   r&   r   r   r   iter_config_paths  s    z!PlatformDirsABC.iter_config_pathsc                 c  s   |   D ]}t|V  qdS )z%:yield: all user and site data paths.N)rI   r   r&   r   r   r   iter_data_paths
  s    zPlatformDirsABC.iter_data_pathsc                 c  s   |   D ]}t|V  qdS )z&:yield: all user and site cache paths.N)rJ   r   r&   r   r   r   iter_cache_paths  s    z PlatformDirsABC.iter_cache_pathsc                 c  s   |   D ]}t|V  qdS )z(:yield: all user and site runtime paths.N)rK   r   r&   r   r   r   iter_runtime_paths  s    z"PlatformDirsABC.iter_runtime_paths)NNNFFTF)1__name__
__module____qualname____doc__r   r"   r    propertyr   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   rL   rM   rN   rO   r   r   r   r   r	      s          2
r	   )rS   
__future__r   r   abcr   r   pathlibr   typingr   r   r   r	   r   r   r   r   <module>   s   