summaryrefslogtreecommitdiff
path: root/lib/python/qmk/path.py
diff options
context:
space:
mode:
authorNick Brassel <nick@tzarc.org>2023-11-28 07:53:43 +1100
committerGitHub <noreply@github.com>2023-11-28 07:53:43 +1100
commit5501e804ff8d41ce656061b91896c4ac8c681d78 (patch)
tree6a655fbceaeab67cf727dbe4318721407dd31824 /lib/python/qmk/path.py
parent094357c40347e8a5db36578851f1af34a92e9f68 (diff)
QMK Userspace (#22222)
Co-authored-by: Duncan Sutherland <dunk2k_2000@hotmail.com>
Diffstat (limited to 'lib/python/qmk/path.py')
-rw-r--r--lib/python/qmk/path.py59
1 files changed, 55 insertions, 4 deletions
diff --git a/lib/python/qmk/path.py b/lib/python/qmk/path.py
index 94582a05e0..74364ee04b 100644
--- a/lib/python/qmk/path.py
+++ b/lib/python/qmk/path.py
@@ -5,7 +5,7 @@ import os
5import argparse 5import argparse
6from pathlib import Path 6from pathlib import Path
7 7
8from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE 8from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE, QMK_USERSPACE, HAS_QMK_USERSPACE
9from qmk.errors import NoSuchKeyboardError 9from qmk.errors import NoSuchKeyboardError
10 10
11 11
@@ -28,6 +28,40 @@ def under_qmk_firmware(path=Path(os.environ['ORIG_CWD'])):
28 return None 28 return None
29 29
30 30
31def under_qmk_userspace(path=Path(os.environ['ORIG_CWD'])):
32 """Returns a Path object representing the relative path under $QMK_USERSPACE, or None.
33 """
34 try:
35 if HAS_QMK_USERSPACE:
36 return path.relative_to(QMK_USERSPACE)
37 except ValueError:
38 pass
39 return None
40
41
42def is_under_qmk_firmware(path=Path(os.environ['ORIG_CWD'])):
43 """Returns a boolean if the input path is a child under qmk_firmware.
44 """
45 if path is None:
46 return False
47 try:
48 return Path(os.path.commonpath([Path(path), QMK_FIRMWARE])) == QMK_FIRMWARE
49 except ValueError:
50 return False
51
52
53def is_under_qmk_userspace(path=Path(os.environ['ORIG_CWD'])):
54 """Returns a boolean if the input path is a child under $QMK_USERSPACE.
55 """
56 if path is None:
57 return False
58 try:
59 if HAS_QMK_USERSPACE:
60 return Path(os.path.commonpath([Path(path), QMK_USERSPACE])) == QMK_USERSPACE
61 except ValueError:
62 return False
63
64
31def keyboard(keyboard_name): 65def keyboard(keyboard_name):
32 """Returns the path to a keyboard's directory relative to the qmk root. 66 """Returns the path to a keyboard's directory relative to the qmk root.
33 """ 67 """
@@ -45,11 +79,28 @@ def keymaps(keyboard_name):
45 keyboard_folder = keyboard(keyboard_name) 79 keyboard_folder = keyboard(keyboard_name)
46 found_dirs = [] 80 found_dirs = []
47 81
82 if HAS_QMK_USERSPACE:
83 this_keyboard_folder = Path(QMK_USERSPACE) / keyboard_folder
84 for _ in range(MAX_KEYBOARD_SUBFOLDERS):
85 if (this_keyboard_folder / 'keymaps').exists():
86 found_dirs.append((this_keyboard_folder / 'keymaps').resolve())
87
88 this_keyboard_folder = this_keyboard_folder.parent
89 if this_keyboard_folder.resolve() == QMK_USERSPACE.resolve():
90 break
91
92 # We don't have any relevant keymap directories in userspace, so we'll use the fully-qualified path instead.
93 if len(found_dirs) == 0:
94 found_dirs.append((QMK_USERSPACE / keyboard_folder / 'keymaps').resolve())
95
96 this_keyboard_folder = QMK_FIRMWARE / keyboard_folder
48 for _ in range(MAX_KEYBOARD_SUBFOLDERS): 97 for _ in range(MAX_KEYBOARD_SUBFOLDERS):
49 if (keyboard_folder / 'keymaps').exists(): 98 if (this_keyboard_folder / 'keymaps').exists():
50 found_dirs.append((keyboard_folder / 'keymaps').resolve()) 99 found_dirs.append((this_keyboard_folder / 'keymaps').resolve())
51 100
52 keyboard_folder = keyboard_folder.parent 101 this_keyboard_folder = this_keyboard_folder.parent
102 if this_keyboard_folder.resolve() == QMK_FIRMWARE.resolve():
103 break
53 104
54 if len(found_dirs) > 0: 105 if len(found_dirs) > 0:
55 return found_dirs 106 return found_dirs