Skip to content

Commit ba00f27

Browse files
committed
Update run.py.
1 parent d6b0028 commit ba00f27

File tree

1 file changed

+12
-7
lines changed

1 file changed

+12
-7
lines changed

run.py

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ def main(argv, stdin, stdout, stderr):
105105

106106
# Check for upgrades.
107107
wait_until = None
108-
if builder.version != 'dev':
108+
if not (is_dev(builder.version) or is_wheel(builder.version)):
109109
checker = threading.Thread(target=env.check_upgrade, daemon=True)
110110
checker.start()
111111
wait_until = time.monotonic() + 5
@@ -114,7 +114,7 @@ def main(argv, stdin, stdout, stderr):
114114
try:
115115
args = argv[1:] if len(argv) > 1 \
116116
else builder.config['defaults']['command-dev'] \
117-
if builder.version == 'dev' \
117+
if is_dev(builder.version) \
118118
else builder.config['defaults']['command']
119119
args[0] = env.bin_path(args[0])
120120
rc = subprocess.run(args).returncode
@@ -147,6 +147,8 @@ def merge_dict(dst, src):
147147

148148
def is_version(version): return version_re.match(version)
149149
def is_tag(version): return tag_re.match(version)
150+
def is_dev(version): return version == 'dev'
151+
def is_wheel(version): return pathlib.Path(version).resolve().is_file()
150152

151153

152154
@contextlib.contextmanager
@@ -259,7 +261,7 @@ def __init__(self, base, config, version, out, debug):
259261
self.config_url = config
260262
self.out, self.debug = out, debug
261263
if version is None: version = self.config['version']
262-
if not (is_version(version) or is_tag(version)):
264+
if not (is_version(version) or is_tag(version) or is_wheel(version)):
263265
raise Exception(f"Invalid version: {version}")
264266
self.version = version
265267

@@ -296,7 +298,8 @@ def merge_local_config(self, config):
296298
merge_dict(config, tomllib.load(f))
297299

298300
def requirements(self, config=None):
299-
if (v := self.version) == 'dev': return f'-e {self.base.as_uri()}\n'
301+
if is_dev(v := self.version): return f'-e {self.base.as_uri()}\n'
302+
if is_wheel(v): return f'{pathlib.Path(v).resolve().as_uri()}\n'
300303
if config is None: config = self.config
301304
version_num = config.get('tags', {}).get(v) if is_tag(v) else v
302305
if version_num is None:
@@ -309,22 +312,24 @@ def version_from(self, requirements):
309312
if (m := pat.search(requirements)) is not None: return m.group(1)
310313

311314
def find(self):
312-
pat = 'dev' if self.version == 'dev' else f'{self.version}-*'
315+
pat = 'dev' if is_dev(self.version) \
316+
else 'wheel' if is_wheel(self.version) else f'{self.version}-*'
313317
envs = [Env(path, self) for path in self.root.glob(pat)]
314318
envs.sort(key=lambda e: e.path, reverse=True)
315319
matching = [e for e in envs if e.requirements is not None]
316320
return envs, matching
317321

318322
def new(self):
319-
name = 'dev' if self.version == 'dev' \
323+
name = 'dev' if is_dev(self.version) \
324+
else 'wheel' if is_wheel(self.version) \
320325
else f'{self.version}-{time.time_ns():024x}'
321326
return Env(self.root / name, self)
322327

323328
def post_setup(self, ctx):
324329
super().post_setup(ctx)
325330
env, requirements = Env.env.get()
326331
pip_args = []
327-
if self.version == 'dev':
332+
if is_dev(self.version):
328333
uv_req = self.base / 'config' / 'uv.req'
329334
env.pip('install', '--require-hashes', '--only-binary=:all:',
330335
'--no-deps', f'--requirement={uv_req}',

0 commit comments

Comments
 (0)