omdev 0.0.0.dev145__tar.gz → 0.0.0.dev147__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 (164) hide show
  1. {omdev-0.0.0.dev145/omdev.egg-info → omdev-0.0.0.dev147}/PKG-INFO +2 -2
  2. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/.manifests.json +2 -2
  3. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/amalg/amalg.py +92 -0
  4. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/resolvers.py +1 -1
  5. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/interp.py +1 -1
  6. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/pyproject.py +1 -1
  7. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tokens.py +10 -3
  8. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/docker.py +14 -1
  9. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/git.py +4 -0
  10. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147/omdev.egg-info}/PKG-INFO +2 -2
  11. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev.egg-info/requires.txt +1 -1
  12. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/pyproject.toml +2 -2
  13. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/LICENSE +0 -0
  14. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/MANIFEST.in +0 -0
  15. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/README.rst +0 -0
  16. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/__about__.py +0 -0
  17. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/__init__.py +0 -0
  18. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/amalg/__init__.py +0 -0
  19. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/amalg/__main__.py +0 -0
  20. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/antlr/__init__.py +0 -0
  21. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/antlr/consts.py +0 -0
  22. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/antlr/gen.py +0 -0
  23. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/bracepy.py +0 -0
  24. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/__init__.py +0 -0
  25. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/__init__.py +0 -0
  26. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/cache.py +0 -0
  27. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/contexts.py +0 -0
  28. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/currents.py +0 -0
  29. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/fns.py +0 -0
  30. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/resolvers.py +0 -0
  31. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/storage.py +0 -0
  32. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/compute/types.py +0 -0
  33. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/__init__.py +0 -0
  34. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/actions.py +0 -0
  35. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/cache.py +0 -0
  36. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/consts.py +0 -0
  37. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/defaults.py +0 -0
  38. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/manifests.py +0 -0
  39. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cache/data/specs.py +0 -0
  40. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/__init__.py +0 -0
  41. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_boilerplate.cc +0 -0
  42. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/LICENSE +0 -0
  43. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/__init__.py +0 -0
  44. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/build_ext.py +0 -0
  45. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  46. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  47. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/compilers/options.py +0 -0
  48. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  49. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/dir_util.py +0 -0
  50. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/errors.py +0 -0
  51. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/extension.py +0 -0
  52. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/file_util.py +0 -0
  53. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/modified.py +0 -0
  54. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/spawn.py +0 -0
  55. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/sysconfig.py +0 -0
  56. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/util.py +0 -0
  57. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/_distutils/version.py +0 -0
  58. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/build.py +0 -0
  59. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/cmake.py +0 -0
  60. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/importhook.py +0 -0
  61. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/magic.py +0 -0
  62. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cexts/scan.py +0 -0
  63. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/classdot.py +0 -0
  64. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/__init__.py +0 -0
  65. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/__main__.py +0 -0
  66. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/_pathhack.py +0 -0
  67. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/clicli.py +0 -0
  68. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/install.py +0 -0
  69. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/main.py +0 -0
  70. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/managers.py +0 -0
  71. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cli/types.py +0 -0
  72. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/clipboard/__init__.py +0 -0
  73. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/clipboard/clipboard.py +0 -0
  74. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/clipboard/darwin_cf.py +0 -0
  75. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/clipboard/linux_x11.py +0 -0
  76. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/cmake.py +0 -0
  77. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/findimports.py +0 -0
  78. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/git.py +0 -0
  79. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/imgur.py +0 -0
  80. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/__init__.py +0 -0
  81. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/__main__.py +0 -0
  82. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/cli.py +0 -0
  83. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/inspect.py +0 -0
  84. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/providers.py +0 -0
  85. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/pyenv.py +0 -0
  86. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/standalone.py +0 -0
  87. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/system.py +0 -0
  88. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/interp/types.py +0 -0
  89. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/magic/__init__.py +0 -0
  90. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/magic/find.py +0 -0
  91. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/magic/magic.py +0 -0
  92. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/magic/prepare.py +0 -0
  93. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/magic/styles.py +0 -0
  94. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/manifests/__init__.py +0 -0
  95. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/manifests/build.py +0 -0
  96. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/mypy/__init__.py +0 -0
  97. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/mypy/debug.py +0 -0
  98. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/__init__.py +0 -0
  99. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/marshal.py +0 -0
  100. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/names.py +0 -0
  101. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/requires.py +0 -0
  102. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/specifiers.py +0 -0
  103. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/packaging/versions.py +0 -0
  104. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pip.py +0 -0
  105. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/__init__.py +0 -0
  106. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/__main__.py +0 -0
  107. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/base.py +0 -0
  108. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/git.py +0 -0
  109. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/lite.py +0 -0
  110. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/main.py +0 -0
  111. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/manifests.py +0 -0
  112. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/precheck/scripts.py +0 -0
  113. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/ptk/__init__.py +0 -0
  114. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/ptk/apps/__init__.py +0 -0
  115. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/ptk/apps/ncdu.py +0 -0
  116. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pycharm/__init__.py +0 -0
  117. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pycharm/__main__.py +0 -0
  118. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pycharm/cli.py +0 -0
  119. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/__init__.py +0 -0
  120. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/__main__.py +0 -0
  121. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/cexts.py +0 -0
  122. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/cli.py +0 -0
  123. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/configs.py +0 -0
  124. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/pkg.py +0 -0
  125. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/pyproject/reqs.py +0 -0
  126. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/revisions.py +0 -0
  127. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/__init__.py +0 -0
  128. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/bumpversion.py +0 -0
  129. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/execrss.py +0 -0
  130. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/exectime.py +0 -0
  131. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/importtrace.py +0 -0
  132. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/slowcat.py +0 -0
  133. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/scripts/tmpexec.py +0 -0
  134. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/secrets.py +0 -0
  135. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/toml/__init__.py +0 -0
  136. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/toml/parser.py +0 -0
  137. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/toml/writer.py +0 -0
  138. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/__init__.py +0 -0
  139. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/cloc.py +0 -0
  140. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/doc.py +0 -0
  141. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/importscan.py +0 -0
  142. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/__init__.py +0 -0
  143. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/__main__.py +0 -0
  144. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/cli.py +0 -0
  145. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/formats.py +0 -0
  146. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/io.py +0 -0
  147. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/parsing.py +0 -0
  148. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/processing.py +0 -0
  149. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/json/rendering.py +0 -0
  150. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/mkrelimp.py +0 -0
  151. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/notebook.py +0 -0
  152. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/pawk/__init__.py +0 -0
  153. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/pawk/__main__.py +0 -0
  154. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/pawk/pawk.py +0 -0
  155. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/pip.py +0 -0
  156. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/prof.py +0 -0
  157. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/qr.py +0 -0
  158. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/tools/sqlrepl.py +0 -0
  159. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev/wheelfile.py +0 -0
  160. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev.egg-info/SOURCES.txt +0 -0
  161. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev.egg-info/dependency_links.txt +0 -0
  162. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev.egg-info/entry_points.txt +0 -0
  163. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/omdev.egg-info/top_level.txt +0 -0
  164. {omdev-0.0.0.dev145 → omdev-0.0.0.dev147}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev145
3
+ Version: 0.0.0.dev147
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.dev145
15
+ Requires-Dist: omlish==0.0.0.dev147
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -243,7 +243,7 @@
243
243
  "module": ".tools.docker",
244
244
  "attr": "_CLI_MODULE",
245
245
  "file": "omdev/tools/docker.py",
246
- "line": 236,
246
+ "line": 249,
247
247
  "value": {
248
248
  "$.cli.types.CliModule": {
249
249
  "cmd_name": "docker",
@@ -255,7 +255,7 @@
255
255
  "module": ".tools.git",
256
256
  "attr": "_CLI_MODULE",
257
257
  "file": "omdev/tools/git.py",
258
- "line": 211,
258
+ "line": 215,
259
259
  "value": {
260
260
  "$.cli.types.CliModule": {
261
261
  "cmd_name": "git",
@@ -25,8 +25,10 @@ Targets:
25
25
  """
26
26
  import argparse
27
27
  import ast
28
+ import base64
28
29
  import dataclasses as dc
29
30
  import io
31
+ import itertools
30
32
  import logging
31
33
  import os.path
32
34
  import re
@@ -286,6 +288,37 @@ def is_root_level_if_type_checking_block(lts: Tokens) -> bool:
286
288
  ##
287
289
 
288
290
 
291
+ class RootLevelResourcesRead(ta.NamedTuple):
292
+ variable: str
293
+ kind: ta.Literal['binary', 'text']
294
+ resource: str
295
+
296
+
297
+ def is_root_level_resources_read(lts: Tokens) -> RootLevelResourcesRead | None:
298
+ wts = list(tks.ignore_ws(lts, keep=['INDENT']))
299
+
300
+ if not tks.match_toks(wts, [
301
+ ('NAME', None),
302
+ ('OP', '='),
303
+ ('NAME', ('read_package_resource_binary', 'read_package_resource_text')),
304
+ ('OP', '('),
305
+ ('NAME', '__package__'),
306
+ ('OP', ','),
307
+ ('STRING', None),
308
+ ('OP', ')'),
309
+ ]):
310
+ return None
311
+
312
+ return RootLevelResourcesRead(
313
+ wts[0].src,
314
+ 'binary' if wts[2].src == 'read_package_resource_binary' else 'text',
315
+ ast.literal_eval(wts[6].src),
316
+ )
317
+
318
+
319
+ ##
320
+
321
+
289
322
  @dc.dataclass(frozen=True, kw_only=True)
290
323
  class SrcFile:
291
324
  path: str
@@ -301,6 +334,8 @@ class SrcFile:
301
334
 
302
335
  ruff_noqa: ta.AbstractSet[str] = dc.field(repr=False)
303
336
 
337
+ has_binary_resources: bool = False
338
+
304
339
 
305
340
  def make_src_file(
306
341
  path: str,
@@ -322,6 +357,8 @@ def make_src_file(
322
357
  tys: list[Typing] = []
323
358
  ctls: list[Tokens] = []
324
359
 
360
+ has_binary_resources = False
361
+
325
362
  i = 0
326
363
  while i < len(cls):
327
364
  line = cls[i]
@@ -383,6 +420,57 @@ def make_src_file(
383
420
  i += 1
384
421
  skip_block()
385
422
 
423
+ elif (rsrc := is_root_level_resources_read(line)) is not None:
424
+ rf = os.path.join(os.path.dirname(path), rsrc.resource)
425
+
426
+ if rsrc.kind == 'binary':
427
+ with open(rf, 'rb') as bf:
428
+ rb = bf.read() # noqa
429
+
430
+ ctls.append([
431
+ trt.Token(name='NAME', src=rsrc.variable),
432
+ trt.Token(name='UNIMPORTANT_WS', src=' '),
433
+ trt.Token(name='OP', src='='),
434
+ trt.Token(name='UNIMPORTANT_WS', src=' '),
435
+ trt.Token(name='NAME', src='base64'),
436
+ trt.Token(name='OP', src='.'),
437
+ trt.Token(name='NAME', src='b64decode'),
438
+ trt.Token(name='OP', src='('),
439
+ trt.Token(name='NL', src='\n'),
440
+ ])
441
+
442
+ rb64 = base64.b64encode(rb).decode('ascii')
443
+ for chunk in itertools.batched(rb64, 96):
444
+ ctls.append([
445
+ trt.Token(name='UNIMPORTANT_WS', src=' '),
446
+ trt.Token(name='STRING', src=f"'{''.join(chunk)}'"),
447
+ trt.Token(name='NL', src='\n'),
448
+ ])
449
+
450
+ ctls.append([
451
+ trt.Token(name='OP', src=')'),
452
+ trt.Token(name='NEWLINE', src='\n'),
453
+ ])
454
+
455
+ has_binary_resources = True
456
+
457
+ elif rsrc.kind == 'text':
458
+ with open(rf) as tf:
459
+ rt = tf.read() # noqa
460
+ rt = rt.replace('\\', '\\\\') # Escape backslashes
461
+ rt = rt.replace('"""', r'\"\"\"')
462
+ ctls.append([
463
+ trt.Token(name='NAME', src=rsrc.variable),
464
+ trt.Token(name='UNIMPORTANT_WS', src=' '),
465
+ trt.Token(name='OP', src='='),
466
+ trt.Token(name='UNIMPORTANT_WS', src=' '),
467
+ trt.Token(name='STRING', src=f'"""\\\n{rt}"""\n'),
468
+ trt.Token(name='NEWLINE', src=''),
469
+ ])
470
+
471
+ else:
472
+ raise ValueError(rsrc.kind)
473
+
386
474
  else:
387
475
  ctls.append(line)
388
476
 
@@ -399,6 +487,8 @@ def make_src_file(
399
487
  content_lines=ctls,
400
488
 
401
489
  ruff_noqa=set(lang.flatten(tks.join_toks(l).strip().split()[3:] for l in rnls)), # noqa
490
+
491
+ has_binary_resources=has_binary_resources,
402
492
  )
403
493
 
404
494
 
@@ -488,6 +578,8 @@ def gen_amalg(
488
578
  dct: dict = {
489
579
  ('sys', None, None): ['import sys\n'],
490
580
  }
581
+ if any(sf.has_binary_resources for sf in src_files.values()):
582
+ dct[('base64', None, None)] = ['import base64\n']
491
583
  for imp in gl_imps:
492
584
  dct.setdefault((imp.mod, imp.item, imp.as_), []).append(imp)
493
585
  for _, l in sorted(dct.items()):
@@ -35,7 +35,7 @@ class InterpResolver:
35
35
  if spec.contains(si)
36
36
  ]
37
37
 
38
- slst = sorted(lst, key=lambda t: (-t[0], t[1]))
38
+ slst = sorted(lst, key=lambda t: (-t[0], t[1].version))
39
39
  if not slst:
40
40
  return None
41
41
 
@@ -2530,7 +2530,7 @@ class InterpResolver:
2530
2530
  if spec.contains(si)
2531
2531
  ]
2532
2532
 
2533
- slst = sorted(lst, key=lambda t: (-t[0], t[1]))
2533
+ slst = sorted(lst, key=lambda t: (-t[0], t[1].version))
2534
2534
  if not slst:
2535
2535
  return None
2536
2536
 
@@ -5748,7 +5748,7 @@ class InterpResolver:
5748
5748
  if spec.contains(si)
5749
5749
  ]
5750
5750
 
5751
- slst = sorted(lst, key=lambda t: (-t[0], t[1]))
5751
+ slst = sorted(lst, key=lambda t: (-t[0], t[1].version))
5752
5752
  if not slst:
5753
5753
  return None
5754
5754
 
@@ -61,7 +61,7 @@ def join_lines(ls: ta.Iterable[Tokens]) -> str:
61
61
 
62
62
  def match_toks(
63
63
  ts: ta.Iterable['trt.Token'],
64
- pat: ta.Sequence[tuple[str | None, str | None]],
64
+ pat: ta.Sequence[tuple[str | None, str | tuple[str, ...] | None]],
65
65
  ) -> bool:
66
66
  it = iter(ts)
67
67
  for pn, ps in pat:
@@ -71,6 +71,13 @@ def match_toks(
71
71
  return False
72
72
  if pn is not None and t.name != pn:
73
73
  return False
74
- if ps is not None and t.src != ps:
75
- return False
74
+ if ps is not None:
75
+ if isinstance(ps, str):
76
+ if t.src != ps:
77
+ return False
78
+ elif isinstance(ps, tuple):
79
+ if t.src not in ps:
80
+ return False
81
+ else:
82
+ raise TypeError(ps)
76
83
  return True
@@ -1,6 +1,6 @@
1
1
  """
2
2
  TODO:
3
- - check for updates
3
+ - https://github.com/zeromake/docker-debug
4
4
  """
5
5
  import os
6
6
  import re
@@ -232,6 +232,19 @@ class Cli(ap.Cli):
232
232
 
233
233
  print(f'{svc_name}: {lt}')
234
234
 
235
+ @ap.command()
236
+ def dockly(self) -> None:
237
+ os.execl(
238
+ exe := docker_exe(),
239
+ exe,
240
+ 'run',
241
+ '-it',
242
+ '--rm',
243
+ '-v',
244
+ '/var/run/docker.sock:/var/run/docker.sock',
245
+ 'lirantal/dockly',
246
+ )
247
+
235
248
 
236
249
  # @omlish-manifest
237
250
  _CLI_MODULE = CliModule('docker', __name__)
@@ -1,3 +1,7 @@
1
+ """
2
+ TODO:
3
+ - https://github.com/vegardit/bash-funk/blob/main/docs/git.md
4
+ """
1
5
  import os
2
6
  import re
3
7
  import subprocess
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev145
3
+ Version: 0.0.0.dev147
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.dev145
15
+ Requires-Dist: omlish==0.0.0.dev147
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black~=24.10; extra == "all"
18
18
  Requires-Dist: pycparser~=2.22; extra == "all"
@@ -1,4 +1,4 @@
1
- omlish==0.0.0.dev145
1
+ omlish==0.0.0.dev147
2
2
 
3
3
  [all]
4
4
  black~=24.10
@@ -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.dev145'
15
+ version = '0.0.0.dev147'
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.dev145',
25
+ 'omlish == 0.0.0.dev147',
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