omdev 0.0.0.dev30__tar.gz → 0.0.0.dev31__tar.gz

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.

Potentially problematic release.


This version of omdev might be problematic. Click here for more details.

Files changed (112) hide show
  1. {omdev-0.0.0.dev30/omdev.egg-info → omdev-0.0.0.dev31}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/pyenv.py +8 -1
  3. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/manifests.py +111 -17
  4. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/cli.py +1 -1
  5. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/scripts/interp.py +8 -1
  6. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/scripts/pyproject.py +9 -2
  7. omdev-0.0.0.dev31/omdev/secrets.py +12 -0
  8. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31/omdev.egg-info}/PKG-INFO +2 -2
  9. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev.egg-info/SOURCES.txt +1 -0
  10. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev.egg-info/requires.txt +1 -1
  11. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/pyproject.toml +2 -2
  12. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/LICENSE +0 -0
  13. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/MANIFEST.in +0 -0
  14. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/README.rst +0 -0
  15. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/.manifests.json +0 -0
  16. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/__about__.py +0 -0
  17. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/__init__.py +0 -0
  18. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/amalg/__init__.py +0 -0
  19. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/amalg/__main__.py +0 -0
  20. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/amalg/amalg.py +0 -0
  21. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/bracepy.py +0 -0
  22. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/__init__.py +0 -0
  23. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/__init__.py +0 -0
  24. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/cache.py +0 -0
  25. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/contexts.py +0 -0
  26. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/currents.py +0 -0
  27. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/fns.py +0 -0
  28. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/resolvers.py +0 -0
  29. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/storage.py +0 -0
  30. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/compute/types.py +0 -0
  31. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/__init__.py +0 -0
  32. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/actions.py +0 -0
  33. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/cache.py +0 -0
  34. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/consts.py +0 -0
  35. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/defaults.py +0 -0
  36. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/manifests.py +0 -0
  37. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cache/data/specs.py +0 -0
  38. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/__init__.py +0 -0
  39. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_boilerplate.cc +0 -0
  40. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/LICENSE +0 -0
  41. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/__init__.py +0 -0
  42. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/build_ext.py +0 -0
  43. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  44. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  45. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/compilers/options.py +0 -0
  46. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  47. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/dir_util.py +0 -0
  48. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/errors.py +0 -0
  49. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/extension.py +0 -0
  50. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/file_util.py +0 -0
  51. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/modified.py +0 -0
  52. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/spawn.py +0 -0
  53. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/sysconfig.py +0 -0
  54. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/util.py +0 -0
  55. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/_distutils/version.py +0 -0
  56. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/build.py +0 -0
  57. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/cmake.py +0 -0
  58. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/importhook.py +0 -0
  59. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/magic.py +0 -0
  60. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cexts/scan.py +0 -0
  61. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/classdot.py +0 -0
  62. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/cmake.py +0 -0
  63. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/findimports.py +0 -0
  64. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/findmagic.py +0 -0
  65. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/git.py +0 -0
  66. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/__init__.py +0 -0
  67. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/__main__.py +0 -0
  68. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/cli.py +0 -0
  69. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/inspect.py +0 -0
  70. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/providers.py +0 -0
  71. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/resolvers.py +0 -0
  72. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/standalone.py +0 -0
  73. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/system.py +0 -0
  74. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/interp/types.py +0 -0
  75. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/mypy/__init__.py +0 -0
  76. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/mypy/debug.py +0 -0
  77. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/__init__.py +0 -0
  78. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/__main__.py +0 -0
  79. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/base.py +0 -0
  80. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/git.py +0 -0
  81. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/lite.py +0 -0
  82. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/precheck.py +0 -0
  83. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/precheck/scripts.py +0 -0
  84. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/__init__.py +0 -0
  85. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/__main__.py +0 -0
  86. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/cexts.py +0 -0
  87. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/configs.py +0 -0
  88. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/pkg.py +0 -0
  89. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/pyproject/reqs.py +0 -0
  90. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/revisions.py +0 -0
  91. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/scripts/__init__.py +0 -0
  92. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/scripts/bumpversion.py +0 -0
  93. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/scripts/execrss.py +0 -0
  94. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tokens.py +0 -0
  95. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/toml/__init__.py +0 -0
  96. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/toml/parser.py +0 -0
  97. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/toml/writer.py +0 -0
  98. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/__init__.py +0 -0
  99. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/dockertools.py +0 -0
  100. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/gittools.py +0 -0
  101. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/importscan.py +0 -0
  102. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/importtrace.py +0 -0
  103. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/piptools.py +0 -0
  104. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/rst.py +0 -0
  105. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/tools/sqlrepl.py +0 -0
  106. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/versioning/__init__.py +0 -0
  107. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/versioning/specifiers.py +0 -0
  108. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/versioning/versions.py +0 -0
  109. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev/wheelfile.py +0 -0
  110. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev.egg-info/dependency_links.txt +0 -0
  111. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/omdev.egg-info/top_level.txt +0 -0
  112. {omdev-0.0.0.dev30 → omdev-0.0.0.dev31}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev30
3
+ Version: 0.0.0.dev31
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.dev30
15
+ Requires-Dist: omlish==0.0.0.dev31
16
16
  Provides-Extra: all
17
17
  Requires-Dist: pycparser~=2.22; extra == "all"
18
18
  Requires-Dist: cffi~=1.17; extra == "all"
@@ -3,7 +3,14 @@ TODO:
3
3
  - custom tags
4
4
  - optionally install / upgrade pyenv itself
5
5
  - new vers dont need these custom mac opts, only run on old vers
6
- """
6
+
7
+ TODO opts:
8
+ - --enable-loadable-sqlite-extensions LDFLAGS="-L/opt/homebrew/opt/sqlite/lib" CPPFLAGS="-I/opt/homebrew/opt/sqlite/include"
9
+ - --enable-shared
10
+ - --enable-optimizations
11
+ - --enable-profiling ?
12
+ - --enable-ipv6 ?
13
+ """ # noqa
7
14
  # ruff: noqa: UP006 UP007
8
15
  import abc
9
16
  import dataclasses as dc
@@ -1,20 +1,15 @@
1
1
  """
2
- !!! manifests! get-manifest, .manifest.json
3
- - dumb dicts, root keys are 'types'
4
- - get put in _manifest.py, root level dict or smth
5
- - IMPORT files w comment
6
- - comment must immediately precede a global val setter
7
- - val is grabbed from imported module dict by name
8
- - value is repr'd somehow (roundtrip checked) (naw, json lol)
9
- - dumped in _manifest.py
10
- - # @omlish-manifest \n _CACHE_MANIFEST = {'cache': {'name': 'llm', …
11
- - also can do prechecks!
2
+ TODO:
3
+ - split, cli.py / types.py
4
+ - opt to load only specified types
5
+ - prechecks
12
6
  """
13
7
  # ruff: noqa: UP006 UP007
14
8
  # @omlish-lite
15
9
  import argparse
16
10
  import collections
17
11
  import dataclasses as dc
12
+ import importlib
18
13
  import inspect
19
14
  import json
20
15
  import os.path
@@ -50,12 +45,50 @@ class Manifest(ManifestOrigin):
50
45
  value: ta.Any
51
46
 
52
47
 
48
+ def load_manifest_entry(
49
+ entry: ta.Mapping[str, ta.Any],
50
+ *,
51
+ raw_values: bool = False,
52
+ ) -> Manifest:
53
+ manifest = Manifest(**entry)
54
+
55
+ [(key, value_dct)] = manifest.value.items()
56
+ if not key.startswith('$'):
57
+ raise Exception(f'Bad key: {key}')
58
+
59
+ if not raw_values:
60
+ parts = key[1:].split('.')
61
+ pos = next(i for i, p in enumerate(parts) if p[0].isupper())
62
+ mod_name = '.'.join(parts[:pos])
63
+ mod = importlib.import_module(mod_name)
64
+
65
+ obj: ta.Any = mod
66
+ for ca in parts[pos:]:
67
+ obj = getattr(obj, ca)
68
+ cls = obj
69
+ if not isinstance(cls, type):
70
+ raise TypeError(cls)
71
+
72
+ if not dc.is_dataclass(cls):
73
+ raise TypeError(cls)
74
+ obj = cls(**value_dct) # noqa
75
+
76
+ manifest = dc.replace(manifest, value=obj)
77
+
78
+ return manifest
79
+
80
+
81
+ ##
82
+
83
+
53
84
  MANIFEST_MAGIC = '# @omlish-manifest'
54
85
 
55
86
  _MANIFEST_GLOBAL_PAT = re.compile(r'^(?P<name>[A-Za-z_][A-Za-z0-9_]*)\s*=.*')
56
87
 
57
88
 
58
89
  def _dump_module_manifests(spec: str, *attrs: str) -> None:
90
+ import collections.abc
91
+ import dataclasses as dc # noqa
59
92
  import importlib
60
93
  import json
61
94
 
@@ -65,13 +98,35 @@ def _dump_module_manifests(spec: str, *attrs: str) -> None:
65
98
  for attr in attrs:
66
99
  manifest = getattr(mod, attr)
67
100
 
68
- manifest_json = json.dumps(manifest)
69
- rt_manifest = json.loads(manifest_json)
101
+ if dc.is_dataclass(manifest):
102
+ cls = type(manifest)
103
+ manifest_json = json.dumps(dc.asdict(manifest)) # type: ignore
104
+ manifest_dct = json.loads(manifest_json)
105
+
106
+ rt_manifest = cls(**manifest_dct) # type: ignore
107
+ if rt_manifest != manifest:
108
+ raise Exception(f'Manifest failed to roundtrip: {manifest} -> {manifest_dct} != {rt_manifest}')
109
+
110
+ key = f'${cls.__module__}.{cls.__qualname__}'
111
+ out[attr] = {key: manifest_dct}
112
+
113
+ elif isinstance(manifest, collections.abc.Mapping):
114
+ [(key, manifest_dct)] = manifest.items()
115
+ if not key.startswith('$'): # noqa
116
+ raise Exception(f'Bad key: {key}')
117
+
118
+ if not isinstance(manifest_dct, collections.abc.Mapping):
119
+ raise Exception(f'Bad value: {manifest_dct}')
70
120
 
71
- if rt_manifest != manifest:
72
- raise Exception(f'Manifest failed to roundtrip: {manifest} != {rt_manifest}')
121
+ manifest_json = json.dumps(manifest_dct)
122
+ rt_manifest_dct = json.loads(manifest_json)
123
+ if manifest_dct != rt_manifest_dct:
124
+ raise Exception(f'Manifest failed to roundtrip: {manifest_dct} != {rt_manifest_dct}')
73
125
 
74
- out[attr] = rt_manifest
126
+ out[attr] = {key: manifest_dct}
127
+
128
+ else:
129
+ raise TypeError(f'Manifest must be dataclass or mapping: {manifest!r}')
75
130
 
76
131
  out_json = json.dumps(out, indent=None, separators=(',', ':'))
77
132
  print(out_json)
@@ -205,8 +260,30 @@ def build_package_manifests(
205
260
  ##
206
261
 
207
262
 
263
+ def check_package_manifests(
264
+ name: str,
265
+ base: str,
266
+ ) -> None:
267
+ pkg_dir = os.path.join(base, name)
268
+ if not os.path.isdir(pkg_dir) or not os.path.isfile(os.path.join(pkg_dir, '__init__.py')):
269
+ raise Exception(pkg_dir)
270
+
271
+ manifests_file = os.path.join(pkg_dir, '.manifests.json')
272
+ if not os.path.isfile(manifests_file):
273
+ raise Exception(f'No manifests file: {manifests_file}')
274
+
275
+ with open(manifests_file) as f:
276
+ manifests_json = json.load(f)
277
+
278
+ for entry in manifests_json:
279
+ load_manifest_entry(entry)
280
+
281
+
282
+ ##
283
+
284
+
208
285
  if __name__ == '__main__':
209
- def _gen_cmd(args) -> None:
286
+ def _get_base(args) -> str:
210
287
  if args.base is not None:
211
288
  base = args.base
212
289
  else:
@@ -214,6 +291,10 @@ if __name__ == '__main__':
214
291
  base = os.path.abspath(base)
215
292
  if not os.path.isdir(base):
216
293
  raise RuntimeError(base)
294
+ return base
295
+
296
+ def _gen_cmd(args) -> None:
297
+ base = _get_base(args)
217
298
 
218
299
  for pkg in args.package:
219
300
  ms = build_package_manifests(
@@ -224,6 +305,15 @@ if __name__ == '__main__':
224
305
  if not args.quiet:
225
306
  print(json_dumps_pretty([dc.asdict(m) for m in ms]))
226
307
 
308
+ def _check_cmd(args) -> None:
309
+ base = _get_base(args)
310
+
311
+ for pkg in args.package:
312
+ check_package_manifests(
313
+ pkg,
314
+ base,
315
+ )
316
+
227
317
  def _main(argv=None) -> None:
228
318
  configure_standard_logging('INFO')
229
319
 
@@ -235,9 +325,13 @@ if __name__ == '__main__':
235
325
  parser_gen.add_argument('-w', '--write', action='store_true')
236
326
  parser_gen.add_argument('-q', '--quiet', action='store_true')
237
327
  parser_gen.add_argument('package', nargs='*')
238
-
239
328
  parser_gen.set_defaults(func=_gen_cmd)
240
329
 
330
+ parser_check = subparsers.add_parser('check')
331
+ parser_check.add_argument('-b', '--base')
332
+ parser_check.add_argument('package', nargs='*')
333
+ parser_check.set_defaults(func=_check_cmd)
334
+
241
335
  args = parser.parse_args(argv)
242
336
  if not getattr(args, 'func', None):
243
337
  parser.print_help()
@@ -9,7 +9,7 @@ TODO:
9
9
  - {pkg_name: [src_dirs]}, default excludes, generate MANIFST.in, ...
10
10
  - env vars - PYTHONPATH
11
11
 
12
- lookit:
12
+ See:
13
13
  - https://pdm-project.org/en/latest/
14
14
  - https://rye.astral.sh/philosophy/
15
15
  - https://github.com/indygreg/python-build-standalone/blob/main/pythonbuild/cpython.py
@@ -1798,7 +1798,14 @@ TODO:
1798
1798
  - custom tags
1799
1799
  - optionally install / upgrade pyenv itself
1800
1800
  - new vers dont need these custom mac opts, only run on old vers
1801
- """
1801
+
1802
+ TODO opts:
1803
+ - --enable-loadable-sqlite-extensions LDFLAGS="-L/opt/homebrew/opt/sqlite/lib" CPPFLAGS="-I/opt/homebrew/opt/sqlite/include"
1804
+ - --enable-shared
1805
+ - --enable-optimizations
1806
+ - --enable-profiling ?
1807
+ - --enable-ipv6 ?
1808
+ """ # noqa
1802
1809
 
1803
1810
 
1804
1811
  ##
@@ -12,7 +12,7 @@ TODO:
12
12
  - {pkg_name: [src_dirs]}, default excludes, generate MANIFST.in, ...
13
13
  - env vars - PYTHONPATH
14
14
 
15
- lookit:
15
+ See:
16
16
  - https://pdm-project.org/en/latest/
17
17
  - https://rye.astral.sh/philosophy/
18
18
  - https://github.com/indygreg/python-build-standalone/blob/main/pythonbuild/cpython.py
@@ -4235,7 +4235,14 @@ TODO:
4235
4235
  - custom tags
4236
4236
  - optionally install / upgrade pyenv itself
4237
4237
  - new vers dont need these custom mac opts, only run on old vers
4238
- """
4238
+
4239
+ TODO opts:
4240
+ - --enable-loadable-sqlite-extensions LDFLAGS="-L/opt/homebrew/opt/sqlite/lib" CPPFLAGS="-I/opt/homebrew/opt/sqlite/include"
4241
+ - --enable-shared
4242
+ - --enable-optimizations
4243
+ - --enable-profiling ?
4244
+ - --enable-ipv6 ?
4245
+ """ # noqa
4239
4246
 
4240
4247
 
4241
4248
  ##
@@ -0,0 +1,12 @@
1
+ import os.path
2
+ import typing as ta
3
+
4
+ import yaml
5
+
6
+
7
+ SECRETS_PATH = os.getenv('SECRETS_PATH', os.path.expanduser('~/Dropbox/.dotfiles/secrets.yml'))
8
+
9
+
10
+ def load_secrets() -> dict[str, ta.Any]:
11
+ with open(SECRETS_PATH) as f:
12
+ return yaml.safe_load(f)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev30
3
+ Version: 0.0.0.dev31
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.dev30
15
+ Requires-Dist: omlish==0.0.0.dev31
16
16
  Provides-Extra: all
17
17
  Requires-Dist: pycparser~=2.22; extra == "all"
18
18
  Requires-Dist: cffi~=1.17; extra == "all"
@@ -13,6 +13,7 @@ omdev/findmagic.py
13
13
  omdev/git.py
14
14
  omdev/manifests.py
15
15
  omdev/revisions.py
16
+ omdev/secrets.py
16
17
  omdev/tokens.py
17
18
  omdev/wheelfile.py
18
19
  omdev.egg-info/PKG-INFO
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev30
1
+ omlish==0.0.0.dev31
2
2
 
3
3
  [all]
4
4
  pycparser~=2.22
@@ -12,7 +12,7 @@ authors = [
12
12
  urls = {source = 'https://github.com/wrmsr/omlish'}
13
13
  license = {text = 'BSD-3-Clause'}
14
14
  requires-python = '~=3.12'
15
- version = '0.0.0.dev30'
15
+ version = '0.0.0.dev31'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,7 +22,7 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev30',
25
+ 'omlish == 0.0.0.dev31',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes