On 15 Jan 2014 07:36, "Ethan Furman" <[email protected]
<mailto:[email protected]>> wrote:
On 01/14/2014 12:57 PM, Antoine Pitrou wrote:
On 2014年1月14日 11:56:25 -0800
Ethan Furman <[email protected] <mailto:[email protected]>> wrote:
%s, because it is the most general, has the most convoluted resolution:
- input type is bytes?
pass it straight through
It should try to get a Py_buffer instead.
Meaning any bytes or bytes-subtype will support the Py_buffer protocol, and
this should be the first thing we try?
Sounds good.
For that matter, should the first test be "does this object support Py_buffer"
and not worry about it being isinstance(obj, bytes)?
Yep. I actually suggest adjusting the %s handling to:
- interpolate Py_buffer exporters directly
- interpolate __bytes__ if defined
- reject anything with an "encode" method
- otherwise interpolate str(obj).encode("ascii")
- input type is numeric?
use its __xxx__ [1] [2] method and ascii-encode it (strictly)
What is the definition of "numeric"?
That is a key question.
As suggested above, I would flip the question and explicitly *disallow*
implicit encoding of any object with its own
"encode" method, while allowing everything else.