o
    a+)h                     @  s   d dl mZ d dlZd dlZd dlZd dlmZ d dlmZ ddl	m
Z
 G dd de
ZdddZdddZdddZdddZedde ZdgZdS )    )annotationsN)	lru_cache)Callable   )PlatformDirsABCc                   @  s   e Zd ZdZedddZdddddZedddZedddZedddZ	edddZ
edddZedddZedddZedddZdS )Windowsa  `MSDN on where to store app data files
    <http://support.microsoft.com/default.aspx?scid=kb;en-us;310294#XSLTH3194121123120121120120>`_.
    Makes use of the
    `appname <platformdirs.api.PlatformDirsABC.appname>`,
    `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`,
    `version <platformdirs.api.PlatformDirsABC.version>`,
    `roaming <platformdirs.api.PlatformDirsABC.roaming>`,
    `opinion <platformdirs.api.PlatformDirsABC.opinion>`.returnstrc                 C  s(   | j rdnd}tjt|}| |S )z
        :return: data directory tied to the user, e.g.
         ``%USERPROFILE%\AppData\Local\$appauthor\$appname`` (not roaming) or
         ``%USERPROFILE%\AppData\Roaming\$appauthor\$appname`` (roaming)
        CSIDL_APPDATACSIDL_LOCAL_APPDATA)roamingospathnormpathget_win_folder_append_parts)selfconstr    r   _C:\Users\User\Downloads\Proyecto_IoT\venv\Lib\site-packages\pip/_vendor/platformdirs/windows.pyuser_data_dir   s   
zWindows.user_data_dirNopinion_valuer   r   
str | Nonec                C  st   g }| j r0| jdur| jp| j }|| || j  |d ur'| jr'|| | jr0|| j tjj|g|R  S )NF)appname	appauthorappendopinionversionr   r   join)r   r   r   paramsauthorr   r   r   r   !   s   


zWindows._append_partsc                 C  s   t jtd}| |S )zT:return: data directory shared by users, e.g. ``C:\ProgramData\$appauthor\$appname``CSIDL_COMMON_APPDATAr   r   r   r   r   r   r   r   r   r   site_data_dir.   s   
zWindows.site_data_dirc                 C     | j S )zC:return: config directory tied to the user, same as `user_data_dir`r   r   r   r   r   user_config_dir4      zWindows.user_config_dirc                 C  r&   )zF:return: config directory shared by the users, same as `site_data_dir`)r%   r(   r   r   r   site_config_dir9   r*   zWindows.site_config_dirc                 C  s   t jtd}| j|ddS )z
        :return: cache directory tied to the user (if opinionated with ``Cache`` folder within ``$appname``) e.g.
         ``%USERPROFILE%\AppData\Local\$appauthor\$appname\Cache\$version``
        r   Cacher   r#   r$   r   r   r   user_cache_dir>   s   zWindows.user_cache_dirc                 C  r&   )zB:return: state directory tied to the user, same as `user_data_dir`r'   r(   r   r   r   user_state_dirG   r*   zWindows.user_state_dirc                 C  s   | j }| jrtj|d}|S )zy
        :return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in it
        Logs)r   r   r   r   r   r$   r   r   r   user_log_dirL   s   zWindows.user_log_dirc                 C  s   t jtdS )z`
        :return: documents directory tied to the user e.g. ``%USERPROFILE%\Documents``
        CSIDL_PERSONAL)r   r   r   r   r(   r   r   r   user_documents_dirV   s   zWindows.user_documents_dirc                 C  s$   t jt jtdd}| |S )z
        :return: runtime directory tied to the user, e.g.
         ``%USERPROFILE%\AppData\Local\Temp\$appauthor\$appname``
        r   Temp)r   r   r   r   r   r   r$   r   r   r   user_runtime_dir]   s   
zWindows.user_runtime_dir)r   r	   )r   r	   r   r   r   r	   )__name__
__module____qualname____doc__propertyr   r   r%   r)   r+   r-   r.   r0   r2   r4   r   r   r   r   r      s*    	
	r   
csidl_namer	   r   c                 C  sr   | dkrt jt jt jd dS dddd| }|du r&td	|  t j|}|du r7td
| |S )z&Get folder from environment variables.r1   USERPROFILE	DocumentsAPPDATAALLUSERSPROFILELOCALAPPDATA)r
   r"   r   NUnknown CSIDL name: zUnset environment variable: )r   r   r   r   environget
ValueError)r:   env_var_nameresultr   r   r   get_win_folder_from_env_varsg   s   rF   c                 C  sf   ddddd | }|du rtd|  tjdkrtd	dl}||jd
}|||\}}t	|S )zGet folder from the registry.

    This is a fallback technique at best. I'm not sure if using the
    registry for this guarantees us the correct answer for all CSIDL_*
    names.
    AppDatazCommon AppDatazLocal AppDataPersonalr
   r"   r   r1   Nr@   win32r   z@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)
rB   rC   sysplatformNotImplementedErrorwinregOpenKeyHKEY_CURRENT_USERQueryValueExr	   )r:   shell_folder_namerN   key	directory_r   r   r   get_win_folder_from_registryy   s   
rV   c                 C  s   ddddd | }|du rtd|  td}ttd	}|jd|dd
| tdd |D rBtd}|j	|j
|drB|}|j
S )zGet folder with ctypes.   #         rI   Nr@   i   windllr   c                 s  s    | ]	}t |d kV  qdS )   N)ord).0cr   r   r   	<genexpr>   s    z,get_win_folder_via_ctypes.<locals>.<genexpr>)rB   rC   ctypescreate_unicode_buffergetattrshell32SHGetFolderPathWanykernel32GetShortPathNameWvalue)r:   csidl_constbufr[   buf2r   r   r   get_win_folder_via_ctypes   s"   


rm   Callable[[str], str]c                  C  s4   t tdrtS zdd l} W tS  ty   t Y S w )Nr[   r   )hasattrra   rm   rN   ImportErrorrF   rV   )rN   r   r   r   _pick_get_win_folder   s   

rq   )maxsize)r:   r	   r   r	   )r   rn   )
__future__r   ra   r   rK   	functoolsr   typingr   apir   r   rF   rV   rm   rq   r   __all__r   r   r   r   <module>   s    
[


