Unsupported memoryview objects as input in Python bindings #185

Closed
opened 2026-01-29 20:39:27 +00:00 by claunia · 2 comments
Owner

Originally created by @rmax on GitHub (Jul 20, 2017).

Hi, memoryview objects are often used to avoid copies in data handling. Currently, in version 0.6.0, the compress/decompress API does not support memoryview objects as input.

In [23]: import brotli

In [24]: data_buf = memoryview(b'foo/bar')

In [25]: brotli.compress(data_buf)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-25-8364d41925a4> in <module>()
----> 1 brotli.compress(data_buf)

/Users/rolando/miniconda3/envs/env/lib/python3.6/site-packages/brotli.py in compress(string, mode, quality, lgwin, lgblock, dictionary)
     48     compressor = Compressor(mode=mode, quality=quality, lgwin=lgwin,
     49                             lgblock=lgblock, dictionary=dictionary)
---> 50     return compressor.process(string) + compressor.finish()
     51
     52 # Decompress a compressed byte string.

TypeError: process() argument 1 must be read-only bytes-like object, not memoryview

Other compressors, like gzip, do support memoryview objects as input:

In [26]: import gzip

In [27]: gzip.compress(memoryview(b'foo/bar'))
b'\x1f\x8b\x08\x006\x10pY\x02\xffK\xcb\xcf\xd7OJ,\x02\x00b\x11%\xe6\x07\x00\x00\x00'
Originally created by @rmax on GitHub (Jul 20, 2017). Hi, `memoryview` objects are often used to avoid copies in data handling. Currently, in version `0.6.0`, the compress/decompress API does not support `memoryview` objects as input. ``` In [23]: import brotli In [24]: data_buf = memoryview(b'foo/bar') In [25]: brotli.compress(data_buf) --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-25-8364d41925a4> in <module>() ----> 1 brotli.compress(data_buf) /Users/rolando/miniconda3/envs/env/lib/python3.6/site-packages/brotli.py in compress(string, mode, quality, lgwin, lgblock, dictionary) 48 compressor = Compressor(mode=mode, quality=quality, lgwin=lgwin, 49 lgblock=lgblock, dictionary=dictionary) ---> 50 return compressor.process(string) + compressor.finish() 51 52 # Decompress a compressed byte string. TypeError: process() argument 1 must be read-only bytes-like object, not memoryview ``` Other compressors, like `gzip`, do support `memoryview` objects as input: ``` In [26]: import gzip In [27]: gzip.compress(memoryview(b'foo/bar')) b'\x1f\x8b\x08\x006\x10pY\x02\xffK\xcb\xcf\xd7OJ,\x02\x00b\x11%\xe6\x07\x00\x00\x00' ```
Author
Owner

@eustas commented on GitHub (Jul 21, 2017):

Nice idea! Going to implement it next month.

@eustas commented on GitHub (Jul 21, 2017): Nice idea! Going to implement it next month.
Author
Owner

@eustas commented on GitHub (Aug 28, 2017):

Will be implemented with #590

@eustas commented on GitHub (Aug 28, 2017): Will be implemented with #590
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: starred/brotli#185