From 8591a7ee5c8ddbc95f4f6c8fd1f8964bb3ca6193 Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Wed, 14 Oct 2015 12:58:08 -0400 Subject: [PATCH] [Python] Fix handling of bad input to 'stringify' Cases where a string is required but a non-string is provided will now generate an exception instead of substituting the empty string. --- interfaces/cython/cantera/_cantera.pxd | 2 +- interfaces/cython/cantera/test/test_thermo.py | 6 ++++++ interfaces/cython/cantera/utils.pyx | 2 +- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/interfaces/cython/cantera/_cantera.pxd b/interfaces/cython/cantera/_cantera.pxd index 37d959745..5e08bbbec 100644 --- a/interfaces/cython/cantera/_cantera.pxd +++ b/interfaces/cython/cantera/_cantera.pxd @@ -982,7 +982,7 @@ cdef class ReactionPathDiagram: cdef CxxStringStream* _log # free functions -cdef string stringify(x) +cdef string stringify(x) except * cdef pystr(string x) cdef np.ndarray get_species_array(Kinetics kin, kineticsMethod1d method) cdef np.ndarray get_reaction_array(Kinetics kin, kineticsMethod1d method) diff --git a/interfaces/cython/cantera/test/test_thermo.py b/interfaces/cython/cantera/test/test_thermo.py index 21ddef68c..f3690373e 100644 --- a/interfaces/cython/cantera/test/test_thermo.py +++ b/interfaces/cython/cantera/test/test_thermo.py @@ -1003,3 +1003,9 @@ class TestQuantity(utilities.CanteraTest): with self.assertRaises(Exception): q1+q2 + + +class TestMisc(utilities.CanteraTest): + def test_stringify_bad(self): + with self.assertRaises(AttributeError): + ct.Solution(3) diff --git a/interfaces/cython/cantera/utils.pyx b/interfaces/cython/cantera/utils.pyx index 23b3788a3..906aa19c5 100644 --- a/interfaces/cython/cantera/utils.pyx +++ b/interfaces/cython/cantera/utils.pyx @@ -4,7 +4,7 @@ cdef int _pythonMajorVersion = sys.version_info[0] cdef CxxPythonLogger* _logger = new CxxPythonLogger() CxxSetLogger(_logger) -cdef string stringify(x): +cdef string stringify(x) except *: """ Converts Python strings to std::string. """ # This method works with both Python 2.x and 3.x. if isinstance(x, bytes):