I checked gunicorn's Body object as well as _fileobject and io.BufferedStream, and I think the semantics actually map fine. All of them take a single param specifying number of bytes.