omdev 0.0.0.dev128__py3-none-any.whl → 0.0.0.dev130__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/pycharm/cli.py +60 -17
- omdev/scripts/interp.py +39 -0
- omdev/scripts/pyproject.py +39 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/RECORD +9 -9
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/LICENSE +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev128.dist-info → omdev-0.0.0.dev130.dist-info}/top_level.txt +0 -0
omdev/pycharm/cli.py
CHANGED
|
@@ -5,8 +5,10 @@ TODO:
|
|
|
5
5
|
- https://unix.stackexchange.com/questions/17255/is-there-a-command-to-list-all-open-displays-on-a-machine
|
|
6
6
|
- w -oush
|
|
7
7
|
"""
|
|
8
|
+
import dataclasses as dc
|
|
8
9
|
import inspect
|
|
9
10
|
import os.path
|
|
11
|
+
import shlex
|
|
10
12
|
import subprocess
|
|
11
13
|
import sys
|
|
12
14
|
import tempfile
|
|
@@ -15,6 +17,9 @@ from omlish import argparse as ap
|
|
|
15
17
|
from omlish.diag.pycharm import get_pycharm_version
|
|
16
18
|
|
|
17
19
|
|
|
20
|
+
##
|
|
21
|
+
|
|
22
|
+
|
|
18
23
|
_DARWIN_OPEN_SCRIPT = """
|
|
19
24
|
tell application "{app}"
|
|
20
25
|
activate
|
|
@@ -24,26 +29,53 @@ return
|
|
|
24
29
|
"""
|
|
25
30
|
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
|
|
32
|
+
##
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
_LINUX_PYCHARM_WM_CLASS = 'jetbrains-pycharm.jetbrains-pycharm'
|
|
36
|
+
_LINUX_CLION_WM_CLASS = 'jetbrains-clion.jetbrains-pycharm'
|
|
37
|
+
|
|
29
38
|
|
|
30
|
-
# wmctrl
|
|
31
|
-
#
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
# export DISPLAY=":1"
|
|
37
|
-
wmctrl -x -a jetbrains-pycharm.jetbrains-pycharm
|
|
38
|
-
xdotool key --delay 20 alt+f alt+o
|
|
39
|
-
xdotool type --delay 10 "$(pwd)"
|
|
40
|
-
xdotool key Return
|
|
41
|
-
else
|
|
42
|
-
nohup pycharm.sh "$PROJECT_PATH" > /dev/null 2>&1 &
|
|
43
|
-
fi
|
|
39
|
+
# sudo apt install xdotool wmctrl
|
|
40
|
+
# TODO: nohup pycharm.sh "$PROJECT_PATH" > /dev/null 2>&1 & ?
|
|
41
|
+
_LINUX_OPEN_SCRIPT = """
|
|
42
|
+
xdotool key --delay 1000 alt+f alt+o
|
|
43
|
+
xdotool type --delay 1000 {dir}
|
|
44
|
+
xdotool key Return
|
|
44
45
|
"""
|
|
45
46
|
|
|
46
47
|
|
|
48
|
+
@dc.dataclass(frozen=True)
|
|
49
|
+
class WmctrlLine:
|
|
50
|
+
window_id: str
|
|
51
|
+
desktop_id: str
|
|
52
|
+
pid: str
|
|
53
|
+
wm_class: str
|
|
54
|
+
user: str
|
|
55
|
+
title: str
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
# TODO: https://stackoverflow.com/a/79016360
|
|
59
|
+
def parse_wmctrl_lxp_line(l: str) -> WmctrlLine:
|
|
60
|
+
window_id, _, l = l.lstrip().partition(' ')
|
|
61
|
+
desktop_id, _, l = l.lstrip().partition(' ')
|
|
62
|
+
pid, _, l = l.lstrip().partition(' ')
|
|
63
|
+
wm_class, _, l = l.lstrip().partition(' ')
|
|
64
|
+
user, _, l = l.lstrip().partition(' ')
|
|
65
|
+
title = l.strip()
|
|
66
|
+
return WmctrlLine(
|
|
67
|
+
window_id,
|
|
68
|
+
desktop_id,
|
|
69
|
+
pid,
|
|
70
|
+
wm_class,
|
|
71
|
+
user,
|
|
72
|
+
title,
|
|
73
|
+
)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
##
|
|
77
|
+
|
|
78
|
+
|
|
47
79
|
class Cli(ap.Cli):
|
|
48
80
|
@ap.command()
|
|
49
81
|
def version(self) -> None:
|
|
@@ -90,7 +122,18 @@ class Cli(ap.Cli):
|
|
|
90
122
|
subprocess.check_call(['osascript', scpt_file])
|
|
91
123
|
|
|
92
124
|
elif plat == 'linux':
|
|
93
|
-
|
|
125
|
+
env = os.environ
|
|
126
|
+
env.setdefault('DISPLAY', ':1')
|
|
127
|
+
|
|
128
|
+
wmc_out = subprocess.check_output(['wmctrl', '-lxp'], env=env).decode()
|
|
129
|
+
wls = [parse_wmctrl_lxp_line(l) for l in wmc_out.splitlines()]
|
|
130
|
+
tgt_wmc = _LINUX_CLION_WM_CLASS if self.args.clion else _LINUX_PYCHARM_WM_CLASS
|
|
131
|
+
tgt_wl = next(wl for wl in wls if wl.wm_class == tgt_wmc)
|
|
132
|
+
subprocess.check_call(['wmctrl', '-ia', tgt_wl.window_id], env=env)
|
|
133
|
+
|
|
134
|
+
scpt = _LINUX_OPEN_SCRIPT.format(dir=shlex.quote(os.path.expanduser(dir)))
|
|
135
|
+
print(scpt)
|
|
136
|
+
# subprocess.check_call(scpt, shell=True, env=env) # noqa
|
|
94
137
|
raise NotImplementedError
|
|
95
138
|
|
|
96
139
|
else:
|
omdev/scripts/interp.py
CHANGED
|
@@ -54,6 +54,9 @@ VersionComparisonMethod = ta.Callable[[VersionCmpKey, VersionCmpKey], bool]
|
|
|
54
54
|
# ../../../omlish/lite/cached.py
|
|
55
55
|
T = ta.TypeVar('T')
|
|
56
56
|
|
|
57
|
+
# ../../../omlish/lite/check.py
|
|
58
|
+
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
|
59
|
+
|
|
57
60
|
# ../../packaging/specifiers.py
|
|
58
61
|
UnparsedVersion = ta.Union['Version', str]
|
|
59
62
|
UnparsedVersionVar = ta.TypeVar('UnparsedVersionVar', bound=UnparsedVersion)
|
|
@@ -548,11 +551,47 @@ def check_not_equal(l: T, r: T) -> T:
|
|
|
548
551
|
return l
|
|
549
552
|
|
|
550
553
|
|
|
554
|
+
def check_is(l: T, r: T) -> T:
|
|
555
|
+
if l is not r:
|
|
556
|
+
raise ValueError(l, r)
|
|
557
|
+
return l
|
|
558
|
+
|
|
559
|
+
|
|
560
|
+
def check_is_not(l: T, r: ta.Any) -> T:
|
|
561
|
+
if l is r:
|
|
562
|
+
raise ValueError(l, r)
|
|
563
|
+
return l
|
|
564
|
+
|
|
565
|
+
|
|
566
|
+
def check_in(v: T, c: ta.Container[T]) -> T:
|
|
567
|
+
if v not in c:
|
|
568
|
+
raise ValueError(v, c)
|
|
569
|
+
return v
|
|
570
|
+
|
|
571
|
+
|
|
572
|
+
def check_not_in(v: T, c: ta.Container[T]) -> T:
|
|
573
|
+
if v in c:
|
|
574
|
+
raise ValueError(v, c)
|
|
575
|
+
return v
|
|
576
|
+
|
|
577
|
+
|
|
551
578
|
def check_single(vs: ta.Iterable[T]) -> T:
|
|
552
579
|
[v] = vs
|
|
553
580
|
return v
|
|
554
581
|
|
|
555
582
|
|
|
583
|
+
def check_empty(v: SizedT) -> SizedT:
|
|
584
|
+
if len(v):
|
|
585
|
+
raise ValueError(v)
|
|
586
|
+
return v
|
|
587
|
+
|
|
588
|
+
|
|
589
|
+
def check_non_empty(v: SizedT) -> SizedT:
|
|
590
|
+
if not len(v):
|
|
591
|
+
raise ValueError(v)
|
|
592
|
+
return v
|
|
593
|
+
|
|
594
|
+
|
|
556
595
|
########################################
|
|
557
596
|
# ../../../omlish/lite/json.py
|
|
558
597
|
|
omdev/scripts/pyproject.py
CHANGED
|
@@ -92,6 +92,9 @@ TomlPos = int # ta.TypeAlias
|
|
|
92
92
|
# ../../../omlish/lite/cached.py
|
|
93
93
|
T = ta.TypeVar('T')
|
|
94
94
|
|
|
95
|
+
# ../../../omlish/lite/check.py
|
|
96
|
+
SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
|
|
97
|
+
|
|
95
98
|
# ../../packaging/specifiers.py
|
|
96
99
|
UnparsedVersion = ta.Union['Version', str]
|
|
97
100
|
UnparsedVersionVar = ta.TypeVar('UnparsedVersionVar', bound=UnparsedVersion)
|
|
@@ -1838,11 +1841,47 @@ def check_not_equal(l: T, r: T) -> T:
|
|
|
1838
1841
|
return l
|
|
1839
1842
|
|
|
1840
1843
|
|
|
1844
|
+
def check_is(l: T, r: T) -> T:
|
|
1845
|
+
if l is not r:
|
|
1846
|
+
raise ValueError(l, r)
|
|
1847
|
+
return l
|
|
1848
|
+
|
|
1849
|
+
|
|
1850
|
+
def check_is_not(l: T, r: ta.Any) -> T:
|
|
1851
|
+
if l is r:
|
|
1852
|
+
raise ValueError(l, r)
|
|
1853
|
+
return l
|
|
1854
|
+
|
|
1855
|
+
|
|
1856
|
+
def check_in(v: T, c: ta.Container[T]) -> T:
|
|
1857
|
+
if v not in c:
|
|
1858
|
+
raise ValueError(v, c)
|
|
1859
|
+
return v
|
|
1860
|
+
|
|
1861
|
+
|
|
1862
|
+
def check_not_in(v: T, c: ta.Container[T]) -> T:
|
|
1863
|
+
if v in c:
|
|
1864
|
+
raise ValueError(v, c)
|
|
1865
|
+
return v
|
|
1866
|
+
|
|
1867
|
+
|
|
1841
1868
|
def check_single(vs: ta.Iterable[T]) -> T:
|
|
1842
1869
|
[v] = vs
|
|
1843
1870
|
return v
|
|
1844
1871
|
|
|
1845
1872
|
|
|
1873
|
+
def check_empty(v: SizedT) -> SizedT:
|
|
1874
|
+
if len(v):
|
|
1875
|
+
raise ValueError(v)
|
|
1876
|
+
return v
|
|
1877
|
+
|
|
1878
|
+
|
|
1879
|
+
def check_non_empty(v: SizedT) -> SizedT:
|
|
1880
|
+
if not len(v):
|
|
1881
|
+
raise ValueError(v)
|
|
1882
|
+
return v
|
|
1883
|
+
|
|
1884
|
+
|
|
1846
1885
|
########################################
|
|
1847
1886
|
# ../../../omlish/lite/json.py
|
|
1848
1887
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: omdev
|
|
3
|
-
Version: 0.0.0.
|
|
3
|
+
Version: 0.0.0.dev130
|
|
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.dev130
|
|
16
16
|
Provides-Extra: all
|
|
17
17
|
Requires-Dist: black~=24.10; extra == "all"
|
|
18
18
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
|
@@ -109,7 +109,7 @@ omdev/ptk/apps/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
109
109
|
omdev/ptk/apps/ncdu.py,sha256=dOkEJoc2Wjv1u_Uge7Vpei_LvXldoPP5833Eia355tc,4548
|
|
110
110
|
omdev/pycharm/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
111
111
|
omdev/pycharm/__main__.py,sha256=hUPp11D024eMdT86BxXiRVtF7AGBk5W6Zn8_mEHSksY,163
|
|
112
|
-
omdev/pycharm/cli.py,sha256=
|
|
112
|
+
omdev/pycharm/cli.py,sha256=C853Ioh6h2TAiTF5D_cuEu8PfIviuQAawzlXJIphysk,3798
|
|
113
113
|
omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
114
114
|
omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
|
|
115
115
|
omdev/pyproject/cexts.py,sha256=x13piOOnNrYbA17qZLDVuR0p1sqhgEwpk4FtImX-klM,4281
|
|
@@ -122,8 +122,8 @@ omdev/scripts/bumpversion.py,sha256=Kn7fo73Hs8uJh3Hi3EIyLOlzLPWAC6dwuD_lZ3cIzuY,
|
|
|
122
122
|
omdev/scripts/execrss.py,sha256=mR0G0wERBYtQmVIn63lCIIFb5zkCM6X_XOENDFYDBKc,651
|
|
123
123
|
omdev/scripts/exectime.py,sha256=sFb376GflU6s9gNX-2-we8hgH6w5MuQNS9g6i4SqJIo,610
|
|
124
124
|
omdev/scripts/importtrace.py,sha256=oa7CtcWJVMNDbyIEiRHej6ICfABfErMeo4_haIqe18Q,14041
|
|
125
|
-
omdev/scripts/interp.py,sha256=
|
|
126
|
-
omdev/scripts/pyproject.py,sha256=
|
|
125
|
+
omdev/scripts/interp.py,sha256=iVV4QevTNDwOGaiZXhZSrbqA3Sc5tUoUd-wye9O14yE,73812
|
|
126
|
+
omdev/scripts/pyproject.py,sha256=xIkBg1B9tzZlmPqupzuh5CWCZxhhl71qzpvxEAM8NtU,175128
|
|
127
127
|
omdev/scripts/slowcat.py,sha256=lssv4yrgJHiWfOiHkUut2p8E8Tq32zB-ujXESQxFFHY,2728
|
|
128
128
|
omdev/scripts/tmpexec.py,sha256=WTYcf56Tj2qjYV14AWmV8SfT0u6Y8eIU6cKgQRvEK3c,1442
|
|
129
129
|
omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
|
|
@@ -143,9 +143,9 @@ omdev/tools/sqlrepl.py,sha256=tmFZh80-xsGM62dyQ7_UGLebChrj7IHbIPYBWDJMgVk,5741
|
|
|
143
143
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
144
144
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
|
145
145
|
omdev/tools/pawk/pawk.py,sha256=Eckymn22GfychCQcQi96BFqRo_LmiJ-EPhC8TTUJdB4,11446
|
|
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.
|
|
151
|
-
omdev-0.0.0.
|
|
146
|
+
omdev-0.0.0.dev130.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
|
147
|
+
omdev-0.0.0.dev130.dist-info/METADATA,sha256=GEYhiTG7zY1nHG26pJY_ewUU9VUwHdiGVqmLw7xKqcU,1760
|
|
148
|
+
omdev-0.0.0.dev130.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
|
|
149
|
+
omdev-0.0.0.dev130.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
|
150
|
+
omdev-0.0.0.dev130.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
|
151
|
+
omdev-0.0.0.dev130.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|