omdev 0.0.0.dev181__py3-none-any.whl → 0.0.0.dev183__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -5203,6 +5203,17 @@ def register_type_obj_marshaler(ty: type, om: ObjMarshaler) -> None:
5203
5203
  _REGISTERED_OBJ_MARSHALERS_BY_TYPE[ty] = om
5204
5204
 
5205
5205
 
5206
+ def register_single_field_type_obj_marshaler(fld, ty=None):
5207
+ def inner(ty): # noqa
5208
+ register_type_obj_marshaler(ty, SingleFieldObjMarshaler(ty, fld))
5209
+ return ty
5210
+
5211
+ if ty is not None:
5212
+ return inner(ty)
5213
+ else:
5214
+ return inner
5215
+
5216
+
5206
5217
  ##
5207
5218
 
5208
5219
 
@@ -6462,6 +6473,88 @@ class InterpInspector:
6462
6473
  return ret
6463
6474
 
6464
6475
 
6476
+ ########################################
6477
+ # ../../interp/pyenv/pyenv.py
6478
+ """
6479
+ TODO:
6480
+ - custom tags
6481
+ - 'aliases'
6482
+ - https://github.com/pyenv/pyenv/pull/2966
6483
+ - https://github.com/pyenv/pyenv/issues/218 (lol)
6484
+ - probably need custom (temp?) definition file
6485
+ - *or* python-build directly just into the versions dir?
6486
+ - optionally install / upgrade pyenv itself
6487
+ - new vers dont need these custom mac opts, only run on old vers
6488
+ """
6489
+
6490
+
6491
+ class Pyenv:
6492
+ def __init__(
6493
+ self,
6494
+ *,
6495
+ root: ta.Optional[str] = None,
6496
+ ) -> None:
6497
+ if root is not None and not (isinstance(root, str) and root):
6498
+ raise ValueError(f'pyenv_root: {root!r}')
6499
+
6500
+ super().__init__()
6501
+
6502
+ self._root_kw = root
6503
+
6504
+ @async_cached_nullary
6505
+ async def root(self) -> ta.Optional[str]:
6506
+ if self._root_kw is not None:
6507
+ return self._root_kw
6508
+
6509
+ if shutil.which('pyenv'):
6510
+ return await asyncio_subprocesses.check_output_str('pyenv', 'root')
6511
+
6512
+ d = os.path.expanduser('~/.pyenv')
6513
+ if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
6514
+ return d
6515
+
6516
+ return None
6517
+
6518
+ @async_cached_nullary
6519
+ async def exe(self) -> str:
6520
+ return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
6521
+
6522
+ async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
6523
+ if (root := await self.root()) is None:
6524
+ return []
6525
+ ret = []
6526
+ vp = os.path.join(root, 'versions')
6527
+ if os.path.isdir(vp):
6528
+ for dn in os.listdir(vp):
6529
+ ep = os.path.join(vp, dn, 'bin', 'python')
6530
+ if not os.path.isfile(ep):
6531
+ continue
6532
+ ret.append((dn, ep))
6533
+ return ret
6534
+
6535
+ async def installable_versions(self) -> ta.List[str]:
6536
+ if await self.root() is None:
6537
+ return []
6538
+ ret = []
6539
+ s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
6540
+ for l in s.splitlines():
6541
+ if not l.startswith(' '):
6542
+ continue
6543
+ l = l.strip()
6544
+ if not l:
6545
+ continue
6546
+ ret.append(l)
6547
+ return ret
6548
+
6549
+ async def update(self) -> bool:
6550
+ if (root := await self.root()) is None:
6551
+ return False
6552
+ if not os.path.isdir(os.path.join(root, '.git')):
6553
+ return False
6554
+ await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
6555
+ return True
6556
+
6557
+
6465
6558
  ########################################
6466
6559
  # ../../interp/resolvers.py
6467
6560
 
@@ -6820,88 +6913,7 @@ class SystemInterpProvider(InterpProvider):
6820
6913
 
6821
6914
 
6822
6915
  ########################################
6823
- # ../../interp/pyenv/pyenv.py
6824
- """
6825
- TODO:
6826
- - custom tags
6827
- - 'aliases'
6828
- - https://github.com/pyenv/pyenv/pull/2966
6829
- - https://github.com/pyenv/pyenv/issues/218 (lol)
6830
- - probably need custom (temp?) definition file
6831
- - *or* python-build directly just into the versions dir?
6832
- - optionally install / upgrade pyenv itself
6833
- - new vers dont need these custom mac opts, only run on old vers
6834
- """
6835
-
6836
-
6837
- ##
6838
-
6839
-
6840
- class Pyenv:
6841
- def __init__(
6842
- self,
6843
- *,
6844
- root: ta.Optional[str] = None,
6845
- ) -> None:
6846
- if root is not None and not (isinstance(root, str) and root):
6847
- raise ValueError(f'pyenv_root: {root!r}')
6848
-
6849
- super().__init__()
6850
-
6851
- self._root_kw = root
6852
-
6853
- @async_cached_nullary
6854
- async def root(self) -> ta.Optional[str]:
6855
- if self._root_kw is not None:
6856
- return self._root_kw
6857
-
6858
- if shutil.which('pyenv'):
6859
- return await asyncio_subprocesses.check_output_str('pyenv', 'root')
6860
-
6861
- d = os.path.expanduser('~/.pyenv')
6862
- if os.path.isdir(d) and os.path.isfile(os.path.join(d, 'bin', 'pyenv')):
6863
- return d
6864
-
6865
- return None
6866
-
6867
- @async_cached_nullary
6868
- async def exe(self) -> str:
6869
- return os.path.join(check.not_none(await self.root()), 'bin', 'pyenv')
6870
-
6871
- async def version_exes(self) -> ta.List[ta.Tuple[str, str]]:
6872
- if (root := await self.root()) is None:
6873
- return []
6874
- ret = []
6875
- vp = os.path.join(root, 'versions')
6876
- if os.path.isdir(vp):
6877
- for dn in os.listdir(vp):
6878
- ep = os.path.join(vp, dn, 'bin', 'python')
6879
- if not os.path.isfile(ep):
6880
- continue
6881
- ret.append((dn, ep))
6882
- return ret
6883
-
6884
- async def installable_versions(self) -> ta.List[str]:
6885
- if await self.root() is None:
6886
- return []
6887
- ret = []
6888
- s = await asyncio_subprocesses.check_output_str(await self.exe(), 'install', '--list')
6889
- for l in s.splitlines():
6890
- if not l.startswith(' '):
6891
- continue
6892
- l = l.strip()
6893
- if not l:
6894
- continue
6895
- ret.append(l)
6896
- return ret
6897
-
6898
- async def update(self) -> bool:
6899
- if (root := await self.root()) is None:
6900
- return False
6901
- if not os.path.isdir(os.path.join(root, '.git')):
6902
- return False
6903
- await asyncio_subprocesses.check_call('git', 'pull', cwd=root)
6904
- return True
6916
+ # ../../interp/pyenv/install.py
6905
6917
 
6906
6918
 
6907
6919
  ##
@@ -7139,136 +7151,6 @@ class PyenvVersionInstaller:
7139
7151
  return exe
7140
7152
 
7141
7153
 
7142
- ##
7143
-
7144
-
7145
- class PyenvInterpProvider(InterpProvider):
7146
- @dc.dataclass(frozen=True)
7147
- class Options:
7148
- inspect: bool = False
7149
-
7150
- try_update: bool = False
7151
-
7152
- def __init__(
7153
- self,
7154
- options: Options = Options(),
7155
- *,
7156
- pyenv: Pyenv,
7157
- inspector: InterpInspector,
7158
- log: ta.Optional[logging.Logger] = None,
7159
- ) -> None:
7160
- super().__init__()
7161
-
7162
- self._options = options
7163
-
7164
- self._pyenv = pyenv
7165
- self._inspector = inspector
7166
- self._log = log
7167
-
7168
- #
7169
-
7170
- @staticmethod
7171
- def guess_version(s: str) -> ta.Optional[InterpVersion]:
7172
- def strip_sfx(s: str, sfx: str) -> ta.Tuple[str, bool]:
7173
- if s.endswith(sfx):
7174
- return s[:-len(sfx)], True
7175
- return s, False
7176
- ok = {}
7177
- s, ok['debug'] = strip_sfx(s, '-debug')
7178
- s, ok['threaded'] = strip_sfx(s, 't')
7179
- try:
7180
- v = Version(s)
7181
- except InvalidVersion:
7182
- return None
7183
- return InterpVersion(v, InterpOpts(**ok))
7184
-
7185
- class Installed(ta.NamedTuple):
7186
- name: str
7187
- exe: str
7188
- version: InterpVersion
7189
-
7190
- async def _make_installed(self, vn: str, ep: str) -> ta.Optional[Installed]:
7191
- iv: ta.Optional[InterpVersion]
7192
- if self._options.inspect:
7193
- try:
7194
- iv = check.not_none(await self._inspector.inspect(ep)).iv
7195
- except Exception as e: # noqa
7196
- return None
7197
- else:
7198
- iv = self.guess_version(vn)
7199
- if iv is None:
7200
- return None
7201
- return PyenvInterpProvider.Installed(
7202
- name=vn,
7203
- exe=ep,
7204
- version=iv,
7205
- )
7206
-
7207
- async def installed(self) -> ta.Sequence[Installed]:
7208
- ret: ta.List[PyenvInterpProvider.Installed] = []
7209
- for vn, ep in await self._pyenv.version_exes():
7210
- if (i := await self._make_installed(vn, ep)) is None:
7211
- if self._log is not None:
7212
- self._log.debug('Invalid pyenv version: %s', vn)
7213
- continue
7214
- ret.append(i)
7215
- return ret
7216
-
7217
- #
7218
-
7219
- async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7220
- return [i.version for i in await self.installed()]
7221
-
7222
- async def get_installed_version(self, version: InterpVersion) -> Interp:
7223
- for i in await self.installed():
7224
- if i.version == version:
7225
- return Interp(
7226
- exe=i.exe,
7227
- version=i.version,
7228
- )
7229
- raise KeyError(version)
7230
-
7231
- #
7232
-
7233
- async def _get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7234
- lst = []
7235
-
7236
- for vs in await self._pyenv.installable_versions():
7237
- if (iv := self.guess_version(vs)) is None:
7238
- continue
7239
- if iv.opts.debug:
7240
- raise Exception('Pyenv installable versions not expected to have debug suffix')
7241
- for d in [False, True]:
7242
- lst.append(dc.replace(iv, opts=dc.replace(iv.opts, debug=d)))
7243
-
7244
- return lst
7245
-
7246
- async def get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7247
- lst = await self._get_installable_versions(spec)
7248
-
7249
- if self._options.try_update and not any(v in spec for v in lst):
7250
- if self._pyenv.update():
7251
- lst = await self._get_installable_versions(spec)
7252
-
7253
- return lst
7254
-
7255
- async def install_version(self, version: InterpVersion) -> Interp:
7256
- inst_version = str(version.version)
7257
- inst_opts = version.opts
7258
- if inst_opts.threaded:
7259
- inst_version += 't'
7260
- inst_opts = dc.replace(inst_opts, threaded=False)
7261
-
7262
- installer = PyenvVersionInstaller(
7263
- inst_version,
7264
- interp_opts=inst_opts,
7265
- pyenv=self._pyenv,
7266
- )
7267
-
7268
- exe = await installer.install()
7269
- return Interp(exe, version)
7270
-
7271
-
7272
7154
  ########################################
7273
7155
  # ../pkg.py
7274
7156
  """
@@ -7846,6 +7728,137 @@ def bind_interp_providers() -> InjectorBindings:
7846
7728
  return inj.as_bindings(*lst)
7847
7729
 
7848
7730
 
7731
+ ########################################
7732
+ # ../../interp/pyenv/provider.py
7733
+
7734
+
7735
+ class PyenvInterpProvider(InterpProvider):
7736
+ @dc.dataclass(frozen=True)
7737
+ class Options:
7738
+ inspect: bool = False
7739
+
7740
+ try_update: bool = False
7741
+
7742
+ def __init__(
7743
+ self,
7744
+ options: Options = Options(),
7745
+ *,
7746
+ pyenv: Pyenv,
7747
+ inspector: InterpInspector,
7748
+ log: ta.Optional[logging.Logger] = None,
7749
+ ) -> None:
7750
+ super().__init__()
7751
+
7752
+ self._options = options
7753
+
7754
+ self._pyenv = pyenv
7755
+ self._inspector = inspector
7756
+ self._log = log
7757
+
7758
+ #
7759
+
7760
+ @staticmethod
7761
+ def guess_version(s: str) -> ta.Optional[InterpVersion]:
7762
+ def strip_sfx(s: str, sfx: str) -> ta.Tuple[str, bool]:
7763
+ if s.endswith(sfx):
7764
+ return s[:-len(sfx)], True
7765
+ return s, False
7766
+ ok = {}
7767
+ s, ok['debug'] = strip_sfx(s, '-debug')
7768
+ s, ok['threaded'] = strip_sfx(s, 't')
7769
+ try:
7770
+ v = Version(s)
7771
+ except InvalidVersion:
7772
+ return None
7773
+ return InterpVersion(v, InterpOpts(**ok))
7774
+
7775
+ class Installed(ta.NamedTuple):
7776
+ name: str
7777
+ exe: str
7778
+ version: InterpVersion
7779
+
7780
+ async def _make_installed(self, vn: str, ep: str) -> ta.Optional[Installed]:
7781
+ iv: ta.Optional[InterpVersion]
7782
+ if self._options.inspect:
7783
+ try:
7784
+ iv = check.not_none(await self._inspector.inspect(ep)).iv
7785
+ except Exception as e: # noqa
7786
+ return None
7787
+ else:
7788
+ iv = self.guess_version(vn)
7789
+ if iv is None:
7790
+ return None
7791
+ return PyenvInterpProvider.Installed(
7792
+ name=vn,
7793
+ exe=ep,
7794
+ version=iv,
7795
+ )
7796
+
7797
+ async def installed(self) -> ta.Sequence[Installed]:
7798
+ ret: ta.List[PyenvInterpProvider.Installed] = []
7799
+ for vn, ep in await self._pyenv.version_exes():
7800
+ if (i := await self._make_installed(vn, ep)) is None:
7801
+ if self._log is not None:
7802
+ self._log.debug('Invalid pyenv version: %s', vn)
7803
+ continue
7804
+ ret.append(i)
7805
+ return ret
7806
+
7807
+ #
7808
+
7809
+ async def get_installed_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7810
+ return [i.version for i in await self.installed()]
7811
+
7812
+ async def get_installed_version(self, version: InterpVersion) -> Interp:
7813
+ for i in await self.installed():
7814
+ if i.version == version:
7815
+ return Interp(
7816
+ exe=i.exe,
7817
+ version=i.version,
7818
+ )
7819
+ raise KeyError(version)
7820
+
7821
+ #
7822
+
7823
+ async def _get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7824
+ lst = []
7825
+
7826
+ for vs in await self._pyenv.installable_versions():
7827
+ if (iv := self.guess_version(vs)) is None:
7828
+ continue
7829
+ if iv.opts.debug:
7830
+ raise Exception('Pyenv installable versions not expected to have debug suffix')
7831
+ for d in [False, True]:
7832
+ lst.append(dc.replace(iv, opts=dc.replace(iv.opts, debug=d)))
7833
+
7834
+ return lst
7835
+
7836
+ async def get_installable_versions(self, spec: InterpSpecifier) -> ta.Sequence[InterpVersion]:
7837
+ lst = await self._get_installable_versions(spec)
7838
+
7839
+ if self._options.try_update and not any(v in spec for v in lst):
7840
+ if self._pyenv.update():
7841
+ lst = await self._get_installable_versions(spec)
7842
+
7843
+ return lst
7844
+
7845
+ async def install_version(self, version: InterpVersion) -> Interp:
7846
+ inst_version = str(version.version)
7847
+ inst_opts = version.opts
7848
+ if inst_opts.threaded:
7849
+ inst_version += 't'
7850
+ inst_opts = dc.replace(inst_opts, threaded=False)
7851
+
7852
+ installer = PyenvVersionInstaller(
7853
+ inst_version,
7854
+ interp_opts=inst_opts,
7855
+ pyenv=self._pyenv,
7856
+ )
7857
+
7858
+ exe = await installer.install()
7859
+ return Interp(exe, version)
7860
+
7861
+
7849
7862
  ########################################
7850
7863
  # ../../interp/pyenv/inject.py
7851
7864
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev181
3
+ Version: 0.0.0.dev183
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,7 +12,7 @@ Classifier: Operating System :: OS Independent
12
12
  Classifier: Operating System :: POSIX
13
13
  Requires-Python: >=3.12
14
14
  License-File: LICENSE
15
- Requires-Dist: omlish==0.0.0.dev181
15
+ Requires-Dist: omlish==0.0.0.dev183
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -84,7 +84,7 @@ omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
84
84
  omdev/interp/__main__.py,sha256=GMCqeGYltgt5dlJzHxY9gqisa8cRkrPfmZYuZnjg4WI,162
85
85
  omdev/interp/cli.py,sha256=_oaG5fN-UE2sQUNeCi4b9m5UF_lPEJ2S9nO_no1cvXI,2394
86
86
  omdev/interp/default.py,sha256=FTFQVvA8Lipe8k5eFbf-mLIbrcmfuEXka4ifPyQP8CA,285
87
- omdev/interp/inject.py,sha256=BE3VjFxU0gJ7KwSdKaNIlgXD7EAr-nidlJqSLwhGeNk,1479
87
+ omdev/interp/inject.py,sha256=fJyYvGqYVmXweKDFN-B_y8pemIYhWS9Y9qM3IApBz0M,1482
88
88
  omdev/interp/inspect.py,sha256=UnRA1w-tm5xrFR0ovlLHo_smDqmzoF7TuZBQbhYF_CA,2966
89
89
  omdev/interp/resolvers.py,sha256=rIWcMh7CL3it5z-pI_69PtyA9JGFzdx3CnPhgo4ecZU,2579
90
90
  omdev/interp/types.py,sha256=Pr0wrVpNasoCw-ThEvKC5LG30Civ7YJ4EONwrwBLpy0,2516
@@ -96,8 +96,10 @@ omdev/interp/providers/running.py,sha256=9MCJAcHotI0EmNIxPwt7b3W715Jp2Gfw1qtMhCE
96
96
  omdev/interp/providers/standalone.py,sha256=jJnncea4PIuaW-KwD2YiWDn8zTmwmsJNUKpF-qC2bwo,7725
97
97
  omdev/interp/providers/system.py,sha256=KQ4Y2o8d5nrmsCtsQO_vCbJJCrhVFVjaS0k2lkc3kVw,3977
98
98
  omdev/interp/pyenv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
- omdev/interp/pyenv/inject.py,sha256=9g0imuqp6tku5YgUn2DM4FgbjjqCZSPO6JzibeL6fRs,602
100
- omdev/interp/pyenv/pyenv.py,sha256=Y5zw42nmdak975EbWw7YFLu7j-S4G2s9UVj_pJQSykU,14451
99
+ omdev/interp/pyenv/inject.py,sha256=JZCSvkLYj5x_2LWScgYVOpmPrwrYQ8YVv7OeHbcH53s,605
100
+ omdev/interp/pyenv/install.py,sha256=LX5jDzQQR1X0C9OKi4masKWoMU3ms8XCfQPXS2kTZKI,7818
101
+ omdev/interp/pyenv/provider.py,sha256=RvPWnT5Fpj85gYxfw9o8E4kNtgvM0AcXk8_7FUk7rTs,4445
102
+ omdev/interp/pyenv/pyenv.py,sha256=1Gt77di-lxeje9SnNYCWhYRo7CHdhTWZD0whvPanNP8,2643
101
103
  omdev/interp/uv/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
102
104
  omdev/interp/uv/inject.py,sha256=3nHYu8qQMbV5iXdp-ItzNtfYE0zkIxrzmt7QdV7WiXU,314
103
105
  omdev/interp/uv/uv.py,sha256=oP4V6WJ0aYLIzFwkIvKMPLD_5HxppTuhd8fvtz6UoXs,671
@@ -148,8 +150,8 @@ omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,
148
150
  omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
149
151
  omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
150
152
  omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
151
- omdev/scripts/interp.py,sha256=Kkdtfze1jHzhmF5_4xLbfEYP0ZtlObgN1UPE6qHBbOE,140779
152
- omdev/scripts/pyproject.py,sha256=Wt5I2_5WoJ7y2jyZSKKB4qXS_XVEJ2lfSbxEPnoMQvo,242107
153
+ omdev/scripts/interp.py,sha256=mkHsByunXDVHLYOZgc17UDXtHPJl8dFRbJmwUptmuOg,140900
154
+ omdev/scripts/pyproject.py,sha256=ox4UoF2Uafvv_T6qwxe4tdifmiEp4g1pHKMAcnLDokE,242509
153
155
  omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
154
156
  omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
155
157
  omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
@@ -178,9 +180,9 @@ omdev/tools/json/rendering.py,sha256=jNShMfCpFR9-Kcn6cUFuOChXHjg71diuTC4x7Ofmz-o
178
180
  omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
179
181
  omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
180
182
  omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
181
- omdev-0.0.0.dev181.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
182
- omdev-0.0.0.dev181.dist-info/METADATA,sha256=iifiP3giFinE3LOI0F5hKPbU65E2ZAboHUvOhsTBH9M,1760
183
- omdev-0.0.0.dev181.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
184
- omdev-0.0.0.dev181.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
185
- omdev-0.0.0.dev181.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
186
- omdev-0.0.0.dev181.dist-info/RECORD,,
183
+ omdev-0.0.0.dev183.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
184
+ omdev-0.0.0.dev183.dist-info/METADATA,sha256=Y1IcrclCU5MupXvWa5IX2q67HQgP-rmC3eU_LrMA-kQ,1760
185
+ omdev-0.0.0.dev183.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
186
+ omdev-0.0.0.dev183.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
187
+ omdev-0.0.0.dev183.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
188
+ omdev-0.0.0.dev183.dist-info/RECORD,,