omdev 0.0.0.dev180__py3-none-any.whl → 0.0.0.dev182__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
omdev/scripts/interp.py CHANGED
@@ -1050,13 +1050,6 @@ json_dump_compact: ta.Callable[..., bytes] = functools.partial(json.dump, **JSON
1050
1050
  json_dumps_compact: ta.Callable[..., str] = functools.partial(json.dumps, **JSON_COMPACT_KWARGS)
1051
1051
 
1052
1052
 
1053
- ########################################
1054
- # ../../../omlish/lite/logs.py
1055
-
1056
-
1057
- log = logging.getLogger(__name__)
1058
-
1059
-
1060
1053
  ########################################
1061
1054
  # ../../../omlish/lite/maybes.py
1062
1055
 
@@ -4205,9 +4198,15 @@ class InterpInspection:
4205
4198
 
4206
4199
 
4207
4200
  class InterpInspector:
4208
- def __init__(self) -> None:
4201
+ def __init__(
4202
+ self,
4203
+ *,
4204
+ log: ta.Optional[logging.Logger] = None,
4205
+ ) -> None:
4209
4206
  super().__init__()
4210
4207
 
4208
+ self._log = log
4209
+
4211
4210
  self._cache: ta.Dict[str, ta.Optional[InterpInspection]] = {}
4212
4211
 
4213
4212
  _RAW_INSPECTION_CODE = """
@@ -4256,13 +4255,95 @@ class InterpInspector:
4256
4255
  try:
4257
4256
  ret = await self._inspect(exe)
4258
4257
  except Exception as e: # noqa
4259
- if log.isEnabledFor(logging.DEBUG):
4260
- log.exception('Failed to inspect interp: %s', exe)
4258
+ if self._log is not None and self._log.isEnabledFor(logging.DEBUG):
4259
+ self._log.exception('Failed to inspect interp: %s', exe)
4261
4260
  ret = None
4262
4261
  self._cache[exe] = ret
4263
4262
  return ret
4264
4263
 
4265
4264
 
4265
+ ########################################
4266
+ # ../pyenv/pyenv.py
4267
+ """
4268
+ TODO:
4269
+ - custom tags
4270
+ - 'aliases'
4271
+ - https://github.com/pyenv/pyenv/pull/2966
4272
+ - https://github.com/pyenv/pyenv/issues/218 (lol)
4273
+ - probably need custom (temp?) definition file
4274
+ - *or* python-build directly just into the versions dir?
4275
+ - optionally install / upgrade pyenv itself
4276
+ - new vers dont need these custom mac opts, only run on old vers
4277
+ """
4278
+
4279
+
4280
+ class Pyenv:
4281
+ def __init__(
4282
+ self,
4283
+ *,
4284
+ root: ta.Optional[str] = None,
4285
+ ) -> None:
4286
+ if root is not None and not (isinstance(root, str) and root):
4287
+ raise ValueError(f'pyenv_root: {root!r}')
4288
+
4289
+ super().__init__()
4290
+
4291
+ self._root_kw = root
4292
+
4293
+ @async_cached_nullary
4294
+ async def root(self) -> ta.Optional[str]:
4295
+ if self._root_kw is not None:
4296
+ return self._root_kw
4297
+
4298
+ if shutil.which('pyenv'):
4299
+ return await asyncio_subprocesses.check_output_str('pyenv', 'root')
4300
+
4301
+ d = os.path.expanduser('~/.pyenv')
4302
+ if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
4303
+ return d
4304
+
4305
+ return None
4306
+
4307
+ @async_cached_nullary
4308
+ async def exe(self) -> str:
4309
+ return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
4310
+
4311
+ async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
4312
+ if (root := await self.root()) is None:
4313
+ return []
4314
+ ret = []
4315
+ vp = os.path.join(root, 'versions')
4316
+ if os.path.isdir(vp):
4317
+ for dn in os.listdir(vp):
4318
+ ep = os.path.join(vp, dn, 'bin', 'python')
4319
+ if not os.path.isfile(ep):
4320
+ continue
4321
+ ret.append((dn, ep))
4322
+ return ret
4323
+
4324
+ async def installable_versions(self) -> ta.List[str]:
4325
+ if await self.root() is None:
4326
+ return []
4327
+ ret = []
4328
+ s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
4329
+ for l in s.splitlines():
4330
+ if not l.startswith(' '):
4331
+ continue
4332
+ l = l.strip()
4333
+ if not l:
4334
+ continue
4335
+ ret.append(l)
4336
+ return ret
4337
+
4338
+ async def update(self) -> bool:
4339
+ if (root := await self.root()) is None:
4340
+ return False
4341
+ if not os.path.isdir(os.path.join(root, '.git')):
4342
+ return False
4343
+ await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
4344
+ return True
4345
+
4346
+
4266
4347
  ########################################
4267
4348
  # ../resolvers.py
4268
4349
 
@@ -4397,12 +4478,14 @@ class SystemInterpProvider(InterpProvider):
4397
4478
  options: Options = Options(),
4398
4479
  *,
4399
4480
  inspector: ta.Optional[InterpInspector] = None,
4481
+ log: ta.Optional[logging.Logger] = None,
4400
4482
  ) -> None:
4401
4483
  super().__init__()
4402
4484
 
4403
4485
  self._options = options
4404
4486
 
4405
4487
  self._inspector = inspector
4488
+ self._log = log
4406
4489
 
4407
4490
  #
4408
4491
 
@@ -4476,7 +4559,8 @@ class SystemInterpProvider(InterpProvider):
4476
4559
  lst = []
4477
4560
  for e in self.exes():
4478
4561
  if (ev := await self.get_exe_version(e)) is None:
4479
- log.debug('Invalid system version: %s', e)
4562
+ if self._log is not None:
4563
+ self._log.debug('Invalid system version: %s', e)
4480
4564
  continue
4481
4565
  lst.append((e, ev))
4482
4566
  return lst
@@ -4498,88 +4582,7 @@ class SystemInterpProvider(InterpProvider):
4498
4582
 
4499
4583
 
4500
4584
  ########################################
4501
- # ../pyenv/pyenv.py
4502
- """
4503
- TODO:
4504
- - custom tags
4505
- - 'aliases'
4506
- - https://github.com/pyenv/pyenv/pull/2966
4507
- - https://github.com/pyenv/pyenv/issues/218 (lol)
4508
- - probably need custom (temp?) definition file
4509
- - *or* python-build directly just into the versions dir?
4510
- - optionally install / upgrade pyenv itself
4511
- - new vers dont need these custom mac opts, only run on old vers
4512
- """
4513
-
4514
-
4515
- ##
4516
-
4517
-
4518
- class Pyenv:
4519
- def __init__(
4520
- self,
4521
- *,
4522
- root: ta.Optional[str] = None,
4523
- ) -> None:
4524
- if root is not None and not (isinstance(root, str) and root):
4525
- raise ValueError(f'pyenv_root: {root!r}')
4526
-
4527
- super().__init__()
4528
-
4529
- self._root_kw = root
4530
-
4531
- @async_cached_nullary
4532
- async def root(self) -> ta.Optional[str]:
4533
- if self._root_kw is not None:
4534
- return self._root_kw
4535
-
4536
- if shutil.which('pyenv'):
4537
- return await asyncio_subprocesses.check_output_str('pyenv', 'root')
4538
-
4539
- d = os.path.expanduser('~/.pyenv')
4540
- if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
4541
- return d
4542
-
4543
- return None
4544
-
4545
- @async_cached_nullary
4546
- async def exe(self) -> str:
4547
- return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
4548
-
4549
- async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
4550
- if (root := await self.root()) is None:
4551
- return []
4552
- ret = []
4553
- vp = os.path.join(root, 'versions')
4554
- if os.path.isdir(vp):
4555
- for dn in os.listdir(vp):
4556
- ep = os.path.join(vp, dn, 'bin', 'python')
4557
- if not os.path.isfile(ep):
4558
- continue
4559
- ret.append((dn, ep))
4560
- return ret
4561
-
4562
- async def installable_versions(self) -> ta.List[str]:
4563
- if await self.root() is None:
4564
- return []
4565
- ret = []
4566
- s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
4567
- for l in s.splitlines():
4568
- if not l.startswith(' '):
4569
- continue
4570
- l = l.strip()
4571
- if not l:
4572
- continue
4573
- ret.append(l)
4574
- return ret
4575
-
4576
- async def update(self) -> bool:
4577
- if (root := await self.root()) is None:
4578
- return False
4579
- if not os.path.isdir(os.path.join(root, '.git')):
4580
- return False
4581
- await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
4582
- return True
4585
+ # ../pyenv/install.py
4583
4586
 
4584
4587
 
4585
4588
  ##
@@ -4817,7 +4820,27 @@ class PyenvVersionInstaller:
4817
4820
  return exe
4818
4821
 
4819
4822
 
4820
- ##
4823
+ ########################################
4824
+ # ../providers/inject.py
4825
+
4826
+
4827
+ def bind_interp_providers() -> InjectorBindings:
4828
+ lst: ta.List[InjectorBindingOrBindings] = [
4829
+ inj.bind_array(InterpProvider),
4830
+ inj.bind_array_type(InterpProvider, InterpProviders),
4831
+
4832
+ inj.bind(RunningInterpProvider, singleton=True),
4833
+ inj.bind(InterpProvider, to_key=RunningInterpProvider, array=True),
4834
+
4835
+ inj.bind(SystemInterpProvider, singleton=True),
4836
+ inj.bind(InterpProvider, to_key=SystemInterpProvider, array=True),
4837
+ ]
4838
+
4839
+ return inj.as_bindings(*lst)
4840
+
4841
+
4842
+ ########################################
4843
+ # ../pyenv/provider.py
4821
4844
 
4822
4845
 
4823
4846
  class PyenvInterpProvider(InterpProvider):
@@ -4833,6 +4856,7 @@ class PyenvInterpProvider(InterpProvider):
4833
4856
  *,
4834
4857
  pyenv: Pyenv,
4835
4858
  inspector: InterpInspector,
4859
+ log: ta.Optional[logging.Logger] = None,
4836
4860
  ) -> None:
4837
4861
  super().__init__()
4838
4862
 
@@ -4840,6 +4864,7 @@ class PyenvInterpProvider(InterpProvider):
4840
4864
 
4841
4865
  self._pyenv = pyenv
4842
4866
  self._inspector = inspector
4867
+ self._log = log
4843
4868
 
4844
4869
  #
4845
4870
 
@@ -4884,7 +4909,8 @@ class PyenvInterpProvider(InterpProvider):
4884
4909
  ret: ta.List[PyenvInterpProvider.Installed] = []
4885
4910
  for vn, ep in await self._pyenv.version_exes():
4886
4911
  if (i := await self._make_installed(vn, ep)) is None:
4887
- log.debug('Invalid pyenv version: %s', vn)
4912
+ if self._log is not None:
4913
+ self._log.debug('Invalid pyenv version: %s', vn)
4888
4914
  continue
4889
4915
  ret.append(i)
4890
4916
  return ret
@@ -4944,25 +4970,6 @@ class PyenvInterpProvider(InterpProvider):
4944
4970
  return Interp(exe, version)
4945
4971
 
4946
4972
 
4947
- ########################################
4948
- # ../providers/inject.py
4949
-
4950
-
4951
- def bind_interp_providers() -> InjectorBindings:
4952
- lst: ta.List[InjectorBindingOrBindings] = [
4953
- inj.bind_array(InterpProvider),
4954
- inj.bind_array_type(InterpProvider, InterpProviders),
4955
-
4956
- inj.bind(RunningInterpProvider, singleton=True),
4957
- inj.bind(InterpProvider, to_key=RunningInterpProvider, array=True),
4958
-
4959
- inj.bind(SystemInterpProvider, singleton=True),
4960
- inj.bind(InterpProvider, to_key=SystemInterpProvider, array=True),
4961
- ]
4962
-
4963
- return inj.as_bindings(*lst)
4964
-
4965
-
4966
4973
  ########################################
4967
4974
  # ../pyenv/inject.py
4968
4975