python-filewrap 0.1.2__tar.gz → 0.1.3__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.1
2
2
  Name: python-filewrap
3
- Version: 0.1.2
3
+ Version: 0.1.3
4
4
  Summary: Python file wrappers.
5
5
  Home-page: https://github.com/ChenyangGao/web-mount-packs/tree/main/python-module/python-filewrap
6
6
  License: MIT
@@ -2,12 +2,13 @@
2
2
  # encoding: utf-8
3
3
 
4
4
  __author__ = "ChenyangGao <https://chenyanggao.github.io>"
5
- __version__ = (0, 1, 2)
5
+ __version__ = (0, 1, 3)
6
6
  __all__ = [
7
7
  "Buffer", "SupportsRead", "SupportsReadinto",
8
8
  "SupportsWrite", "SupportsSeek",
9
9
  "bio_chunk_iter", "bio_chunk_async_iter",
10
10
  "bio_skip_iter", "bio_skip_async_iter",
11
+ "bytes_iter", "bytes_async_iter",
11
12
  "bytes_iter_skip", "bytes_async_iter_skip",
12
13
  "bytes_iter_to_reader", "bytes_iter_to_async_reader",
13
14
  "bytes_to_chunk_iter", "bytes_to_chunk_async_iter",
@@ -350,6 +351,67 @@ async def bio_skip_async_iter(
350
351
  yield length
351
352
 
352
353
 
354
+ def bytes_iter(
355
+ it: Iterable[Buffer],
356
+ /,
357
+ size: int = -1,
358
+ callback: None | Callable[[int], Any] = None,
359
+ ) -> Iterator[Buffer]:
360
+ it = iter(it)
361
+ if size < 0:
362
+ yield from it
363
+ return
364
+ elif size == 0:
365
+ return
366
+ for b in it:
367
+ l = len(b)
368
+ if l <= size:
369
+ yield b
370
+ if callback is not None:
371
+ callback(l)
372
+ if l < size:
373
+ size -= l
374
+ else:
375
+ break
376
+ else:
377
+ yield memoryview(b)[:size]
378
+ if callback is not None:
379
+ callback(size)
380
+ break
381
+
382
+
383
+ async def bytes_async_iter(
384
+ it: Iterable[Buffer] | AsyncIterable[Buffer],
385
+ /,
386
+ size: int = -1,
387
+ callback: None | Callable[[int], Any] = None,
388
+ threaded: bool = False,
389
+ ) -> AsyncIterator[Buffer]:
390
+ it = aiter(ensure_aiter(it, threaded=threaded))
391
+ if size < 0:
392
+ async for chunk in it:
393
+ yield chunk
394
+ return
395
+ elif size == 0:
396
+ return
397
+ callback = ensure_async(callback) if callable(callback) else None
398
+ async for b in it:
399
+ l = len(b)
400
+ if l <= size:
401
+ yield b
402
+ if callback is not None:
403
+ await callback(l)
404
+ if l < size:
405
+ size -= l
406
+ else:
407
+ break
408
+ else:
409
+ yield memoryview(b)[:size]
410
+ if callback is not None:
411
+ await callback(size)
412
+ break
413
+
414
+
353
415
  def bytes_iter_skip(
354
416
  it: Iterable[Buffer],
355
417
  /,
@@ -379,8 +441,9 @@ async def bytes_async_iter_skip(
379
441
  /,
380
442
  size: int = -1,
381
443
  callback: None | Callable[[int], Any] = None,
444
+ threaded: bool = False,
382
445
  ) -> AsyncIterator[Buffer]:
383
- it = aiter(ensure_aiter(it))
446
+ it = aiter(ensure_aiter(it, threaded=threaded))
384
447
  if size == 0:
385
448
  return it
386
449
  callback = ensure_async(callback) if callable(callback) else None
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "python-filewrap"
3
- version = "0.1.2"
3
+ version = "0.1.3"
4
4
  description = "Python file wrappers."
5
5
  authors = ["ChenyangGao <wosiwujm@gmail.com>"]
6
6
  license = "MIT"
File without changes