omdev 0.0.0.dev424__py3-none-any.whl → 0.0.0.dev425__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.
- omdev/{.manifests.json → .omlish-manifests.json} +1 -13
- omdev/ci/docker/packing.py +1 -1
- omdev/imgur.py +2 -2
- omdev/manifests/building.py +2 -2
- omdev/pyproject/pkg.py +1 -1
- omdev/scripts/ci.py +3139 -3018
- omdev/scripts/interp.py +17 -16
- omdev/scripts/pyproject.py +18 -17
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/METADATA +2 -2
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/RECORD +14 -19
- omdev/tools/antlr/__init__.py +0 -0
- omdev/tools/antlr/__main__.py +0 -11
- omdev/tools/antlr/cli.py +0 -62
- omdev/tools/antlr/consts.py +0 -7
- omdev/tools/antlr/gen.py +0 -188
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/WHEEL +0 -0
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/entry_points.txt +0 -0
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/licenses/LICENSE +0 -0
- {omdev-0.0.0.dev424.dist-info → omdev-0.0.0.dev425.dist-info}/top_level.txt +0 -0
omdev/scripts/interp.py
CHANGED
@@ -1393,13 +1393,13 @@ def format_num_bytes(num_bytes: int) -> str:
|
|
1393
1393
|
|
1394
1394
|
|
1395
1395
|
########################################
|
1396
|
-
# ../../../omlish/logs/filters.py
|
1396
|
+
# ../../../omlish/logs/std/filters.py
|
1397
1397
|
|
1398
1398
|
|
1399
1399
|
##
|
1400
1400
|
|
1401
1401
|
|
1402
|
-
class
|
1402
|
+
class TidLoggingFilter(logging.Filter):
|
1403
1403
|
def filter(self, record):
|
1404
1404
|
# FIXME: handle better - missing from wasm and cosmos
|
1405
1405
|
if hasattr(threading, 'get_native_id'):
|
@@ -1410,13 +1410,13 @@ class TidLogFilter(logging.Filter):
|
|
1410
1410
|
|
1411
1411
|
|
1412
1412
|
########################################
|
1413
|
-
# ../../../omlish/logs/proxy.py
|
1413
|
+
# ../../../omlish/logs/std/proxy.py
|
1414
1414
|
|
1415
1415
|
|
1416
1416
|
##
|
1417
1417
|
|
1418
1418
|
|
1419
|
-
class
|
1419
|
+
class ProxyLoggingFilterer(logging.Filterer):
|
1420
1420
|
def __init__(self, underlying: logging.Filterer) -> None: # noqa
|
1421
1421
|
self._underlying = underlying
|
1422
1422
|
|
@@ -1442,9 +1442,9 @@ class ProxyLogFilterer(logging.Filterer):
|
|
1442
1442
|
return self._underlying.filter(record)
|
1443
1443
|
|
1444
1444
|
|
1445
|
-
class
|
1445
|
+
class ProxyLoggingHandler(ProxyLoggingFilterer, logging.Handler):
|
1446
1446
|
def __init__(self, underlying: logging.Handler) -> None: # noqa
|
1447
|
-
|
1447
|
+
ProxyLoggingFilterer.__init__(self, underlying)
|
1448
1448
|
|
1449
1449
|
_underlying: logging.Handler
|
1450
1450
|
|
@@ -2754,7 +2754,7 @@ class PredicateTimeout(Timeout):
|
|
2754
2754
|
|
2755
2755
|
|
2756
2756
|
########################################
|
2757
|
-
# ../../../omlish/logs/json.py
|
2757
|
+
# ../../../omlish/logs/std/json.py
|
2758
2758
|
"""
|
2759
2759
|
TODO:
|
2760
2760
|
- translate json keys
|
@@ -2764,7 +2764,7 @@ TODO:
|
|
2764
2764
|
##
|
2765
2765
|
|
2766
2766
|
|
2767
|
-
class
|
2767
|
+
class JsonLoggingFormatter(logging.Formatter):
|
2768
2768
|
KEYS: ta.Mapping[str, bool] = {
|
2769
2769
|
'name': False,
|
2770
2770
|
'msg': False,
|
@@ -4019,6 +4019,7 @@ inj = InjectionApi()
|
|
4019
4019
|
# ../../../omlish/logs/standard.py
|
4020
4020
|
"""
|
4021
4021
|
TODO:
|
4022
|
+
- !! move to std !!
|
4022
4023
|
- structured
|
4023
4024
|
- prefixed
|
4024
4025
|
- debug
|
@@ -4040,7 +4041,7 @@ STANDARD_LOG_FORMAT_PARTS = [
|
|
4040
4041
|
]
|
4041
4042
|
|
4042
4043
|
|
4043
|
-
class
|
4044
|
+
class StandardLoggingFormatter(logging.Formatter):
|
4044
4045
|
@staticmethod
|
4045
4046
|
def build_log_format(parts: ta.Iterable[ta.Tuple[str, str]]) -> str:
|
4046
4047
|
return ' '.join(v for k, v in parts)
|
@@ -4059,7 +4060,7 @@ class StandardLogFormatter(logging.Formatter):
|
|
4059
4060
|
##
|
4060
4061
|
|
4061
4062
|
|
4062
|
-
class
|
4063
|
+
class StandardConfiguredLoggingHandler(ProxyLoggingHandler):
|
4063
4064
|
def __init_subclass__(cls, **kwargs):
|
4064
4065
|
raise TypeError('This class serves only as a marker and should not be subclassed.')
|
4065
4066
|
|
@@ -4092,7 +4093,7 @@ def configure_standard_logging(
|
|
4092
4093
|
target: ta.Optional[logging.Logger] = None,
|
4093
4094
|
force: bool = False,
|
4094
4095
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
4095
|
-
) -> ta.Optional[
|
4096
|
+
) -> ta.Optional[StandardConfiguredLoggingHandler]:
|
4096
4097
|
with _locking_logging_module_lock():
|
4097
4098
|
if target is None:
|
4098
4099
|
target = logging.root
|
@@ -4100,7 +4101,7 @@ def configure_standard_logging(
|
|
4100
4101
|
#
|
4101
4102
|
|
4102
4103
|
if not force:
|
4103
|
-
if any(isinstance(h,
|
4104
|
+
if any(isinstance(h, StandardConfiguredLoggingHandler) for h in list(target.handlers)):
|
4104
4105
|
return None
|
4105
4106
|
|
4106
4107
|
#
|
@@ -4114,14 +4115,14 @@ def configure_standard_logging(
|
|
4114
4115
|
|
4115
4116
|
formatter: logging.Formatter
|
4116
4117
|
if json:
|
4117
|
-
formatter =
|
4118
|
+
formatter = JsonLoggingFormatter()
|
4118
4119
|
else:
|
4119
|
-
formatter =
|
4120
|
+
formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
4120
4121
|
handler.setFormatter(formatter)
|
4121
4122
|
|
4122
4123
|
#
|
4123
4124
|
|
4124
|
-
handler.addFilter(
|
4125
|
+
handler.addFilter(TidLoggingFilter())
|
4125
4126
|
|
4126
4127
|
#
|
4127
4128
|
|
@@ -4134,7 +4135,7 @@ def configure_standard_logging(
|
|
4134
4135
|
|
4135
4136
|
#
|
4136
4137
|
|
4137
|
-
return
|
4138
|
+
return StandardConfiguredLoggingHandler(handler)
|
4138
4139
|
|
4139
4140
|
|
4140
4141
|
########################################
|
omdev/scripts/pyproject.py
CHANGED
@@ -2962,13 +2962,13 @@ def typing_annotations_attr() -> str:
|
|
2962
2962
|
|
2963
2963
|
|
2964
2964
|
########################################
|
2965
|
-
# ../../../omlish/logs/filters.py
|
2965
|
+
# ../../../omlish/logs/std/filters.py
|
2966
2966
|
|
2967
2967
|
|
2968
2968
|
##
|
2969
2969
|
|
2970
2970
|
|
2971
|
-
class
|
2971
|
+
class TidLoggingFilter(logging.Filter):
|
2972
2972
|
def filter(self, record):
|
2973
2973
|
# FIXME: handle better - missing from wasm and cosmos
|
2974
2974
|
if hasattr(threading, 'get_native_id'):
|
@@ -2979,13 +2979,13 @@ class TidLogFilter(logging.Filter):
|
|
2979
2979
|
|
2980
2980
|
|
2981
2981
|
########################################
|
2982
|
-
# ../../../omlish/logs/proxy.py
|
2982
|
+
# ../../../omlish/logs/std/proxy.py
|
2983
2983
|
|
2984
2984
|
|
2985
2985
|
##
|
2986
2986
|
|
2987
2987
|
|
2988
|
-
class
|
2988
|
+
class ProxyLoggingFilterer(logging.Filterer):
|
2989
2989
|
def __init__(self, underlying: logging.Filterer) -> None: # noqa
|
2990
2990
|
self._underlying = underlying
|
2991
2991
|
|
@@ -3011,9 +3011,9 @@ class ProxyLogFilterer(logging.Filterer):
|
|
3011
3011
|
return self._underlying.filter(record)
|
3012
3012
|
|
3013
3013
|
|
3014
|
-
class
|
3014
|
+
class ProxyLoggingHandler(ProxyLoggingFilterer, logging.Handler):
|
3015
3015
|
def __init__(self, underlying: logging.Handler) -> None: # noqa
|
3016
|
-
|
3016
|
+
ProxyLoggingFilterer.__init__(self, underlying)
|
3017
3017
|
|
3018
3018
|
_underlying: logging.Handler
|
3019
3019
|
|
@@ -5411,7 +5411,7 @@ class PredicateTimeout(Timeout):
|
|
5411
5411
|
|
5412
5412
|
|
5413
5413
|
########################################
|
5414
|
-
# ../../../omlish/logs/json.py
|
5414
|
+
# ../../../omlish/logs/std/json.py
|
5415
5415
|
"""
|
5416
5416
|
TODO:
|
5417
5417
|
- translate json keys
|
@@ -5421,7 +5421,7 @@ TODO:
|
|
5421
5421
|
##
|
5422
5422
|
|
5423
5423
|
|
5424
|
-
class
|
5424
|
+
class JsonLoggingFormatter(logging.Formatter):
|
5425
5425
|
KEYS: ta.Mapping[str, bool] = {
|
5426
5426
|
'name': False,
|
5427
5427
|
'msg': False,
|
@@ -6676,6 +6676,7 @@ inj = InjectionApi()
|
|
6676
6676
|
# ../../../omlish/logs/standard.py
|
6677
6677
|
"""
|
6678
6678
|
TODO:
|
6679
|
+
- !! move to std !!
|
6679
6680
|
- structured
|
6680
6681
|
- prefixed
|
6681
6682
|
- debug
|
@@ -6697,7 +6698,7 @@ STANDARD_LOG_FORMAT_PARTS = [
|
|
6697
6698
|
]
|
6698
6699
|
|
6699
6700
|
|
6700
|
-
class
|
6701
|
+
class StandardLoggingFormatter(logging.Formatter):
|
6701
6702
|
@staticmethod
|
6702
6703
|
def build_log_format(parts: ta.Iterable[ta.Tuple[str, str]]) -> str:
|
6703
6704
|
return ' '.join(v for k, v in parts)
|
@@ -6716,7 +6717,7 @@ class StandardLogFormatter(logging.Formatter):
|
|
6716
6717
|
##
|
6717
6718
|
|
6718
6719
|
|
6719
|
-
class
|
6720
|
+
class StandardConfiguredLoggingHandler(ProxyLoggingHandler):
|
6720
6721
|
def __init_subclass__(cls, **kwargs):
|
6721
6722
|
raise TypeError('This class serves only as a marker and should not be subclassed.')
|
6722
6723
|
|
@@ -6749,7 +6750,7 @@ def configure_standard_logging(
|
|
6749
6750
|
target: ta.Optional[logging.Logger] = None,
|
6750
6751
|
force: bool = False,
|
6751
6752
|
handler_factory: ta.Optional[ta.Callable[[], logging.Handler]] = None,
|
6752
|
-
) -> ta.Optional[
|
6753
|
+
) -> ta.Optional[StandardConfiguredLoggingHandler]:
|
6753
6754
|
with _locking_logging_module_lock():
|
6754
6755
|
if target is None:
|
6755
6756
|
target = logging.root
|
@@ -6757,7 +6758,7 @@ def configure_standard_logging(
|
|
6757
6758
|
#
|
6758
6759
|
|
6759
6760
|
if not force:
|
6760
|
-
if any(isinstance(h,
|
6761
|
+
if any(isinstance(h, StandardConfiguredLoggingHandler) for h in list(target.handlers)):
|
6761
6762
|
return None
|
6762
6763
|
|
6763
6764
|
#
|
@@ -6771,14 +6772,14 @@ def configure_standard_logging(
|
|
6771
6772
|
|
6772
6773
|
formatter: logging.Formatter
|
6773
6774
|
if json:
|
6774
|
-
formatter =
|
6775
|
+
formatter = JsonLoggingFormatter()
|
6775
6776
|
else:
|
6776
|
-
formatter =
|
6777
|
+
formatter = StandardLoggingFormatter(StandardLoggingFormatter.build_log_format(STANDARD_LOG_FORMAT_PARTS))
|
6777
6778
|
handler.setFormatter(formatter)
|
6778
6779
|
|
6779
6780
|
#
|
6780
6781
|
|
6781
|
-
handler.addFilter(
|
6782
|
+
handler.addFilter(TidLoggingFilter())
|
6782
6783
|
|
6783
6784
|
#
|
6784
6785
|
|
@@ -6791,7 +6792,7 @@ def configure_standard_logging(
|
|
6791
6792
|
|
6792
6793
|
#
|
6793
6794
|
|
6794
|
-
return
|
6795
|
+
return StandardConfiguredLoggingHandler(handler)
|
6795
6796
|
|
6796
6797
|
|
6797
6798
|
########################################
|
@@ -8941,7 +8942,7 @@ class PyprojectPackageGenerator(BasePyprojectPackageGenerator):
|
|
8941
8942
|
# '*.c',
|
8942
8943
|
# '*.cc',
|
8943
8944
|
# '*.h',
|
8944
|
-
# '.manifests.json',
|
8945
|
+
# '.omlish-manifests.json',
|
8945
8946
|
# 'LICENSE',
|
8946
8947
|
# ],
|
8947
8948
|
# }
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: omdev
|
3
|
-
Version: 0.0.0.
|
3
|
+
Version: 0.0.0.dev425
|
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.
|
17
|
+
Requires-Dist: omlish==0.0.0.dev425
|
18
18
|
Provides-Extra: all
|
19
19
|
Requires-Dist: black~=25.1; extra == "all"
|
20
20
|
Requires-Dist: pycparser~=2.22; extra == "all"
|
@@ -1,8 +1,8 @@
|
|
1
|
-
omdev/.manifests.json,sha256=
|
1
|
+
omdev/.omlish-manifests.json,sha256=diaasURIGOs_kTukNgRFlaZ3Vq7kRGYLvOKAP5hqeMU,11909
|
2
2
|
omdev/__about__.py,sha256=fQNmzSa1MntcPSrzg_Vpo6JRU2RbXik2NqRz0oQCApE,1202
|
3
3
|
omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
4
4
|
omdev/cmake.py,sha256=gu49t10_syXh_TUJs4POsxeFs8we8Y3XTOOPgIXmGvg,4608
|
5
|
-
omdev/imgur.py,sha256=
|
5
|
+
omdev/imgur.py,sha256=oqei705LhSnLWQTOMHMHwRecRXcpSEP90Sg4SVINPQ0,3133
|
6
6
|
omdev/pip.py,sha256=PqzAWDO_CbiZvXzJAZcCkFqWynUDls1jIgBWlrswQyA,2012
|
7
7
|
omdev/tagstrings.py,sha256=cBmAc9-TtOBupvGQ9G4T1jjjtzijx4ihQCBu6FezzV0,5490
|
8
8
|
omdev/amalg/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -90,7 +90,7 @@ omdev/ci/docker/cmds.py,sha256=1aSLQqbMJpdAMskxfeGI-he5Amb910RWvo2DE6ZgID8,3067
|
|
90
90
|
omdev/ci/docker/dataserver.py,sha256=v5q5z0HaGMMSbDhh7xsGePwBfmkn-dL8b2JVotbMVRs,5880
|
91
91
|
omdev/ci/docker/imagepulling.py,sha256=Ut-qE7nmuCxNw5l_LpeJdCcu9f7MCX_KuEFyFkBYMd0,1875
|
92
92
|
omdev/ci/docker/inject.py,sha256=vlWoIJHx2hzCai4wWspIcWnR3WhZ2bsOjq7fqq0qozE,2006
|
93
|
-
omdev/ci/docker/packing.py,sha256=
|
93
|
+
omdev/ci/docker/packing.py,sha256=ePvHU6rtMh7fq8Ijethuw8eCfjOTi-xhzBQbLSk7M0A,2021
|
94
94
|
omdev/ci/docker/repositories.py,sha256=-uNB93u3pOxsOeib4xovixtbhwGhFWVfxQ00V8Yy89Y,1278
|
95
95
|
omdev/ci/docker/utils.py,sha256=7Tobiq2hMxicGpQfTkDoU7oTa8Tyw47LpDh8C554LLs,1135
|
96
96
|
omdev/ci/docker/cacheserved/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -185,7 +185,7 @@ omdev/magic/styles.py,sha256=6LAL7XR3fkkH2rh-8nwUvdCYVHBkQxCfP0oEuPuw1Bg,670
|
|
185
185
|
omdev/manifests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
186
186
|
omdev/manifests/__main__.py,sha256=JqyVDyV7_jo-NZ3wSs5clDU_xCMlxzJv-XFohoZWQ7E,174
|
187
187
|
omdev/manifests/_dumping.py,sha256=LqrqmiiJp774xW2nxNqt4qWOzN-UhLSMJf_eUss8D0s,52703
|
188
|
-
omdev/manifests/building.py,sha256=
|
188
|
+
omdev/manifests/building.py,sha256=LHUUuu5a4_uG9kskQIFsHU-lyMnfToHyW2vS34yu35s,13846
|
189
189
|
omdev/manifests/dumping.py,sha256=WUIZDvOyO25AhnCPn5Nxj2OkMcZa1LRjGuCnpyx8AL8,4506
|
190
190
|
omdev/manifests/main.py,sha256=mYb8iM5bdwaO8jSd9_hIBSoYLf2h7e0iLb9aCCbgJ6c,2175
|
191
191
|
omdev/mypy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -266,16 +266,16 @@ omdev/pyproject/cexts.py,sha256=GLD4fe61M_fHhdMcKlcQNUoCb7MeVXY6Fw-grKH4hTU,4264
|
|
266
266
|
omdev/pyproject/cli.py,sha256=Umsu2bcJUYeeVXICaZFhKckUBT6VWuYDL4htgCGGQIs,8749
|
267
267
|
omdev/pyproject/configs.py,sha256=baNRwHtUW8S8DKCxuKlMbV3Gduujd1PyNURxQ48Nnxk,2813
|
268
268
|
omdev/pyproject/inject.py,sha256=Von8_8ofkITLoCEwDHNRAwY0AEdFQg7r2ILS8kcTMuY,325
|
269
|
-
omdev/pyproject/pkg.py,sha256=
|
269
|
+
omdev/pyproject/pkg.py,sha256=DYvq5j-Qsfi9ehUx1Dbvq3RhUsYpTq8ebzW_W9twNbQ,14902
|
270
270
|
omdev/pyproject/reqs.py,sha256=PmML_hxPyt7HL4z4gd9Sr7OlExnRLGOYsf8QpD141c0,2418
|
271
271
|
omdev/pyproject/venvs.py,sha256=_vwhcgMxWUpu1ojNyVw2Zlx1gWwpW_c5EfPMijUqwgU,1918
|
272
272
|
omdev/pyproject/resources/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
273
273
|
omdev/pyproject/resources/docker-dev.sh,sha256=DHkz5D18jok_oDolfg2mqrvGRWFoCe9GQo04dR1czcc,838
|
274
274
|
omdev/pyproject/resources/python.sh,sha256=rFaN4SiJ9hdLDXXsDTwugI6zsw6EPkgYMmtacZeTbvw,749
|
275
275
|
omdev/scripts/__init__.py,sha256=MKCvUAEQwsIvwLixwtPlpBqmkMXLCnjjXyAXvVpDwVk,91
|
276
|
-
omdev/scripts/ci.py,sha256=
|
277
|
-
omdev/scripts/interp.py,sha256=
|
278
|
-
omdev/scripts/pyproject.py,sha256=
|
276
|
+
omdev/scripts/ci.py,sha256=a3m2wAGzXGBH7JpWTHBOnBfoMk6GY7tP4l330jqu_GU,374487
|
277
|
+
omdev/scripts/interp.py,sha256=cUzE8sCoY0DmCNBl_mK1VV7TJhJ0JZP04UJM8Jrfn10,162610
|
278
|
+
omdev/scripts/pyproject.py,sha256=rPADZxS4rElSZCuujtGNt98N_yoGhauGSdsiLCWLGIQ,278810
|
279
279
|
omdev/scripts/slowcat.py,sha256=PwdT-pg62imEEb6kcOozl9_YUi-4KopvjvzWT1OmGb0,2717
|
280
280
|
omdev/scripts/tmpexec.py,sha256=t0nErDRALjTk7H0X8ADjZUIDFjlPNzOOokmjCjBHdzs,1431
|
281
281
|
omdev/tokens/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
@@ -296,11 +296,6 @@ omdev/tools/qr.py,sha256=1p4tMJmImDa4YTQQNPwQPkM8FnhGRYj6J79BJR-MNHo,1742
|
|
296
296
|
omdev/tools/shadow.py,sha256=4E2ilxa16liIvQxvgU37ITkOMrP6ufShRQfeW7wwtRc,1697
|
297
297
|
omdev/tools/shell.py,sha256=5hF_8DCtB3XrzJSfmQDsr7X3Fi9KRV4M70q9qp0KREA,2341
|
298
298
|
omdev/tools/sqlrepl.py,sha256=TcLJlElzfXqYUkfIOwhJHtXiQjXOg4xBTwSoSRDpNkg,5758
|
299
|
-
omdev/tools/antlr/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
300
|
-
omdev/tools/antlr/__main__.py,sha256=7db8YIfCp4GoU-lW7jJJDiLQ6dDrd25M7gUv1AHGj4w,170
|
301
|
-
omdev/tools/antlr/cli.py,sha256=QeO5vSUJDL43lAa2EYsLnN-jZBcNOTwB1C9Ua_h7qoA,1228
|
302
|
-
omdev/tools/antlr/consts.py,sha256=4xH4jyNE5czXRWCn65jFF0MrAodMPe_kYMWpgMxWmpo,289
|
303
|
-
omdev/tools/antlr/gen.py,sha256=spYfyfX_r_1YT4uZ_bEhtGwANenUtZvSOFck5eiNHhQ,5122
|
304
299
|
omdev/tools/git/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
305
300
|
omdev/tools/git/__main__.py,sha256=gI87SBUgTkKUcUM-RtZWnei-UUDDqzbr5aPztb-gvbE,168
|
306
301
|
omdev/tools/git/cli.py,sha256=I4AiCTz4OCzK6s8J2TJF1eYw9FH2JIK_CsdjQH_9UTE,16757
|
@@ -324,9 +319,9 @@ omdev/tools/jsonview/resources/jsonview.js,sha256=faDvXDOXKvEvjOuIlz4D3F2ReQXb_b
|
|
324
319
|
omdev/tools/pawk/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
325
320
|
omdev/tools/pawk/__main__.py,sha256=VCqeRVnqT1RPEoIrqHFSu4PXVMg4YEgF4qCQm90-eRI,66
|
326
321
|
omdev/tools/pawk/pawk.py,sha256=ao5mdrpiSU4AZ8mBozoEaV3UVlmVTnRG9wD9XP70MZE,11429
|
327
|
-
omdev-0.0.0.
|
328
|
-
omdev-0.0.0.
|
329
|
-
omdev-0.0.0.
|
330
|
-
omdev-0.0.0.
|
331
|
-
omdev-0.0.0.
|
332
|
-
omdev-0.0.0.
|
322
|
+
omdev-0.0.0.dev425.dist-info/licenses/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
|
323
|
+
omdev-0.0.0.dev425.dist-info/METADATA,sha256=Dd1v3YB72dri1LHiv9gxpaE4K4id4BRMcA6rj4Hooas,5100
|
324
|
+
omdev-0.0.0.dev425.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
325
|
+
omdev-0.0.0.dev425.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
|
326
|
+
omdev-0.0.0.dev425.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
|
327
|
+
omdev-0.0.0.dev425.dist-info/RECORD,,
|
omdev/tools/antlr/__init__.py
DELETED
File without changes
|
omdev/tools/antlr/__main__.py
DELETED
omdev/tools/antlr/cli.py
DELETED
@@ -1,62 +0,0 @@
|
|
1
|
-
import logging
|
2
|
-
import re
|
3
|
-
import subprocess
|
4
|
-
import sys
|
5
|
-
|
6
|
-
from omlish.argparse import all as ap
|
7
|
-
from omlish.logs import all as logs
|
8
|
-
|
9
|
-
from .consts import ANTLR_RUNTIME_PACKAGE
|
10
|
-
from .gen import GenPy
|
11
|
-
from .gen import get_jar_path
|
12
|
-
|
13
|
-
|
14
|
-
log = logging.getLogger(__name__)
|
15
|
-
|
16
|
-
|
17
|
-
##
|
18
|
-
|
19
|
-
|
20
|
-
class Cli(ap.Cli):
|
21
|
-
@ap.cmd()
|
22
|
-
def jar(self) -> None:
|
23
|
-
print(get_jar_path())
|
24
|
-
|
25
|
-
@ap.cmd()
|
26
|
-
def latest(self) -> None:
|
27
|
-
o, _ = subprocess.Popen(
|
28
|
-
[
|
29
|
-
sys.executable,
|
30
|
-
'-m', 'pip',
|
31
|
-
'index', 'versions',
|
32
|
-
ANTLR_RUNTIME_PACKAGE,
|
33
|
-
],
|
34
|
-
stdout=subprocess.PIPE,
|
35
|
-
).communicate()
|
36
|
-
tl = o.decode().splitlines()[0]
|
37
|
-
m = re.fullmatch(rf'{ANTLR_RUNTIME_PACKAGE} \((?P<version>[^)]+)\)', tl)
|
38
|
-
if m is None:
|
39
|
-
raise ValueError(f'Failed to parse version: {tl}')
|
40
|
-
v = m.groupdict()['version']
|
41
|
-
print(v)
|
42
|
-
|
43
|
-
#
|
44
|
-
|
45
|
-
@ap.cmd(
|
46
|
-
ap.arg('roots', nargs='+'),
|
47
|
-
)
|
48
|
-
def gen(self) -> None:
|
49
|
-
gp = GenPy(
|
50
|
-
self.args.roots,
|
51
|
-
)
|
52
|
-
gp.run()
|
53
|
-
|
54
|
-
|
55
|
-
def _main() -> None:
|
56
|
-
logs.configure_standard_logging(logging.INFO)
|
57
|
-
cli = Cli()
|
58
|
-
cli()
|
59
|
-
|
60
|
-
|
61
|
-
if __name__ == '__main__':
|
62
|
-
_main()
|
omdev/tools/antlr/consts.py
DELETED
@@ -1,7 +0,0 @@
|
|
1
|
-
ANTLR_VERSION = '4.13.2'
|
2
|
-
ANTLR_JAR_NAME = f'antlr-{ANTLR_VERSION}-complete.jar'
|
3
|
-
ANTLR_JAR_URL = f'https://www.antlr.org/download/{ANTLR_JAR_NAME}'
|
4
|
-
ANTLR_RUNTIME_PACKAGE = 'antlr4-python3-runtime'
|
5
|
-
ANTLR_GITHUB_REPO = 'antlr/antlr4'
|
6
|
-
|
7
|
-
ANTLR_RUNTIME_VENDOR = 'omlish.text.antlr._runtime._all'
|
omdev/tools/antlr/gen.py
DELETED
@@ -1,188 +0,0 @@
|
|
1
|
-
"""
|
2
|
-
TODO:
|
3
|
-
- mtime cmp
|
4
|
-
- parallelism
|
5
|
-
"""
|
6
|
-
import logging
|
7
|
-
import os.path
|
8
|
-
import re
|
9
|
-
import shutil
|
10
|
-
import subprocess
|
11
|
-
import typing as ta
|
12
|
-
|
13
|
-
from omlish import check
|
14
|
-
from omlish import lang
|
15
|
-
from omlish.os.paths import is_path_in_dir
|
16
|
-
|
17
|
-
from ...cache import data as dcache
|
18
|
-
from .consts import ANTLR_JAR_URL
|
19
|
-
from .consts import ANTLR_RUNTIME_VENDOR
|
20
|
-
|
21
|
-
|
22
|
-
log = logging.getLogger(__name__)
|
23
|
-
|
24
|
-
|
25
|
-
##
|
26
|
-
|
27
|
-
|
28
|
-
ANTLR_JAR_CACHE = dcache.UrlSpec(ANTLR_JAR_URL)
|
29
|
-
|
30
|
-
|
31
|
-
@lang.cached_function
|
32
|
-
def get_jar_path() -> str:
|
33
|
-
return dcache.default().get(ANTLR_JAR_CACHE)
|
34
|
-
|
35
|
-
|
36
|
-
##
|
37
|
-
|
38
|
-
|
39
|
-
def _find_dirs(*base_paths: str, filter: ta.Callable[[str], bool] = lambda _: True) -> ta.Sequence[str]: # noqa
|
40
|
-
return sorted(
|
41
|
-
os.path.join(dp, dn)
|
42
|
-
for base_path in base_paths
|
43
|
-
for dp, dns, fns in os.walk(base_path)
|
44
|
-
for dn in dns
|
45
|
-
if filter(dn)
|
46
|
-
)
|
47
|
-
|
48
|
-
|
49
|
-
def _find_files(*base_paths: str, filter: ta.Callable[[str], bool] = lambda _: True) -> ta.Sequence[str]: # noqa
|
50
|
-
return sorted(
|
51
|
-
os.path.join(dp, fn)
|
52
|
-
for base_path in base_paths
|
53
|
-
for dp, dns, fns in os.walk(base_path)
|
54
|
-
for fn in fns
|
55
|
-
if filter(fn)
|
56
|
-
)
|
57
|
-
|
58
|
-
|
59
|
-
class GenPy:
|
60
|
-
def __init__(
|
61
|
-
self,
|
62
|
-
root_dirs: str, # noqa
|
63
|
-
*,
|
64
|
-
out_subdir: str = '_antlr',
|
65
|
-
runtime_import: str = ANTLR_RUNTIME_VENDOR,
|
66
|
-
jar_path: str | None = None,
|
67
|
-
# parallelism: int | None = None,
|
68
|
-
) -> None:
|
69
|
-
super().__init__()
|
70
|
-
|
71
|
-
check.non_empty_str(out_subdir)
|
72
|
-
check.arg(not os.path.isabs(out_subdir) and '.' not in out_subdir and '/' not in out_subdir)
|
73
|
-
|
74
|
-
self._root_dirs = frozenset(check.non_empty_str(rd) for rd in check.not_isinstance(root_dirs, str))
|
75
|
-
self._out_subdir = out_subdir
|
76
|
-
self._runtime_import = runtime_import
|
77
|
-
self._given_jar_path = jar_path
|
78
|
-
|
79
|
-
#
|
80
|
-
|
81
|
-
def _rmtree(self, tgt: str) -> None: # noqa
|
82
|
-
if not any(is_path_in_dir(rd, tgt) for rd in self._root_dirs):
|
83
|
-
raise RuntimeError(f'Refusing to delete {tgt!r} outside of {self._root_dirs!r}')
|
84
|
-
shutil.rmtree(tgt)
|
85
|
-
|
86
|
-
#
|
87
|
-
|
88
|
-
@lang.cached_function
|
89
|
-
def jar_path(self) -> str:
|
90
|
-
if (gjp := self._given_jar_path) is not None:
|
91
|
-
return gjp
|
92
|
-
return get_jar_path()
|
93
|
-
|
94
|
-
#
|
95
|
-
|
96
|
-
def process_g4(self, g4_file: str) -> None:
|
97
|
-
ap = os.path.abspath(g4_file)
|
98
|
-
check.state(os.path.isfile(ap))
|
99
|
-
|
100
|
-
od = os.path.join(os.path.dirname(ap), self._out_subdir)
|
101
|
-
os.makedirs(od, exist_ok=True)
|
102
|
-
|
103
|
-
log.info('Compiling grammar %s', g4_file)
|
104
|
-
|
105
|
-
try:
|
106
|
-
subprocess.check_call([
|
107
|
-
'java',
|
108
|
-
'-jar', self.jar_path(),
|
109
|
-
'-Dlanguage=Python3',
|
110
|
-
'-visitor',
|
111
|
-
'-o', self._out_subdir,
|
112
|
-
os.path.basename(g4_file),
|
113
|
-
], cwd=os.path.dirname(ap))
|
114
|
-
|
115
|
-
except Exception: # noqa
|
116
|
-
log.exception('Exception in grammar %s', g4_file)
|
117
|
-
raise
|
118
|
-
|
119
|
-
def process_py(self, py_file: str) -> None:
|
120
|
-
ap = os.path.abspath(py_file)
|
121
|
-
with open(ap) as f:
|
122
|
-
in_lines = list(f)
|
123
|
-
|
124
|
-
pfp = py_file.split(os.sep)
|
125
|
-
arp = ANTLR_RUNTIME_VENDOR.split('.')
|
126
|
-
if (cpl := lang.common_prefix_len(pfp, arp)) > 0:
|
127
|
-
pkg_depth = len(os.path.normpath(py_file).split(os.path.sep))
|
128
|
-
antlr_imp = '.'.join([*([''] * (pkg_depth - cpl)), *arp[cpl:]])
|
129
|
-
else:
|
130
|
-
antlr_imp = ANTLR_RUNTIME_VENDOR
|
131
|
-
|
132
|
-
out_lines = [
|
133
|
-
'# type: ignore\n',
|
134
|
-
'# ruff: noqa\n',
|
135
|
-
'# flake8: noqa\n',
|
136
|
-
'# @omlish-generated\n',
|
137
|
-
]
|
138
|
-
|
139
|
-
for l in in_lines:
|
140
|
-
l = re.sub(r'^(from antlr4)(.*)', rf'from {antlr_imp}\2', l)
|
141
|
-
out_lines.append(l)
|
142
|
-
|
143
|
-
with open(ap, 'w') as f:
|
144
|
-
f.write(''.join(out_lines))
|
145
|
-
|
146
|
-
def process_dir(self, dir: str) -> None: # noqa
|
147
|
-
log.info('Processing directory %s', dir)
|
148
|
-
|
149
|
-
ad = os.path.join(dir, self._out_subdir)
|
150
|
-
if os.path.exists(ad):
|
151
|
-
self._rmtree(ad)
|
152
|
-
|
153
|
-
for f in os.listdir(dir):
|
154
|
-
fp = os.path.join(dir, f)
|
155
|
-
if not os.path.isfile(fp) or not f.endswith('.g4'):
|
156
|
-
continue
|
157
|
-
|
158
|
-
self.process_g4(fp)
|
159
|
-
|
160
|
-
if not os.path.exists(ad):
|
161
|
-
return
|
162
|
-
|
163
|
-
ip = os.path.join(ad, '__init__.py')
|
164
|
-
check.state(not os.path.exists(ip))
|
165
|
-
|
166
|
-
for f in list(os.listdir(ad)):
|
167
|
-
fp = os.path.join(ad, f)
|
168
|
-
if not os.path.isfile(fp):
|
169
|
-
continue
|
170
|
-
|
171
|
-
if f.split('.')[-1] in ('interp', 'tokens'):
|
172
|
-
os.unlink(fp)
|
173
|
-
|
174
|
-
elif f != '__init__.py' and f.endswith('.py'):
|
175
|
-
self.process_py(fp)
|
176
|
-
|
177
|
-
with open(ip, 'w'):
|
178
|
-
pass
|
179
|
-
|
180
|
-
def run(self) -> None:
|
181
|
-
dns = _find_dirs(*self._root_dirs, filter=lambda dn: os.path.basename(dn) == '_antlr')
|
182
|
-
for dn in dns:
|
183
|
-
self._rmtree(dn)
|
184
|
-
|
185
|
-
fns = _find_files(*self._root_dirs, filter=lambda fn: fn.endswith('.g4'))
|
186
|
-
fds = {os.path.dirname(fn) for fn in fns}
|
187
|
-
for dn in sorted(fds):
|
188
|
-
self.process_dir(dn)
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|