
    `~h'                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 erddlmZ  G d	 d
e
          ZddZddZddZddZddZ  ed           e                      Zd
gZdS )zWindows.    )annotationsN)	lru_cache)TYPE_CHECKING   )PlatformDirsABC)Callablec                     e Zd ZdZedd            Zdddd
Zedd            Zedd            Zedd            Z	edd            Z
edd            Zedd            Zedd            Zedd            Zedd            Zedd            Zedd            Zedd            Zedd            Zedd            Zedd            ZdS )Windowsa  
    `MSDN on where to store app data files <https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid>`_.

    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>`, `ensure_exists
    <platformdirs.api.PlatformDirsABC.ensure_exists>`.

    returnstrc                    | 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   s      b/var/www/html/prod/cognitive/venv/lib/python3.11/site-packages/pip/_vendor/platformdirs/windows.pyuser_data_dirzWindows.user_data_dir   sF     $(<J5Jwu 5 566!!$'''    Nopinion_valuer   r   
str | Nonec               z   g }| j         r| j        dur#| j        p| j         }|                    |           |                    | j                    || j        r|                    |           | j        r|                    | j                   t          j        j        |g|R  }|                     |           |S )NF)	appname	appauthorappendopinionversionr   r   join_optionally_create_directory)r   r   r   paramsauthors        r   r   zWindows._append_parts&   s    < 	,~U**74<f%%%MM$,'''(T\(m,,,| ,dl+++w|D*6***))$///r   c                    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   s     r   site_data_dirzWindows.site_data_dir5   s6     w/E F FGG!!$'''r   c                    | j         S )zC:return: config directory tied to the user, same as `user_data_dir`r   r   s    r   user_config_dirzWindows.user_config_dir;        !!r   c                    | j         S )zF:return: config directory shared by the users, same as `site_data_dir`)r,   r/   s    r   site_config_dirzWindows.site_config_dir@   r1   r   c                    t           j                            t          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+   s     r   user_cache_dirzWindows.user_cache_dirE   s;     w/D E EFF!!$g!>>>r   c                    t           j                            t          d                    }|                     |d          S )zd:return: cache directory shared by users, e.g. ``C:\ProgramData\$appauthor\$appname\Cache\$version``r)   r5   r   r*   r+   s     r   site_cache_dirzWindows.site_cache_dirN   s;     w/E F FGG!!$g!>>>r   c                    | j         S )zB:return: state directory tied to the user, same as `user_data_dir`r.   r/   s    r   user_state_dirzWindows.user_state_dirT   r1   r   c                    | j         }| j        r5t          j                            |d          }|                     |           |S )zg: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+   s     r   user_log_dirzWindows.user_log_dirY   sD     !< 	47<<f--D--d333r   c                Z    t           j                            t          d                    S )zN:return: documents directory tied to the user e.g. ``%USERPROFILE%\Documents``CSIDL_PERSONALr   r   r   r   r/   s    r   user_documents_dirzWindows.user_documents_dirb   s#     w/? @ @AAAr   c                Z    t           j                            t          d                    S )zN:return: downloads directory tied to the user e.g. ``%USERPROFILE%\Downloads``CSIDL_DOWNLOADSr@   r/   s    r   user_downloads_dirzWindows.user_downloads_dirg   s#     w/@ A ABBBr   c                Z    t           j                            t          d                    S )zL:return: pictures directory tied to the user e.g. ``%USERPROFILE%\Pictures``CSIDL_MYPICTURESr@   r/   s    r   user_pictures_dirzWindows.user_pictures_dirl   s#     w/A B BCCCr   c                Z    t           j                            t          d                    S )zH:return: videos directory tied to the user e.g. ``%USERPROFILE%\Videos``CSIDL_MYVIDEOr@   r/   s    r   user_videos_dirzWindows.user_videos_dirq   "     w ? ?@@@r   c                Z    t           j                            t          d                    S )zF:return: music directory tied to the user e.g. ``%USERPROFILE%\Music``CSIDL_MYMUSICr@   r/   s    r   user_music_dirzWindows.user_music_dirv   rK   r   c                Z    t           j                            t          d                    S )zK:return: desktop directory tied to the user, e.g. ``%USERPROFILE%\Desktop``CSIDL_DESKTOPDIRECTORYr@   r/   s    r   user_desktop_dirzWindows.user_desktop_dir{   s#     w/G H HIIIr   c                    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+   s     r   user_runtime_dirzWindows.user_runtime_dir   sG     w^<Q-R-RTZ [ [\\!!$'''r   c                    | j         S )zF:return: runtime directory shared by users, same as `user_runtime_dir`)rT   r/   s    r   site_runtime_dirzWindows.site_runtime_dir   s     $$r   )r   r   )r   r   r   r   r   r   )__name__
__module____qualname____doc__propertyr   r   r,   r0   r3   r6   r8   r:   r=   rA   rD   rG   rJ   rN   rQ   rT   rV    r   r   r
   r
      s[         ( ( ( X( GK       ( ( ( X(
 " " " X" " " " X" ? ? ? X? ? ? ? X?
 " " " X"    X B B B XB C C C XC D D D XD A A A XA A A A XA J J J XJ ( ( ( X( % % % X% % %r   r
   
csidl_namer   r   c                    t          |           }||S dddd                    |           }|d|  }t          |          t          j                            |          }|d| }t          |          |S )z&Get folder from environment variables.NAPPDATAALLUSERSPROFILELOCALAPPDATA)r   r)   r   Unknown CSIDL name: zUnset environment variable: )(get_win_folder_if_csidl_name_not_env_varget
ValueErrorr   environ)r]   resultenv_var_namemsgs       r   get_win_folder_from_env_varsrj      s    5jAAF # 1-  
c*oo	 
 1Z11ooZ^^L))F~;\;;ooMr   r   c                D   | dk    rMt           j                            t           j                            t           j        d                   d          S | dk    rMt           j                            t           j                            t           j        d                   d          S | dk    rMt           j                            t           j                            t           j        d                   d          S | dk    rMt           j                            t           j                            t           j        d                   d	          S | d
k    rMt           j                            t           j                            t           j        d                   d          S dS )zMGet a folder for a CSIDL name that does not exist as an environment variable.r?   USERPROFILE	DocumentsrC   	DownloadsrF   PicturesrI   VideosrM   MusicN)r   r   r$   r   rf   )r]   s    r   rc   rc      s"   %%%w||BG,,RZ-FGGUUU&&&w||BG,,RZ-FGGUUU'''w||BG,,RZ-FGGTTT_$$w||BG,,RZ-FGGRRR_$$w||BG,,RZ-FGGQQQ4r   c           	     &   ddddddddd	                     |           }|d|  }t          |          t          j        dk    rt          dd
l}|                    |j        d          }|                    ||          \  }}t          |          S )z
    Get folder from the registry.

    This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer
    for all CSIDL_* names.

    AppDatazCommon AppDatazLocal AppDataPersonalz&{374DE290-123F-4565-9164-39C4925E467B}zMy PictureszMy VideozMy Music)r   r)   r   r?   rC   rF   rI   rM   Nrb   win32r   z@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)
rd   re   sysplatformNotImplementedErrorwinregOpenKeyHKEY_CURRENT_USERQueryValueExr   )r]   shell_folder_nameri   ry   key	directory_s          r   get_win_folder_from_registryr      s     # 0.$C)##	 	 
c*oo   1Z11oo
|w!!MMM
..13v
w
wC&&s,=>>LIqy>>r   c           
         ddl }ddddddd	d
dd	                    |           }|d|  }t          |          |                    d          }t	          |d          }|j                            d|dd|           t          d |D                       r8|                    d          }|j        	                    |j
        |d          r|}| dk    r%t          j                            |j
        d          S |j
        S )zGet folder with ctypes.r   N   #         '         (      )	r   r)   r   r?   rF   rI   rM   rC   rP   rb   i   windllc              3  <   K   | ]}t          |          d k    V  dS )   N)ord).0cs     r   	<genexpr>z,get_win_folder_via_ctypes.<locals>.<genexpr>   s,      
%
%A3q66C<
%
%
%
%
%
%r   rC   rn   )ctypesrd   re   create_unicode_buffergetattrshell32SHGetFolderPathWanykernel32GetShortPathNameWvaluer   r   r$   )r]   r   csidl_constri   bufr   buf2s          r   get_win_folder_via_ctypesr      s*    MMM  "!"$
 
 
c*oo  1Z11oo

&
&t
,
,CVX&&F
N##D+tQDDD 
%
%
%
%
%%% ++D11?,,SYdCC 	C&&&w||CI{3339r   Callable[[str], str]c                     	 dd l } t          | d          rt          S n# t          $ r Y nw xY w	 dd l}t
          S # t          $ r
 t          cY S w xY w)Nr   r   )r   hasattrr   ImportErrorry   r   rj   )r   ry   s     r   _pick_get_win_folderr      s    - 68$$ 	-,,	-    
, ,+  , , ,++++,s    
++: AA)maxsize)r]   r   r   r   )r]   r   r   r   )r   r   )rZ   
__future__r   r   rv   	functoolsr   typingr   apir   collections.abcr   r
   rj   rc   r   r   r   r   __all__r\   r   r   <module>r      sN    " " " " " " 				 



                               )((((((|% |% |% |% |%o |% |% |%~   *   &   <$ $ $ $N, , , ,  )4((()=)=)?)?@@ r   