omdev 0.0.0.dev112__py3-none-any.whl → 0.0.0.dev114__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.
Potentially problematic release.
This version of omdev might be problematic. Click here for more details.
- omdev/.manifests.json +3 -3
- omdev/cli/clicli.py +18 -10
- omdev/git.py +313 -14
- omdev/pip.py +77 -0
- omdev/pycharm/cli.py +4 -0
- omdev/scripts/pyproject.py +1421 -1127
- omdev/tools/git.py +54 -0
- omdev/tools/pip.py +10 -54
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/RECORD +14 -13
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/LICENSE +0 -0
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev112.dist-info → omdev-0.0.0.dev114.dist-info}/top_level.txt +0 -0
omdev/tools/git.py
CHANGED
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import re
|
|
3
3
|
import subprocess
|
|
4
|
+
import typing as ta
|
|
4
5
|
import urllib.parse
|
|
5
6
|
|
|
6
7
|
from omlish import argparse as ap
|
|
7
8
|
from omlish import check
|
|
8
9
|
from omlish import logs
|
|
10
|
+
from omlish.formats import json
|
|
9
11
|
|
|
10
12
|
from ..cli import CliModule
|
|
13
|
+
from ..git import GitStatusLine
|
|
14
|
+
from ..git import get_git_status
|
|
11
15
|
|
|
12
16
|
|
|
13
17
|
def rev_parse(rev: str) -> str:
|
|
@@ -124,6 +128,56 @@ class Cli(ap.Cli):
|
|
|
124
128
|
else:
|
|
125
129
|
print(base_rev)
|
|
126
130
|
|
|
131
|
+
@ap.command(
|
|
132
|
+
ap.arg('-v', '--verbose', action='store_true'),
|
|
133
|
+
)
|
|
134
|
+
def status(self) -> None:
|
|
135
|
+
st = get_git_status()
|
|
136
|
+
|
|
137
|
+
def gsl_dct(gsl: GitStatusLine) -> ta.Mapping[str, ta.Any]:
|
|
138
|
+
return {
|
|
139
|
+
'x': gsl.x.name,
|
|
140
|
+
'y': gsl.y.name,
|
|
141
|
+
'a': gsl.a,
|
|
142
|
+
**({'b': gsl.b} if gsl.b is not None else {}),
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
def gsl_dct_lst(gsls: ta.Iterable[GitStatusLine]) -> ta.Sequence[ta.Mapping[str, ta.Any]]:
|
|
146
|
+
return [gsl_dct(gsl) for gsl in sorted(gsls, key=lambda gsl: gsl.a)]
|
|
147
|
+
|
|
148
|
+
if self.args.verbose:
|
|
149
|
+
dct = {
|
|
150
|
+
'by_x': {x.name: gsl_dct_lst(lst) for x, lst in st.by_x.items()},
|
|
151
|
+
'by_y': {y.name: gsl_dct_lst(lst) for y, lst in st.by_x.items()},
|
|
152
|
+
|
|
153
|
+
'by_a': {a: gsl_dct(gsl) for a, gsl in sorted(st.by_a.items(), key=lambda t: t[0])},
|
|
154
|
+
'by_b': {b: gsl_dct(gsl) for b, gsl in sorted(st.by_b.items(), key=lambda t: t[0])},
|
|
155
|
+
|
|
156
|
+
'has_unmerged': st.has_unmerged,
|
|
157
|
+
'has_staged': st.has_staged,
|
|
158
|
+
'has_dirty': st.has_dirty,
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
print(json.dumps_pretty(dct))
|
|
162
|
+
|
|
163
|
+
else:
|
|
164
|
+
print(json.dumps_pretty([gsl_dct(gsl) for gsl in st]))
|
|
165
|
+
|
|
166
|
+
@ap.command(
|
|
167
|
+
ap.arg('-m', '--message', default='--'),
|
|
168
|
+
aliases=['acp'],
|
|
169
|
+
)
|
|
170
|
+
def add_commit_push(self) -> None:
|
|
171
|
+
st = get_git_status()
|
|
172
|
+
|
|
173
|
+
if st.has_dirty:
|
|
174
|
+
subprocess.check_call(['git', 'add', '.'])
|
|
175
|
+
|
|
176
|
+
if st.has_staged or st.has_dirty:
|
|
177
|
+
subprocess.check_call(['git', 'commit', '-m', self.args.message])
|
|
178
|
+
|
|
179
|
+
subprocess.check_call(['git', 'push'])
|
|
180
|
+
|
|
127
181
|
|
|
128
182
|
# @omlish-manifest
|
|
129
183
|
_CLI_MODULE = CliModule('git', __name__)
|
omdev/tools/pip.py
CHANGED
|
@@ -3,34 +3,20 @@ TODO:
|
|
|
3
3
|
- https://github.com/pypa/pip/blob/420435903ff2fc694d6950a47b896427ecaed78f/src/pip/_internal/req/req_file.py ?
|
|
4
4
|
"""
|
|
5
5
|
import contextlib
|
|
6
|
-
import importlib.metadata
|
|
7
|
-
import io
|
|
8
6
|
import os.path
|
|
9
7
|
import sys
|
|
10
8
|
import typing as ta
|
|
11
|
-
import urllib.request
|
|
12
9
|
|
|
13
10
|
from omlish import argparse as ap
|
|
14
|
-
from omlish import check
|
|
15
|
-
from omlish import lang
|
|
16
11
|
from omlish import marshal as msh
|
|
17
12
|
from omlish.formats import json
|
|
18
13
|
|
|
19
14
|
from ..cli import CliModule
|
|
20
15
|
from ..packaging import marshal as _ # noqa
|
|
21
|
-
from ..packaging.names import canonicalize_name
|
|
22
16
|
from ..packaging.requires import ParsedRequirement
|
|
23
|
-
from ..packaging.requires import RequiresVariable
|
|
24
17
|
from ..packaging.requires import parse_requirement
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
if ta.TYPE_CHECKING:
|
|
28
|
-
import xml.etree.ElementTree as ET # noqa
|
|
29
|
-
else:
|
|
30
|
-
ET = lang.proxy_import('xml.etree.ElementTree')
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
PYPI_URL = 'https://pypi.org/'
|
|
18
|
+
from ..pip import get_root_dists
|
|
19
|
+
from ..pip import lookup_latest_package_version
|
|
34
20
|
|
|
35
21
|
|
|
36
22
|
class Cli(ap.Cli):
|
|
@@ -38,12 +24,14 @@ class Cli(ap.Cli):
|
|
|
38
24
|
ap.arg('package'),
|
|
39
25
|
)
|
|
40
26
|
def lookup_latest_version(self) -> None:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
27
|
+
print(lookup_latest_package_version(self.args.package))
|
|
28
|
+
|
|
29
|
+
@ap.command(
|
|
30
|
+
ap.arg('path', nargs='*'),
|
|
31
|
+
)
|
|
32
|
+
def list_root_dists(self) -> None:
|
|
33
|
+
for d in get_root_dists(paths=self.args.path):
|
|
34
|
+
print(d)
|
|
47
35
|
|
|
48
36
|
@ap.command(
|
|
49
37
|
ap.arg('file'),
|
|
@@ -69,38 +57,6 @@ class Cli(ap.Cli):
|
|
|
69
57
|
with open(self.args.file, 'w') as f:
|
|
70
58
|
f.write(new_src)
|
|
71
59
|
|
|
72
|
-
@ap.command(
|
|
73
|
-
ap.arg('path', nargs='*'),
|
|
74
|
-
)
|
|
75
|
-
def list_root_dists(self) -> None:
|
|
76
|
-
# FIXME: track req extras - tuple[str, str] with ('pkg', '') as 'bare'?
|
|
77
|
-
paths = self.args.path or sys.path
|
|
78
|
-
|
|
79
|
-
dists: set[str] = set()
|
|
80
|
-
reqs_by_use: dict[str, set[str]] = {}
|
|
81
|
-
uses_by_req: dict[str, set[str]] = {}
|
|
82
|
-
for dist in importlib.metadata.distributions(paths=paths):
|
|
83
|
-
dist_cn = canonicalize_name(dist.metadata['Name'], validate=True)
|
|
84
|
-
if dist_cn in dists:
|
|
85
|
-
# raise NameError(dist_cn)
|
|
86
|
-
# print(f'!! duplicate dist: {dist_cn}', file=sys.stderr)
|
|
87
|
-
continue
|
|
88
|
-
|
|
89
|
-
dists.add(dist_cn)
|
|
90
|
-
for req_str in dist.requires or []:
|
|
91
|
-
req = parse_requirement(req_str)
|
|
92
|
-
|
|
93
|
-
if any(v.value == 'extra' for m in req.marker or [] if isinstance(v := m[0], RequiresVariable)):
|
|
94
|
-
continue
|
|
95
|
-
|
|
96
|
-
req_cn = canonicalize_name(req.name)
|
|
97
|
-
reqs_by_use.setdefault(dist_cn, set()).add(req_cn)
|
|
98
|
-
uses_by_req.setdefault(req_cn, set()).add(dist_cn)
|
|
99
|
-
|
|
100
|
-
for d in sorted(dists):
|
|
101
|
-
if not uses_by_req.get(d):
|
|
102
|
-
print(d)
|
|
103
|
-
|
|
104
60
|
@ap.command(
|
|
105
61
|
ap.arg('files', nargs='*'),
|
|
106
62
|
ap.arg('-r', '--follow-requirements', action='store_true'),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev114
|
|
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.
|
|
15
|
+
Requires-Dist: omlish ==0.0.0.dev114
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black ~=24.10 ; extra == 'all'
|
|
18
18
|
Requires-Dist: pycparser ~=2.22 ; extra == 'all'
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
omdev/.manifests.json,sha256=
|
|
1
|
+
omdev/.manifests.json,sha256=asjeEXptONz5RkbuMIgHMDGB8QlWRazdWpFEVMznbPM,7479
|
|
2
2
|
omdev/__about__.py,sha256=n5x-SO70OgbDQFzQ1d7sZDVMsnkQc4PxQZPFaIQFa0E,1281
|
|
3
3
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
4
4
|
omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
|
|
5
5
|
omdev/classdot.py,sha256=YOvgy6x295I_8NKBbBlRVd3AN7Osirm_Lqt4Wj0j9rY,1631
|
|
6
6
|
omdev/cmake.py,sha256=Diy2ry65806dQP125DAstD3w46z_wszMH7PwC2-6iik,4578
|
|
7
7
|
omdev/findimports.py,sha256=2t8QP852saEEJFeXySEzhi_nxRSxghlkXz2jVdvy08M,2392
|
|
8
|
-
omdev/git.py,sha256=
|
|
8
|
+
omdev/git.py,sha256=B3gnqL75OZqwMvANdZL3cyah6izdM5bZfPJhG134lD0,10520
|
|
9
9
|
omdev/imgur.py,sha256=il12R3t19tALolteYCZywvcdQUEOcgvPyUYgWtKiqt4,2993
|
|
10
|
+
omdev/pip.py,sha256=gRg07NCEjTquOQwnKKgXqfn_YGElO5Pi7hmrAh-AVvQ,2105
|
|
10
11
|
omdev/revisions.py,sha256=U657hf4zeEN32y3g4CzqCAodx_HlfkHj2cIIKALNFDo,5009
|
|
11
12
|
omdev/secrets.py,sha256=bcquaBIDKqX4UIKOzUuKrX7nxVCenj67rRHIMIrd9bk,540
|
|
12
13
|
omdev/tokens.py,sha256=GusxQ1Cd_eiScuR8XTTtc9QFhOgYviYGBZmFnn3Hj7s,756
|
|
@@ -60,7 +61,7 @@ omdev/cexts/_distutils/compilers/unixccompiler.py,sha256=o1h8QuyupLntv4F21_XjzAZ
|
|
|
60
61
|
omdev/cli/__init__.py,sha256=V_l6VP1SZMlJbO-8CJwSuO9TThOy2S_oaPepNYgIrbE,37
|
|
61
62
|
omdev/cli/__main__.py,sha256=mOJpgc07o0r5luQ1DlX4tk2PqZkgmbwPbdzJ3KmtjgQ,138
|
|
62
63
|
omdev/cli/_pathhack.py,sha256=kxqb2kHap68Lkh8b211rDbcgj06hidBiAKA3f9posyc,2119
|
|
63
|
-
omdev/cli/clicli.py,sha256=
|
|
64
|
+
omdev/cli/clicli.py,sha256=OOxlCg7yoV1f8X9MUzl-k26p3PRSqJmGD6TrimYPFv8,2923
|
|
64
65
|
omdev/cli/install.py,sha256=C-W171YlIHt4Cfok-nWSMbHwWhqF_PFqq2HixFttYx8,4460
|
|
65
66
|
omdev/cli/main.py,sha256=nD3bW3MkI0KuDSLpX_PTnl-lBnm4hIxVqczvvMHtupo,7058
|
|
66
67
|
omdev/cli/managers.py,sha256=BV98_n30Jj63OJrFgRoVZRfICxMLXEZKoEn4rMj9LV4,1160
|
|
@@ -108,7 +109,7 @@ omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
108
109
|
omdev/ptk/apps/ncdu.py,sha256=dOkEJoc2Wjv1u_Uge7Vpei_LvXldoPP5833Eia355tc,4548
|
|
109
110
|
omdev/pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
110
111
|
omdev/pycharm/__main__.py,sha256=hUPp11D024eMdT86BxXiRVtF7AGBk5W6Zn8_mEHSksY,163
|
|
111
|
-
omdev/pycharm/cli.py,sha256=
|
|
112
|
+
omdev/pycharm/cli.py,sha256=WyUlFuG4jAmd7pB5tnZJ54FH1y1orDX3sjB1EWgbmmQ,2343
|
|
112
113
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
113
114
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
114
115
|
omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
|
|
@@ -122,7 +123,7 @@ omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
|
|
|
122
123
|
omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
|
|
123
124
|
omdev/scripts/importtrace.py,sha256=Jbo3Yk2RAbE8_tJ97iTcVNpoxCJxrRb2tl1W_CV3NG0,14067
|
|
124
125
|
omdev/scripts/interp.py,sha256=U6mU2RPZjwcBhn4Vl4SrAyDUFcf7bBxBnPY5FHCxosw,72496
|
|
125
|
-
omdev/scripts/pyproject.py,sha256=
|
|
126
|
+
omdev/scripts/pyproject.py,sha256=e2Ncxiju1GinYaXa_PJ3qAyiOApWepS-_uWjcKcJwtw,173682
|
|
126
127
|
omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
|
|
127
128
|
omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
|
|
128
129
|
omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
@@ -131,20 +132,20 @@ omdev/toml/writer.py,sha256=lk3on3YXVbWuLJa-xsOzOhs1bBAT1vXqw4mBbluZl_w,3040
|
|
|
131
132
|
omdev/tools/__init__.py,sha256=iVJAOQ0viGTQOm0DLX4uZLro-9jOioYJGLg9s0kDx1A,78
|
|
132
133
|
omdev/tools/doc.py,sha256=mv9XfitzqXl3vFHSenv01xHCxWf8g03rUAb_sqoty98,2556
|
|
133
134
|
omdev/tools/docker.py,sha256=k2BrVvFYwyGov064CPHd_HWo9aqR1zHc2UeEsVwPth4,6827
|
|
134
|
-
omdev/tools/git.py,sha256=
|
|
135
|
+
omdev/tools/git.py,sha256=sj3I8chXVzcZQyBIP8trq5_96EOXNTmu5YPOWePkR9A,5995
|
|
135
136
|
omdev/tools/importscan.py,sha256=QeGjR3UGcuuuDUiisFuAXWHlcKJScGxGEcU6tfOh2CM,4069
|
|
136
137
|
omdev/tools/mkrelimp.py,sha256=wsJAjTIf3nqcSfnT9TkDpS1VUOoM9W2Az5tZdWuzyLM,4054
|
|
137
138
|
omdev/tools/notebook.py,sha256=M8Xi_gfZdlahnyFLtp0RBgYZPSHWQStMMDYZc71Zync,3494
|
|
138
|
-
omdev/tools/pip.py,sha256=
|
|
139
|
+
omdev/tools/pip.py,sha256=cRYKRCjuMI9SR1CBORBbOCePyildLiCIMCECvBDY61E,3471
|
|
139
140
|
omdev/tools/prof.py,sha256=8ZU9x_Dq8eT2ZFwU9sJpDIvxcIn9qBc8y2ELKPb5e5M,1382
|
|
140
141
|
omdev/tools/qr.py,sha256=tm68lPwEAkEwIL2sUKPKBYfwwPtjVWG1DBZwur8_jY8,1737
|
|
141
142
|
omdev/tools/sqlrepl.py,sha256=tmFZh80-xsGM62dyQ7_UGLebChrj7IHbIPYBWDJMgVk,5741
|
|
142
143
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
144
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
|
144
145
|
omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
|
|
145
|
-
omdev-0.0.0.
|
|
146
|
-
omdev-0.0.0.
|
|
147
|
-
omdev-0.0.0.
|
|
148
|
-
omdev-0.0.0.
|
|
149
|
-
omdev-0.0.0.
|
|
150
|
-
omdev-0.0.0.
|
|
146
|
+
omdev-0.0.0.dev114.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
147
|
+
omdev-0.0.0.dev114.dist-info/METADATA,sha256=AuvmLYtU1KklORHYLnpp8MhgEiwN4CPvzsiuxKhdwkQ,1810
|
|
148
|
+
omdev-0.0.0.dev114.dist-info/WHEEL,sha256=a7TGlA-5DaHMRrarXjVbQagU3Man_dCnGIWMJr5kRWo,91
|
|
149
|
+
omdev-0.0.0.dev114.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
150
|
+
omdev-0.0.0.dev114.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
151
|
+
omdev-0.0.0.dev114.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|