Skip to content

Commit def4431

Browse files
authored
Added desktop folder (#200)
1 parent e412620 commit def4431

File tree

10 files changed

+61
-0
lines changed

10 files changed

+61
-0
lines changed

README.rst

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ This kind of thing is what the ``platformdirs`` package is for.
4545
- user pictures dir (``user_pictures_dir``)
4646
- user videos dir (``user_videos_dir``)
4747
- user music dir (``user_music_dir``)
48+
- user desktop dir (``user_desktop_dir``)
4849
- user runtime dir (``user_runtime_dir``)
4950

5051
And also:
@@ -80,6 +81,8 @@ On macOS:
8081
'/Users/trentm/Movies'
8182
>>> user_music_dir()
8283
'/Users/trentm/Music'
84+
>>> user_desktop_dir()
85+
'/Users/trentm/Desktop'
8386
>>> user_runtime_dir(appname, appauthor)
8487
'/Users/trentm/Library/Caches/TemporaryItems/SuperApp'
8588
@@ -108,6 +111,8 @@ On Windows:
108111
'C:\\Users\\trentm\\Videos'
109112
>>> user_music_dir()
110113
'C:\\Users\\trentm\\Music'
114+
>>> user_desktop_dir()
115+
'C:\\Users\\trentm\\Desktop'
111116
>>> user_runtime_dir(appname, appauthor)
112117
'C:\\Users\\trentm\\AppData\\Local\\Temp\\Acme\\SuperApp'
113118
@@ -140,6 +145,8 @@ On Linux:
140145
'/home/trentm/Videos'
141146
>>> user_music_dir()
142147
'/home/trentm/Music'
148+
>>> user_desktop_dir()
149+
'/home/trentm/Desktop'
143150
>>> user_runtime_dir(appname, appauthor)
144151
'/run/user/{os.getuid()}/SuperApp'
145152
>>> site_config_dir(appname)
@@ -171,6 +178,8 @@ On Android::
171178
'/storage/emulated/0/DCIM/Camera'
172179
>>> user_music_dir()
173180
'/storage/emulated/0/Music'
181+
>>> user_desktop_dir()
182+
'/storage/emulated/0/Desktop'
174183
>>> user_runtime_dir(appname, appauthor)
175184
'/data/data/com.myApp/cache/SuperApp/tmp'
176185

@@ -206,6 +215,8 @@ apps also support ``XDG_*`` environment variables.
206215
'/Users/trentm/Movies'
207216
>>> dirs.user_music_dir
208217
'/Users/trentm/Music'
218+
>>> dirs.user_desktop_dir
219+
'/Users/trentm/Desktop'
209220
>>> dirs.user_runtime_dir
210221
'/Users/trentm/Library/Caches/TemporaryItems/SuperApp'
211222
@@ -236,6 +247,8 @@ dirs::
236247
'/Users/trentm/Movies'
237248
>>> dirs.user_music_dir
238249
'/Users/trentm/Music'
250+
>>> dirs.user_desktop_dir
251+
'/Users/trentm/Desktop'
239252
>>> dirs.user_runtime_dir
240253
'/Users/trentm/Library/Caches/TemporaryItems/SuperApp/1.0'
241254

src/platformdirs/__init__.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -264,6 +264,11 @@ def user_music_dir() -> str:
264264
return PlatformDirs().user_music_dir
265265

266266

267+
def user_desktop_dir() -> str:
268+
""":returns: desktop directory tied to the user"""
269+
return PlatformDirs().user_desktop_dir
270+
271+
267272
def user_runtime_dir(
268273
appname: str | None = None,
269274
appauthor: str | None | Literal[False] = None,
@@ -505,6 +510,11 @@ def user_music_path() -> Path:
505510
return PlatformDirs().user_music_path
506511

507512

513+
def user_desktop_path() -> Path:
514+
""":returns: desktop path tied to the user"""
515+
return PlatformDirs().user_desktop_path
516+
517+
508518
def user_runtime_path(
509519
appname: str | None = None,
510520
appauthor: str | None | Literal[False] = None,
@@ -545,6 +555,7 @@ def user_runtime_path(
545555
"user_pictures_dir",
546556
"user_videos_dir",
547557
"user_music_dir",
558+
"user_desktop_dir",
548559
"user_runtime_dir",
549560
"site_data_dir",
550561
"site_config_dir",
@@ -559,6 +570,7 @@ def user_runtime_path(
559570
"user_pictures_path",
560571
"user_videos_path",
561572
"user_music_path",
573+
"user_desktop_path",
562574
"user_runtime_path",
563575
"site_data_path",
564576
"site_config_path",

src/platformdirs/android.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,11 @@ def user_music_dir(self) -> str:
9292
""":return: music directory tied to the user e.g. ``/storage/emulated/0/Music``"""
9393
return _android_music_folder()
9494

95+
@property
96+
def user_desktop_dir(self) -> str:
97+
""":return: desktop directory tied to the user e.g. ``/storage/emulated/0/Desktop``"""
98+
return "/storage/emulated/0/Desktop"
99+
95100
@property
96101
def user_runtime_dir(self) -> str:
97102
"""

src/platformdirs/api.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ def user_videos_dir(self) -> str:
147147
def user_music_dir(self) -> str:
148148
""":return: music directory tied to the user"""
149149

150+
@property
151+
@abstractmethod
152+
def user_desktop_dir(self) -> str:
153+
""":return: desktop directory tied to the user"""
154+
150155
@property
151156
@abstractmethod
152157
def user_runtime_dir(self) -> str:
@@ -217,6 +222,11 @@ def user_music_path(self) -> Path:
217222
""":return: music path tied to the user"""
218223
return Path(self.user_music_dir)
219224

225+
@property
226+
def user_desktop_path(self) -> Path:
227+
""":return: desktop path tied to the user"""
228+
return Path(self.user_desktop_dir)
229+
220230
@property
221231
def user_runtime_path(self) -> Path:
222232
""":return: runtime path tied to the user"""

src/platformdirs/macos.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,11 @@ def user_music_dir(self) -> str:
8080
""":return: music directory tied to the user, e.g. ``~/Music``"""
8181
return os.path.expanduser("~/Music") # noqa: PTH111
8282

83+
@property
84+
def user_desktop_dir(self) -> str:
85+
""":return: desktop directory tied to the user, e.g. ``~/Desktop``"""
86+
return os.path.expanduser("~/Desktop") # noqa: PTH111
87+
8388
@property
8489
def user_runtime_dir(self) -> str:
8590
""":return: runtime directory tied to the user, e.g. ``~/Library/Caches/TemporaryItems/$appname/$version``"""

src/platformdirs/unix.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -146,6 +146,11 @@ def user_music_dir(self) -> str:
146146
""":return: music directory tied to the user, e.g. ``~/Music``"""
147147
return _get_user_media_dir("XDG_MUSIC_DIR", "~/Music")
148148

149+
@property
150+
def user_desktop_dir(self) -> str:
151+
""":return: desktop directory tied to the user, e.g. ``~/Desktop``"""
152+
return _get_user_media_dir("XDG_DESKTOP_DIR", "~/Desktop")
153+
149154
@property
150155
def user_runtime_dir(self) -> str:
151156
"""

src/platformdirs/windows.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,11 @@ def user_music_dir(self) -> str:
122122
""":return: music directory tied to the user e.g. ``%USERPROFILE%\\Music``"""
123123
return os.path.normpath(get_win_folder("CSIDL_MYMUSIC"))
124124

125+
@property
126+
def user_desktop_dir(self) -> str:
127+
""":return: desktop directory tied to the user, e.g. ``%USERPROFILE%\\Desktop``"""
128+
return os.path.normpath(get_win_folder("CSIDL_DESKTOPDIRECTORY"))
129+
125130
@property
126131
def user_runtime_dir(self) -> str:
127132
"""
@@ -216,6 +221,7 @@ def get_win_folder_via_ctypes(csidl_name: str) -> str:
216221
"CSIDL_MYVIDEO": 14,
217222
"CSIDL_MYMUSIC": 13,
218223
"CSIDL_DOWNLOADS": 40,
224+
"CSIDL_DESKTOPDIRECTORY": 16,
219225
}.get(csidl_name)
220226
if csidl_const is None:
221227
msg = f"Unknown CSIDL name: {csidl_name}"

tests/test_android.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def test_android(mocker: MockerFixture, params: dict[str, Any], func: str) -> No
5858
"user_pictures_dir": "/storage/emulated/0/Pictures",
5959
"user_videos_dir": "/storage/emulated/0/DCIM/Camera",
6060
"user_music_dir": "/storage/emulated/0/Music",
61+
"user_desktop_dir": "/storage/emulated/0/Desktop",
6162
"user_runtime_dir": f"/data/data/com.example/cache{suffix}{'' if not params.get('opinion', True) else val}",
6263
}
6364
expected = expected_map[func]

tests/test_macos.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ def test_macos(params: dict[str, Any], func: str) -> None:
3737
"user_pictures_dir": f"{home}/Pictures",
3838
"user_videos_dir": f"{home}/Movies",
3939
"user_music_dir": f"{home}/Music",
40+
"user_desktop_dir": f"{home}/Desktop",
4041
"user_runtime_dir": f"{home}/Library/Caches/TemporaryItems{suffix}",
4142
}
4243
expected = expected_map[func]

tests/test_unix.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
"user_pictures_dir",
2525
"user_videos_dir",
2626
"user_music_dir",
27+
"user_desktop_dir",
2728
],
2829
)
2930
def test_user_media_dir(mocker: MockerFixture, prop: str) -> None:
@@ -41,6 +42,7 @@ def test_user_media_dir(mocker: MockerFixture, prop: str) -> None:
4142
pytest.param("XDG_PICTURES_DIR", "user_pictures_dir", id="user_pictures_dir"),
4243
pytest.param("XDG_VIDEOS_DIR", "user_videos_dir", id="user_videos_dir"),
4344
pytest.param("XDG_MUSIC_DIR", "user_music_dir", id="user_music_dir"),
45+
pytest.param("XDG_DESKTOP_DIR", "user_desktop_dir", id="user_desktop_dir"),
4446
],
4547
)
4648
def test_user_media_dir_env_var(mocker: MockerFixture, env_var: str, prop: str) -> None:
@@ -62,6 +64,7 @@ def test_user_media_dir_env_var(mocker: MockerFixture, env_var: str, prop: str)
6264
pytest.param("XDG_PICTURES_DIR", "user_pictures_dir", "/home/example/Pictures", id="user_pictures_dir"),
6365
pytest.param("XDG_VIDEOS_DIR", "user_videos_dir", "/home/example/Videos", id="user_videos_dir"),
6466
pytest.param("XDG_MUSIC_DIR", "user_music_dir", "/home/example/Music", id="user_music_dir"),
67+
pytest.param("XDG_DESKTOP_DIR", "user_desktop_dir", "/home/example/Desktop", id="user_desktop_dir"),
6568
],
6669
)
6770
def test_user_media_dir_default(mocker: MockerFixture, env_var: str, prop: str, default_abs_path: str) -> None:

0 commit comments

Comments
 (0)