python-filewrap 0.3.0.1__tar.gz → 0.3.1.1__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-filewrap
3
- Version: 0.3.0.1
3
+ Version: 0.3.1.1
4
4
  Summary: Python file wrappers.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -2,16 +2,17 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  __author__ = "ChenyangGao <https://chenyanggao.github.io>"
5
- __version__ = (0, 3, 0)
5
+ __version__ = (0, 3, 1)
6
6
  __all__ = [
7
7
  "SupportsRead", "SupportsReadinto", "SupportsWrite", "SupportsSeek",
8
8
  "AsyncBufferedReader", "AsyncTextIOWrapper", "buffer_length", "to_string_buffer",
9
- "to_bytes_buffer", "bio_chunk_iter", "bio_chunk_async_iter", "bio_skip_iter",
10
- "bio_skip_async_iter", "bytes_iter", "bytes_async_iter", "bytes_iter_skip",
11
- "bytes_async_iter_skip", "bytes_iter_to_reader", "bytes_iter_to_async_reader",
12
- "bytes_to_chunk_iter", "bytes_to_chunk_async_iter", "bytes_ensure_part_iter",
13
- "bytes_ensure_part_async_iter", "progress_bytes_iter", "progress_bytes_async_iter",
14
- "copyfileobj", "copyfileobj_async", "bound_bytes_reader", "bound_async_bytes_reader",
9
+ "to_bytes_buffer", "to_bytes_view", "bio_chunk_iter", "bio_chunk_async_iter",
10
+ "bio_skip_iter", "bio_skip_async_iter", "bytes_iter", "bytes_async_iter",
11
+ "bytes_iter_skip", "bytes_async_iter_skip", "bytes_iter_to_reader",
12
+ "bytes_iter_to_async_reader", "bytes_to_chunk_iter", "bytes_to_chunk_async_iter",
13
+ "bytes_ensure_part_iter", "bytes_ensure_part_async_iter", "progress_bytes_iter",
14
+ "progress_bytes_async_iter", "copyfileobj", "copyfileobj_async", "bound_bytes_reader",
15
+ "bound_async_bytes_reader",
15
16
  ]
16
17
 
17
18
  from array import array
@@ -263,7 +264,7 @@ class AsyncBufferedReader(BufferedReader):
263
264
  length = buffer_length(data)
264
265
  self._pos += buffer_length(prev_data) + length
265
266
  if BUFSIZE <= length:
266
- buf_view[:] = memoryview(data).cast("B")[-BUFSIZE:]
267
+ buf_view[:] = to_bytes_view(data)[-BUFSIZE:]
267
268
  self._buf_pos = self._buf_stop = BUFSIZE
268
269
  else:
269
270
  buf_pos_stop = buf_stop + length
@@ -308,7 +309,7 @@ class AsyncBufferedReader(BufferedReader):
308
309
  else:
309
310
  return 0
310
311
  BUFSIZE = buffer_length(buf_view)
311
- buffer_view = memoryview(buffer).cast("B")
312
+ buffer_view = to_bytes_view(buffer)
312
313
  buffer_view[:buf_size] = buf_view[buf_pos:buf_stop]
313
314
  buf_pos = self._buf_pos = buf_stop
314
315
  self._pos += buf_size
@@ -380,7 +381,7 @@ class AsyncBufferedReader(BufferedReader):
380
381
  else:
381
382
  return 0
382
383
  BUFSIZE = buffer_length(buf_view)
383
- buffer_view = memoryview(buffer).cast("B")
384
+ buffer_view = to_bytes_view(buffer)
384
385
  buffer_view[:buf_size] = buf_view[buf_pos:buf_stop]
385
386
  buf_pos = self._buf_pos = buf_stop
386
387
  self._pos += buf_size
@@ -471,7 +472,7 @@ class AsyncBufferedReader(BufferedReader):
471
472
  prev_data = buf_view[buf_pos:buf_stop].tobytes()
472
473
  self._pos += buffer_length(prev_data) + length
473
474
  if BUFSIZE <= length:
474
- buf_view[:] = memoryview(data).cast("B")[-BUFSIZE:]
475
+ buf_view[:] = to_bytes_view(data)[-BUFSIZE:]
475
476
  self._buf_pos = self._buf_stop = BUFSIZE
476
477
  else:
477
478
  buf_pos_stop = buf_stop + length
@@ -657,7 +658,7 @@ class AsyncTextIOWrapper(TextIOWrapper):
657
658
  size -= len(text)
658
659
  return n
659
660
 
660
- cache: bytes | memoryview = memoryview(data).cast("B")
661
+ cache: bytes | memoryview = to_bytes_view(data)
661
662
  while size and buffer_length(data) == size:
662
663
  while cache:
663
664
  try:
@@ -847,6 +848,15 @@ def to_bytes_buffer(b: Buffer, /) -> bytes | bytearray | memoryview:
847
848
  return view.tobytes()
848
849
 
849
850
 
851
+ def to_bytes_view(b: Buffer, /) -> memoryview:
852
+ view = memoryview(b)
853
+ if view.format == "B":
854
+ return view
855
+ if view.c_contiguous:
856
+ return view.cast("B")
857
+ return memoryview(view.tobytes())
858
+
859
+
850
860
  def bio_chunk_iter(
851
861
  bio: SupportsRead[Buffer] | SupportsReadinto | Callable[[int], Buffer],
852
862
  /,
@@ -1156,7 +1166,7 @@ def bytes_iter(
1156
1166
  else:
1157
1167
  break
1158
1168
  else:
1159
- yield memoryview(b).cast("B")[:size]
1169
+ yield to_bytes_view(b)[:size]
1160
1170
  if callback is not None:
1161
1171
  callback(size)
1162
1172
  break
@@ -1188,7 +1198,7 @@ async def bytes_async_iter(
1188
1198
  else:
1189
1199
  break
1190
1200
  else:
1191
- yield memoryview(b).cast("B")[:size]
1201
+ yield to_bytes_view(b)[:size]
1192
1202
  if callback is not None:
1193
1203
  await callback(size)
1194
1204
  break
@@ -1206,7 +1216,7 @@ def bytes_iter_skip(
1206
1216
  if not callable(callback):
1207
1217
  callback = None
1208
1218
  for b in it:
1209
- m = memoryview(b).cast("B")
1219
+ m = to_bytes_view(b)
1210
1220
  l = buffer_length(m)
1211
1221
  if callback:
1212
1222
  callback(min(l, size))
@@ -1231,7 +1241,7 @@ async def bytes_async_iter_skip(
1231
1241
  return it
1232
1242
  callback = ensure_async(callback) if callable(callback) else None
1233
1243
  async for b in it:
1234
- m = memoryview(b).cast("B")
1244
+ m = to_bytes_view(b)
1235
1245
  l = buffer_length(m)
1236
1246
  if callback:
1237
1247
  await callback(min(l, size))
@@ -1307,7 +1317,7 @@ def bytes_iter_to_reader(
1307
1317
  del unconsumed[:]
1308
1318
  try:
1309
1319
  while True:
1310
- b = memoryview(getnext()).cast("B")
1320
+ b = to_bytes_view(getnext())
1311
1321
  if b_len := b.nbytes:
1312
1322
  m = n + b_len
1313
1323
  if m >= bufsize:
@@ -1477,7 +1487,7 @@ def bytes_iter_to_async_reader(
1477
1487
  del unconsumed[:]
1478
1488
  try:
1479
1489
  while True:
1480
- b = memoryview(await getnext()).cast("B")
1490
+ b = to_bytes_view(await getnext())
1481
1491
  if b_len := b.nbytes:
1482
1492
  m = n + b_len
1483
1493
  if m >= bufsize:
@@ -1584,7 +1594,7 @@ def bytes_to_chunk_iter(
1584
1594
  /,
1585
1595
  chunksize: int = READ_BUFSIZE,
1586
1596
  ) -> Iterator[memoryview]:
1587
- m = memoryview(b).cast("B")
1597
+ m = to_bytes_view(b)
1588
1598
  for i in range(0, buffer_length(m), chunksize):
1589
1599
  yield m[i:i+chunksize]
1590
1600
 
@@ -1594,7 +1604,7 @@ async def bytes_to_chunk_async_iter(
1594
1604
  /,
1595
1605
  chunksize: int = READ_BUFSIZE,
1596
1606
  ) -> AsyncIterator[memoryview]:
1597
- m = memoryview(b).cast("B")
1607
+ m = to_bytes_view(b)
1598
1608
  for i in range(0, buffer_length(m), chunksize):
1599
1609
  yield m[i:i+chunksize]
1600
1610
 
@@ -1606,7 +1616,7 @@ def bytes_ensure_part_iter(
1606
1616
  ) -> Iterator[Buffer]:
1607
1617
  n = partsize
1608
1618
  for b in it:
1609
- m = memoryview(b).cast("B")
1619
+ m = to_bytes_view(b)
1610
1620
  l = buffer_length(m)
1611
1621
  if l <= n:
1612
1622
  yield b
@@ -1634,7 +1644,7 @@ async def bytes_ensure_part_async_iter(
1634
1644
  ) -> AsyncIterator[Buffer]:
1635
1645
  n = partsize
1636
1646
  async for b in ensure_aiter(it):
1637
- m = memoryview(b).cast("B")
1647
+ m = to_bytes_view(b)
1638
1648
  l = buffer_length(m)
1639
1649
  if l <= n:
1640
1650
  yield b
@@ -1748,7 +1758,7 @@ def copyfileobj(
1748
1758
  fsrc_readinto = getattr(fsrc, "readinto", None)
1749
1759
  if callable(fsrc_readinto):
1750
1760
  buf = bytearray(chunksize)
1751
- view = memoryview(buf).cast("B")
1761
+ view = to_bytes_view(buf)
1752
1762
  while size := fsrc_readinto(buf):
1753
1763
  fdst_write(view[:size])
1754
1764
  elif callable(fsrc_read):
@@ -1775,7 +1785,7 @@ async def copyfileobj_async(
1775
1785
  if callable(fsrc_readinto):
1776
1786
  fsrc_readinto = ensure_async(fsrc_readinto, threaded=threaded)
1777
1787
  buf = bytearray(chunksize)
1778
- view = memoryview(buf).cast("B")
1788
+ view = to_bytes_view(buf)
1779
1789
  while size := await fsrc_readinto(buf):
1780
1790
  await fdst_write(view[:size])
1781
1791
  elif callable(fsrc_read):
@@ -1816,7 +1826,7 @@ def bound_bytes_reader(
1816
1826
  if f_readinto is None:
1817
1827
  raise NotImplementedError("readinto")
1818
1828
  if size > 0:
1819
- n = f_readinto(memoryview(buffer).cast("B")[:size])
1829
+ n = f_readinto(to_bytes_view(buffer)[:size])
1820
1830
  size -= n
1821
1831
  return n
1822
1832
  return 0
@@ -1851,7 +1861,7 @@ def bound_async_bytes_reader(
1851
1861
  if f_readinto is None:
1852
1862
  raise NotImplementedError("readinto")
1853
1863
  if size > 0:
1854
- n = await f_readinto(memoryview(buffer).cast("B")[:size])
1864
+ n = await f_readinto(to_bytes_view(buffer)[:size])
1855
1865
  size -= n
1856
1866
  return n
1857
1867
  return 0
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-filewrap"
3
- version = "0.3.0.1"
3
+ version = "0.3.1.1"
4
4
  description = "Python file wrappers."
5
5
  authors = ["ChenyangGao <wosiwujm@gmail.com>"]
6
6
  license = "MIT"