hrmm, interesting. i'm have this problem too now, when running tests, and i
think i came up with a solution: vinegar will monkey-patch exception
classes so that their __str__ method would take care of the _remote_tb. you
can see the patch here:

https://github.com/tomerfiliba/rpyc/commit/3189021460d7ce7418a58c1a29eaeec01af2cdfd

i'd love to get comments on that.

-----------------------------------------------------------------

*Tomer Filiba*
tomerfiliba.com     <http://www.facebook.com/tomerfiliba>
<http://il.linkedin.com/in/tomerfiliba>



On Thu, May 31, 2012 at 3:17 AM, Oliver Drake <[email protected]> wrote:

> Hey guys,
> I stumbled across a bit of an issue when writing integration tests
> using the unittest/unittest2 frameworks for my project that uses RPyC.
> If you get an unexpected exception on the server side, rpyc usually
> prints this out on the client side using sys.excepthook, however when
> running in unittest all exceptions are caught and stored by the
> framework, so sys.excepthook is never called. I solved this by
> extending test result class in my unittest file (should work for both
> unittest and unittest2):
>
> class RPyCTestResult(unittest.TextTestResult):
>     def _exc_info_to_string(self, err, test):
>         s = super(RPyCTestResult, self)._exc_info_to_string(err, test)
>         exctype, value, tb = err
>         if hasattr(value, "_remote_tb"):
>             s += "\n========= Remote traceback ========\n"
>             s +=
> "\n--------------------------------\n\n".join(value._remote_tb)
>             s += "===== End of Remote traceback ======\n"
>         return s
>
> if __name__ == "__main__":
>
> unittest.main(testRunner=unittest.TextTestRunner(resultclass=RPyCTestResult))
>
> Obviously this will only work if you run the python file directly
> (need to figure out how to integrate with nose). Cheers for writing a
> great RPC library btw, using rpyc has been a pleasurable experience :)
> Regards,
> Oliver
>

Reply via email to