Skip to content

Commit 329294f

Browse files
n-thumanngreenbonebot
authored andcommitted
Add: Support for uv
1 parent edf8288 commit 329294f

File tree

5 files changed

+32
-4
lines changed

5 files changed

+32
-4
lines changed

autohooks/cli/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,9 +50,10 @@ def main():
5050
str(Mode.PYTHONPATH),
5151
str(Mode.PIPENV),
5252
str(Mode.POETRY),
53+
str(Mode.UV)
5354
],
5455
help="Mode for loading autohooks during hook execution. Either load "
55-
"autohooks from the PYTHON_PATH, via pipenv or via poetry.",
56+
"autohooks from the PYTHON_PATH, via pipenv, via poetry or via uv.",
5657
)
5758
activate_parser.set_defaults(func=install_hooks)
5859

autohooks/config.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,10 +83,12 @@ def _gather_mode(mode_string: Optional[str]) -> Mode:
8383
Gather the mode from a mode string
8484
"""
8585
mode = Mode.from_string(mode_string)
86-
is_virtual_env = mode == Mode.PIPENV or mode == Mode.POETRY
86+
is_virtual_env = mode == Mode.PIPENV or mode == Mode.POETRY or mode == Mode.UV
8787
if is_virtual_env and not is_split_env():
8888
if mode == Mode.POETRY:
8989
mode = Mode.POETRY_MULTILINE
90+
elif mode == Mode.UV:
91+
mode = Mode.UV_MULTILINE
9092
else:
9193
mode = Mode.PIPENV_MULTILINE
9294
return mode

autohooks/hooks.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
POETRY_MULTILINE_SHEBANG,
1515
POETRY_SHEBANG,
1616
PYTHON3_SHEBANG,
17+
UV_SHEBANG,
18+
UV_MULTILINE_SHEBANG,
1719
TEMPLATE_VERSION,
1820
PreCommitTemplate,
1921
)
@@ -65,6 +67,8 @@ def read_mode(self) -> Mode:
6567
return Mode.POETRY
6668
if shebang == PIPENV_SHEBANG:
6769
return Mode.PIPENV
70+
if shebang == UV_SHEBANG:
71+
return Mode.UV
6872

6973
shebang = f"{lines[0][2:]}\n"
7074
shebang += "\n".join(lines[1:5])
@@ -74,6 +78,9 @@ def read_mode(self) -> Mode:
7478
if shebang == PIPENV_MULTILINE_SHEBANG:
7579
return Mode.PIPENV_MULTILINE
7680

81+
if shebang == UV_MULTILINE_SHEBANG:
82+
return Mode.UV_MULTILINE
83+
7784
return Mode.UNKNOWN
7885

7986
def read_version(self) -> int:

autohooks/settings.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@ class Mode(Enum):
1515
PIPENV = 1
1616
PYTHONPATH = 2
1717
POETRY = 3
18-
PIPENV_MULTILINE = 4
19-
POETRY_MULTILINE = 5
18+
UV = 4
19+
PIPENV_MULTILINE = 5
20+
POETRY_MULTILINE = 6
21+
UV_MULTILINE = 7
2022
UNDEFINED = -1
2123
UNKNOWN = -2
2224

@@ -29,6 +31,10 @@ def get_effective_mode(self):
2931
return Mode.POETRY
3032
if self.value == Mode.POETRY_MULTILINE.value:
3133
return Mode.POETRY_MULTILINE
34+
if self.value == Mode.UV.value:
35+
return Mode.UV
36+
if self.value == Mode.UV_MULTILINE.value:
37+
return Mode.UV_MULTILINE
3238
return Mode.PYTHONPATH
3339

3440
@staticmethod

autohooks/template.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
PYTHON3_SHEBANG = "/usr/bin/env python3"
1414
PIPENV_SHEBANG = "/usr/bin/env -S pipenv run python3"
1515
POETRY_SHEBANG = "/usr/bin/env -S poetry run python"
16+
UV_SHEBANG = "/usr/bin/env -S uv run python"
1617
# For OS's that don't support '/usr/bin/env -S'.
1718
PIPENV_MULTILINE_SHEBANG = (
1819
"/bin/sh\n"
@@ -28,6 +29,13 @@
2829
'exit "$?"\n'
2930
"'''"
3031
)
32+
UV_MULTILINE_SHEBANG = (
33+
"/bin/sh\n"
34+
"\"true\" ''':'\n"
35+
'uv run python "$0" "$@"\n'
36+
'exit "$?"\n'
37+
"'''"
38+
)
3139

3240
TEMPLATE_VERSION = 1
3341

@@ -55,10 +63,14 @@ def render(self, *, mode: Mode) -> str:
5563
params["SHEBANG"] = PIPENV_SHEBANG
5664
elif mode == Mode.POETRY:
5765
params["SHEBANG"] = POETRY_SHEBANG
66+
elif mode == Mode.UV:
67+
params["SHEBANG"] = UV_SHEBANG
5868
elif mode == Mode.PIPENV_MULTILINE:
5969
params["SHEBANG"] = PIPENV_MULTILINE_SHEBANG
6070
elif mode == Mode.POETRY_MULTILINE:
6171
params["SHEBANG"] = POETRY_MULTILINE_SHEBANG
72+
elif mode == Mode.UV_MULTILINE:
73+
params["SHEBANG"] = UV_MULTILINE_SHEBANG
6274
else:
6375
params["SHEBANG"] = PYTHON3_SHEBANG
6476

0 commit comments

Comments
 (0)