Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit c67cdcd

Browse files
committedMar 18, 2025·
add constraints tests and fix code
1 parent 0ab10a3 commit c67cdcd

13 files changed

+400
-132
lines changed
 

‎python/uv/private/lock.bzl

+18-7
Original file line numberDiff line numberDiff line change
@@ -72,9 +72,22 @@ def _args(ctx):
7272
else:
7373
args.add(arg)
7474

75-
def _add_all(all_args):
75+
def _add_all(name, all_args = None, **kwargs):
76+
if not all_args and type(name) == "list":
77+
all_args = name
78+
name = None
79+
80+
before_each = kwargs.get("before_each")
81+
if name:
82+
args.add_all(name, all_args, **kwargs)
83+
run_info.append(name)
84+
else:
85+
args.add_all(all_args, **kwargs)
86+
7687
for arg in all_args:
77-
_add_args(arg)
88+
if before_each:
89+
run_info.append(before_each)
90+
run_info.append(arg)
7891

7992
return struct(
8093
run_info = run_info,
@@ -108,10 +121,8 @@ def _lock_impl(ctx):
108121
args.add("--generate-hashes")
109122
if not ctx.attr.strip_extras:
110123
args.add("--no-strip-extras")
111-
for constraint in ctx.attr.build_constraints:
112-
args.add("--build-constraints", constraint)
113-
for constraint in ctx.attr.constraints:
114-
args.add("--constraints", constraint)
124+
args.add_all(ctx.files.build_constraints, before_each = "--build-constraints")
125+
args.add_all(ctx.files.constraints, before_each = "--constraints")
115126
args.add_all(ctx.attr.args)
116127

117128
python = py_runtime.interpreter if py_runtime.interpreter else py_runtime.interpreter_path
@@ -153,7 +164,7 @@ def _lock_impl(ctx):
153164
args = args.run_info,
154165
env = ctx.attr.env,
155166
srcs = depset(
156-
srcs + [uv],
167+
srcs + [uv] + ctx.files.build_constraints + ctx.files.constraints,
157168
transitive = [
158169
py_runtime.files,
159170
],

‎python/uv/private/lock_copier.py

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ def main():
5959
build_workspace = Path(environ["BUILD_WORKSPACE_DIRECTORY"])
6060

6161
dst_real_path = build_workspace / dst
62+
dst_real_path.parent.mkdir(parents=True, exist_ok=True)
6263
dst_real_path.write_text(src.read_text())
6364
print(f"OK: updated {dst_real_path}")
6465
return 0

‎tests/uv/BUILD.bazel

-13
Original file line numberDiff line numberDiff line change
@@ -1,13 +0,0 @@
1-
load("@bazel_skylib//rules:native_binary.bzl", "native_test")
2-
load("//python/uv:lock.bzl", "lock")
3-
4-
lock(
5-
name = "requirements",
6-
srcs = ["requirements.in"],
7-
out = "requirements.txt",
8-
)
9-
10-
native_test(
11-
name = "requirements_test",
12-
src = ":requirements.update",
13-
)

‎tests/uv/lock/BUILD.bazel

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
load(":lock_tests.bzl", "lock_test_suite")
2+
3+
lock_test_suite(
4+
name = "lock_tests",
5+
)

‎tests/uv/lock/lock_run_test.py

+165
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
import subprocess
2+
import sys
3+
import tempfile
4+
import unittest
5+
from pathlib import Path
6+
7+
from python import runfiles
8+
9+
rfiles = runfiles.Create()
10+
11+
12+
def _relative_rpath(path: str) -> Path:
13+
p = (Path("_main") / "tests" / "uv" / "lock" / path).as_posix()
14+
rpath = rfiles.Rlocation(p)
15+
if not rpath:
16+
raise ValueError(f"Could not find file: {p}")
17+
18+
return Path(rpath)
19+
20+
21+
class LockTests(unittest.TestCase):
22+
def test_requirements_updating_for_the_first_time(self):
23+
# Given
24+
copier_path = _relative_rpath("requirements_new_file.update")
25+
26+
# When
27+
with tempfile.TemporaryDirectory() as dir:
28+
workspace_dir = Path(dir)
29+
want_path = workspace_dir / "tests" / "uv" / "lock" / "does_not_exist.txt"
30+
31+
self.assertFalse(
32+
want_path.exists(), "The path should not exist after the test"
33+
)
34+
output = subprocess.run(
35+
copier_path,
36+
capture_output=True,
37+
env={
38+
"BUILD_WORKSPACE_DIRECTORY": f"{workspace_dir}",
39+
},
40+
)
41+
42+
# Then
43+
self.assertEqual(0, output.returncode, output.stderr)
44+
self.assertIn(
45+
"cp <bazel-sandbox>/tests/uv/lock/requirements_new_file.out",
46+
output.stdout.decode("utf-8"),
47+
)
48+
self.assertTrue(want_path.exists(), "The path should exist after the test")
49+
self.assertNotEqual(want_path.read_text(), "")
50+
51+
def test_requirements_updating(self):
52+
# Given
53+
copier_path = _relative_rpath("requirements.update")
54+
existing_file = _relative_rpath("testdata/requirements.txt")
55+
want_text = existing_file.read_text()
56+
57+
# When
58+
with tempfile.TemporaryDirectory() as dir:
59+
workspace_dir = Path(dir)
60+
want_path = (
61+
workspace_dir
62+
/ "tests"
63+
/ "uv"
64+
/ "lock"
65+
/ "testdata"
66+
/ "requirements.txt"
67+
)
68+
want_path.parent.mkdir(parents=True)
69+
want_path.write_text(
70+
want_text + "\n\n"
71+
) # Write something else to see that it is restored
72+
73+
output = subprocess.run(
74+
copier_path,
75+
capture_output=True,
76+
env={
77+
"BUILD_WORKSPACE_DIRECTORY": f"{workspace_dir}",
78+
},
79+
)
80+
81+
# Then
82+
self.assertEqual(0, output.returncode)
83+
self.assertIn(
84+
"cp <bazel-sandbox>/tests/uv/lock/requirements.out",
85+
output.stdout.decode("utf-8"),
86+
)
87+
self.assertEqual(want_path.read_text(), want_text)
88+
89+
def test_requirements_run_on_the_first_time(self):
90+
# Given
91+
copier_path = _relative_rpath("requirements_new_file.run")
92+
93+
# When
94+
with tempfile.TemporaryDirectory() as dir:
95+
workspace_dir = Path(dir)
96+
want_path = workspace_dir / "tests" / "uv" / "lock" / "does_not_exist.txt"
97+
# NOTE @aignas 2025-03-18: right now we require users to have the folder
98+
# there already
99+
want_path.parent.mkdir(parents=True)
100+
101+
self.assertFalse(
102+
want_path.exists(), "The path should not exist after the test"
103+
)
104+
output = subprocess.run(
105+
copier_path,
106+
capture_output=True,
107+
env={
108+
"BUILD_WORKSPACE_DIRECTORY": f"{workspace_dir}",
109+
},
110+
)
111+
112+
# Then
113+
self.assertEqual(0, output.returncode, output.stderr)
114+
self.assertTrue(want_path.exists(), "The path should exist after the test")
115+
got_contents = want_path.read_text()
116+
self.assertNotEqual(got_contents, "")
117+
self.assertIn(
118+
got_contents,
119+
output.stdout.decode("utf-8"),
120+
)
121+
122+
def test_requirements_run(self):
123+
# Given
124+
copier_path = _relative_rpath("requirements.run")
125+
existing_file = _relative_rpath("testdata/requirements.txt")
126+
want_text = existing_file.read_text()
127+
128+
# When
129+
with tempfile.TemporaryDirectory() as dir:
130+
workspace_dir = Path(dir)
131+
want_path = (
132+
workspace_dir
133+
/ "tests"
134+
/ "uv"
135+
/ "lock"
136+
/ "testdata"
137+
/ "requirements.txt"
138+
)
139+
140+
want_path.parent.mkdir(parents=True)
141+
want_path.write_text(
142+
want_text + "\n\n"
143+
) # Write something else to see that it is restored
144+
145+
output = subprocess.run(
146+
copier_path,
147+
capture_output=True,
148+
env={
149+
"BUILD_WORKSPACE_DIRECTORY": f"{workspace_dir}",
150+
},
151+
)
152+
153+
# Then
154+
self.assertEqual(0, output.returncode, output.stderr)
155+
self.assertTrue(want_path.exists(), "The path should exist after the test")
156+
got_contents = want_path.read_text()
157+
self.assertNotEqual(got_contents, "")
158+
self.assertIn(
159+
got_contents,
160+
output.stdout.decode("utf-8"),
161+
)
162+
163+
164+
if __name__ == "__main__":
165+
unittest.main()

‎tests/uv/lock/lock_tests.bzl

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
# Copyright 2025 The Bazel Authors. All rights reserved.
2+
#
3+
# Licensed under the Apache License, Version 2.0 (the "License");
4+
# you may not use this file except in compliance with the License.
5+
# You may obtain a copy of the License at
6+
#
7+
# http://www.apache.org/licenses/LICENSE-2.0
8+
#
9+
# Unless required by applicable law or agreed to in writing, software
10+
# distributed under the License is distributed on an "AS IS" BASIS,
11+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12+
# See the License for the specific language governing permissions and
13+
# limitations under the License.
14+
15+
""
16+
17+
load("@bazel_skylib//rules:native_binary.bzl", "native_test")
18+
load("//python/uv:lock.bzl", "lock")
19+
load("//tests/support:sh_py_run_test.bzl", "py_reconfig_test")
20+
21+
def lock_test_suite(name):
22+
"""The test suite with various lock-related integration tests
23+
24+
Args:
25+
name: {type}`str` the name of the test suite
26+
"""
27+
lock(
28+
name = "requirements",
29+
srcs = ["testdata/requirements.in"],
30+
constraints = [
31+
"testdata/constraints.txt",
32+
"testdata/constraints2.txt",
33+
],
34+
build_constraints = [
35+
"testdata/build_constraints.txt",
36+
"testdata/build_constraints2.txt",
37+
],
38+
out = "testdata/requirements.txt",
39+
)
40+
41+
lock(
42+
name = "requirements_new_file",
43+
srcs = ["testdata/requirements.in"],
44+
out = "does_not_exist.txt",
45+
)
46+
47+
py_reconfig_test(
48+
name = "requirements_run_tests",
49+
env = {
50+
"BUILD_WORKSPACE_DIRECTORY": "foo",
51+
},
52+
srcs = ["lock_run_test.py"],
53+
deps = [
54+
"//python/runfiles",
55+
],
56+
data = [
57+
"requirements_new_file.update",
58+
"requirements_new_file.run",
59+
"requirements.update",
60+
"requirements.run",
61+
"testdata/requirements.txt",
62+
],
63+
main = "lock_run_test.py",
64+
)
65+
66+
# document and check that this actually works
67+
native_test(
68+
name = "requirements_test",
69+
src = ":requirements.update",
70+
)
71+
72+
native.test_suite(
73+
name = name,
74+
tests = [
75+
":requirements_test",
76+
":build_test",
77+
":requirements_run_tests",
78+
],
79+
)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
certifi==2025.1.31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
certifi==2025.1.31
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
charset-normalizer==3.4.0
+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
charset-normalizer==3.4.0
File renamed without changes.
+128
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,128 @@
1+
# This file was autogenerated by uv via the following command:
2+
# bazel run //tests/uv/lock:requirements.update
3+
certifi==2025.1.31 \
4+
--hash=sha256:3d5da6925056f6f18f119200434a4780a94263f10d1c21d032a6f6b2baa20651 \
5+
--hash=sha256:ca78db4565a652026a4db2bcdf68f2fb589ea80d0be70e03929ed730746b84fe
6+
# via requests
7+
charset-normalizer==3.4.0 \
8+
--hash=sha256:0099d79bdfcf5c1f0c2c72f91516702ebf8b0b8ddd8905f97a8aecf49712c621 \
9+
--hash=sha256:0713f3adb9d03d49d365b70b84775d0a0d18e4ab08d12bc46baa6132ba78aaf6 \
10+
--hash=sha256:07afec21bbbbf8a5cc3651aa96b980afe2526e7f048fdfb7f1014d84acc8b6d8 \
11+
--hash=sha256:0b309d1747110feb25d7ed6b01afdec269c647d382c857ef4663bbe6ad95a912 \
12+
--hash=sha256:0d99dd8ff461990f12d6e42c7347fd9ab2532fb70e9621ba520f9e8637161d7c \
13+
--hash=sha256:0de7b687289d3c1b3e8660d0741874abe7888100efe14bd0f9fd7141bcbda92b \
14+
--hash=sha256:1110e22af8ca26b90bd6364fe4c763329b0ebf1ee213ba32b68c73de5752323d \
15+
--hash=sha256:130272c698667a982a5d0e626851ceff662565379baf0ff2cc58067b81d4f11d \
16+
--hash=sha256:136815f06a3ae311fae551c3df1f998a1ebd01ddd424aa5603a4336997629e95 \
17+
--hash=sha256:14215b71a762336254351b00ec720a8e85cada43b987da5a042e4ce3e82bd68e \
18+
--hash=sha256:1db4e7fefefd0f548d73e2e2e041f9df5c59e178b4c72fbac4cc6f535cfb1565 \
19+
--hash=sha256:1ffd9493de4c922f2a38c2bf62b831dcec90ac673ed1ca182fe11b4d8e9f2a64 \
20+
--hash=sha256:2006769bd1640bdf4d5641c69a3d63b71b81445473cac5ded39740a226fa88ab \
21+
--hash=sha256:20587d20f557fe189b7947d8e7ec5afa110ccf72a3128d61a2a387c3313f46be \
22+
--hash=sha256:223217c3d4f82c3ac5e29032b3f1c2eb0fb591b72161f86d93f5719079dae93e \
23+
--hash=sha256:27623ba66c183eca01bf9ff833875b459cad267aeeb044477fedac35e19ba907 \
24+
--hash=sha256:285e96d9d53422efc0d7a17c60e59f37fbf3dfa942073f666db4ac71e8d726d0 \
25+
--hash=sha256:2de62e8801ddfff069cd5c504ce3bc9672b23266597d4e4f50eda28846c322f2 \
26+
--hash=sha256:2f6c34da58ea9c1a9515621f4d9ac379871a8f21168ba1b5e09d74250de5ad62 \
27+
--hash=sha256:309a7de0a0ff3040acaebb35ec45d18db4b28232f21998851cfa709eeff49d62 \
28+
--hash=sha256:35c404d74c2926d0287fbd63ed5d27eb911eb9e4a3bb2c6d294f3cfd4a9e0c23 \
29+
--hash=sha256:3710a9751938947e6327ea9f3ea6332a09bf0ba0c09cae9cb1f250bd1f1549bc \
30+
--hash=sha256:3d59d125ffbd6d552765510e3f31ed75ebac2c7470c7274195b9161a32350284 \
31+
--hash=sha256:40d3ff7fc90b98c637bda91c89d51264a3dcf210cade3a2c6f838c7268d7a4ca \
32+
--hash=sha256:425c5f215d0eecee9a56cdb703203dda90423247421bf0d67125add85d0c4455 \
33+
--hash=sha256:43193c5cda5d612f247172016c4bb71251c784d7a4d9314677186a838ad34858 \
34+
--hash=sha256:44aeb140295a2f0659e113b31cfe92c9061622cadbc9e2a2f7b8ef6b1e29ef4b \
35+
--hash=sha256:47334db71978b23ebcf3c0f9f5ee98b8d65992b65c9c4f2d34c2eaf5bcaf0594 \
36+
--hash=sha256:4796efc4faf6b53a18e3d46343535caed491776a22af773f366534056c4e1fbc \
37+
--hash=sha256:4a51b48f42d9358460b78725283f04bddaf44a9358197b889657deba38f329db \
38+
--hash=sha256:4b67fdab07fdd3c10bb21edab3cbfe8cf5696f453afce75d815d9d7223fbe88b \
39+
--hash=sha256:4ec9dd88a5b71abfc74e9df5ebe7921c35cbb3b641181a531ca65cdb5e8e4dea \
40+
--hash=sha256:4f9fc98dad6c2eaa32fc3af1417d95b5e3d08aff968df0cd320066def971f9a6 \
41+
--hash=sha256:54b6a92d009cbe2fb11054ba694bc9e284dad30a26757b1e372a1fdddaf21920 \
42+
--hash=sha256:55f56e2ebd4e3bc50442fbc0888c9d8c94e4e06a933804e2af3e89e2f9c1c749 \
43+
--hash=sha256:5726cf76c982532c1863fb64d8c6dd0e4c90b6ece9feb06c9f202417a31f7dd7 \
44+
--hash=sha256:5d447056e2ca60382d460a604b6302d8db69476fd2015c81e7c35417cfabe4cd \
45+
--hash=sha256:5ed2e36c3e9b4f21dd9422f6893dec0abf2cca553af509b10cd630f878d3eb99 \
46+
--hash=sha256:5ff2ed8194587faf56555927b3aa10e6fb69d931e33953943bc4f837dfee2242 \
47+
--hash=sha256:62f60aebecfc7f4b82e3f639a7d1433a20ec32824db2199a11ad4f5e146ef5ee \
48+
--hash=sha256:63bc5c4ae26e4bc6be6469943b8253c0fd4e4186c43ad46e713ea61a0ba49129 \
49+
--hash=sha256:6b40e8d38afe634559e398cc32b1472f376a4099c75fe6299ae607e404c033b2 \
50+
--hash=sha256:6b493a043635eb376e50eedf7818f2f322eabbaa974e948bd8bdd29eb7ef2a51 \
51+
--hash=sha256:6dba5d19c4dfab08e58d5b36304b3f92f3bd5d42c1a3fa37b5ba5cdf6dfcbcee \
52+
--hash=sha256:6fd30dc99682dc2c603c2b315bded2799019cea829f8bf57dc6b61efde6611c8 \
53+
--hash=sha256:707b82d19e65c9bd28b81dde95249b07bf9f5b90ebe1ef17d9b57473f8a64b7b \
54+
--hash=sha256:7706f5850360ac01d80c89bcef1640683cc12ed87f42579dab6c5d3ed6888613 \
55+
--hash=sha256:7782afc9b6b42200f7362858f9e73b1f8316afb276d316336c0ec3bd73312742 \
56+
--hash=sha256:79983512b108e4a164b9c8d34de3992f76d48cadc9554c9e60b43f308988aabe \
57+
--hash=sha256:7f683ddc7eedd742e2889d2bfb96d69573fde1d92fcb811979cdb7165bb9c7d3 \
58+
--hash=sha256:82357d85de703176b5587dbe6ade8ff67f9f69a41c0733cf2425378b49954de5 \
59+
--hash=sha256:84450ba661fb96e9fd67629b93d2941c871ca86fc38d835d19d4225ff946a631 \
60+
--hash=sha256:86f4e8cca779080f66ff4f191a685ced73d2f72d50216f7112185dc02b90b9b7 \
61+
--hash=sha256:8cda06946eac330cbe6598f77bb54e690b4ca93f593dee1568ad22b04f347c15 \
62+
--hash=sha256:8ce7fd6767a1cc5a92a639b391891bf1c268b03ec7e021c7d6d902285259685c \
63+
--hash=sha256:8ff4e7cdfdb1ab5698e675ca622e72d58a6fa2a8aa58195de0c0061288e6e3ea \
64+
--hash=sha256:9289fd5dddcf57bab41d044f1756550f9e7cf0c8e373b8cdf0ce8773dc4bd417 \
65+
--hash=sha256:92a7e36b000bf022ef3dbb9c46bfe2d52c047d5e3f3343f43204263c5addc250 \
66+
--hash=sha256:92db3c28b5b2a273346bebb24857fda45601aef6ae1c011c0a997106581e8a88 \
67+
--hash=sha256:95c3c157765b031331dd4db3c775e58deaee050a3042fcad72cbc4189d7c8dca \
68+
--hash=sha256:980b4f289d1d90ca5efcf07958d3eb38ed9c0b7676bf2831a54d4f66f9c27dfa \
69+
--hash=sha256:9ae4ef0b3f6b41bad6366fb0ea4fc1d7ed051528e113a60fa2a65a9abb5b1d99 \
70+
--hash=sha256:9c98230f5042f4945f957d006edccc2af1e03ed5e37ce7c373f00a5a4daa6149 \
71+
--hash=sha256:9fa2566ca27d67c86569e8c85297aaf413ffab85a8960500f12ea34ff98e4c41 \
72+
--hash=sha256:a14969b8691f7998e74663b77b4c36c0337cb1df552da83d5c9004a93afdb574 \
73+
--hash=sha256:a8aacce6e2e1edcb6ac625fb0f8c3a9570ccc7bfba1f63419b3769ccf6a00ed0 \
74+
--hash=sha256:a8e538f46104c815be19c975572d74afb53f29650ea2025bbfaef359d2de2f7f \
75+
--hash=sha256:aa41e526a5d4a9dfcfbab0716c7e8a1b215abd3f3df5a45cf18a12721d31cb5d \
76+
--hash=sha256:aa693779a8b50cd97570e5a0f343538a8dbd3e496fa5dcb87e29406ad0299654 \
77+
--hash=sha256:ab22fbd9765e6954bc0bcff24c25ff71dcbfdb185fcdaca49e81bac68fe724d3 \
78+
--hash=sha256:ab2e5bef076f5a235c3774b4f4028a680432cded7cad37bba0fd90d64b187d19 \
79+
--hash=sha256:ab973df98fc99ab39080bfb0eb3a925181454d7c3ac8a1e695fddfae696d9e90 \
80+
--hash=sha256:af73657b7a68211996527dbfeffbb0864e043d270580c5aef06dc4b659a4b578 \
81+
--hash=sha256:b197e7094f232959f8f20541ead1d9862ac5ebea1d58e9849c1bf979255dfac9 \
82+
--hash=sha256:b295729485b06c1a0683af02a9e42d2caa9db04a373dc38a6a58cdd1e8abddf1 \
83+
--hash=sha256:b8831399554b92b72af5932cdbbd4ddc55c55f631bb13ff8fe4e6536a06c5c51 \
84+
--hash=sha256:b8dcd239c743aa2f9c22ce674a145e0a25cb1566c495928440a181ca1ccf6719 \
85+
--hash=sha256:bcb4f8ea87d03bc51ad04add8ceaf9b0f085ac045ab4d74e73bbc2dc033f0236 \
86+
--hash=sha256:bd7af3717683bea4c87acd8c0d3d5b44d56120b26fd3f8a692bdd2d5260c620a \
87+
--hash=sha256:bf4475b82be41b07cc5e5ff94810e6a01f276e37c2d55571e3fe175e467a1a1c \
88+
--hash=sha256:c3e446d253bd88f6377260d07c895816ebf33ffffd56c1c792b13bff9c3e1ade \
89+
--hash=sha256:c57516e58fd17d03ebe67e181a4e4e2ccab1168f8c2976c6a334d4f819fe5944 \
90+
--hash=sha256:c94057af19bc953643a33581844649a7fdab902624d2eb739738a30e2b3e60fc \
91+
--hash=sha256:cab5d0b79d987c67f3b9e9c53f54a61360422a5a0bc075f43cab5621d530c3b6 \
92+
--hash=sha256:ce031db0408e487fd2775d745ce30a7cd2923667cf3b69d48d219f1d8f5ddeb6 \
93+
--hash=sha256:cee4373f4d3ad28f1ab6290684d8e2ebdb9e7a1b74fdc39e4c211995f77bec27 \
94+
--hash=sha256:d5b054862739d276e09928de37c79ddeec42a6e1bfc55863be96a36ba22926f6 \
95+
--hash=sha256:dbe03226baf438ac4fda9e2d0715022fd579cb641c4cf639fa40d53b2fe6f3e2 \
96+
--hash=sha256:dc15e99b2d8a656f8e666854404f1ba54765871104e50c8e9813af8a7db07f12 \
97+
--hash=sha256:dcaf7c1524c0542ee2fc82cc8ec337f7a9f7edee2532421ab200d2b920fc97cf \
98+
--hash=sha256:dd4eda173a9fcccb5f2e2bd2a9f423d180194b1bf17cf59e3269899235b2a114 \
99+
--hash=sha256:dd9a8bd8900e65504a305bf8ae6fa9fbc66de94178c420791d0293702fce2df7 \
100+
--hash=sha256:de7376c29d95d6719048c194a9cf1a1b0393fbe8488a22008610b0361d834ecf \
101+
--hash=sha256:e7fdd52961feb4c96507aa649550ec2a0d527c086d284749b2f582f2d40a2e0d \
102+
--hash=sha256:e91f541a85298cf35433bf66f3fab2a4a2cff05c127eeca4af174f6d497f0d4b \
103+
--hash=sha256:e9e3c4c9e1ed40ea53acf11e2a386383c3304212c965773704e4603d589343ed \
104+
--hash=sha256:ee803480535c44e7f5ad00788526da7d85525cfefaf8acf8ab9a310000be4b03 \
105+
--hash=sha256:f09cb5a7bbe1ecae6e87901a2eb23e0256bb524a79ccc53eb0b7629fbe7677c4 \
106+
--hash=sha256:f19c1585933c82098c2a520f8ec1227f20e339e33aca8fa6f956f6691b784e67 \
107+
--hash=sha256:f1a2f519ae173b5b6a2c9d5fa3116ce16e48b3462c8b96dfdded11055e3d6365 \
108+
--hash=sha256:f28f891ccd15c514a0981f3b9db9aa23d62fe1a99997512b0491d2ed323d229a \
109+
--hash=sha256:f3e73a4255342d4eb26ef6df01e3962e73aa29baa3124a8e824c5d3364a65748 \
110+
--hash=sha256:f606a1881d2663630ea5b8ce2efe2111740df4b687bd78b34a8131baa007f79b \
111+
--hash=sha256:fe9f97feb71aa9896b81973a7bbada8c49501dc73e58a10fcef6663af95e5079 \
112+
--hash=sha256:ffc519621dce0c767e96b9c53f09c5d215578e10b02c285809f76509a3931482
113+
# via
114+
# -c tests/uv/lock/testdata/constraints.txt
115+
# -c tests/uv/lock/testdata/constraints2.txt
116+
# requests
117+
idna==3.10 \
118+
--hash=sha256:12f65c9b470abda6dc35cf8e63cc574b1c52b11df2c86030af0ac09b01b13ea9 \
119+
--hash=sha256:946d195a0d259cbba61165e88e65941f16e9b36ea6ddb97f00452bae8b1287d3
120+
# via requests
121+
requests==2.32.3 \
122+
--hash=sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760 \
123+
--hash=sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6
124+
# via -r tests/uv/lock/testdata/requirements.in
125+
urllib3==2.3.0 \
126+
--hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \
127+
--hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d
128+
# via requests

‎tests/uv/requirements.txt

-112
This file was deleted.

0 commit comments

Comments
 (0)
Please sign in to comment.