Currently, we treat bytearray and memoryview as implicit subclasses of bytes, following the CPython documentation. In PEP 688, I propose to remove this implicit promotion. Discussion is still ongoing, but I'd like to make sure typeshed is ready for this change by reviewing existing usage of bytes.
To make that easier, I propose that we write stubs as if there is no implicit promotion between bytes, bytearray, and memoryview. Thus, if a function accepts either bytes or bytearray, we should write bytes | bytearray, not just bytes.
The only cost here should be that certain argument annotations become longer; everything should still work fine for type checkers that assume the implicit promotion.
If we agree on this rule, I can review existing bytes annotations for correctness. In my experience, most usages of bytes in argument positions should be ReadableBuffer.
Currently, we treat
bytearrayandmemoryviewas implicit subclasses ofbytes, following the CPython documentation. In PEP 688, I propose to remove this implicit promotion. Discussion is still ongoing, but I'd like to make sure typeshed is ready for this change by reviewing existing usage ofbytes.To make that easier, I propose that we write stubs as if there is no implicit promotion between
bytes,bytearray, andmemoryview. Thus, if a function accepts eitherbytesorbytearray, we should writebytes | bytearray, not justbytes.The only cost here should be that certain argument annotations become longer; everything should still work fine for type checkers that assume the implicit promotion.
If we agree on this rule, I can review existing
bytesannotations for correctness. In my experience, most usages ofbytesin argument positions should beReadableBuffer.