omdev 0.0.0.dev68__tar.gz → 0.0.0.dev70__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 (136) hide show
  1. {omdev-0.0.0.dev68/omdev.egg-info → omdev-0.0.0.dev70}/PKG-INFO +8 -2
  2. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/.manifests.json +25 -1
  3. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/__about__.py +8 -0
  4. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/managers.py +1 -1
  5. omdev-0.0.0.dev70/omdev/tools/nbtools.py +120 -0
  6. omdev-0.0.0.dev70/omdev/tools/proftools.py +55 -0
  7. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/rst.py +6 -0
  8. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70/omdev.egg-info}/PKG-INFO +8 -2
  9. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev.egg-info/SOURCES.txt +1 -1
  10. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev.egg-info/requires.txt +9 -1
  11. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/pyproject.toml +10 -2
  12. omdev-0.0.0.dev68/omdev/tools/nbtools.py +0 -49
  13. omdev-0.0.0.dev68/omdev/tools/proftools.py +0 -4
  14. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/LICENSE +0 -0
  15. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/MANIFEST.in +0 -0
  16. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/README.rst +0 -0
  17. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/__init__.py +0 -0
  18. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/amalg/__init__.py +0 -0
  19. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/amalg/__main__.py +0 -0
  20. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/amalg/amalg.py +0 -0
  21. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/antlr/__init__.py +0 -0
  22. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/antlr/_antlr/__init__.py +0 -0
  23. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/antlr/consts.py +0 -0
  24. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/antlr/gen.py +0 -0
  25. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/bracepy.py +0 -0
  26. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/__init__.py +0 -0
  27. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/__init__.py +0 -0
  28. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/cache.py +0 -0
  29. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/contexts.py +0 -0
  30. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/currents.py +0 -0
  31. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/fns.py +0 -0
  32. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/resolvers.py +0 -0
  33. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/storage.py +0 -0
  34. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/compute/types.py +0 -0
  35. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/__init__.py +0 -0
  36. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/actions.py +0 -0
  37. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/cache.py +0 -0
  38. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/consts.py +0 -0
  39. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/defaults.py +0 -0
  40. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/manifests.py +0 -0
  41. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cache/data/specs.py +0 -0
  42. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/__init__.py +0 -0
  43. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_boilerplate.cc +0 -0
  44. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/LICENSE +0 -0
  45. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/__init__.py +0 -0
  46. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/build_ext.py +0 -0
  47. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/compilers/__init__.py +0 -0
  48. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/compilers/ccompiler.py +0 -0
  49. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/compilers/options.py +0 -0
  50. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/compilers/unixccompiler.py +0 -0
  51. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/dir_util.py +0 -0
  52. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/errors.py +0 -0
  53. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/extension.py +0 -0
  54. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/file_util.py +0 -0
  55. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/modified.py +0 -0
  56. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/spawn.py +0 -0
  57. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/sysconfig.py +0 -0
  58. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/util.py +0 -0
  59. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/_distutils/version.py +0 -0
  60. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/build.py +0 -0
  61. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/cmake.py +0 -0
  62. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/importhook.py +0 -0
  63. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/magic.py +0 -0
  64. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cexts/scan.py +0 -0
  65. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/classdot.py +0 -0
  66. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/__init__.py +0 -0
  67. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/__main__.py +0 -0
  68. /omdev-0.0.0.dev68/omdev/cli/pathhack.py → /omdev-0.0.0.dev70/omdev/cli/_pathhack.py +0 -0
  69. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/clicli.py +0 -0
  70. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/install.py +0 -0
  71. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/main.py +0 -0
  72. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cli/types.py +0 -0
  73. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/cmake.py +0 -0
  74. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/findimports.py +0 -0
  75. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/findmagic.py +0 -0
  76. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/git.py +0 -0
  77. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/__init__.py +0 -0
  78. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/__main__.py +0 -0
  79. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/cli.py +0 -0
  80. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/inspect.py +0 -0
  81. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/providers.py +0 -0
  82. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/pyenv.py +0 -0
  83. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/resolvers.py +0 -0
  84. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/standalone.py +0 -0
  85. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/system.py +0 -0
  86. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/interp/types.py +0 -0
  87. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/manifests/__init__.py +0 -0
  88. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/manifests/build.py +0 -0
  89. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/manifests/load.py +0 -0
  90. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/manifests/types.py +0 -0
  91. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/mypy/__init__.py +0 -0
  92. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/mypy/debug.py +0 -0
  93. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/packaging/__init__.py +0 -0
  94. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/packaging/names.py +0 -0
  95. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/packaging/requires.py +0 -0
  96. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/packaging/specifiers.py +0 -0
  97. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/packaging/versions.py +0 -0
  98. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/__init__.py +0 -0
  99. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/__main__.py +0 -0
  100. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/base.py +0 -0
  101. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/git.py +0 -0
  102. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/lite.py +0 -0
  103. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/precheck.py +0 -0
  104. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/precheck/scripts.py +0 -0
  105. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/__init__.py +0 -0
  106. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/__main__.py +0 -0
  107. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/cexts.py +0 -0
  108. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/cli.py +0 -0
  109. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/configs.py +0 -0
  110. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/pkg.py +0 -0
  111. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/pyproject/reqs.py +0 -0
  112. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/revisions.py +0 -0
  113. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/__init__.py +0 -0
  114. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/bumpversion.py +0 -0
  115. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/execrss.py +0 -0
  116. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/exectime.py +0 -0
  117. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/importtrace.py +0 -0
  118. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/interp.py +0 -0
  119. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/scripts/pyproject.py +0 -0
  120. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/secrets.py +0 -0
  121. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tokens.py +0 -0
  122. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/toml/__init__.py +0 -0
  123. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/toml/parser.py +0 -0
  124. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/toml/writer.py +0 -0
  125. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/__init__.py +0 -0
  126. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/dockertools.py +0 -0
  127. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/gittools.py +0 -0
  128. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/importscan.py +0 -0
  129. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/mkrelimp.py +0 -0
  130. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/piptools.py +0 -0
  131. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/tools/sqlrepl.py +0 -0
  132. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev/wheelfile.py +0 -0
  133. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev.egg-info/dependency_links.txt +0 -0
  134. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev.egg-info/entry_points.txt +0 -0
  135. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/omdev.egg-info/top_level.txt +0 -0
  136. {omdev-0.0.0.dev68 → omdev-0.0.0.dev70}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev68
3
+ Version: 0.0.0.dev70
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,15 +12,19 @@ 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.dev68
15
+ Requires-Dist: omlish==0.0.0.dev70
16
16
  Provides-Extra: all
17
+ Requires-Dist: black~=24.10; extra == "all"
17
18
  Requires-Dist: pycparser~=2.22; extra == "all"
18
19
  Requires-Dist: cffi~=1.17; extra == "all"
19
20
  Requires-Dist: pcpp~=1.30; extra == "all"
20
21
  Requires-Dist: docutils~=0.21; extra == "all"
21
22
  Requires-Dist: mypy~=1.11; extra == "all"
23
+ Requires-Dist: gprof2dot~=2024.6; extra == "all"
22
24
  Requires-Dist: tokenize_rt~=6.0; extra == "all"
23
25
  Requires-Dist: wheel~=0.44; extra == "all"
26
+ Provides-Extra: black
27
+ Requires-Dist: black~=24.10; extra == "black"
24
28
  Provides-Extra: c
25
29
  Requires-Dist: pycparser~=2.22; extra == "c"
26
30
  Requires-Dist: cffi~=1.17; extra == "c"
@@ -29,6 +33,8 @@ Provides-Extra: docutils
29
33
  Requires-Dist: docutils~=0.21; extra == "docutils"
30
34
  Provides-Extra: mypy
31
35
  Requires-Dist: mypy~=1.11; extra == "mypy"
36
+ Provides-Extra: prof
37
+ Requires-Dist: gprof2dot~=2024.6; extra == "prof"
32
38
  Provides-Extra: tokens
33
39
  Requires-Dist: tokenize_rt~=6.0; extra == "tokens"
34
40
  Provides-Extra: wheel
@@ -171,7 +171,7 @@
171
171
  "module": ".tools.nbtools",
172
172
  "attr": "_CLI_MODULE",
173
173
  "file": "omdev/tools/nbtools.py",
174
- "line": 44,
174
+ "line": 115,
175
175
  "value": {
176
176
  "$.cli.types.CliModule": {
177
177
  "cmd_name": [
@@ -194,6 +194,30 @@
194
194
  }
195
195
  }
196
196
  },
197
+ {
198
+ "module": ".tools.proftools",
199
+ "attr": "_CLI_MODULE",
200
+ "file": "omdev/tools/proftools.py",
201
+ "line": 50,
202
+ "value": {
203
+ "$.cli.types.CliModule": {
204
+ "cmd_name": "prof",
205
+ "mod_name": "omdev.tools.proftools"
206
+ }
207
+ }
208
+ },
209
+ {
210
+ "module": ".tools.rst",
211
+ "attr": "_CLI_MODULE",
212
+ "file": "omdev/tools/rst.py",
213
+ "line": 45,
214
+ "value": {
215
+ "$.cli.types.CliModule": {
216
+ "cmd_name": "rst",
217
+ "mod_name": "omdev.tools.rst"
218
+ }
219
+ }
220
+ },
197
221
  {
198
222
  "module": ".tools.sqlrepl",
199
223
  "attr": "_CLI_MODULE",
@@ -12,6 +12,10 @@ class Project(ProjectBase):
12
12
  ]
13
13
 
14
14
  optional_dependencies = {
15
+ 'black': [
16
+ 'black ~= 24.10',
17
+ ],
18
+
15
19
  'c': [
16
20
  'pycparser ~= 2.22',
17
21
  'cffi ~= 1.17',
@@ -26,6 +30,10 @@ class Project(ProjectBase):
26
30
  'mypy ~= 1.11',
27
31
  ],
28
32
 
33
+ 'prof': [
34
+ 'gprof2dot ~= 2024.6',
35
+ ],
36
+
29
37
  'tokens': [
30
38
  'tokenize_rt ~= 6.0',
31
39
  ],
@@ -50,5 +50,5 @@ def setup_install_manager(cli_pkg: str) -> None:
50
50
  if detect_install_manager(cli_pkg) is None:
51
51
  return
52
52
 
53
- from .pathhack import _install_pth_file
53
+ from ._pathhack import _install_pth_file
54
54
  _install_pth_file()
@@ -0,0 +1,120 @@
1
+ import io
2
+ import json
3
+ import os.path
4
+ import subprocess
5
+ import sys
6
+ import urllib.parse
7
+ import urllib.request
8
+
9
+ from omlish import argparse as ap
10
+ from omlish import check
11
+
12
+ from ..cli import CliModule
13
+
14
+
15
+ class Cli(ap.Cli):
16
+ @ap.command(
17
+ ap.arg('file'),
18
+ ap.arg('-w', '--write', action='store_true'),
19
+ ap.arg('-o', '--overwrite', action='store_true'),
20
+ ap.arg('--no-header', action='store_true'),
21
+ ap.arg('--keep-bangs', action='store_true'),
22
+ ap.arg('--black', action='store_true'),
23
+ )
24
+ def strip_code(self) -> None:
25
+ out_file: str | None = None
26
+ out_header: list[str] = []
27
+
28
+ if ':' in self.args.file:
29
+ url = self.args.file
30
+ pu = urllib.parse.urlparse(url)
31
+ check.equal(pu.scheme, 'https')
32
+
33
+ out_header.append(f'# Origin: {url}')
34
+
35
+ if pu.hostname == 'github.com':
36
+ _, user, repo, blob, *rest = pu.path.split('/')
37
+ check.equal(blob, 'blob')
38
+ url = f'https://raw.githubusercontent.com/{user}/{repo}/refs/heads/{"/".join(rest)}'
39
+
40
+ elif pu.hostname == 'raw.githubusercontent.com':
41
+ pass
42
+
43
+ else:
44
+ raise ValueError(pu.hostname)
45
+
46
+ file = pu.path.split('/')[-1]
47
+ check.state(file.endswith('.ipynb'))
48
+
49
+ if self.args.write:
50
+ out_file = file.rpartition('.')[0] + '.py'
51
+
52
+ with urllib.request.urlopen(url) as resp: # noqa
53
+ buf = resp.read()
54
+
55
+ dct = json.loads(buf.decode('utf-8'))
56
+
57
+ elif self.args.file == '-':
58
+ if self.args.write:
59
+ raise Exception('Write not supported with stdin')
60
+
61
+ dct = json.load(sys.stdin)
62
+
63
+ else:
64
+ with open(self.args.file) as f:
65
+ dct = json.load(f)
66
+
67
+ if self.args.write:
68
+ out_file = self.args.file.rpartition('.')[0] + '.py'
69
+
70
+ if out_file is not None and os.path.isfile(out_file) and not self.args.overwrite:
71
+ raise OSError(f'File exists: {out_file}')
72
+
73
+ delim = '\n##\n\n'
74
+
75
+ out = io.StringIO()
76
+ if not self.args.no_header and out_header:
77
+ out.write('\n'.join(out_header))
78
+ out.write(delim)
79
+
80
+ code_cells = [c for c in dct['cells'] if c['cell_type'] == 'code']
81
+ for i, c in enumerate(code_cells):
82
+ if i:
83
+ out.write(delim)
84
+
85
+ src = ''.join(c['source'])
86
+ if not self.args.keep_bangs:
87
+ src = ''.join(
88
+ ('# ' + l) if l.startswith('!') else l
89
+ for l in src.splitlines(keepends=True)
90
+ )
91
+
92
+ out.write(src)
93
+ out.write('\n')
94
+
95
+ out_src = out.getvalue()
96
+
97
+ if self.args.black:
98
+ proc = subprocess.run(
99
+ [sys.executable, '-m', 'black', '-'],
100
+ input=out_src.encode('utf-8'),
101
+ stdout=subprocess.PIPE,
102
+ check=True,
103
+ )
104
+ out_src = proc.stdout.decode('utf-8')
105
+
106
+ if out_file is not None:
107
+ with open(out_file, 'w') as f:
108
+ f.write(out_src)
109
+ print(f'Wrote {out_file}')
110
+
111
+ else:
112
+ sys.stdout.write(out_src)
113
+
114
+
115
+ # @omlish-manifest
116
+ _CLI_MODULE = CliModule(['notebook', 'nb'], __name__)
117
+
118
+
119
+ if __name__ == '__main__':
120
+ Cli()()
@@ -0,0 +1,55 @@
1
+ import os.path
2
+ import subprocess
3
+ import sys
4
+ import tempfile
5
+
6
+ from omlish import argparse as ap
7
+
8
+ from ..cli import CliModule
9
+
10
+
11
+ class Cli(ap.Cli):
12
+ @ap.command(
13
+ ap.arg('file'),
14
+ ap.arg('out-file', nargs='?'),
15
+ ap.arg('-w', '--write', action='store_true'),
16
+ ap.arg('-o', '--overwrite', action='store_true'),
17
+ ap.arg('-O', '--open', action='store_true'),
18
+ )
19
+ def pstats_pdf(self) -> None:
20
+ out_file = self.args.out_file
21
+ if out_file is None and self.args.write:
22
+ out_file = self.args.file + '.pdf'
23
+
24
+ if out_file is not None:
25
+ if os.path.exists(out_file) and not self.args.overwrite:
26
+ raise OSError(f'File exists: {out_file}')
27
+ else:
28
+ out_file = tempfile.mktemp(suffix=os.path.basename(self.args.file) + '.pdf') # noqa
29
+
30
+ dot = subprocess.check_output([
31
+ sys.executable,
32
+ '-m', 'gprof2dot',
33
+ '-f', 'pstats',
34
+ self.args.file,
35
+ ])
36
+
37
+ pdf = subprocess.check_output(
38
+ ['dot', '-Tpdf'],
39
+ input=dot,
40
+ )
41
+
42
+ with open(out_file, 'wb') as f:
43
+ f.write(pdf)
44
+ print(out_file)
45
+
46
+ if self.args.open:
47
+ subprocess.check_call(['open', out_file])
48
+
49
+
50
+ # @omlish-manifest
51
+ _CLI_MODULE = CliModule('prof', __name__)
52
+
53
+
54
+ if __name__ == '__main__':
55
+ Cli()()
@@ -5,6 +5,8 @@ import sys
5
5
 
6
6
  import docutils.core
7
7
 
8
+ from ..cli import CliModule
9
+
8
10
 
9
11
  def rst2html(rst, report_level=None):
10
12
  kwargs = {
@@ -40,5 +42,9 @@ def _main() -> None:
40
42
  print(html)
41
43
 
42
44
 
45
+ # @omlish-manifest
46
+ _CLI_MODULE = CliModule('rst', __name__)
47
+
48
+
43
49
  if __name__ == '__main__':
44
50
  _main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev68
3
+ Version: 0.0.0.dev70
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License: BSD-3-Clause
@@ -12,15 +12,19 @@ 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.dev68
15
+ Requires-Dist: omlish==0.0.0.dev70
16
16
  Provides-Extra: all
17
+ Requires-Dist: black~=24.10; extra == "all"
17
18
  Requires-Dist: pycparser~=2.22; extra == "all"
18
19
  Requires-Dist: cffi~=1.17; extra == "all"
19
20
  Requires-Dist: pcpp~=1.30; extra == "all"
20
21
  Requires-Dist: docutils~=0.21; extra == "all"
21
22
  Requires-Dist: mypy~=1.11; extra == "all"
23
+ Requires-Dist: gprof2dot~=2024.6; extra == "all"
22
24
  Requires-Dist: tokenize_rt~=6.0; extra == "all"
23
25
  Requires-Dist: wheel~=0.44; extra == "all"
26
+ Provides-Extra: black
27
+ Requires-Dist: black~=24.10; extra == "black"
24
28
  Provides-Extra: c
25
29
  Requires-Dist: pycparser~=2.22; extra == "c"
26
30
  Requires-Dist: cffi~=1.17; extra == "c"
@@ -29,6 +33,8 @@ Provides-Extra: docutils
29
33
  Requires-Dist: docutils~=0.21; extra == "docutils"
30
34
  Provides-Extra: mypy
31
35
  Requires-Dist: mypy~=1.11; extra == "mypy"
36
+ Provides-Extra: prof
37
+ Requires-Dist: gprof2dot~=2024.6; extra == "prof"
32
38
  Provides-Extra: tokens
33
39
  Requires-Dist: tokenize_rt~=6.0; extra == "tokens"
34
40
  Provides-Extra: wheel
@@ -69,11 +69,11 @@ omdev/cexts/_distutils/compilers/options.py
69
69
  omdev/cexts/_distutils/compilers/unixccompiler.py
70
70
  omdev/cli/__init__.py
71
71
  omdev/cli/__main__.py
72
+ omdev/cli/_pathhack.py
72
73
  omdev/cli/clicli.py
73
74
  omdev/cli/install.py
74
75
  omdev/cli/main.py
75
76
  omdev/cli/managers.py
76
- omdev/cli/pathhack.py
77
77
  omdev/cli/types.py
78
78
  omdev/interp/__init__.py
79
79
  omdev/interp/__main__.py
@@ -1,14 +1,19 @@
1
- omlish==0.0.0.dev68
1
+ omlish==0.0.0.dev70
2
2
 
3
3
  [all]
4
+ black~=24.10
4
5
  pycparser~=2.22
5
6
  cffi~=1.17
6
7
  pcpp~=1.30
7
8
  docutils~=0.21
8
9
  mypy~=1.11
10
+ gprof2dot~=2024.6
9
11
  tokenize_rt~=6.0
10
12
  wheel~=0.44
11
13
 
14
+ [black]
15
+ black~=24.10
16
+
12
17
  [c]
13
18
  pycparser~=2.22
14
19
  cffi~=1.17
@@ -20,6 +25,9 @@ docutils~=0.21
20
25
  [mypy]
21
26
  mypy~=1.11
22
27
 
28
+ [prof]
29
+ gprof2dot~=2024.6
30
+
23
31
  [tokens]
24
32
  tokenize_rt~=6.0
25
33
 
@@ -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.dev68'
15
+ version = '0.0.0.dev70'
16
16
  classifiers = [
17
17
  'License :: OSI Approved :: BSD License',
18
18
  'Development Status :: 2 - Pre-Alpha',
@@ -22,19 +22,24 @@ classifiers = [
22
22
  ]
23
23
  description = 'omdev'
24
24
  dependencies = [
25
- 'omlish == 0.0.0.dev68',
25
+ 'omlish == 0.0.0.dev70',
26
26
  ]
27
27
 
28
28
  [project.optional-dependencies]
29
29
  all = [
30
+ 'black ~= 24.10',
30
31
  'pycparser ~= 2.22',
31
32
  'cffi ~= 1.17',
32
33
  'pcpp ~= 1.30',
33
34
  'docutils ~= 0.21',
34
35
  'mypy ~= 1.11',
36
+ 'gprof2dot ~= 2024.6',
35
37
  'tokenize_rt ~= 6.0',
36
38
  'wheel ~= 0.44',
37
39
  ]
40
+ black = [
41
+ 'black ~= 24.10',
42
+ ]
38
43
  c = [
39
44
  'pycparser ~= 2.22',
40
45
  'cffi ~= 1.17',
@@ -46,6 +51,9 @@ docutils = [
46
51
  mypy = [
47
52
  'mypy ~= 1.11',
48
53
  ]
54
+ prof = [
55
+ 'gprof2dot ~= 2024.6',
56
+ ]
49
57
  tokens = [
50
58
  'tokenize_rt ~= 6.0',
51
59
  ]
@@ -1,49 +0,0 @@
1
- import io
2
- import json
3
- import os.path
4
- import sys
5
-
6
- from omlish import argparse as ap
7
-
8
- from ..cli import CliModule
9
-
10
-
11
- class Cli(ap.Cli):
12
- @ap.command(
13
- ap.arg('file'),
14
- ap.arg('-w', '--write', action='store_true'),
15
- ap.arg('-o', '--overwrite', action='store_true'),
16
- )
17
- def code(self) -> None:
18
- if self.args.write:
19
- out_file = self.args.file.rpartition('.')[0] + '.py'
20
- if os.path.isfile(out_file) and not self.args.overwrite:
21
- raise OSError(f'File exists: {out_file}')
22
- else:
23
- out_file = None
24
-
25
- with open(self.args.file) as f:
26
- dct = json.load(f)
27
-
28
- out = io.StringIO()
29
- code_cells = [c for c in dct['cells'] if c['cell_type'] == 'code']
30
- for i, c in enumerate(code_cells):
31
- if i:
32
- out.write('\n##\n\n')
33
- out.write(''.join(c['source']))
34
- out.write('\n')
35
-
36
- if out_file is not None:
37
- with open(out_file, 'w') as f:
38
- f.write(out.getvalue())
39
- print(f'Wrote {out_file}')
40
- else:
41
- sys.stdout.write(out.getvalue())
42
-
43
-
44
- # @omlish-manifest
45
- _CLI_MODULE = CliModule(['notebook', 'nb'], __name__)
46
-
47
-
48
- if __name__ == '__main__':
49
- Cli()()
@@ -1,4 +0,0 @@
1
- """
2
- TODO:
3
- - rm prof.pstats.pdf ; ./python -m gprof2dot -f pstats prof.pstats | dot -Tpdf -o prof.pstats.pdf && open prof.pstats.pdf
4
- """ # noqa
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes