omdev 0.0.0.dev506__py3-none-any.whl → 0.0.0.dev509__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.

@@ -27,7 +27,7 @@
27
27
  "module": ".cexts.cmake",
28
28
  "attr": "_CLI_MODULE",
29
29
  "file": "omdev/cexts/cmake.py",
30
- "line": 335,
30
+ "line": 375,
31
31
  "value": {
32
32
  "!.cli.types.CliModule": {
33
33
  "name": "cmake",
omdev/cache/data/specs.py CHANGED
@@ -63,7 +63,7 @@ class UrlSpec(Spec):
63
63
 
64
64
  _: dc.KW_ONLY
65
65
 
66
- headers: ta.Mapping[str, str] | None = dc.field(default=None) | msh.with_field_metadata(omit_if=operator.not_)
66
+ headers: ta.Mapping[str, str] | None = dc.field(default=None) | msh.with_field_options(omit_if=operator.not_)
67
67
 
68
68
  @cached.property
69
69
  def file_name_or_default(self) -> str:
omdev/cexts/cmake.py CHANGED
@@ -55,6 +55,33 @@ log = logs.get_module_logger(globals())
55
55
  ##
56
56
 
57
57
 
58
+ CLANG_TIDY_COMMAND_TEMPLATE = """
59
+ find_program(CLANG_TIDY_EXE NAMES clang-tidy)
60
+
61
+ if(CLANG_TIDY_EXE)
62
+ add_custom_target(tidy
63
+ COMMAND ${CLANG_TIDY_EXE}
64
+ -p ${CMAKE_BINARY_DIR}
65
+ ${ALL_SOURCE_FILES}
66
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
67
+ COMMENT "Running clang-tidy on all source files"
68
+ )
69
+
70
+ add_custom_target(tidy-fix
71
+ COMMAND ${CLANG_TIDY_EXE}
72
+ -p ${CMAKE_BINARY_DIR}
73
+ -fix
74
+ ${ALL_SOURCE_FILES}
75
+ WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
76
+ COMMENT "Running clang-tidy with automatic fixes"
77
+ )
78
+ endif()
79
+ """
80
+
81
+
82
+ ##
83
+
84
+
58
85
  def _sep_str_grps(*ls: ta.Sequence[str]) -> list[str]:
59
86
  o = []
60
87
  for i, l in enumerate(ls):
@@ -112,6 +139,15 @@ class CmakeProjectGen:
112
139
  with open(os.path.join(self.cmake_dir(), '.gitignore'), 'w') as f:
113
140
  f.write('\n'.join(sorted(['/cmake-*', '/build'])))
114
141
 
142
+ def add_root_symlinks(self) -> None:
143
+ for fn in [
144
+ '.clang-tidy',
145
+ ]:
146
+ check.state(os.path.isfile(sfp := os.path.abspath(os.path.join(self._prj_root, fn))))
147
+ dfp = os.path.join(self.cmake_dir(), fn)
148
+ rp = os.path.relpath(os.path.abspath(sfp), self.cmake_dir())
149
+ os.symlink(rp, dfp)
150
+
115
151
  #
116
152
 
117
153
  @dc.dataclass(frozen=True, kw_only=True)
@@ -218,7 +254,7 @@ class CmakeProjectGen:
218
254
  ['TARGET', ext_name, 'POST_BUILD'],
219
255
  [
220
256
  ' '.join([
221
- 'COMMAND ${CMAKE_COMMAND} -E ',
257
+ 'COMMAND ${CMAKE_COMMAND} -E',
222
258
  f'copy $<TARGET_FILE_NAME:{ext_name}> ../../../{os.path.dirname(ext_src)}/{so_name}',
223
259
  ]),
224
260
  'COMMAND_EXPAND_LISTS',
@@ -235,6 +271,9 @@ class CmakeProjectGen:
235
271
  self.g.write(f'project({self.p.prj_name()})')
236
272
  self.g.write('')
237
273
 
274
+ self.g.write('set(CMAKE_EXPORT_COMPILE_COMMANDS ON)')
275
+ self.g.write('')
276
+
238
277
  self.g.write_var(cmake.Var(
239
278
  f'{self.var_prefix}_INCLUDE_DIRECTORIES',
240
279
  _sep_str_grps(
@@ -309,6 +348,7 @@ class CmakeProjectGen:
309
348
 
310
349
  self.cmake_dir()
311
350
  self.write_git_ignore()
351
+ self.add_root_symlinks()
312
352
 
313
353
  out = io.StringIO()
314
354
  clg = self._CmakeListsGen(self, out)
omdev/imgur.py CHANGED
@@ -40,7 +40,7 @@ from .home.secrets import load_secrets
40
40
 
41
41
 
42
42
  @dc.dataclass(frozen=True)
43
- @msh.update_object_metadata(unknown_field='x')
43
+ @msh.update_object_options(unknown_field='x')
44
44
  class ImageUploadData:
45
45
  id: str
46
46
  deletehash: str # noqa
@@ -66,7 +66,7 @@ class ImageUploadData:
66
66
 
67
67
 
68
68
  @dc.dataclass(frozen=True)
69
- @msh.update_object_metadata(unknown_field='x')
69
+ @msh.update_object_options(unknown_field='x')
70
70
  class ImageUploadResponse:
71
71
  status: int
72
72
  success: bool
@@ -327,6 +327,10 @@ class Package:
327
327
  unfiltered_candidates: ta.Sequence[Candidate] | None = None
328
328
  candidates: ta.Sequence[Candidate] | None = None
329
329
 
330
+ @cached.function
331
+ def candidates_by_version(self) -> ta.Mapping[Version, ta.Sequence[Candidate]]:
332
+ return col.multi_map_by(lambda c: c.version, check.not_none(self.candidates))
333
+
330
334
  latest_candidate: Candidate | None = None
331
335
  suggested_candidate: Candidate | None = None
332
336
 
@@ -511,7 +515,9 @@ def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], lis
511
515
 
512
516
  header = [
513
517
  'Package',
518
+
514
519
  'Current',
520
+ 'Age',
515
521
 
516
522
  'Suggested',
517
523
  'Age',
@@ -543,9 +549,19 @@ def format_for_columns(pkgs: ta.Sequence[Package]) -> tuple[list[list[str]], lis
543
549
 
544
550
  row = [
545
551
  pkg.dist.raw_name,
552
+
546
553
  pkg.dist.raw_version,
547
554
  ]
548
555
 
556
+ if (
557
+ (cs := pkg.candidates_by_version().get(pkg.dist.version)) and
558
+ # FIXME: lame and wrong lol
559
+ (c_ut := cs[0].upload_time()) is not None
560
+ ):
561
+ row.append(human_round_td(now_utc() - c_ut))
562
+ else:
563
+ row.append('')
564
+
549
565
  def add_c(c):
550
566
  if c is None:
551
567
  row.extend(['', ''])
@@ -0,0 +1,85 @@
1
+ import argparse
2
+ import os.path
3
+ import shlex
4
+ import shutil
5
+ import subprocess
6
+ import sys
7
+ import zipfile
8
+
9
+ from omlish.lite.check import check
10
+
11
+
12
+ ##
13
+
14
+
15
+ def _main() -> None:
16
+ parser = argparse.ArgumentParser()
17
+ parser.add_argument('rs_pkg', nargs='*')
18
+ args = parser.parse_args()
19
+
20
+ pkgs_dir = '.pkg'
21
+ if not os.path.isdir(pkgs_dir):
22
+ raise RuntimeError(f'{pkgs_dir=} does not exist')
23
+
24
+ if not (rs_pkgs := args.rs_pkg):
25
+ rs_pkgs = sorted(
26
+ n
27
+ for n in os.listdir(pkgs_dir)
28
+ if os.path.isdir(p := os.path.join(pkgs_dir, n))
29
+ and n.endswith('-rs')
30
+ )
31
+
32
+ for rs_pkg in rs_pkgs:
33
+ print(rs_pkg)
34
+
35
+ rs_pkg_dir = os.path.join(pkgs_dir, rs_pkg)
36
+
37
+ for n in os.listdir(rs_pkg_dir):
38
+ p = os.path.join(rs_pkg_dir, n)
39
+ if not os.path.isdir(p):
40
+ continue
41
+ if n == 'dist' or n.endswith('.egg-info'):
42
+ shutil.rmtree(p)
43
+
44
+ subprocess.run(
45
+ [
46
+ 'sh', '-c', f'{shlex.quote(sys.executable)} "$@"', '--', # sys.executable,
47
+ '-m',
48
+ 'build',
49
+ ],
50
+ cwd=rs_pkg_dir,
51
+ env={
52
+ **os.environ,
53
+ 'OMLISH_PYCHARM_RUNHACK_ENABLED': '0',
54
+ },
55
+ check=True,
56
+ )
57
+
58
+ dist_dir = os.path.join(rs_pkg_dir, 'dist')
59
+ whl_ns = [
60
+ n
61
+ for n in os.listdir(dist_dir)
62
+ if os.path.isfile(os.path.join(dist_dir, n))
63
+ and n.endswith('.whl')
64
+ ]
65
+ whl_n = check.single(whl_ns)
66
+ whl_path = os.path.join(dist_dir, whl_n)
67
+
68
+ with zipfile.ZipFile(whl_path) as zf:
69
+ for zn in zf.namelist():
70
+ if not zn.endswith('.so'):
71
+ continue
72
+
73
+ zi = zf.getinfo(zn)
74
+ if zi.is_dir():
75
+ continue
76
+
77
+ print(zn)
78
+
79
+ zf.extract(zi)
80
+
81
+ print()
82
+
83
+
84
+ if __name__ == '__main__':
85
+ _main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: omdev
3
- Version: 0.0.0.dev506
3
+ Version: 0.0.0.dev509
4
4
  Summary: omdev
5
5
  Author: wrmsr
6
6
  License-Expression: BSD-3-Clause
@@ -14,7 +14,7 @@ Classifier: Programming Language :: Python :: 3.13
14
14
  Requires-Python: >=3.13
15
15
  Description-Content-Type: text/markdown
16
16
  License-File: LICENSE
17
- Requires-Dist: omlish==0.0.0.dev506
17
+ Requires-Dist: omlish==0.0.0.dev509
18
18
  Provides-Extra: all
19
19
  Requires-Dist: black~=26.1; extra == "all"
20
20
  Requires-Dist: pycparser~=2.23; extra == "all"
@@ -1,9 +1,9 @@
1
- omdev/.omlish-manifests.json,sha256=5Iang5DNd0hsSQQnKms9H4OA_xphlpE1SOWk6NNePOE,11671
1
+ omdev/.omlish-manifests.json,sha256=RoDWqg2je7u5jnJo8Gb7QuVMKsrAGNmxvFGXiLaBoUk,11671
2
2
  omdev/README.md,sha256=IxhRiW6wAsK4XKR9lmOlpkTbX8vcNcQwqal8HelK0yU,3326
3
3
  omdev/__about__.py,sha256=VvUiwWTVeZ3cQDNaFD-3L3juUvkoLH-o7WR4DfXGexE,1321
4
4
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
5
5
  omdev/cmake.py,sha256=gu49t10_syXh_TUJs4POsxeFs8we8Y3XTOOPgIXmGvg,4608
6
- omdev/imgur.py,sha256=oqei705LhSnLWQTOMHMHwRecRXcpSEP90Sg4SVINPQ0,3133
6
+ omdev/imgur.py,sha256=gzYCBH-ehX-gbL4dV7RoxPOjKcQzSfsBxsg2PMeeD6I,3131
7
7
  omdev/pip.py,sha256=PqzAWDO_CbiZvXzJAZcCkFqWynUDls1jIgBWlrswQyA,2012
8
8
  omdev/tagstrings.py,sha256=cBmAc9-TtOBupvGQ9G4T1jjjtzijx4ihQCBu6FezzV0,5490
9
9
  omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -36,7 +36,7 @@ omdev/cache/data/cache.py,sha256=h5xQUxiye2exsMUWh1pDeMz_t3LEC75kvloIDg57xMI,766
36
36
  omdev/cache/data/consts.py,sha256=d6W_aeMqgah6PmPYi9RA8Be54oQ4BcNCy8kDQ7FlB_Q,26
37
37
  omdev/cache/data/defaults.py,sha256=NL_mT7kaSLm2Mk9VO5wdSu-DIcHTR1KgcihJqdSd4TY,312
38
38
  omdev/cache/data/manifests.py,sha256=NweXxbkuLMBG1DiUFliOSYeXBrLPMIY4GA_gOZzHwho,949
39
- omdev/cache/data/specs.py,sha256=HdOkg-WCtanJMX-uysLuKfHACX_MW7hrCV5sReXgRJM,2467
39
+ omdev/cache/data/specs.py,sha256=2QWn-WUCbUF6zDQXjJWtagtx2f_Zqp6Q6IVhNExKam4,2466
40
40
  omdev/capi/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
41
41
  omdev/capi/darwin/__init__.py,sha256=iAlc3ReV3LJOv5X9zGME1FKeZ2yf0auUuj1I3sGSo4E,86
42
42
  omdev/capi/darwin/aps.py,sha256=_DAGaOZYk9T1VoO22H5ZiV8F1qeTIQDO7UkYSj5UisE,1278
@@ -54,7 +54,7 @@ omdev/cc/srclangs.py,sha256=3u_APHgknuc-BPRQSDISwSzouluKsnLlBxodp-XCl_E,728
54
54
  omdev/cexts/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
55
55
  omdev/cexts/_boilerplate.cc,sha256=tUTFKyMpammFj-7bF8DbN6jv67Vn7qrwCFDoAgarof8,1753
56
56
  omdev/cexts/build.py,sha256=JxEuqSpspnY6kWn8eB89FjcSjF4bpNgVYNeIvwmWehY,2659
57
- omdev/cexts/cmake.py,sha256=rwsUVjOMjNR9nBCMgK-oWLl0aD5WWUYzVQEYcZ5BZGs,10185
57
+ omdev/cexts/cmake.py,sha256=ySsPuy4va3TlKygvt2_QxKvA29nikdkETaq_Y1tAgok,11285
58
58
  omdev/cexts/importhook.py,sha256=GZ04bE6tMQ8uQUUzGr22Rt9cwyI6kkoK4t7xpLP2Lrs,3562
59
59
  omdev/cexts/magic.py,sha256=DglhjCXEiL28pFTN4lrmUW6ZLn6HaumR13ptyaFOez4,131
60
60
  omdev/cexts/scan.py,sha256=94UqVgxBrAHn_VyW_ZA3-hB_R6pWIJRWqvtSBEg_O4U,1673
@@ -284,7 +284,7 @@ omdev/py/tokens/utils.py,sha256=_dlXx-_npiGeZkMZVbXaXQDGts9yY8UnEJcT_bwPj0A,2084
284
284
  omdev/py/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
285
285
  omdev/py/tools/importscan.py,sha256=OYPZBg__u6On416tcmYfRTMkjr1ZlFcOAy9AafJ8iuo,4648
286
286
  omdev/py/tools/mkrelimp.py,sha256=kQAADYW1f1Y2WbIuqWOFNWJl96oT7nqW38XPCkLIyjQ,4039
287
- omdev/py/tools/pipdepup.py,sha256=3s3rTlj0KcVriEw_x3wLuoqQnRjdPCydDWW7fhliUl4,20082
287
+ omdev/py/tools/pipdepup.py,sha256=mSso04OyE3rSU3l9VBQ1CpsvIRB2SM4o1AbqyUsVi2c,20594
288
288
  omdev/pyproject/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
289
289
  omdev/pyproject/__main__.py,sha256=gn3Rl1aYPYdiTtEqa9ifi0t-e4ZwPY0vhJ4UXvYdJDY,165
290
290
  omdev/pyproject/cli.py,sha256=erEo9VT7c-Fwtq0lJbb_IkWBPqBAAtiui8Xna93yk3Y,7874
@@ -299,6 +299,7 @@ omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQ
299
299
  omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
300
300
  omdev/pyproject/tools/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
301
301
  omdev/pyproject/tools/aboutdeps.py,sha256=XmvSKsn3kdY0K2Llh-jhNskm4sK46Y8fWnUlPXBrI34,1592
302
+ omdev/pyproject/tools/buildrs.py,sha256=tL7HnkXvjF19W3C0tlxq7yJ08lceUyUH1q84Kn7-fNo,2023
302
303
  omdev/pyproject/tools/pyversions.py,sha256=CV6qV5nlrt1or7OQVf3bYIKLfyEdjmgedQVVlr-DroM,1047
303
304
  omdev/rs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
304
305
  omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
@@ -380,9 +381,9 @@ omdev/tui/textual/autocomplete/widget.py,sha256=1UgWqDT0d9wD6w7MNaZBjgj0o9FohYXy
380
381
  omdev/tui/textual/debug/__init__.py,sha256=RW9-Toj5_JnXBJCnRiXpXLpRA__MxG01xW1h_iNuUTY,189
381
382
  omdev/tui/textual/debug/dominfo.py,sha256=1iH1xbZY-zUoIyfmdvSzVNjGqeeOnBcjeDI2V1Xn3rg,4401
382
383
  omdev/tui/textual/debug/screen.py,sha256=w4cbRJWemcu5jBomGDmVtgtjiaWOS1Wkw1Mc6mu-5Zc,594
383
- omdev-0.0.0.dev506.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
384
- omdev-0.0.0.dev506.dist-info/METADATA,sha256=-JBWJ65uIhhMinlsBPjrg_JJrobPzIkX4v5epiaEjig,5372
385
- omdev-0.0.0.dev506.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
386
- omdev-0.0.0.dev506.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
387
- omdev-0.0.0.dev506.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
388
- omdev-0.0.0.dev506.dist-info/RECORD,,
384
+ omdev-0.0.0.dev509.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
385
+ omdev-0.0.0.dev509.dist-info/METADATA,sha256=5N5gJW5cV8ft6Fd6_YAHcMDYE9poLnAyvhs63U7jmZo,5372
386
+ omdev-0.0.0.dev509.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
387
+ omdev-0.0.0.dev509.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
388
+ omdev-0.0.0.dev509.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
389
+ omdev-0.0.0.dev509.dist-info/RECORD,,