python-filewrap 0.2.9.1__tar.gz → 0.3.0.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.
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/PKG-INFO +1 -1
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/filewrap/__init__.py +52 -34
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/pyproject.toml +1 -1
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/LICENSE +0 -0
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/filewrap/py.typed +0 -0
- {python_filewrap-0.2.9.1 → python_filewrap-0.3.0.1}/readme.md +0 -0
|
@@ -2,18 +2,19 @@
|
|
|
2
2
|
# encoding: utf-8
|
|
3
3
|
|
|
4
4
|
__author__ = "ChenyangGao <https://chenyanggao.github.io>"
|
|
5
|
-
__version__ = (0,
|
|
5
|
+
__version__ = (0, 3, 0)
|
|
6
6
|
__all__ = [
|
|
7
7
|
"SupportsRead", "SupportsReadinto", "SupportsWrite", "SupportsSeek",
|
|
8
|
-
"AsyncBufferedReader", "AsyncTextIOWrapper", "buffer_length",
|
|
9
|
-
"
|
|
10
|
-
"
|
|
11
|
-
"
|
|
12
|
-
"
|
|
13
|
-
"
|
|
14
|
-
"bound_bytes_reader", "bound_async_bytes_reader",
|
|
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",
|
|
15
15
|
]
|
|
16
16
|
|
|
17
|
+
from array import array
|
|
17
18
|
from asyncio import Lock as AsyncLock
|
|
18
19
|
from codecs import getdecoder, getencoder
|
|
19
20
|
from collections.abc import (
|
|
@@ -262,7 +263,7 @@ class AsyncBufferedReader(BufferedReader):
|
|
|
262
263
|
length = buffer_length(data)
|
|
263
264
|
self._pos += buffer_length(prev_data) + length
|
|
264
265
|
if BUFSIZE <= length:
|
|
265
|
-
buf_view[:] = memoryview(data)[-BUFSIZE:]
|
|
266
|
+
buf_view[:] = memoryview(data).cast("B")[-BUFSIZE:]
|
|
266
267
|
self._buf_pos = self._buf_stop = BUFSIZE
|
|
267
268
|
else:
|
|
268
269
|
buf_pos_stop = buf_stop + length
|
|
@@ -307,7 +308,7 @@ class AsyncBufferedReader(BufferedReader):
|
|
|
307
308
|
else:
|
|
308
309
|
return 0
|
|
309
310
|
BUFSIZE = buffer_length(buf_view)
|
|
310
|
-
buffer_view = memoryview(buffer)
|
|
311
|
+
buffer_view = memoryview(buffer).cast("B")
|
|
311
312
|
buffer_view[:buf_size] = buf_view[buf_pos:buf_stop]
|
|
312
313
|
buf_pos = self._buf_pos = buf_stop
|
|
313
314
|
self._pos += buf_size
|
|
@@ -379,7 +380,7 @@ class AsyncBufferedReader(BufferedReader):
|
|
|
379
380
|
else:
|
|
380
381
|
return 0
|
|
381
382
|
BUFSIZE = buffer_length(buf_view)
|
|
382
|
-
buffer_view = memoryview(buffer)
|
|
383
|
+
buffer_view = memoryview(buffer).cast("B")
|
|
383
384
|
buffer_view[:buf_size] = buf_view[buf_pos:buf_stop]
|
|
384
385
|
buf_pos = self._buf_pos = buf_stop
|
|
385
386
|
self._pos += buf_size
|
|
@@ -470,7 +471,7 @@ class AsyncBufferedReader(BufferedReader):
|
|
|
470
471
|
prev_data = buf_view[buf_pos:buf_stop].tobytes()
|
|
471
472
|
self._pos += buffer_length(prev_data) + length
|
|
472
473
|
if BUFSIZE <= length:
|
|
473
|
-
buf_view[:] = memoryview(data)[-BUFSIZE:]
|
|
474
|
+
buf_view[:] = memoryview(data).cast("B")[-BUFSIZE:]
|
|
474
475
|
self._buf_pos = self._buf_stop = BUFSIZE
|
|
475
476
|
else:
|
|
476
477
|
buf_pos_stop = buf_stop + length
|
|
@@ -656,7 +657,7 @@ class AsyncTextIOWrapper(TextIOWrapper):
|
|
|
656
657
|
size -= len(text)
|
|
657
658
|
return n
|
|
658
659
|
|
|
659
|
-
cache: bytes | memoryview = memoryview(data)
|
|
660
|
+
cache: bytes | memoryview = memoryview(data).cast("B")
|
|
660
661
|
while size and buffer_length(data) == size:
|
|
661
662
|
while cache:
|
|
662
663
|
try:
|
|
@@ -826,9 +827,24 @@ def get_bom(encoding: str, /) -> bytes:
|
|
|
826
827
|
|
|
827
828
|
|
|
828
829
|
def buffer_length(b: Buffer, /) -> int:
|
|
829
|
-
if isinstance(b, (bytes, bytearray
|
|
830
|
+
if isinstance(b, (bytes, bytearray)):
|
|
830
831
|
return len(b)
|
|
831
|
-
return
|
|
832
|
+
return memoryview(b).nbytes
|
|
833
|
+
|
|
834
|
+
|
|
835
|
+
def to_string_buffer(s: str, /) -> array:
|
|
836
|
+
return array("w", s)
|
|
837
|
+
|
|
838
|
+
|
|
839
|
+
def to_bytes_buffer(b: Buffer, /) -> bytes | bytearray | memoryview:
|
|
840
|
+
if isinstance(b, (bytes, bytearray)):
|
|
841
|
+
return b
|
|
842
|
+
view = memoryview(b)
|
|
843
|
+
if view.format == "B":
|
|
844
|
+
return view
|
|
845
|
+
if view.c_contiguous:
|
|
846
|
+
return view.cast("B")
|
|
847
|
+
return view.tobytes()
|
|
832
848
|
|
|
833
849
|
|
|
834
850
|
def bio_chunk_iter(
|
|
@@ -1140,7 +1156,7 @@ def bytes_iter(
|
|
|
1140
1156
|
else:
|
|
1141
1157
|
break
|
|
1142
1158
|
else:
|
|
1143
|
-
yield memoryview(b)[:size]
|
|
1159
|
+
yield memoryview(b).cast("B")[:size]
|
|
1144
1160
|
if callback is not None:
|
|
1145
1161
|
callback(size)
|
|
1146
1162
|
break
|
|
@@ -1172,7 +1188,7 @@ async def bytes_async_iter(
|
|
|
1172
1188
|
else:
|
|
1173
1189
|
break
|
|
1174
1190
|
else:
|
|
1175
|
-
yield memoryview(b)[:size]
|
|
1191
|
+
yield memoryview(b).cast("B")[:size]
|
|
1176
1192
|
if callback is not None:
|
|
1177
1193
|
await callback(size)
|
|
1178
1194
|
break
|
|
@@ -1189,8 +1205,8 @@ def bytes_iter_skip(
|
|
|
1189
1205
|
return it
|
|
1190
1206
|
if not callable(callback):
|
|
1191
1207
|
callback = None
|
|
1192
|
-
|
|
1193
|
-
|
|
1208
|
+
for b in it:
|
|
1209
|
+
m = memoryview(b).cast("B")
|
|
1194
1210
|
l = buffer_length(m)
|
|
1195
1211
|
if callback:
|
|
1196
1212
|
callback(min(l, size))
|
|
@@ -1215,7 +1231,7 @@ async def bytes_async_iter_skip(
|
|
|
1215
1231
|
return it
|
|
1216
1232
|
callback = ensure_async(callback) if callable(callback) else None
|
|
1217
1233
|
async for b in it:
|
|
1218
|
-
m = memoryview(b)
|
|
1234
|
+
m = memoryview(b).cast("B")
|
|
1219
1235
|
l = buffer_length(m)
|
|
1220
1236
|
if callback:
|
|
1221
1237
|
await callback(min(l, size))
|
|
@@ -1291,8 +1307,9 @@ def bytes_iter_to_reader(
|
|
|
1291
1307
|
del unconsumed[:]
|
|
1292
1308
|
try:
|
|
1293
1309
|
while True:
|
|
1294
|
-
|
|
1295
|
-
|
|
1310
|
+
b = memoryview(getnext()).cast("B")
|
|
1311
|
+
if b_len := b.nbytes:
|
|
1312
|
+
m = n + b_len
|
|
1296
1313
|
if m >= bufsize:
|
|
1297
1314
|
delta = bufsize - n
|
|
1298
1315
|
buf[n:] = b[:delta]
|
|
@@ -1301,7 +1318,7 @@ def bytes_iter_to_reader(
|
|
|
1301
1318
|
return bufsize
|
|
1302
1319
|
else:
|
|
1303
1320
|
buf[n:m] = b
|
|
1304
|
-
pos +=
|
|
1321
|
+
pos += b_len
|
|
1305
1322
|
n = m
|
|
1306
1323
|
except StopIteration:
|
|
1307
1324
|
at_end = True
|
|
@@ -1460,8 +1477,9 @@ def bytes_iter_to_async_reader(
|
|
|
1460
1477
|
del unconsumed[:]
|
|
1461
1478
|
try:
|
|
1462
1479
|
while True:
|
|
1463
|
-
|
|
1464
|
-
|
|
1480
|
+
b = memoryview(await getnext()).cast("B")
|
|
1481
|
+
if b_len := b.nbytes:
|
|
1482
|
+
m = n + b_len
|
|
1465
1483
|
if m >= bufsize:
|
|
1466
1484
|
delta = bufsize - n
|
|
1467
1485
|
buf[n:] = b[:delta]
|
|
@@ -1470,7 +1488,7 @@ def bytes_iter_to_async_reader(
|
|
|
1470
1488
|
return bufsize
|
|
1471
1489
|
else:
|
|
1472
1490
|
buf[n:m] = b
|
|
1473
|
-
pos +=
|
|
1491
|
+
pos += b_len
|
|
1474
1492
|
n = m
|
|
1475
1493
|
except (StopIteration, StopAsyncIteration):
|
|
1476
1494
|
at_end = True
|
|
@@ -1566,7 +1584,7 @@ def bytes_to_chunk_iter(
|
|
|
1566
1584
|
/,
|
|
1567
1585
|
chunksize: int = READ_BUFSIZE,
|
|
1568
1586
|
) -> Iterator[memoryview]:
|
|
1569
|
-
m = memoryview(b)
|
|
1587
|
+
m = memoryview(b).cast("B")
|
|
1570
1588
|
for i in range(0, buffer_length(m), chunksize):
|
|
1571
1589
|
yield m[i:i+chunksize]
|
|
1572
1590
|
|
|
@@ -1576,7 +1594,7 @@ async def bytes_to_chunk_async_iter(
|
|
|
1576
1594
|
/,
|
|
1577
1595
|
chunksize: int = READ_BUFSIZE,
|
|
1578
1596
|
) -> AsyncIterator[memoryview]:
|
|
1579
|
-
m = memoryview(b)
|
|
1597
|
+
m = memoryview(b).cast("B")
|
|
1580
1598
|
for i in range(0, buffer_length(m), chunksize):
|
|
1581
1599
|
yield m[i:i+chunksize]
|
|
1582
1600
|
|
|
@@ -1588,7 +1606,7 @@ def bytes_ensure_part_iter(
|
|
|
1588
1606
|
) -> Iterator[Buffer]:
|
|
1589
1607
|
n = partsize
|
|
1590
1608
|
for b in it:
|
|
1591
|
-
m = memoryview(b)
|
|
1609
|
+
m = memoryview(b).cast("B")
|
|
1592
1610
|
l = buffer_length(m)
|
|
1593
1611
|
if l <= n:
|
|
1594
1612
|
yield b
|
|
@@ -1616,7 +1634,7 @@ async def bytes_ensure_part_async_iter(
|
|
|
1616
1634
|
) -> AsyncIterator[Buffer]:
|
|
1617
1635
|
n = partsize
|
|
1618
1636
|
async for b in ensure_aiter(it):
|
|
1619
|
-
m = memoryview(b)
|
|
1637
|
+
m = memoryview(b).cast("B")
|
|
1620
1638
|
l = buffer_length(m)
|
|
1621
1639
|
if l <= n:
|
|
1622
1640
|
yield b
|
|
@@ -1730,7 +1748,7 @@ def copyfileobj(
|
|
|
1730
1748
|
fsrc_readinto = getattr(fsrc, "readinto", None)
|
|
1731
1749
|
if callable(fsrc_readinto):
|
|
1732
1750
|
buf = bytearray(chunksize)
|
|
1733
|
-
view = memoryview(buf)
|
|
1751
|
+
view = memoryview(buf).cast("B")
|
|
1734
1752
|
while size := fsrc_readinto(buf):
|
|
1735
1753
|
fdst_write(view[:size])
|
|
1736
1754
|
elif callable(fsrc_read):
|
|
@@ -1757,7 +1775,7 @@ async def copyfileobj_async(
|
|
|
1757
1775
|
if callable(fsrc_readinto):
|
|
1758
1776
|
fsrc_readinto = ensure_async(fsrc_readinto, threaded=threaded)
|
|
1759
1777
|
buf = bytearray(chunksize)
|
|
1760
|
-
view = memoryview(buf)
|
|
1778
|
+
view = memoryview(buf).cast("B")
|
|
1761
1779
|
while size := await fsrc_readinto(buf):
|
|
1762
1780
|
await fdst_write(view[:size])
|
|
1763
1781
|
elif callable(fsrc_read):
|
|
@@ -1798,7 +1816,7 @@ def bound_bytes_reader(
|
|
|
1798
1816
|
if f_readinto is None:
|
|
1799
1817
|
raise NotImplementedError("readinto")
|
|
1800
1818
|
if size > 0:
|
|
1801
|
-
n = f_readinto(memoryview(buffer)[:size])
|
|
1819
|
+
n = f_readinto(memoryview(buffer).cast("B")[:size])
|
|
1802
1820
|
size -= n
|
|
1803
1821
|
return n
|
|
1804
1822
|
return 0
|
|
@@ -1833,7 +1851,7 @@ def bound_async_bytes_reader(
|
|
|
1833
1851
|
if f_readinto is None:
|
|
1834
1852
|
raise NotImplementedError("readinto")
|
|
1835
1853
|
if size > 0:
|
|
1836
|
-
n = await f_readinto(memoryview(buffer)[:size])
|
|
1854
|
+
n = await f_readinto(memoryview(buffer).cast("B")[:size])
|
|
1837
1855
|
size -= n
|
|
1838
1856
|
return n
|
|
1839
1857
|
return 0
|
|
File without changes
|
|
File without changes
|
|
File without changes
|