ominfra 0.0.0.dev128__py3-none-any.whl → 0.0.0.dev130__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
  """