The fatal exception is not really that fatal. It just means that it can't serialize the protobuf object to a string. The normal protobuf Python bindings just raise Python exceptions. See https://github.com/google/protobuf/search?l=python&q=Exception&utf8=%E2%9C%93
The problem with IsInitialized() is that it doesn't report what's wrong exactly. I can get that information from e.InitializationErrorString() and raise a Python exception but it would be preferable that if reflex has a binding to the exception object it will catch it and reraise a Python version of that exception. 2015-01-20 18:18 GMT+02:00 Amaury Forgeot d'Arc <amaur...@gmail.com>: > 2015-01-20 17:00 GMT+01:00 Omer Katz <omer.d...@gmail.com>: > >> 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. >> > The only way to prevent a crash is to add a "catch" block somehow in C++, > and I don't see anything like this in cppyy. > This said, it's probably a bad idea to continue something after what the > library calls a "FatalError"... > Better add a check like "if e.IsInitialized()" before calling > SerializeToString. > > > >> בתאריך 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 >>> >> > > > -- > Amaury Forgeot d'Arc >
_______________________________________________ pypy-dev mailing list pypy-dev@python.org https://mail.python.org/mailman/listinfo/pypy-dev