omdev 0.0.0.dev81__py3-none-any.whl → 0.0.0.dev83__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 CHANGED
@@ -167,6 +167,18 @@
167
167
  }
168
168
  }
169
169
  },
170
+ {
171
+ "module": ".scripts.slowcat",
172
+ "attr": "_CLI_MODULE",
173
+ "file": "omdev/scripts/slowcat.py",
174
+ "line": 113,
175
+ "value": {
176
+ "$.cli.types.CliModule": {
177
+ "cmd_name": "slowcat",
178
+ "mod_name": "omdev.scripts.slowcat"
179
+ }
180
+ }
181
+ },
170
182
  {
171
183
  "module": ".tools.dockertools",
172
184
  "attr": "_CLI_MODULE",
@@ -0,0 +1,121 @@
1
+ #!/usr/bin/env python3
2
+ # @omlish-script
3
+ import argparse
4
+ import contextlib
5
+ import os
6
+ import random
7
+ import sys
8
+ import time
9
+ import typing as ta
10
+
11
+
12
+ T = ta.TypeVar('T')
13
+
14
+
15
+ DEFAULT_SLEEP_N = 128
16
+ DEFAULT_SLEEP_S = .5
17
+
18
+
19
+ def _main() -> None:
20
+ parser = argparse.ArgumentParser()
21
+
22
+ parser.add_argument('files', nargs='*')
23
+
24
+ parser.add_argument('-b', '--buffer-size', type=int, default=0x4000)
25
+
26
+ parser.add_argument('-i', '--initial-sleep')
27
+
28
+ parser.add_argument('-n', '--sleep-n')
29
+ parser.add_argument('-s', '--sleep-s')
30
+
31
+ args = parser.parse_args()
32
+
33
+ #
34
+
35
+ def parse_range(s: str, d: T) -> tuple[T, T]:
36
+ if not s:
37
+ return d, d
38
+ elif '-' in s:
39
+ l, r = map(type(d), s.split('-'))
40
+ return l, r
41
+ else:
42
+ l = r = type(d)(s) # type: ignore
43
+ return l, r
44
+
45
+ sleep_s_min, sleep_s_max = parse_range(args.sleep_s, DEFAULT_SLEEP_S)
46
+ sleep_n_min, sleep_n_max = parse_range(args.sleep_n, DEFAULT_SLEEP_N)
47
+
48
+ #
49
+
50
+ in_files: list
51
+ if args.files:
52
+ in_files = args.files
53
+ else:
54
+ in_files = [sys.stdin.buffer]
55
+
56
+ #
57
+
58
+ of = sys.stdout.buffer
59
+
60
+ #
61
+
62
+ def next_sleep() -> int:
63
+ if sleep_n_min != sleep_n_max:
64
+ o = random.randint(sleep_n_min, sleep_n_max)
65
+ else:
66
+ o = sleep_n_min
67
+ return n + o
68
+
69
+ def do_sleep() -> None:
70
+ if sleep_s_min != sleep_s_max:
71
+ s = random.uniform(sleep_s_min, sleep_s_max)
72
+ else:
73
+ s = sleep_s_min
74
+ time.sleep(s)
75
+
76
+ #
77
+
78
+ if args.initial_sleep:
79
+ do_sleep()
80
+
81
+ n = 0
82
+ ns = next_sleep()
83
+
84
+ for in_file in in_files:
85
+ with contextlib.ExitStack() as es:
86
+ if isinstance(in_file, str):
87
+ fo = es.enter_context(open(in_file, 'rb'))
88
+ else:
89
+ fo = in_file
90
+
91
+ fd = fo.fileno()
92
+ while buf := os.read(fd, args.buffer_size):
93
+ p = 0
94
+ while p < len(buf):
95
+ c = ns - n
96
+ r = len(buf) - p
97
+ if r >= c:
98
+ r = c
99
+ sleep = True
100
+ else:
101
+ sleep = False
102
+
103
+ of.write(buf[p:p + r])
104
+ of.flush()
105
+
106
+ n += len(buf)
107
+ p += r
108
+ if sleep:
109
+ do_sleep()
110
+ ns = next_sleep()
111
+
112
+
113
+ # @omlish-manifest
114
+ _CLI_MODULE = {'$omdev.cli.types.CliModule': {
115
+ 'cmd_name': 'slowcat',
116
+ 'mod_name': __name__,
117
+ }}
118
+
119
+
120
+ if __name__ == '__main__':
121
+ _main()
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: omdev
3
- Version: 0.0.0.dev81
3
+ Version: 0.0.0.dev83
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.dev81
15
+ Requires-Dist: omlish ==0.0.0.dev83
16
16
  Provides-Extra: all
17
17
  Requires-Dist: black ~=24.10 ; extra == 'all'
18
18
  Requires-Dist: pycparser ~=2.22 ; extra == 'all'
@@ -1,4 +1,4 @@
1
- omdev/.manifests.json,sha256=TmB_ctSLXsOq5UGeoiGLy5FoI490OCjT2Q2kRWyWG9g,5993
1
+ omdev/.manifests.json,sha256=eAMErpBPPY0YM3fBzmtDzhtOO1SEvG3iYBf2jZi3LNU,6257
2
2
  omdev/__about__.py,sha256=do_MjpnIpB_DX4GL4VV9gFQzs6bkoyDIYu29yB3rYxw,1131
3
3
  omdev/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
4
  omdev/bracepy.py,sha256=I8EdqtDvxzAi3I8TuMEW-RBfwXfqKbwp06CfOdj3L1o,2743
@@ -112,6 +112,7 @@ omdev/scripts/exectime.py,sha256=dBdn3KV2jR6tCrzGvb9dTl2uGe2vNpLxmHMtExmnaiM,410
112
112
  omdev/scripts/importtrace.py,sha256=Jbo3Yk2RAbE8_tJ97iTcVNpoxCJxrRb2tl1W_CV3NG0,14067
113
113
  omdev/scripts/interp.py,sha256=2poCQ_45tO0-X16KeoxiAyuTfltSjnPETejlYEm9VY4,71527
114
114
  omdev/scripts/pyproject.py,sha256=wtmF5ji8fHw2qzc1aEve09Ozv0ncuZmTQ8IbKCJVAQ0,158223
115
+ omdev/scripts/slowcat.py,sha256=X88VadiNkj_OiCxKaj7pF3khfjhxnHQt7_MLiGw-8Zg,2619
115
116
  omdev/toml/__init__.py,sha256=Y3l4WY4JRi2uLG6kgbGp93fuGfkxkKwZDvhsa0Rwgtk,15
116
117
  omdev/toml/parser.py,sha256=84bn09uhYHwQGyfww6Rw6y1RxPAE_HDltODOSakcqDM,29186
117
118
  omdev/toml/writer.py,sha256=lk3on3YXVbWuLJa-xsOzOhs1bBAT1vXqw4mBbluZl_w,3040
@@ -125,9 +126,9 @@ omdev/tools/piptools.py,sha256=-jR5q3w4sHqntxCLExFCBNIARB788FUsAbJ62PK2sBU,2774
125
126
  omdev/tools/proftools.py,sha256=8ZU9x_Dq8eT2ZFwU9sJpDIvxcIn9qBc8y2ELKPb5e5M,1382
126
127
  omdev/tools/rsttool.py,sha256=suwsfseUf8GH8rYmYygTUdif-Jk_bX1g9fYRLXaKkmM,1340
127
128
  omdev/tools/sqlrepl.py,sha256=tmFZh80-xsGM62dyQ7_UGLebChrj7IHbIPYBWDJMgVk,5741
128
- omdev-0.0.0.dev81.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
129
- omdev-0.0.0.dev81.dist-info/METADATA,sha256=WkaRhTVt9fO7VrK402ddG8iRccBhkL1NOf3y4iOv3cg,1492
130
- omdev-0.0.0.dev81.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
131
- omdev-0.0.0.dev81.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
132
- omdev-0.0.0.dev81.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
133
- omdev-0.0.0.dev81.dist-info/RECORD,,
129
+ omdev-0.0.0.dev83.dist-info/LICENSE,sha256=B_hVtavaA8zCYDW99DYdcpDLKz1n3BBRjZrcbv8uG8c,1451
130
+ omdev-0.0.0.dev83.dist-info/METADATA,sha256=1gRtDyrY6CxdMBdLWmCfubteIxRc7LRguhd6NAtSP4c,1492
131
+ omdev-0.0.0.dev83.dist-info/WHEEL,sha256=OVMc5UfuAQiSplgO0_WdW7vXVGAt9Hdd6qtN4HotdyA,91
132
+ omdev-0.0.0.dev83.dist-info/entry_points.txt,sha256=dHLXFmq5D9B8qUyhRtFqTGWGxlbx3t5ejedjrnXNYLU,33
133
+ omdev-0.0.0.dev83.dist-info/top_level.txt,sha256=1nr7j30fEWgLYHW3lGR9pkdHkb7knv1U1ES1XRNVQ6k,6
134
+ omdev-0.0.0.dev83.dist-info/RECORD,,