ominfra 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.
@@ -85,6 +85,9 @@ if sys.version_info < (3, 8):
85
85
  # ../../../../omlish/lite/cached.py
86
86
  T = ta.TypeVar('T')
87
87
 
88
+ # ../../../../omlish/lite/check.py
89
+ SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
90
+
88
91
 
89
92
  ########################################
90
93
  # ../../configs.py
@@ -189,11 +192,47 @@ def check_not_equal(l: T, r: T) -> T:
189
192
  return l
190
193
 
191
194
 
195
+ def check_is(l: T, r: T) -> T:
196
+ if l is not r:
197
+ raise ValueError(l, r)
198
+ return l
199
+
200
+
201
+ def check_is_not(l: T, r: ta.Any) -> T:
202
+ if l is r:
203
+ raise ValueError(l, r)
204
+ return l
205
+
206
+
207
+ def check_in(v: T, c: ta.Container[T]) -> T:
208
+ if v not in c:
209
+ raise ValueError(v, c)
210
+ return v
211
+
212
+
213
+ def check_not_in(v: T, c: ta.Container[T]) -> T:
214
+ if v in c:
215
+ raise ValueError(v, c)
216
+ return v
217
+
218
+
192
219
  def check_single(vs: ta.Iterable[T]) -> T:
193
220
  [v] = vs
194
221
  return v
195
222
 
196
223
 
224
+ def check_empty(v: SizedT) -> SizedT:
225
+ if len(v):
226
+ raise ValueError(v)
227
+ return v
228
+
229
+
230
+ def check_non_empty(v: SizedT) -> SizedT:
231
+ if not len(v):
232
+ raise ValueError(v)
233
+ return v
234
+
235
+
197
236
  ########################################
198
237
  # ../../../../omlish/lite/json.py
199
238
 
@@ -44,6 +44,9 @@ if sys.version_info < (3, 8):
44
44
  # ../../../omlish/lite/cached.py
45
45
  T = ta.TypeVar('T')
46
46
 
47
+ # ../../../omlish/lite/check.py
48
+ SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
49
+
47
50
 
48
51
  ########################################
49
52
  # ../bootstrap.py
@@ -272,11 +275,47 @@ def check_not_equal(l: T, r: T) -> T:
272
275
  return l
273
276
 
274
277
 
278
+ def check_is(l: T, r: T) -> T:
279
+ if l is not r:
280
+ raise ValueError(l, r)
281
+ return l
282
+
283
+
284
+ def check_is_not(l: T, r: ta.Any) -> T:
285
+ if l is r:
286
+ raise ValueError(l, r)
287
+ return l
288
+
289
+
290
+ def check_in(v: T, c: ta.Container[T]) -> T:
291
+ if v not in c:
292
+ raise ValueError(v, c)
293
+ return v
294
+
295
+
296
+ def check_not_in(v: T, c: ta.Container[T]) -> T:
297
+ if v in c:
298
+ raise ValueError(v, c)
299
+ return v
300
+
301
+
275
302
  def check_single(vs: ta.Iterable[T]) -> T:
276
303
  [v] = vs
277
304
  return v
278
305
 
279
306
 
307
+ def check_empty(v: SizedT) -> SizedT:
308
+ if len(v):
309
+ raise ValueError(v)
310
+ return v
311
+
312
+
313
+ def check_non_empty(v: SizedT) -> SizedT:
314
+ if not len(v):
315
+ raise ValueError(v)
316
+ return v
317
+
318
+
280
319
  ########################################
281
320
  # ../../../omlish/lite/json.py
282
321
 
@@ -59,6 +59,9 @@ TomlPos = int # ta.TypeAlias
59
59
  # ../../../../../omlish/lite/cached.py
60
60
  T = ta.TypeVar('T')
61
61
 
62
+ # ../../../../../omlish/lite/check.py
63
+ SizedT = ta.TypeVar('SizedT', bound=ta.Sized)
64
+
62
65
  # ../../../../../omlish/lite/contextmanagers.py
63
66
  ExitStackedT = ta.TypeVar('ExitStackedT', bound='ExitStacked')
64
67
 
@@ -968,11 +971,47 @@ def check_not_equal(l: T, r: T) -> T:
968
971
  return l
969
972
 
970
973
 
974
+ def check_is(l: T, r: T) -> T:
975
+ if l is not r:
976
+ raise ValueError(l, r)
977
+ return l
978
+
979
+
980
+ def check_is_not(l: T, r: ta.Any) -> T:
981
+ if l is r:
982
+ raise ValueError(l, r)
983
+ return l
984
+
985
+
986
+ def check_in(v: T, c: ta.Container[T]) -> T:
987
+ if v not in c:
988
+ raise ValueError(v, c)
989
+ return v
990
+
991
+
992
+ def check_not_in(v: T, c: ta.Container[T]) -> T:
993
+ if v in c:
994
+ raise ValueError(v, c)
995
+ return v
996
+
997
+
971
998
  def check_single(vs: ta.Iterable[T]) -> T:
972
999
  [v] = vs
973
1000
  return v
974
1001
 
975
1002
 
1003
+ def check_empty(v: SizedT) -> SizedT:
1004
+ if len(v):
1005
+ raise ValueError(v)
1006
+ return v
1007
+
1008
+
1009
+ def check_non_empty(v: SizedT) -> SizedT:
1010
+ if not len(v):
1011
+ raise ValueError(v)
1012
+ return v
1013
+
1014
+
976
1015
  ########################################
977
1016
  # ../../../../../omlish/lite/json.py
978
1017
 
@@ -1730,6 +1769,103 @@ class DelimitingBuffer:
1730
1769
  i = p
1731
1770
 
1732
1771
 
1772
+ class ReadableListBuffer:
1773
+ def __init__(self) -> None:
1774
+ super().__init__()
1775
+ self._lst: list[bytes] = []
1776
+
1777
+ def feed(self, d: bytes) -> None:
1778
+ if d:
1779
+ self._lst.append(d)
1780
+
1781
+ def _chop(self, i: int, e: int) -> bytes:
1782
+ lst = self._lst
1783
+ d = lst[i]
1784
+
1785
+ o = b''.join([
1786
+ *lst[:i],
1787
+ d[:e],
1788
+ ])
1789
+
1790
+ self._lst = [
1791
+ *([d[e:]] if e < len(d) else []),
1792
+ *lst[i + 1:],
1793
+ ]
1794
+
1795
+ return o
1796
+
1797
+ def read(self, n: ta.Optional[int] = None) -> ta.Optional[bytes]:
1798
+ if n is None:
1799
+ o = b''.join(self._lst)
1800
+ self._lst = []
1801
+ return o
1802
+
1803
+ if not (lst := self._lst):
1804
+ return None
1805
+
1806
+ c = 0
1807
+ for i, d in enumerate(lst):
1808
+ r = n - c
1809
+ if (l := len(d)) >= r:
1810
+ return self._chop(i, r)
1811
+ c += l
1812
+
1813
+ return None
1814
+
1815
+ def read_until(self, delim: bytes = b'\n') -> ta.Optional[bytes]:
1816
+ if not (lst := self._lst):
1817
+ return None
1818
+
1819
+ for i, d in enumerate(lst):
1820
+ if (p := d.find(delim)) >= 0:
1821
+ return self._chop(i, p + len(delim))
1822
+
1823
+ return None
1824
+
1825
+
1826
+ class IncrementalWriteBuffer:
1827
+ def __init__(
1828
+ self,
1829
+ data: bytes,
1830
+ *,
1831
+ write_size: int = 0x10000,
1832
+ ) -> None:
1833
+ super().__init__()
1834
+
1835
+ check_non_empty(data)
1836
+ self._len = len(data)
1837
+ self._write_size = write_size
1838
+
1839
+ self._lst = [
1840
+ data[i:i + write_size]
1841
+ for i in range(0, len(data), write_size)
1842
+ ]
1843
+ self._pos = 0
1844
+
1845
+ @property
1846
+ def rem(self) -> int:
1847
+ return self._len - self._pos
1848
+
1849
+ def write(self, fn: ta.Callable[[bytes], int]) -> int:
1850
+ lst = check_non_empty(self._lst)
1851
+
1852
+ t = 0
1853
+ for i, d in enumerate(lst): # noqa
1854
+ n = fn(check_non_empty(d))
1855
+ if not n:
1856
+ break
1857
+ t += n
1858
+
1859
+ if t:
1860
+ self._lst = [
1861
+ *([d[n:]] if n < len(d) else []),
1862
+ *lst[i + 1:],
1863
+ ]
1864
+ self._pos += t
1865
+
1866
+ return t
1867
+
1868
+
1733
1869
  ########################################
1734
1870
  # ../../../../../omlish/lite/logs.py
1735
1871
  """