Let us walk on the 3-isogeny graph
Loading...
Searching...
No Matches
pip._vendor.platformdirs.windows Namespace Reference

Data Structures

class  Windows
 

Functions

str get_win_folder_from_env_vars (str csidl_name)
 
str|None get_win_folder_if_csidl_name_not_env_var (str csidl_name)
 
str get_win_folder_from_registry (str csidl_name)
 
str get_win_folder_via_ctypes (str csidl_name)
 
Callable[[str], str] _pick_get_win_folder ()
 

Variables

 get_win_folder = lru_cache(maxsize=None)(_pick_get_win_folder())
 

Detailed Description

Windows.

Function Documentation

◆ _pick_get_win_folder()

Callable[[str], str] _pick_get_win_folder ( )
protected

Definition at line 240 of file windows.py.

240def _pick_get_win_folder() -> Callable[[str], str]:
241 if hasattr(ctypes, "windll"):
242 return get_win_folder_via_ctypes
243 try:
244 import winreg # noqa: F401
245 except ImportError:
246 return get_win_folder_from_env_vars
247 else:
248 return get_win_folder_from_registry
249
250
for i

References i.

◆ get_win_folder_from_env_vars()

str get_win_folder_from_env_vars ( str  csidl_name)
Get folder from environment variables.

Definition at line 135 of file windows.py.

135def get_win_folder_from_env_vars(csidl_name: str) -> str:
136 """Get folder from environment variables."""
137 result = get_win_folder_if_csidl_name_not_env_var(csidl_name)
138 if result is not None:
139 return result
140
141 env_var_name = {
142 "CSIDL_APPDATA": "APPDATA",
143 "CSIDL_COMMON_APPDATA": "ALLUSERSPROFILE",
144 "CSIDL_LOCAL_APPDATA": "LOCALAPPDATA",
145 }.get(csidl_name)
146 if env_var_name is None:
147 msg = f"Unknown CSIDL name: {csidl_name}"
148 raise ValueError(msg)
149 result = os.environ.get(env_var_name)
150 if result is None:
151 msg = f"Unset environment variable: {env_var_name}"
152 raise ValueError(msg)
153 return result
154
155

References pip._vendor.platformdirs.windows.get_win_folder_if_csidl_name_not_env_var(), and i.

Here is the call graph for this function:

◆ get_win_folder_from_registry()

str get_win_folder_from_registry ( str  csidl_name)
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.

Definition at line 175 of file windows.py.

175def get_win_folder_from_registry(csidl_name: str) -> str:
176 """
177 Get folder from the registry.
178
179 This is a fallback technique at best. I'm not sure if using the registry for these guarantees us the correct answer
180 for all CSIDL_* names.
181 """
182 shell_folder_name = {
183 "CSIDL_APPDATA": "AppData",
184 "CSIDL_COMMON_APPDATA": "Common AppData",
185 "CSIDL_LOCAL_APPDATA": "Local AppData",
186 "CSIDL_PERSONAL": "Personal",
187 "CSIDL_DOWNLOADS": "{374DE290-123F-4565-9164-39C4925E467B}",
188 "CSIDL_MYPICTURES": "My Pictures",
189 "CSIDL_MYVIDEO": "My Video",
190 "CSIDL_MYMUSIC": "My Music",
191 }.get(csidl_name)
192 if shell_folder_name is None:
193 msg = f"Unknown CSIDL name: {csidl_name}"
194 raise ValueError(msg)
195 if sys.platform != "win32": # only needed for mypy type checker to know that this code runs only on Windows
196 raise NotImplementedError
197 import winreg
198
199 key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, r"Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders")
200 directory, _ = winreg.QueryValueEx(key, shell_folder_name)
201 return str(directory)
202
203

References i.

◆ get_win_folder_if_csidl_name_not_env_var()

str | None get_win_folder_if_csidl_name_not_env_var ( str  csidl_name)
Get folder for a CSIDL name that does not exist as an environment variable.

Definition at line 156 of file windows.py.

156def get_win_folder_if_csidl_name_not_env_var(csidl_name: str) -> str | None:
157 """Get folder for a CSIDL name that does not exist as an environment variable."""
158 if csidl_name == "CSIDL_PERSONAL":
159 return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Documents") # noqa: PTH118
160
161 if csidl_name == "CSIDL_DOWNLOADS":
162 return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Downloads") # noqa: PTH118
163
164 if csidl_name == "CSIDL_MYPICTURES":
165 return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Pictures") # noqa: PTH118
166
167 if csidl_name == "CSIDL_MYVIDEO":
168 return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Videos") # noqa: PTH118
169
170 if csidl_name == "CSIDL_MYMUSIC":
171 return os.path.join(os.path.normpath(os.environ["USERPROFILE"]), "Music") # noqa: PTH118
172 return None
173
174

References i.

Referenced by pip._vendor.platformdirs.windows.get_win_folder_from_env_vars().

Here is the caller graph for this function:

◆ get_win_folder_via_ctypes()

str get_win_folder_via_ctypes ( str  csidl_name)
Get folder with ctypes.

Definition at line 204 of file windows.py.

204def get_win_folder_via_ctypes(csidl_name: str) -> str:
205 """Get folder with ctypes."""
206 # There is no 'CSIDL_DOWNLOADS'.
207 # Use 'CSIDL_PROFILE' (40) and append the default folder 'Downloads' instead.
208 # https://learn.microsoft.com/en-us/windows/win32/shell/knownfolderid
209
210 csidl_const = {
211 "CSIDL_APPDATA": 26,
212 "CSIDL_COMMON_APPDATA": 35,
213 "CSIDL_LOCAL_APPDATA": 28,
214 "CSIDL_PERSONAL": 5,
215 "CSIDL_MYPICTURES": 39,
216 "CSIDL_MYVIDEO": 14,
217 "CSIDL_MYMUSIC": 13,
218 "CSIDL_DOWNLOADS": 40,
219 }.get(csidl_name)
220 if csidl_const is None:
221 msg = f"Unknown CSIDL name: {csidl_name}"
222 raise ValueError(msg)
223
225 windll = getattr(ctypes, "windll") # noqa: B009 # using getattr to avoid false positive with mypy type checker
226 windll.shell32.SHGetFolderPathW(None, csidl_const, None, 0, buf)
227
228 # Downgrade to short path name if it has highbit chars.
229 if any(ord(c) > 255 for c in buf): # noqa: PLR2004
232 buf = buf2
233
234 if csidl_name == "CSIDL_DOWNLOADS":
235 return os.path.join(buf.value, "Downloads") # noqa: PTH118
236
237 return buf.value
238
239

References i.

Variable Documentation

◆ get_win_folder