K i'dZddlmZddlZddlZddlmZddlmZddl m Z erddl m Z Gd d e Z dd Zdd Zdd ZddZddZedeZd gZy)zWindows.) annotationsN) lru_cache) TYPE_CHECKING)PlatformDirsABC)Callablec>eZdZdZeddZddddZeddZeddZeddZ edd Z edd Z edd Z edd Z edd ZeddZeddZeddZeddZeddZeddZeddZy)Windowsa `MSDN on where to store app data files `_. Makes use of the `appname `, `appauthor `, `version `, `roaming `, `opinion `, `ensure_exists `. c|jrdnd}tjjt |}|j |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_APPDATACSIDL_LOCAL_APPDATA)roamingospathnormpathget_win_folder _append_parts)selfconstrs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/platformdirs/windows.py user_data_dirzWindows.user_data_dirs<$(<<5Jwwu 56!!$''N opinion_valuecg}|jr|jdur+|jxs |j}|j||j|j||jr|j||jr|j|jt j j|g|}|j||S)NF) appname appauthorappendopinionversionrrjoin_optionally_create_directory)rrrparamsauthors rrzWindows._append_parts&s <<~~U*74<< f% MM$,, '(T\\ m,|| dll+ww||D*6* ))$/ rcttjjtd}|j |S)zT:return: data directory shared by users, e.g. ``C:\ProgramData\$appauthor\$appname``CSIDL_COMMON_APPDATArrrrrrrs r site_data_dirzWindows.site_data_dir5s/ww/E FG!!$''rc|jS)zC:return: config directory tied to the user, same as `user_data_dir`rrs ruser_config_dirzWindows.user_config_dir;!!!rc|jS)zF:return: config directory shared by the users, same as `site_data_dir`)r)r,s rsite_config_dirzWindows.site_config_dir@r.rcxtjjtd}|j |dS)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 Cacherr'r(s ruser_cache_dirzWindows.user_cache_dirEs4 ww/D EF!!$g!>>rcxtjjtd}|j |dS)zd:return: cache directory shared by users, e.g. ``C:\ProgramData\$appauthor\$appname\Cache\$version``r&r2rr'r(s rsite_cache_dirzWindows.site_cache_dirNs4ww/E FG!!$g!>>rc|jS)zB:return: state directory tied to the user, same as `user_data_dir`r+r,s ruser_state_dirzWindows.user_state_dirTr.rc|j}|jr1tjj |d}|j ||S)zg:return: log directory tied to the user, same as `user_data_dir` if not opinionated else ``Logs`` in itLogs)rrrrr!r"r(s r user_log_dirzWindows.user_log_dirYs=!! <<77<<f-D  - -d 3 rcRtjjtdS)zN:return: documents directory tied to the user e.g. ``%USERPROFILE%\Documents``CSIDL_PERSONALrrrrr,s ruser_documents_dirzWindows.user_documents_dirbsww/? @AArcRtjjtdS)zN:return: downloads directory tied to the user e.g. ``%USERPROFILE%\Downloads``CSIDL_DOWNLOADSr=r,s ruser_downloads_dirzWindows.user_downloads_dirgsww/@ ABBrcRtjjtdS)zL:return: pictures directory tied to the user e.g. ``%USERPROFILE%\Pictures``CSIDL_MYPICTURESr=r,s ruser_pictures_dirzWindows.user_pictures_dirlsww/A BCCrcRtjjtdS)zH:return: videos directory tied to the user e.g. ``%USERPROFILE%\Videos`` CSIDL_MYVIDEOr=r,s ruser_videos_dirzWindows.user_videos_dirqww ?@@rcRtjjtdS)zF:return: music directory tied to the user e.g. ``%USERPROFILE%\Music`` CSIDL_MYMUSICr=r,s ruser_music_dirzWindows.user_music_dirvrHrcRtjjtdS)zK:return: desktop directory tied to the user, e.g. ``%USERPROFILE%\Desktop``CSIDL_DESKTOPDIRECTORYr=r,s ruser_desktop_dirzWindows.user_desktop_dir{sww/G HIIrctjjtjjt dd}|j |S)z :return: runtime directory tied to the user, e.g. ``%USERPROFILE%\AppData\Local\Temp\$appauthor\$appname`` r Temp)rrrr!rrr(s ruser_runtime_dirzWindows.user_runtime_dirs? ww ^rArDrGrKrNrQrSrrr r s_((GK (( """"???? ""BBCCDDAAAAJJ((%%rr ct|}||Sddddj|}|d|}t|tjj|}|d|}t||S)z&Get folder from environment variables.APPDATAALLUSERSPROFILE LOCALAPPDATA)r r&r Unknown CSIDL name: zUnset environment variable: )(get_win_folder_if_csidl_name_not_env_varget ValueErrorrenviron) csidl_nameresult env_var_namemsgs rget_win_folder_from_env_varsrjs 5j AF  # 1- c*o  $ZL1o ZZ^^L )F ~,\N;o MrcB|dk(rNtjjtjjtjddS|dk(rNtjjtjjtjddS|dk(rNtjjtjjtjddS|dk(rNtjjtjjtjdd S|d k(rNtjjtjjtjdd Sy ) zMGet a folder for a CSIDL name that does not exist as an environment variable.r< USERPROFILE Documentsr@ DownloadsrCPicturesrFVideosrJMusicN)rrr!rre)rfs rrbrbs%%ww||BGG,,RZZ -FGUU&&ww||BGG,,RZZ -FGUU''ww||BGG,,RZZ -FGTT_$ww||BGG,,RZZ -FGRR_$ww||BGG,,RZZ -FGQQ rc  ddddddddd j|}|d |}t|tjd k7rtd d l}|j |jd}|j||\}}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. AppDatazCommon AppDataz Local AppDataPersonalz&{374DE290-123F-4565-9164-39C4925E467B}z My PictureszMy VideozMy Music)r r&r r<r@rCrFrJNrawin32rz@Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders) rcrdsysplatformNotImplementedErrorwinregOpenKeyHKEY_CURRENT_USER QueryValueExrU)rfshell_folder_namerirykey directory_s rget_win_folder_from_registryrs# 0.$C)##  c*o $ZL1o ||w!! ..113v wC&&s,=>LIq y>rc ddl}ddddddd d d d j|}|d |}t||jd}t |d}|j j d|dd|td|Dr:|jd}|jj|j|dr|}|dk(r*tjj|jdS|jS)zGet folder with ctypes.rN#' () r r&r r<rCrFrJr@rMraiwindllc38K|]}t|dkDyw)N)ord).0cs r z,get_win_folder_via_ctypes..s %A3q6C< %sr@rn)ctypesrcrdcreate_unicode_buffergetattrshell32SHGetFolderPathWanykernel32GetShortPathNameWvaluerrr!)rfr csidl_constribufrbuf2s rget_win_folder_via_ctypesrs  "!"$  c*o$ZL1o  & &t ,C VX &F NN##D+tQD % %%++D1 ?? , ,SYYd CC&&ww||CII{33 99rc ddl}t|drtS ddl}t S#t$rYwxYw#t$r t cYSwxYw)Nrr)rhasattrr ImportErrorryrrj)rrys r_pick_get_win_folderrsV- 68 $, ,,,+     ,++,s#2 //AA)maxsize)rfrUrTrU)rfrUrTrV)rTzCallable[[str], str])rZ __future__rrrv functoolsrtypingrapircollections.abcrr rjrbrrrr__all__r\rrrsl"  (|%o|%~*&<$N , )4()=)?@ r