omdev 0.0.0.dev7__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. omdev/__about__.py +35 -0
  2. omdev/__init__.py +0 -0
  3. omdev/amalg/__init__.py +0 -0
  4. omdev/amalg/__main__.py +4 -0
  5. omdev/amalg/amalg.py +513 -0
  6. omdev/classdot.py +61 -0
  7. omdev/cmake.py +164 -0
  8. omdev/exts/__init__.py +0 -0
  9. omdev/exts/_distutils/__init__.py +10 -0
  10. omdev/exts/_distutils/build_ext.py +367 -0
  11. omdev/exts/_distutils/compilers/__init__.py +3 -0
  12. omdev/exts/_distutils/compilers/ccompiler.py +1032 -0
  13. omdev/exts/_distutils/compilers/options.py +80 -0
  14. omdev/exts/_distutils/compilers/unixccompiler.py +385 -0
  15. omdev/exts/_distutils/dir_util.py +76 -0
  16. omdev/exts/_distutils/errors.py +62 -0
  17. omdev/exts/_distutils/extension.py +107 -0
  18. omdev/exts/_distutils/file_util.py +216 -0
  19. omdev/exts/_distutils/modified.py +47 -0
  20. omdev/exts/_distutils/spawn.py +103 -0
  21. omdev/exts/_distutils/sysconfig.py +349 -0
  22. omdev/exts/_distutils/util.py +201 -0
  23. omdev/exts/_distutils/version.py +308 -0
  24. omdev/exts/build.py +43 -0
  25. omdev/exts/cmake.py +195 -0
  26. omdev/exts/importhook.py +88 -0
  27. omdev/exts/scan.py +74 -0
  28. omdev/interp/__init__.py +1 -0
  29. omdev/interp/__main__.py +4 -0
  30. omdev/interp/cli.py +63 -0
  31. omdev/interp/inspect.py +105 -0
  32. omdev/interp/providers.py +67 -0
  33. omdev/interp/pyenv.py +353 -0
  34. omdev/interp/resolvers.py +76 -0
  35. omdev/interp/standalone.py +187 -0
  36. omdev/interp/system.py +125 -0
  37. omdev/interp/types.py +92 -0
  38. omdev/mypy/__init__.py +0 -0
  39. omdev/mypy/debug.py +86 -0
  40. omdev/pyproject/__init__.py +1 -0
  41. omdev/pyproject/__main__.py +4 -0
  42. omdev/pyproject/cli.py +319 -0
  43. omdev/pyproject/configs.py +97 -0
  44. omdev/pyproject/ext.py +107 -0
  45. omdev/pyproject/pkg.py +196 -0
  46. omdev/scripts/__init__.py +0 -0
  47. omdev/scripts/execrss.py +19 -0
  48. omdev/scripts/findimports.py +62 -0
  49. omdev/scripts/findmagic.py +70 -0
  50. omdev/scripts/interp.py +2118 -0
  51. omdev/scripts/pyproject.py +3584 -0
  52. omdev/scripts/traceimport.py +502 -0
  53. omdev/tokens.py +42 -0
  54. omdev/toml/__init__.py +1 -0
  55. omdev/toml/parser.py +823 -0
  56. omdev/toml/writer.py +104 -0
  57. omdev/tools/__init__.py +0 -0
  58. omdev/tools/dockertools.py +81 -0
  59. omdev/tools/sqlrepl.py +193 -0
  60. omdev/versioning/__init__.py +1 -0
  61. omdev/versioning/specifiers.py +531 -0
  62. omdev/versioning/versions.py +416 -0
  63. omdev-0.0.0.dev7.dist-info/LICENSE +21 -0
  64. omdev-0.0.0.dev7.dist-info/METADATA +24 -0
  65. omdev-0.0.0.dev7.dist-info/RECORD +67 -0
  66. omdev-0.0.0.dev7.dist-info/WHEEL +5 -0
  67. omdev-0.0.0.dev7.dist-info/top_level.txt +1 -0
@@ -0,0 +1,416 @@
1
+ # Copyright (c) Donald Stufft and individual contributors.
2
+ # All rights reserved.
3
+ #
4
+ # Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
5
+ # following conditions are met:
6
+ #
7
+ # 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the
8
+ # following disclaimer.
9
+ #
10
+ # 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the
11
+ # following disclaimer in the documentation and/or other materials provided with the distribution.
12
+ #
13
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
14
+ # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
15
+ # DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
16
+ # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
17
+ # SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
18
+ # WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
19
+ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. This file is dual licensed under the terms of the
20
+ # Apache License, Version 2.0, and the BSD License. See the LICENSE file in the root of this repository for complete
21
+ # details.
22
+ # https://github.com/pypa/packaging/blob/2c885fe91a54559e2382902dce28428ad2887be5/src/packaging/version.py
23
+ # ruff: noqa: UP006 UP007
24
+ import itertools
25
+ import re
26
+ import typing as ta
27
+
28
+
29
+ VersionLocalType = ta.Tuple[ta.Union[int, str], ...]
30
+
31
+ VersionCmpPrePostDevType = ta.Union['InfinityVersionType', 'NegativeInfinityVersionType', ta.Tuple[str, int]]
32
+ _VersionCmpLocalType0 = ta.Tuple[ta.Union[ta.Tuple[int, str], ta.Tuple['NegativeInfinityVersionType', ta.Union[int, str]]], ...] # noqa
33
+ VersionCmpLocalType = ta.Union['NegativeInfinityVersionType', _VersionCmpLocalType0]
34
+ VersionCmpKey = ta.Tuple[int, ta.Tuple[int, ...], VersionCmpPrePostDevType, VersionCmpPrePostDevType, VersionCmpPrePostDevType, VersionCmpLocalType] # noqa
35
+ VersionComparisonMethod = ta.Callable[[VersionCmpKey, VersionCmpKey], bool]
36
+
37
+
38
+ ##
39
+
40
+
41
+ class InfinityVersionType:
42
+ def __repr__(self) -> str:
43
+ return 'Infinity'
44
+
45
+ def __hash__(self) -> int:
46
+ return hash(repr(self))
47
+
48
+ def __lt__(self, other: object) -> bool:
49
+ return False
50
+
51
+ def __le__(self, other: object) -> bool:
52
+ return False
53
+
54
+ def __eq__(self, other: object) -> bool:
55
+ return isinstance(other, self.__class__)
56
+
57
+ def __gt__(self, other: object) -> bool:
58
+ return True
59
+
60
+ def __ge__(self, other: object) -> bool:
61
+ return True
62
+
63
+ def __neg__(self: object) -> 'NegativeInfinityVersionType':
64
+ return NegativeInfinityVersion
65
+
66
+
67
+ InfinityVersion = InfinityVersionType()
68
+
69
+
70
+ class NegativeInfinityVersionType:
71
+ def __repr__(self) -> str:
72
+ return '-Infinity'
73
+
74
+ def __hash__(self) -> int:
75
+ return hash(repr(self))
76
+
77
+ def __lt__(self, other: object) -> bool:
78
+ return True
79
+
80
+ def __le__(self, other: object) -> bool:
81
+ return True
82
+
83
+ def __eq__(self, other: object) -> bool:
84
+ return isinstance(other, self.__class__)
85
+
86
+ def __gt__(self, other: object) -> bool:
87
+ return False
88
+
89
+ def __ge__(self, other: object) -> bool:
90
+ return False
91
+
92
+ def __neg__(self: object) -> InfinityVersionType:
93
+ return InfinityVersion
94
+
95
+
96
+ NegativeInfinityVersion = NegativeInfinityVersionType()
97
+
98
+
99
+ ##
100
+
101
+
102
+ class _Version(ta.NamedTuple):
103
+ epoch: int
104
+ release: ta.Tuple[int, ...]
105
+ dev: ta.Optional[ta.Tuple[str, int]]
106
+ pre: ta.Optional[ta.Tuple[str, int]]
107
+ post: ta.Optional[ta.Tuple[str, int]]
108
+ local: ta.Optional[VersionLocalType]
109
+
110
+
111
+ class InvalidVersion(ValueError): # noqa
112
+ pass
113
+
114
+
115
+ class _BaseVersion:
116
+ _key: ta.Tuple[ta.Any, ...]
117
+
118
+ def __hash__(self) -> int:
119
+ return hash(self._key)
120
+
121
+ def __lt__(self, other: '_BaseVersion') -> bool:
122
+ if not isinstance(other, _BaseVersion):
123
+ return NotImplemented # type: ignore
124
+ return self._key < other._key
125
+
126
+ def __le__(self, other: '_BaseVersion') -> bool:
127
+ if not isinstance(other, _BaseVersion):
128
+ return NotImplemented # type: ignore
129
+ return self._key <= other._key
130
+
131
+ def __eq__(self, other: object) -> bool:
132
+ if not isinstance(other, _BaseVersion):
133
+ return NotImplemented
134
+ return self._key == other._key
135
+
136
+ def __ge__(self, other: '_BaseVersion') -> bool:
137
+ if not isinstance(other, _BaseVersion):
138
+ return NotImplemented # type: ignore
139
+ return self._key >= other._key
140
+
141
+ def __gt__(self, other: '_BaseVersion') -> bool:
142
+ if not isinstance(other, _BaseVersion):
143
+ return NotImplemented # type: ignore
144
+ return self._key > other._key
145
+
146
+ def __ne__(self, other: object) -> bool:
147
+ if not isinstance(other, _BaseVersion):
148
+ return NotImplemented
149
+ return self._key != other._key
150
+
151
+
152
+ _VERSION_PATTERN = r"""
153
+ v?
154
+ (?:
155
+ (?:(?P<epoch>[0-9]+)!)?
156
+ (?P<release>[0-9]+(?:\.[0-9]+)*)
157
+ (?P<pre>
158
+ [-_\.]?
159
+ (?P<pre_l>alpha|a|beta|b|preview|pre|c|rc)
160
+ [-_\.]?
161
+ (?P<pre_n>[0-9]+)?
162
+ )?
163
+ (?P<post>
164
+ (?:-(?P<post_n1>[0-9]+))
165
+ |
166
+ (?:
167
+ [-_\.]?
168
+ (?P<post_l>post|rev|r)
169
+ [-_\.]?
170
+ (?P<post_n2>[0-9]+)?
171
+ )
172
+ )?
173
+ (?P<dev>
174
+ [-_\.]?
175
+ (?P<dev_l>dev)
176
+ [-_\.]?
177
+ (?P<dev_n>[0-9]+)?
178
+ )?
179
+ )
180
+ (?:\+(?P<local>[a-z0-9]+(?:[-_\.][a-z0-9]+)*))?
181
+ """
182
+
183
+ VERSION_PATTERN = _VERSION_PATTERN
184
+
185
+
186
+ class Version(_BaseVersion):
187
+ _regex = re.compile(r'^\s*' + VERSION_PATTERN + r'\s*$', re.VERBOSE | re.IGNORECASE)
188
+ _key: VersionCmpKey
189
+
190
+ def __init__(self, version: str) -> None:
191
+ match = self._regex.search(version)
192
+ if not match:
193
+ raise InvalidVersion(f"Invalid version: '{version}'")
194
+
195
+ self._version = _Version(
196
+ epoch=int(match.group('epoch')) if match.group('epoch') else 0,
197
+ release=tuple(int(i) for i in match.group('release').split('.')),
198
+ pre=_parse_letter_version(match.group('pre_l'), match.group('pre_n')),
199
+ post=_parse_letter_version(match.group('post_l'), match.group('post_n1') or match.group('post_n2')),
200
+ dev=_parse_letter_version(match.group('dev_l'), match.group('dev_n')),
201
+ local=_parse_local_version(match.group('local')),
202
+ )
203
+
204
+ self._key = _version_cmpkey(
205
+ self._version.epoch,
206
+ self._version.release,
207
+ self._version.pre,
208
+ self._version.post,
209
+ self._version.dev,
210
+ self._version.local,
211
+ )
212
+
213
+ def __repr__(self) -> str:
214
+ return f"<Version('{self}')>"
215
+
216
+ def __str__(self) -> str:
217
+ parts = []
218
+
219
+ if self.epoch != 0:
220
+ parts.append(f'{self.epoch}!')
221
+
222
+ parts.append('.'.join(str(x) for x in self.release))
223
+
224
+ if self.pre is not None:
225
+ parts.append(''.join(str(x) for x in self.pre))
226
+
227
+ if self.post is not None:
228
+ parts.append(f'.post{self.post}')
229
+
230
+ if self.dev is not None:
231
+ parts.append(f'.dev{self.dev}')
232
+
233
+ if self.local is not None:
234
+ parts.append(f'+{self.local}')
235
+
236
+ return ''.join(parts)
237
+
238
+ @property
239
+ def epoch(self) -> int:
240
+ return self._version.epoch
241
+
242
+ @property
243
+ def release(self) -> ta.Tuple[int, ...]:
244
+ return self._version.release
245
+
246
+ @property
247
+ def pre(self) -> ta.Optional[ta.Tuple[str, int]]:
248
+ return self._version.pre
249
+
250
+ @property
251
+ def post(self) -> ta.Optional[int]:
252
+ return self._version.post[1] if self._version.post else None
253
+
254
+ @property
255
+ def dev(self) -> ta.Optional[int]:
256
+ return self._version.dev[1] if self._version.dev else None
257
+
258
+ @property
259
+ def local(self) -> ta.Optional[str]:
260
+ if self._version.local:
261
+ return '.'.join(str(x) for x in self._version.local)
262
+ else:
263
+ return None
264
+
265
+ @property
266
+ def public(self) -> str:
267
+ return str(self).split('+', 1)[0]
268
+
269
+ @property
270
+ def base_version(self) -> str:
271
+ parts = []
272
+
273
+ if self.epoch != 0:
274
+ parts.append(f'{self.epoch}!')
275
+
276
+ parts.append('.'.join(str(x) for x in self.release))
277
+
278
+ return ''.join(parts)
279
+
280
+ @property
281
+ def is_prerelease(self) -> bool:
282
+ return self.dev is not None or self.pre is not None
283
+
284
+ @property
285
+ def is_postrelease(self) -> bool:
286
+ return self.post is not None
287
+
288
+ @property
289
+ def is_devrelease(self) -> bool:
290
+ return self.dev is not None
291
+
292
+ @property
293
+ def major(self) -> int:
294
+ return self.release[0] if len(self.release) >= 1 else 0
295
+
296
+ @property
297
+ def minor(self) -> int:
298
+ return self.release[1] if len(self.release) >= 2 else 0
299
+
300
+ @property
301
+ def micro(self) -> int:
302
+ return self.release[2] if len(self.release) >= 3 else 0
303
+
304
+
305
+ def _parse_letter_version(
306
+ letter: ta.Optional[str],
307
+ number: ta.Union[str, bytes, ta.SupportsInt, None],
308
+ ) -> ta.Optional[ta.Tuple[str, int]]:
309
+ if letter:
310
+ if number is None:
311
+ number = 0
312
+
313
+ letter = letter.lower()
314
+ if letter == 'alpha':
315
+ letter = 'a'
316
+ elif letter == 'beta':
317
+ letter = 'b'
318
+ elif letter in ['c', 'pre', 'preview']:
319
+ letter = 'rc'
320
+ elif letter in ['rev', 'r']:
321
+ letter = 'post'
322
+
323
+ return letter, int(number)
324
+ if not letter and number:
325
+ letter = 'post'
326
+ return letter, int(number)
327
+
328
+ return None
329
+
330
+
331
+ _local_version_separators = re.compile(r'[\._-]')
332
+
333
+
334
+ def _parse_local_version(local: ta.Optional[str]) -> ta.Optional[VersionLocalType]:
335
+ if local is not None:
336
+ return tuple(
337
+ part.lower() if not part.isdigit() else int(part)
338
+ for part in _local_version_separators.split(local)
339
+ )
340
+ return None
341
+
342
+
343
+ def _version_cmpkey(
344
+ epoch: int,
345
+ release: ta.Tuple[int, ...],
346
+ pre: ta.Optional[ta.Tuple[str, int]],
347
+ post: ta.Optional[ta.Tuple[str, int]],
348
+ dev: ta.Optional[ta.Tuple[str, int]],
349
+ local: ta.Optional[VersionLocalType],
350
+ ) -> VersionCmpKey:
351
+ _release = tuple(reversed(list(itertools.dropwhile(lambda x: x == 0, reversed(release)))))
352
+
353
+ if pre is None and post is None and dev is not None:
354
+ _pre: VersionCmpPrePostDevType = NegativeInfinityVersion
355
+ elif pre is None:
356
+ _pre = InfinityVersion
357
+ else:
358
+ _pre = pre
359
+
360
+ if post is None:
361
+ _post: VersionCmpPrePostDevType = NegativeInfinityVersion
362
+ else:
363
+ _post = post
364
+
365
+ if dev is None:
366
+ _dev: VersionCmpPrePostDevType = InfinityVersion
367
+ else:
368
+ _dev = dev
369
+
370
+ if local is None:
371
+ _local: VersionCmpLocalType = NegativeInfinityVersion
372
+ else:
373
+ _local = tuple((i, '') if isinstance(i, int) else (NegativeInfinityVersion, i) for i in local)
374
+
375
+ return epoch, _release, _pre, _post, _dev, _local
376
+
377
+
378
+ ##
379
+
380
+
381
+ def canonicalize_version(
382
+ version: ta.Union[Version, str],
383
+ *,
384
+ strip_trailing_zero: bool = True,
385
+ ) -> str:
386
+ if isinstance(version, str):
387
+ try:
388
+ parsed = Version(version)
389
+ except InvalidVersion:
390
+ return version
391
+ else:
392
+ parsed = version
393
+
394
+ parts = []
395
+
396
+ if parsed.epoch != 0:
397
+ parts.append(f'{parsed.epoch}!')
398
+
399
+ release_segment = '.'.join(str(x) for x in parsed.release)
400
+ if strip_trailing_zero:
401
+ release_segment = re.sub(r'(\.0)+$', '', release_segment)
402
+ parts.append(release_segment)
403
+
404
+ if parsed.pre is not None:
405
+ parts.append(''.join(str(x) for x in parsed.pre))
406
+
407
+ if parsed.post is not None:
408
+ parts.append(f'.post{parsed.post}')
409
+
410
+ if parsed.dev is not None:
411
+ parts.append(f'.dev{parsed.dev}')
412
+
413
+ if parsed.local is not None:
414
+ parts.append(f'+{parsed.local}')
415
+
416
+ return ''.join(parts)
@@ -0,0 +1,21 @@
1
+ Copyright 2023- wrmsr
2
+
3
+ Redistribution and use in source and binary forms, with or without modification, are permitted provided that the
4
+ following conditions are met:
5
+
6
+ 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following
7
+ disclaimer.
8
+
9
+ 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following
10
+ disclaimer in the documentation and/or other materials provided with the distribution.
11
+
12
+ 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products
13
+ derived from this software without specific prior written permission.
14
+
15
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
16
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
18
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
19
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
20
+ WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
21
+ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
@@ -0,0 +1,24 @@
1
+ Metadata-Version: 2.1
2
+ Name: omdev
3
+ Version: 0.0.0.dev7
4
+ Summary: omdev
5
+ Author: wrmsr
6
+ License: BSD-3-Clause
7
+ Project-URL: source, https://github.com/wrmsr/omlish
8
+ Classifier: License :: OSI Approved :: BSD License
9
+ Classifier: Development Status :: 2 - Pre-Alpha
10
+ Classifier: Intended Audience :: Developers
11
+ Classifier: Operating System :: OS Independent
12
+ Classifier: Operating System :: POSIX
13
+ Requires-Python: >=3.12
14
+ License-File: LICENSE
15
+ Requires-Dist: omlish ==0.0.0.dev7
16
+ Provides-Extra: c
17
+ Requires-Dist: pycparser >=2.22 ; extra == 'c'
18
+ Requires-Dist: cffi >=1.17 ; extra == 'c'
19
+ Requires-Dist: pcpp >=1.30 ; extra == 'c'
20
+ Provides-Extra: mypy
21
+ Requires-Dist: mypy >=1.11 ; extra == 'mypy'
22
+ Provides-Extra: tokens
23
+ Requires-Dist: tokenize-rt >=6 ; extra == 'tokens'
24
+
@@ -0,0 +1,67 @@
1
+ omdev/__about__.py,sha256=h6LYtf6v_AgYkF_cHZEwk8WyyDCmqWpj-hGWsJv0YOY,707
2
+ omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
3
+ omdev/classdot.py,sha256=urN5Pzd2ooAwnfkH0z-muQxdO90IMo-sX2WB-A37lVU,1533
4
+ omdev/cmake.py,sha256=Sk9SL_mFCuYG0FYjG_w53wGt6mOmXfen5pZWZsqjSq4,4592
5
+ omdev/tokens.py,sha256=GusxQ1Cd_eiScuR8XTTtc9QFhOgYviYGBZmFnn3Hj7s,756
6
+ omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
+ omdev/amalg/__main__.py,sha256=OE1udULO1g4McUbeg1CoHbSm4hbQ2kcE3ffEGxlnPh4,69
8
+ omdev/amalg/amalg.py,sha256=2k9oHxP5HDKopfWspABq2ZVjVsZpUZoejUnHeL7cE9M,11477
9
+ omdev/exts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
+ omdev/exts/build.py,sha256=zViF1wYx6z5ACyifgNjlCAVoPAMCKpTr_VoAvwtmvtY,1013
11
+ omdev/exts/cmake.py,sha256=5b0dryDvcKHPnFT-wNb8X3kpolGCnpSSGp1tuhdjuxE,5426
12
+ omdev/exts/importhook.py,sha256=HgEM6UD52BoQi4dhSSk8buoqV6YRUvzQOOWzX6W1aic,2306
13
+ omdev/exts/scan.py,sha256=rUfRFzKn8Tu_2B-en0bdkrjMlqb8qWK7SOCf7AF2-wk,1642
14
+ omdev/exts/_distutils/__init__.py,sha256=c1zImtnPh3uY8BUTV4RLKtGKqTPx3c_pBbhA6tPtNsE,297
15
+ omdev/exts/_distutils/build_ext.py,sha256=STHl9Rq2KeWJ3dQ8j8LwIQ-vFc4-3XsYWQ8Qc5_VByU,13833
16
+ omdev/exts/_distutils/dir_util.py,sha256=xxfAIPHbjlh-aW9OX6UGDrXiXfB5biG4xEC5RA6oszM,2882
17
+ omdev/exts/_distutils/errors.py,sha256=HWmsruDLOctJwjZ3yjIkef6O-NI2m0A74tLYZKbS-TY,2035
18
+ omdev/exts/_distutils/extension.py,sha256=CAxie5k3eCD-k-OaBPYYsyOFbgcWgx0oipA2D6_hrIs,5631
19
+ omdev/exts/_distutils/file_util.py,sha256=glpfHGEDZKMS_VAIgr3YlExtQfNP4agxOrn3WenjE7U,7804
20
+ omdev/exts/_distutils/modified.py,sha256=OI4guORuIv16fyFTS-B_eaPSELttGPVeZCYgjR357Ec,1723
21
+ omdev/exts/_distutils/spawn.py,sha256=ROud2VB_tyktPGq6ldsOyFTGIsvSvYAQf_ioWQh0XH0,3435
22
+ omdev/exts/_distutils/sysconfig.py,sha256=NYfkHHcQRkgVfVhNEexd2DdYhJmZ1BIaT3BhPd7hk0c,12630
23
+ omdev/exts/_distutils/util.py,sha256=k4t8w-8VWLVzFh5LvfSpygkssSfrU7LaMT6xIMQQkQw,6413
24
+ omdev/exts/_distutils/version.py,sha256=LEjpZjn2HGFEJElZrklb2NSALhr9wWi1uXfVf_5WLRY,12509
25
+ omdev/exts/_distutils/compilers/__init__.py,sha256=amL_zrFlba0lHIvpqDne9uhqhLemA7hBZFX-MHL7R3c,68
26
+ omdev/exts/_distutils/compilers/ccompiler.py,sha256=cTs88qrvj0hBVXHfemSDE_du_nEA4_qo3Qst5TpQkVI,43606
27
+ omdev/exts/_distutils/compilers/options.py,sha256=H7r5IcLvga5Fs3jjXWIT-6ap3JBduXRKgtpDmSGCZxs,3818
28
+ omdev/exts/_distutils/compilers/unixccompiler.py,sha256=o1h8QuyupLntv4F21_XjzAZmCiwwxJuTmOirvBSL-Qw,15419
29
+ omdev/interp/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
30
+ omdev/interp/__main__.py,sha256=gFhR9DikwDZk0LqgdR3qq_aXQHThUOPllDmHDOfnFAU,67
31
+ omdev/interp/cli.py,sha256=pobok11AGS7UrlCcORyARiS03878rpSVTaFxfv5aaUE,1618
32
+ omdev/interp/inspect.py,sha256=SI4jQmWfXCnlceFTxlVRfTlEYYCjO_X12wuG5e74yto,2849
33
+ omdev/interp/providers.py,sha256=9eooFFf1qYK3k_84TTvMxCRmajyQKH1DpLdL8L523ww,1780
34
+ omdev/interp/pyenv.py,sha256=zrb_ijok9shEzG__QIk03mswKPdSwefrnZoO8E3IwKo,10452
35
+ omdev/interp/resolvers.py,sha256=RgNgoe7Q34ivi3d9uXhfmtTfnRwaNDnJieJLJB8H3js,2239
36
+ omdev/interp/standalone.py,sha256=XcltiL7ypcfV89C82_3knQ3Kx7aW4wnnxf2056ZXC3A,7731
37
+ omdev/interp/system.py,sha256=UFHfMR0CHCEnNx5fhrze8esAwigpRrJUA33ftq6nA0I,3514
38
+ omdev/interp/types.py,sha256=lY0pDECxy4qtx2KI7Ve8r2quriiBi9px0Bull2zsYPw,2351
39
+ omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
40
+ omdev/mypy/debug.py,sha256=WcZw-3Z1njg_KFGqi3DB6RuqbBa3dLArJnjVCuY1Mn0,3003
41
+ omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
42
+ omdev/pyproject/__main__.py,sha256=gFhR9DikwDZk0LqgdR3qq_aXQHThUOPllDmHDOfnFAU,67
43
+ omdev/pyproject/cli.py,sha256=TLGMBFmSH_5zfuzlIxJSu1HMLCxZPaNfuECoh1X8d5I,8226
44
+ omdev/pyproject/configs.py,sha256=UV-4zbGDlQa3Anl1oRHfQP29-Osl5uqbKOAV3PVZbjc,2696
45
+ omdev/pyproject/ext.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
46
+ omdev/pyproject/pkg.py,sha256=3Oj76ciopsDGoFKBjd5cUIohcRrvuX0wZlEMKdUGqRw,5253
47
+ omdev/scripts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
48
+ omdev/scripts/execrss.py,sha256=wBpdhWuQj_4EnEmvK_aLQHxaE-J52G9F6g0210fTNe8,307
49
+ omdev/scripts/findimports.py,sha256=d8Xf2TcE7hHh_lXUx2V1APF4Jggu2uO2K0ex6bfmqyQ,2030
50
+ omdev/scripts/findmagic.py,sha256=W7W07YR3zsA0hNej6-BPgQj2hWX1UydrbWnNMRdMA88,1893
51
+ omdev/scripts/interp.py,sha256=Pg0XThciM4Kq5bjArL1nEfaB_lHnz1E-NgkCBz0wO9U,61379
52
+ omdev/scripts/pyproject.py,sha256=80OTAIA_R3R7FeF6B_KhEvt0419HybjAipo_52CADuo,107703
53
+ omdev/scripts/traceimport.py,sha256=JmUgLEQLY7r3QNQ14Agarqh5qtMyRNenCb_OF5EIikY,13392
54
+ omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
55
+ omdev/toml/parser.py,sha256=84bn09uhYHwQGyfww6Rw6y1RxPAE_HDltODOSakcqDM,29186
56
+ omdev/toml/writer.py,sha256=StGYPvqgN__A2IxTI4rYeHMx8dLAFt8uogHG8dJdShs,2781
57
+ omdev/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
58
+ omdev/tools/dockertools.py,sha256=3844AhUst6kYo2xKNn-2Npi-f6r4rocxEOx0tHjE0dk,2063
59
+ omdev/tools/sqlrepl.py,sha256=v9uVQ4nvquSXcQVYIFq34ikumSILvKqzD6lUKLcncCE,5646
60
+ omdev/versioning/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
61
+ omdev/versioning/specifiers.py,sha256=6Odf9e6farwlPRsD_YqwTfYKG-BXn_dIcKtqfkhfodI,17432
62
+ omdev/versioning/versions.py,sha256=ei2eopEsJq3zSMJmezK1nzZgikgCdxFtnF3f69nCRZQ,12246
63
+ omdev-0.0.0.dev7.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
64
+ omdev-0.0.0.dev7.dist-info/METADATA,sha256=BdqJQATR1mcJkLXsdmwvCbZnbQeE3_lkAAUanTYKFOs,757
65
+ omdev-0.0.0.dev7.dist-info/WHEEL,sha256=Mdi9PDNwEZptOjTlUcAth7XJDFtKrHYaQMPulZeBCiQ,91
66
+ omdev-0.0.0.dev7.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
67
+ omdev-0.0.0.dev7.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (73.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ omdev