diff options
| author | Nick Brassel <nick@tzarc.org> | 2023-11-28 07:53:43 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-28 07:53:43 +1100 |
| commit | 5501e804ff8d41ce656061b91896c4ac8c681d78 (patch) | |
| tree | 6a655fbceaeab67cf727dbe4318721407dd31824 /lib/python/qmk/path.py | |
| parent | 094357c40347e8a5db36578851f1af34a92e9f68 (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.py | 59 |
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 | |||
| 5 | import argparse | 5 | import argparse |
| 6 | from pathlib import Path | 6 | from pathlib import Path |
| 7 | 7 | ||
| 8 | from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE | 8 | from qmk.constants import MAX_KEYBOARD_SUBFOLDERS, QMK_FIRMWARE, QMK_USERSPACE, HAS_QMK_USERSPACE |
| 9 | from qmk.errors import NoSuchKeyboardError | 9 | from 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 | ||
| 31 | def 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 | |||
| 42 | def 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 | |||
| 53 | def 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 | |||
| 31 | def keyboard(keyboard_name): | 65 | def 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 |
