2 Utilities for determining application-specific dirs. See <https://github.com/platformdirs/platformdirs> for details and
5 from __future__ import annotations
9 from pathlib import Path
11 if sys.version_info >= (3, 8): # pragma: no cover (py38+)
12 from typing import Literal
13 else: # pragma: no cover (py38+)
14 from ..typing_extensions import Literal
16 from .api import PlatformDirsABC
17 from .version import __version__
18 from .version import __version_tuple__ as __version_info__
21 def _set_platform_dir_class() -> type[PlatformDirsABC]:
22 if sys.platform == "win32":
23 from .windows import Windows as Result
24 elif sys.platform == "darwin":
25 from .macos import MacOS as Result
27 from .unix import Unix as Result
29 if os.getenv("ANDROID_DATA") == "/data" and os.getenv("ANDROID_ROOT") == "/system":
31 if os.getenv("SHELL") or os.getenv("PREFIX"):
34 from .android import _android_folder
36 if _android_folder() is not None:
37 from .android import Android
39 return Android # return to avoid redefinition of result
44 PlatformDirs = _set_platform_dir_class() #: Currently active platform
45 AppDirs = PlatformDirs #: Backwards compatibility with appdirs
49 appname: str | None = None,
50 appauthor: str | None | Literal[False] = None,
51 version: str | None = None,
52 roaming: bool = False,
55 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
56 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
57 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
58 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
59 :returns: data directory tied to the user
61 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_data_dir
65 appname: str | None = None,
66 appauthor: str | None | Literal[False] = None,
67 version: str | None = None,
68 multipath: bool = False,
71 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
72 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
73 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
74 :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`.
75 :returns: data directory shared by users
77 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, multipath=multipath).site_data_dir
81 appname: str | None = None,
82 appauthor: str | None | Literal[False] = None,
83 version: str | None = None,
84 roaming: bool = False,
87 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
88 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
89 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
90 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
91 :returns: config directory tied to the user
93 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_config_dir
97 appname: str | None = None,
98 appauthor: str | None | Literal[False] = None,
99 version: str | None = None,
100 multipath: bool = False,
103 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
104 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
105 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
106 :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`.
107 :returns: config directory shared by the users
109 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, multipath=multipath).site_config_dir
113 appname: str | None = None,
114 appauthor: str | None | Literal[False] = None,
115 version: str | None = None,
116 opinion: bool = True,
119 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
120 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
121 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
122 :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`.
123 :returns: cache directory tied to the user
125 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_cache_dir
129 appname: str | None = None,
130 appauthor: str | None | Literal[False] = None,
131 version: str | None = None,
132 roaming: bool = False,
135 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
136 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
137 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
138 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
139 :returns: state directory tied to the user
141 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_state_dir
145 appname: str | None = None,
146 appauthor: str | None | Literal[False] = None,
147 version: str | None = None,
148 opinion: bool = True,
151 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
152 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
153 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
154 :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`.
155 :returns: log directory tied to the user
157 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_log_dir
160 def user_documents_dir() -> str:
162 :returns: documents directory tied to the user
164 return PlatformDirs().user_documents_dir
167 def user_runtime_dir(
168 appname: str | None = None,
169 appauthor: str | None | Literal[False] = None,
170 version: str | None = None,
171 opinion: bool = True,
174 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
175 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
176 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
177 :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`.
178 :returns: runtime directory tied to the user
180 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_runtime_dir
184 appname: str | None = None,
185 appauthor: str | None | Literal[False] = None,
186 version: str | None = None,
187 roaming: bool = False,
190 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
191 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
192 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
193 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
194 :returns: data path tied to the user
196 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_data_path
200 appname: str | None = None,
201 appauthor: str | None | Literal[False] = None,
202 version: str | None = None,
203 multipath: bool = False,
206 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
207 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
208 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
209 :param multipath: See `multipath <platformdirs.api.PlatformDirsABC.multipath>`.
210 :returns: data path shared by users
212 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, multipath=multipath).site_data_path
215 def user_config_path(
216 appname: str | None = None,
217 appauthor: str | None | Literal[False] = None,
218 version: str | None = None,
219 roaming: bool = False,
222 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
223 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
224 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
225 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
226 :returns: config path tied to the user
228 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_config_path
231 def site_config_path(
232 appname: str | None = None,
233 appauthor: str | None | Literal[False] = None,
234 version: str | None = None,
235 multipath: bool = False,
238 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
239 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
240 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
241 :param multipath: See `roaming <platformdirs.api.PlatformDirsABC.multipath>`.
242 :returns: config path shared by the users
244 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, multipath=multipath).site_config_path
248 appname: str | None = None,
249 appauthor: str | None | Literal[False] = None,
250 version: str | None = None,
251 opinion: bool = True,
254 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
255 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
256 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
257 :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`.
258 :returns: cache path tied to the user
260 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_cache_path
264 appname: str | None = None,
265 appauthor: str | None | Literal[False] = None,
266 version: str | None = None,
267 roaming: bool = False,
270 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
271 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
272 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
273 :param roaming: See `roaming <platformdirs.api.PlatformDirsABC.version>`.
274 :returns: state path tied to the user
276 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, roaming=roaming).user_state_path
280 appname: str | None = None,
281 appauthor: str | None | Literal[False] = None,
282 version: str | None = None,
283 opinion: bool = True,
286 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
287 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
288 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
289 :param opinion: See `roaming <platformdirs.api.PlatformDirsABC.opinion>`.
290 :returns: log path tied to the user
292 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_log_path
295 def user_documents_path() -> Path:
297 :returns: documents path tied to the user
299 return PlatformDirs().user_documents_path
302 def user_runtime_path(
303 appname: str | None = None,
304 appauthor: str | None | Literal[False] = None,
305 version: str | None = None,
306 opinion: bool = True,
309 :param appname: See `appname <platformdirs.api.PlatformDirsABC.appname>`.
310 :param appauthor: See `appauthor <platformdirs.api.PlatformDirsABC.appauthor>`.
311 :param version: See `version <platformdirs.api.PlatformDirsABC.version>`.
312 :param opinion: See `opinion <platformdirs.api.PlatformDirsABC.opinion>`.
313 :returns: runtime path tied to the user
315 return PlatformDirs(appname=appname, appauthor=appauthor, version=version, opinion=opinion).user_runtime_path
329 "user_documents_dir",
338 "user_documents_path",