This is an automated email from the ASF dual-hosted git repository.

xyz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/pulsar.git


The following commit(s) were added to refs/heads/master by this push:
     new e9108069d9c [fix][python client] Fixed schema validate_type method 
throw a wrong exception (#16131)
e9108069d9c is described below

commit e9108069d9c2a0a3f14bedca0283b60a00fd659d
Author: boatrainlsz <[email protected]>
AuthorDate: Thu Jun 23 01:22:09 2022 +0800

    [fix][python client] Fixed schema validate_type method throw a wrong 
exception (#16131)
    
    Fixes #16056
    
    ### Motivation
    
    The validate_type method in definition.py was intended to throw a TypeError 
when  type of elements in array is incorrect, but the 
`self.array_type.python_type()` would return int type, which can not be 
concatenated with string. This would cause a confusing error output
    
    ### Modifications
    call `self.array_type.type()` method  instead of 
`self.array_type.python_type()`
---
 pulsar-client-cpp/python/pulsar/schema/definition.py | 4 ++--
 pulsar-client-cpp/python/schema_test.py              | 8 ++++++++
 2 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/pulsar-client-cpp/python/pulsar/schema/definition.py 
b/pulsar-client-cpp/python/pulsar/schema/definition.py
index 291909b97cd..60ab7ccbe10 100644
--- a/pulsar-client-cpp/python/pulsar/schema/definition.py
+++ b/pulsar-client-cpp/python/pulsar/schema/definition.py
@@ -444,8 +444,8 @@ class Array(Field):
 
         for x in val:
             if type(x) != self.array_type.python_type():
-                raise TypeError('Array field ' + name + ' items should all be 
of type '
-                                + self.array_type.python_type())
+                raise TypeError('Array field ' + name + ' items should all be 
of type ' +
+                                self.array_type.type())
         return val
 
     def schema(self):
diff --git a/pulsar-client-cpp/python/schema_test.py 
b/pulsar-client-cpp/python/schema_test.py
index 78491ba7754..47acc304ef4 100755
--- a/pulsar-client-cpp/python/schema_test.py
+++ b/pulsar-client-cpp/python/schema_test.py
@@ -1279,5 +1279,13 @@ class SchemaTest(TestCase):
         self.assertTrue(b'_default' not in b)
         self.assertTrue(b'_required' not in b)
         self.assertTrue(b'_required_default' not in b)
+
+    def test_schema_array_wrong_type(self):
+        class SomeSchema(Record):
+            some_field = Array(Integer(), required=False, default=[])
+        # descriptive error message
+        with self.assertRaises(TypeError) as e:
+            SomeSchema(some_field=["not", "integer"])
+        self.assertEqual(str(e.exception), "Array field some_field items 
should all be of type int")
 if __name__ == '__main__':
     main()

Reply via email to