I tried to pass a bytearray and that's also not currently supported.
Any clue about what should I do with the exception? It definitely shouldn't
crash the process. I need it to raise a python exception instead.
בתאריך 20 בינו 2015 17:49, ‏"Amaury Forgeot d'Arc" <amaur...@gmail.com> כתב:

> 2015-01-20 16:07 GMT+01:00 Omer Katz <omer.d...@gmail.com>:
>
>> That's correct but can't we handle those cases in cppyy?
>> We should provide a native Python interface whenever it's possible.
>>
>
> It's not possible to take a Python string as mutable reference.
>
> Here are some options that cppyy could implement:
>
> - Use bytearray, which is mutable.
>     a = bytearray()
>     e.SerializeToString(a)
>     s = str(a)
>
> - Pass a list, and expect the function to append a (python) string
>     l = []
>     e.SerializeToString(s)
>     s = l[0]
>
> - Change the signature of the function so that it *returns* the string
> (like swig's OUTPUT
> <http://www.swig.org/Doc3.0/Arguments.html#Arguments_nn5>)
>     result, s = e.SerializeToString()
>
> I don't know which method is the most convenient with cppyy.
>
>
>
>>
>> 2015-01-20 15:40 GMT+02:00 Amaury Forgeot d'Arc <amaur...@gmail.com>:
>>
>>> Hi,
>>>
>>> 2015-01-20 14:14 GMT+01:00 Omer Katz <omer.d...@gmail.com>:
>>>
>>>> The documentation is unclear how you can pass a pointer to a Python
>>>> variable e.g.:
>>>> str = ""
>>>>
>>>> e.SerializeToString(str)
>>>>
>>>
>>> Message::SerializeToString() updates its argument in-place, but Python
>>> strings are not mutable.
>>> You should allocate a std::string from Python code, and pass it to the
>>> function.
>>> Maybe something like:
>>>
>>> s = cppyy.gbl.std.string()
>>> e.SerializeToString(s)
>>> print s
>>>
>>>
>>>
>>>
>>>>
>>>> ---------------------------------------------------------------------------
>>>> TypeError                                 Traceback (most recent call
>>>> last)
>>>> <ipython-input-7-993880892d74> in <module>()
>>>> ----> 1 e.SerializeToString(str)
>>>>
>>>> TypeError: none of the 5 overloaded methods succeeded. Full details:
>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*) =>
>>>>     TypeError: cannot pass str as basic_string<char>
>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*) =>
>>>>     TypeError: cannot pass str as basic_string<char>
>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*) =>
>>>>     TypeError: cannot pass str as basic_string<char>
>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*) =>
>>>>     TypeError: cannot pass str as basic_string<char>
>>>>   bool google::protobuf::MessageLite::SerializeToString(std::string*) =>
>>>>     TypeError: cannot pass str as basic_string<char>
>>>>
>>>> Best Regards,
>>>> Omer Katz.
>>>>
>>>> _______________________________________________
>>>> pypy-dev mailing list
>>>> pypy-dev@python.org
>>>> https://mail.python.org/mailman/listinfo/pypy-dev
>>>>
>>>>
>>>
>>>
>>> --
>>> Amaury Forgeot d'Arc
>>>
>>
>
>
> --
> Amaury Forgeot d'Arc
>
_______________________________________________
pypy-dev mailing list
pypy-dev@python.org
https://mail.python.org/mailman/listinfo/pypy-dev

Reply via email to