Skip to content

Commit 9497290

Browse files
committed
fix: export -> complie
1 parent f516b3f commit 9497290

File tree

2 files changed

+70
-19
lines changed

2 files changed

+70
-19
lines changed

src/sync_uv_pre_commit/cli.py

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import argparse
44
import logging
5-
import os
65
import shutil
76
import subprocess
87
import sys
@@ -18,7 +17,7 @@
1817

1918
from sync_uv_pre_commit.log import ExitCode, logger
2019
from sync_uv_pre_commit.package import find_specifier
21-
from sync_uv_pre_commit.toml import find_valid_extras
20+
from sync_uv_pre_commit.toml import combine_dev_dependencies, find_valid_extras
2221

2322
if TYPE_CHECKING:
2423
from collections.abc import Generator
@@ -54,34 +53,40 @@ def resolve_pyproject(
5453
new_pyproject = temp_directory / "pyproject.toml"
5554
requirements = temp_directory / "requirements.txt"
5655

57-
shutil.copy(origin_pyproject, new_pyproject)
56+
dev_key: str | None
57+
if no_dev:
58+
shutil.copy(origin_pyproject, new_pyproject)
59+
dev_key = None
60+
else:
61+
dev_key, new_pyproject = combine_dev_dependencies(
62+
origin_pyproject, new_pyproject
63+
)
64+
5865
logger.debug("before validate extras: %s", extras)
5966
valid_extras = find_valid_extras(new_pyproject)
6067
logger.debug("valid extras: %s", valid_extras)
6168

6269
command = [
6370
"uv",
64-
"export",
65-
"--no-hashes",
66-
"--no-emit-project",
67-
f"--output-file={requirements!s}",
71+
"pip",
72+
"compile",
73+
str(new_pyproject),
74+
"-o",
75+
str(requirements),
76+
"--no-annotate",
77+
"--no-header",
6878
]
6979
extras = tuple(ext for extra in extras if (ext := extra.strip()) in valid_extras)
7080
logger.debug("extras: %s", extras)
7181
if extras:
7282
command.extend(chain.from_iterable(("--extra", extra) for extra in extras))
73-
if no_dev:
74-
command.append("--no-dev")
83+
if dev_key:
84+
command.extend(["--extra", dev_key])
7585

7686
logger.info("Running command:\n %s", " ".join(command))
7787

7888
uv_process = subprocess.run( # noqa: S603
79-
command,
80-
cwd=temp_directory,
81-
check=False,
82-
capture_output=True,
83-
text=True,
84-
env={**os.environ, "UV_PYTHON": sys.executable},
89+
command, cwd=temp_directory, check=False, capture_output=True, text=True
8590
)
8691
try:
8792
uv_process.check_returncode()

src/sync_uv_pre_commit/toml.py

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,10 @@
1313

1414

1515
@lru_cache
16-
def find_valid_extras(pyproject: str | PathLike[str] | dict[str, Any]) -> set[str]:
17-
if not isinstance(pyproject, dict):
18-
pyproject = read_pyproject(pyproject)
16+
def find_valid_extras(pyproject: str | PathLike[str]) -> set[str]:
17+
pyproject_dict = read_pyproject(pyproject)
1918

20-
project: dict[str, Any] = pyproject["project"]
19+
project: dict[str, Any] = pyproject_dict["project"]
2120
optional_dependencies: dict[str, list[str]] = project.setdefault(
2221
"optional-dependencies", {}
2322
)
@@ -29,3 +28,50 @@ def read_pyproject(pyproject: str | PathLike[str]) -> dict[str, Any]:
2928
pyproject = Path(pyproject)
3029
with pyproject.open() as f:
3130
return toml.load(f)
31+
32+
33+
def combine_dev_dependencies(
34+
pyproject: str | PathLike[str], destination: str | PathLike[str]
35+
) -> tuple[str, Path]:
36+
pyproject = Path(pyproject)
37+
destination = Path(destination)
38+
39+
pyproject_obj = read_pyproject(pyproject)
40+
key, new_pyproject = dev_dependencies_to_dependencies(pyproject_obj)
41+
write_pyproject(new_pyproject, destination)
42+
43+
return key, destination
44+
45+
46+
def write_pyproject(
47+
pyproject: dict[str, Any], pyproject_path: str | PathLike[str]
48+
) -> Path:
49+
pyproject_path = Path(pyproject_path)
50+
with pyproject_path.open("w") as f:
51+
toml.dump(pyproject, f)
52+
return pyproject_path
53+
54+
55+
def dev_dependencies_to_dependencies(
56+
pyproject: str | PathLike[str] | dict[str, Any],
57+
) -> tuple[str, dict[str, Any]]:
58+
if not isinstance(pyproject, dict):
59+
pyproject = read_pyproject(pyproject)
60+
61+
key = "dev_dependencies"
62+
project: dict[str, Any] = pyproject["project"]
63+
64+
optional_dependencies: dict[str, list[str]] = project.setdefault(
65+
"optional-dependencies", {}
66+
)
67+
if key in optional_dependencies:
68+
key = f"new_{key}"
69+
70+
tools: dict[str, Any] = pyproject.setdefault("tool", {})
71+
uv_config: dict[str, Any] = tools.setdefault("uv", {})
72+
dev_dependencies: list[str] = uv_config.setdefault("dev-dependencies", [])
73+
74+
optional_dependencies[key] = dev_dependencies
75+
pyproject["project"]["optional-dependencies"] = optional_dependencies
76+
77+
return key, pyproject

0 commit comments

Comments
 (0)