This is an automated email from the ASF dual-hosted git repository.
xyz pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/pulsar-client-python.git
The following commit(s) were added to refs/heads/main by this push:
new e3eed2d Issue #31 - Access name attribute of any type object (#92)
e3eed2d is described below
commit e3eed2d3243ac12cd87d94aff7abb9ca9a8cb01e
Author: Eric Hare <[email protected]>
AuthorDate: Mon Feb 13 01:02:25 2023 -0800
Issue #31 - Access name attribute of any type object (#92)
Addresses Issue #31 - we should access a string representation of the given
object rather than assuming that the object itself can be concatenated with a
string.
---
pulsar/schema/definition.py | 21 ++++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
diff --git a/pulsar/schema/definition.py b/pulsar/schema/definition.py
index 60ab7cc..a810a93 100644
--- a/pulsar/schema/definition.py
+++ b/pulsar/schema/definition.py
@@ -23,10 +23,17 @@ from collections import OrderedDict
from enum import Enum, EnumMeta
+def _string_representation(x):
+ if hasattr(x, "__name__"):
+ return x.__name__
+ else:
+ return str(x)
+
+
def _check_record_or_field(x):
if (type(x) is type and not issubclass(x, Record)) \
and not isinstance(x, Field):
- raise Exception('Argument ' + x + ' is not a Record or a Field')
+ raise Exception('Argument ' + _string_representation(x) + ' is not a
Record or a Field')
class RecordMeta(type):
@@ -188,7 +195,7 @@ class Record(metaclass=RecordMeta):
if not isinstance(val, self.__class__):
raise TypeError("Invalid type '%s' for sub-record field '%s'.
Expected: %s" % (
- type(val), name, self.__class__))
+ type(val), name, _string_representation(self.__class__)))
return val
def default(self):
@@ -222,7 +229,7 @@ class Field(object):
return self.default()
if type(val) != self.python_type():
- raise TypeError("Invalid type '%s' for field '%s'. Expected: %s" %
(type(val), name, self.python_type()))
+ raise TypeError("Invalid type '%s' for field '%s'. Expected: %s" %
(type(val), name, _string_representation(self.python_type())))
return val
def schema(self):
@@ -368,7 +375,7 @@ class String(Field):
class CustomEnum(Field):
def __init__(self, enum_type, default=None, required=False,
required_default=False):
if not issubclass(enum_type, Enum):
- raise Exception(enum_type + " is not a valid Enum type")
+ raise Exception(_string_representation(enum_type) + " is not a
valid Enum type")
self.enum_type = enum_type
self.values = {}
for x in enum_type.__members__.values():
@@ -400,7 +407,7 @@ class CustomEnum(Field):
raise TypeError(
"Invalid enum value '%s' for field '%s'. Expected: %s" %
(val, name, self.values.keys()))
elif type(val) != self.python_type():
- raise TypeError("Invalid type '%s' for field '%s'. Expected: %s" %
(type(val), name, self.python_type()))
+ raise TypeError("Invalid type '%s' for field '%s'. Expected: %s" %
(type(val), name, _string_representation(self.python_type())))
else:
return val
@@ -445,7 +452,7 @@ 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.type())
+ _string_representation(self.array_type.type()))
return val
def schema(self):
@@ -488,7 +495,7 @@ class Map(Field):
raise TypeError('Map keys for field ' + name + ' should all
be strings')
if type(v) != self.value_type.python_type():
raise TypeError('Map values for field ' + name + ' should all
be of type '
- + self.value_type.python_type())
+ +
_string_representation(self.value_type.python_type()))
return val