
    B>qjE@                    
   U 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
mZ ddlmZ e
rdd	lmZ d
Zded<    G d de      Zd$dZd%dZd$dZddddddddddddZded<   ed&d        Zd$d!Zd&d"Z e       Zd$d#ZdgZy)'zWindows.    )annotationsN)cache)Path)TYPE_CHECKINGFinal   )PlatformDirsABC)Callablei @  z
Final[int]_KF_FLAG_DONT_VERIFYc                     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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 y)"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>`.

    c                    | j                   rdnd}t        j                  j                  t	        |            }| j                  |      S )zData 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      S/opt/rentech/trading_bot/.venv/lib/python3.12/site-packages/platformdirs/windows.pyuser_data_dirzWindows.user_data_dir   s<     $(<<5Jwwu 56!!$''    Nopinion_valuec                  g }| j                   r| j                  dur+| j                  xs | j                   }|j                  |       |j                  | j                          || j                  r|j                  |       | j                  r|j                  | j                         t        j                  j                  |g| }| j                  |       |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,||dll+ww||D*6*))$/r   c                t    t         j                  j                  t        d            }| j	                  |      S )zLData 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_dir4   s/     ww/E FG!!$''r   c                    | j                   S )z;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 )z:Config directory shared by users, same as `site_data_dir`.r,   r/   s    r   site_config_dirzWindows.site_config_dir?   r1   r   c                x    t         j                  j                  t        d            }| j	                  |d      S )zCache 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_dirD   s4     ww/D EF!!$g!>>r   c                x    t         j                  j                  t        d            }| j	                  |d      S )z\Cache directory shared by users, e.g. ``C:\ProgramData\$appauthor\$appname\Cache\$version``.r)   r6   r   r*   r+   s     r   site_cache_dirzWindows.site_cache_dirJ   s4     ww/E FG!!$g!>>r   c                    | j                   S )z:State directory tied to the user, same as `user_data_dir`.r.   r/   s    r   user_state_dirzWindows.user_state_dirP   r1   r   c                    | j                   S )z9State directory shared by users, same as `site_data_dir`.r3   r/   s    r   site_state_dirzWindows.site_state_dirU   r1   r   c                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |S )z_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_dirZ   =     !!<<77<<f-D--d3r   c                    | j                   }| j                  r1t        j                  j	                  |d      }| j                  |       |S )z^Log directory shared by users, same as `site_data_dir` if not opinionated else ``Logs`` in it.r?   )r,   r"   r   r   r$   r%   r+   s     r   site_log_dirzWindows.site_log_dirc   rA   r   c                R    t         j                  j                  t        d            S )zFDocuments directory tied to the user e.g. ``%USERPROFILE%\Documents``.CSIDL_PERSONALr   r   r   r   r/   s    r   user_documents_dirzWindows.user_documents_dirl        ww/? @AAr   c                R    t         j                  j                  t        d            S )zFDownloads directory tied to the user e.g. ``%USERPROFILE%\Downloads``.CSIDL_DOWNLOADSrF   r/   s    r   user_downloads_dirzWindows.user_downloads_dirq   s     ww/@ ABBr   c                R    t         j                  j                  t        d            S )zDPictures directory tied to the user e.g. ``%USERPROFILE%\Pictures``.CSIDL_MYPICTURESrF   r/   s    r   user_pictures_dirzWindows.user_pictures_dirv   s     ww/A BCCr   c                R    t         j                  j                  t        d            S )z@Videos directory tied to the user e.g. ``%USERPROFILE%\Videos``.CSIDL_MYVIDEOrF   r/   s    r   user_videos_dirzWindows.user_videos_dir{        ww ?@@r   c                R    t         j                  j                  t        d            S )z>Music directory tied to the user e.g. ``%USERPROFILE%\Music``.CSIDL_MYMUSICrF   r/   s    r   user_music_dirzWindows.user_music_dir   rR   r   c                R    t         j                  j                  t        d            S )zCDesktop directory tied to the user, e.g. ``%USERPROFILE%\Desktop``.CSIDL_DESKTOPDIRECTORYrF   r/   s    r   user_desktop_dirzWindows.user_desktop_dir   s     ww/G HIIr   c                z    t         j                  j                  t         j                  j                  d            S )zEProjects directory tied to the user, e.g. ``%USERPROFILE%\Projects``.z
~/Projects)r   r   r   
expanduserr/   s    r   user_projects_dirzWindows.user_projects_dir   s(     ww 2 2< @AAr   c           
         t         j                  j                  t         j                  j	                  dt        t        d      j                         j                  dz                    S )z0Public share directory e.g. ``C:\Users\Public``.PUBLIC~Public)	r   r   r   environgetstrr   rZ   parentr/   s    r   user_publicshare_dirzWindows.user_publicshare_dir   sF     ww

xT#Y=Q=Q=S=Z=Z]e=e9f ghhr   c           	         t         j                  j                  t        t	        t        d            dz  dz  dz              S )zTTemplates directory tied to the user e.g. ``%APPDATA%\Microsoft\Windows\Templates``.r   	Microsoftr   	Templatesr   r   r   rb   r   r   r/   s    r   user_templates_dirzWindows.user_templates_dir   s9     wwD)H$IK$WZc$cfq$q rssr   c           	         t         j                  j                  t        t	        t        d            dz  dz  dz              S )zQFonts directory tied to the user e.g. ``%LOCALAPPDATA%\Microsoft\Windows\Fonts``.r   rf   r   Fontsrh   r/   s    r   user_fonts_dirzWindows.user_fonts_dir   s;     wwD8M)N$OR]$]`i$ils$s tuur   c                    | j                   S )zCPreference directory tied to the user, same as ``user_config_dir``.)r0   r/   s    r   user_preference_dirzWindows.user_preference_dir   s     ###r   c                    t         j                  j                  t         j                  j                  t	        d      d            S )zABin directory tied to the user, e.g. ``%LOCALAPPDATA%\Programs``.r   Programsr   r   r   r$   r   r/   s    r   user_bin_dirzWindows.user_bin_dir   s/     ww^<Q-RT^ _``r   c                    t         j                  j                  t         j                  j                  t	        d      d            S )z;Bin directory shared by users, e.g. ``C:\ProgramData\bin``.r)   binrq   r/   s    r   site_bin_dirzWindows.site_bin_dir   s/     ww^<R-SUZ [\\r   c                R    t         j                  j                  t        d            S )zFApplications directory tied to the user, e.g. ``Start Menu\Programs``.CSIDL_PROGRAMSrF   r/   s    r   user_applications_dirzWindows.user_applications_dir   rH   r   c                R    t         j                  j                  t        d            S )zfApplications directory shared by users, e.g. ``C:\ProgramData\Microsoft\Windows\Start Menu\Programs``.CSIDL_COMMON_PROGRAMSrF   r/   s    r   site_applications_dirzWindows.site_applications_dir   s     ww/F GHHr   c                    t         j                  j                  t         j                  j                  t	        d      d            }| j                  |      S )zbRuntime 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   s?     ww^<Q-RTZ [\!!$''r   c                    | j                   S )z>Runtime directory shared by users, same as `user_runtime_dir`.)r~   r/   s    r   site_runtime_dirzWindows.site_runtime_dir   s     $$$r   )returnrb   )r   rb   r   
str | Noner   rb   )!__name__
__module____qualname____doc__propertyr   r   r,   r0   r4   r7   r9   r;   r=   r@   rC   rG   rK   rN   rQ   rU   rX   r[   rd   ri   rl   rn   rr   ru   rx   r{   r~   r    r   r   r   r      sK    ( ( GK  ( (
 " " " " ? ?
 ? ?
 " " " "     B B C C D D A A A A J J B B i i t t v v $ $ a a ] ] B B I I ( (
 % %r   r   c                    t        |       }||S ddddj                  |       }|d|  }t        |      t        j                  j                  |      }|d| }t        |      |S )z&Get folder from environment variables.APPDATAALLUSERSPROFILELOCALAPPDATA)r   r)   r   Unknown CSIDL name: zUnset environment variable: )(get_win_folder_if_csidl_name_not_env_varra   
ValueErrorr   r`   )
csidl_nameresultenv_var_namemsgs       r   get_win_folder_from_env_varsr      s    5jAF # 1- 
c*o	 
 $ZL1oZZ^^L)F~,\N;oMr   c                   | dk(  rNt         j                  j                  t         j                  j                  t         j                  d         d      S | dk(  rNt         j                  j                  t         j                  j                  t         j                  d         d      S | dk(  rNt         j                  j                  t         j                  j                  t         j                  d         d      S | dk(  rNt         j                  j                  t         j                  j                  t         j                  d         d	      S | d
k(  rNt         j                  j                  t         j                  j                  t         j                  d         d      S | dk(  rQt         j                  j                  t         j                  j                  t         j                  d         dddd      S | dk(  r|t         j                  j                  t         j                  j                  t         j                  j                  dt         j                  j                  dd                  dddd      S y)zMGet a folder for a CSIDL name that does not exist as an environment variable.rE   USERPROFILE	DocumentsrJ   	DownloadsrM   PicturesrP   VideosrT   Musicrw   r   rf   r   z
Start Menurp   rz   PROGRAMDATAr   zC:\ProgramDataN)r   r   r$   r   r`   ra   r   s    r   r   r      s   %%ww||BGG,,RZZ-FGUU&&ww||BGG,,RZZ-FGUU''ww||BGG,,RZZ-FGTT_$ww||BGG,,RZZ-FGRR_$ww||BGG,,RZZ-FGQQ%%ww||GGRZZ	23
 	
 ,,ww||GGRZZ^^M2::>>J[]n;opq
 	
 r   c                z   ddh}ddddddd	d
ddd
j                  |       }|d|  }t        |      t        j                  dk7  rt        ddl}| |v r|j                  n|j                  }|j                  |d      5 }|j                  ||      \  }}ddd       t        |      S # 1 sw Y   t              S xY w)zGet 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.

    r)   rz   AppDatazCommon AppDatazLocal AppDataPersonal&{374DE290-123F-4565-9164-39C4925E467B}zMy PictureszMy VideozMy Musicrp   zCommon Programs)
r   r)   r   rE   rJ   rM   rP   rT   rw   rz   Nr   win32r   z@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders)ra   r   sysplatformNotImplementedErrorwinregHKEY_LOCAL_MACHINEHKEY_CURRENT_USEROpenKeyQueryValueExrb   )	r   machine_namesshell_folder_namer   r   hkeykey	directory_s	            r   get_win_folder_from_registryr      s     	M
 # 0.$C)##$!2 
c*o   $ZL1o
||w!! )3m(C6$$IaIaD	a	b Cfi**30AB	1Cy>Cy>s   >B''B:z&{3EB685DB-65F9-4CF6-A03A-E3EF65729F3D}z&{62AB5D82-FDC1-4DC3-A9DD-070D1D495D97}z&{F1B32785-6FBA-4FCF-9D55-7B8E7F157091}z&{FDD39AD0-238F-46AF-ADB4-6C85480369C7}z&{33E28130-4E1E-4676-835A-98395C3BC3BB}z&{18989B1D-99B5-455B-841C-AB7C74E4DDFC}z&{4BD8D571-6D19-48D3-BE97-422220080E43}r   z&{B4BFCC3A-DB2C-424C-B029-7FE99A87C641}z&{A77F5D77-2E2B-44C3-A6A2-ABA601054A51}z&{0139D44E-6AFE-49F2-8690-3DAFCAE6FFB8})r   r)   r   rE   rM   rP   rT   rJ   rW   rw   rz   zdict[str, str]_KNOWN_FOLDER_GUIDSc                   	
 t         j                  dk7  rt        ddlm} m}m}m}mm	m
  G fdd|       |d      	| 	j                  _        j                   |      g	j                  _        d	j                  _        j                   g	j                  _         |d      
| 
j"                  _         |      j$                  j&                   |j(                        g
j"                  _         |d	      j$                  j*                  _        j(                  j(                  j$                  gj*                  _        d	
fd
}|S )zBuild the resolver once; a fresh ``_GUID`` per call leaks ctypes pointer types.

    See https://github.com/tox-dev/platformdirs/issues/501.

    r   r   )HRESULTPOINTER	StructureWinDLLbyrefcreate_unicode_bufferwintypesc                      e Zd ZdW  j                  fdW  j                  fdW  j                  fdW  j
                  dz  fgZy)/_build_get_win_folder_via_ctypes.<locals>._GUIDData1Data2Data3Data4   N)r   r   r   DWORDWORDBYTE_fields_)r   s   r   _GUIDr   E  s?    hnn%hmm$hmm$hmma'(	
r   r   ole32Nshell32kernel32c                   t         j                  |       }|d|  }t        |              }j                  | |             j	                         }j                   |      t        d  |             |j                  }j                  |       |d|  }t        |      t        d |D              r' 	d      }
j                  ||d      r|j                  }|S )Nr   z'SHGetKnownFolderPath returned NULL for c              3  8   K   | ]  }t        |      d kD    yw)   N)ord).0cs     r   	<genexpr>zD_build_get_win_folder_via_ctypes.<locals>.resolve.<locals>.<genexpr>m  s     ,s1v|,s   i   )r   ra   r   CLSIDFromStringLPWSTRSHGetKnownFolderPathr   valueCoTaskMemFreeanyGetShortPathNameW)r   folder_guidr   guidpath_ptrr   bufr   r   r   r   r   r   r   s          r   resolvez1_build_get_win_folder_via_ctypes.<locals>.resolve[  s    )--j9(5CS/!wk5;7??$$$U4[2FeT\o^H%>;J<HCS/!,V,,'-C))&#t<r   r   rb   r   rb   )r   r   r   ctypesr   r   r   r   r   r   r   r   restype	LPCOLESTRargtypesr   LPVOIDr   r   HANDLEr   r   )r   r   r   r   r   r   r   r   r   r   r   r   s        @@@@@@@r    _build_get_win_folder_via_ctypesr   2  s!    ||w!!  
	 
 7OE$+E!&.&8&8'%.%IE""&E$,OO#4E YG+2G  (-4U^X^^X__^efnfufu^v,wG  )j!H)1H&+3??HOOX^^*\H' 2 Nr   c                "     t               |       S )zGet folder via :func:`SHGetKnownFolderPath`.

    See https://learn.microsoft.com/en-us/windows/win32/api/shlobj_core/nf-shlobj_core-shgetknownfolderpath.

    )r   r   s    r   get_win_folder_via_ctypesr   w  s     .+-j99r   c                 v    	 ddl } t        S # t        $ r Y nw xY w	 ddl}t        S # t        $ r	 t
        cY S w xY w)zjSelect the best method to resolve Windows folder paths: ctypes, then registry, then environment variables.r   N)r   r   ImportErrorr   r   r   )r   r   s     r   _pick_get_win_folderr     sM    ) )(  , ,+  ,++,s    	& 88c                    d| j                  d       }t        j                  j                  |d      j	                         x}r|S t        |       S )zGet a Windows folder path, checking for ``WIN_PD_OVERRIDE_*`` environment variable overrides first.

    For example, ``CSIDL_LOCAL_APPDATA`` can be overridden by setting ``WIN_PD_OVERRIDE_LOCAL_APPDATA``.

    WIN_PD_OVERRIDE_CSIDL_ )removeprefixr   r`   ra   strip_resolve_win_folder)r   env_varoverrides      r   r   r     sO     !!8!8!B CDG::>>'2.4466x6z**r   r   )r   rb   r   r   )r   zCallable[[str], str])r   
__future__r   r   r   	functoolsr   pathlibr   typingr   r   apir	   collections.abcr
   r   __annotations__r   r   r   r   r   r   r   r   r   r   __all__r   r   r   <module>r      s     " 	 
   '  ( $. j -l%o l%^*"J#N >DC>@==?F>E' ^  A AH:,  +, 	+ r   