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 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
- _LINUX_OPEN_SCRIPT = """
28
- # sudo apt install xdotool wmctrl
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 -lx
31
- # 0x03000054 0 jetbrains-pycharm.jetbrains-pycharm spinlock-ws omlish - cli.py
32
- # 0x0480004c 0 jetbrains-clion.jetbrains-clion spinlock-ws cpython - ceval.c
33
- # wmctrl -i -a 0x03000054
34
-
35
- if pgrep -x "pycharm.sh" > /dev/null; then
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
- # FIXME:
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
 
@@ -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.dev128
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.dev128
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=13q3ShvRlm6PDnLEzAuNJCafw5xLQOWd2lH2hy31wdA,2697
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=u_rdez9SARWzziYAApEDF9ub7l31xWzJRqepTcQVd-A,73116
126
- omdev/scripts/pyproject.py,sha256=rnrkzAoK1u9VrRAeLNGY0smAKk3EInhii3bceKQAZBY,174432
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.dev128.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
147
- omdev-0.0.0.dev128.dist-info/METADATA,sha256=IC1_To9nTxjRrVyFTnFCu8U2PaX2yX2c-JqJOBzUo1E,1760
148
- omdev-0.0.0.dev128.dist-info/WHEEL,sha256=PZUExdf71Ui_so67QXpySuHtCi3-J3wvF4ORK6k_S8U,91
149
- omdev-0.0.0.dev128.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
150
- omdev-0.0.0.dev128.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
151
- omdev-0.0.0.dev128.dist-info/RECORD,,
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,,