| 1068 | |
| 1069 | |
| 1070 | class GraphSON3Serializer(GraphSON2Serializer): |
| 1071 | |
| 1072 | _serializers = GraphSON2Serializer.get_type_definitions() |
| 1073 | |
| 1074 | context = None |
| 1075 | """A dict of the serialization context""" |
| 1076 | |
| 1077 | def __init__(self, context): |
| 1078 | self.context = context |
| 1079 | self.user_types = None |
| 1080 | |
| 1081 | def definition(self, value): |
| 1082 | serializer = self.get_serializer(value) |
| 1083 | return serializer.definition(value, self) |
| 1084 | |
| 1085 | def get_serializer(self, value): |
| 1086 | """Custom get_serializer to support UDT/Tuple""" |
| 1087 | |
| 1088 | serializer = super(GraphSON3Serializer, self).get_serializer(value) |
| 1089 | is_namedtuple_udt = serializer is TupleTypeIO and hasattr(value, '_fields') |
| 1090 | if not serializer or is_namedtuple_udt: |
| 1091 | # Check if UDT |
| 1092 | if self.user_types is None: |
| 1093 | try: |
| 1094 | user_types = self.context['cluster']._user_types[self.context['graph_name']] |
| 1095 | self.user_types = dict(map(reversed, user_types.items())) |
| 1096 | except KeyError: |
| 1097 | self.user_types = {} |
| 1098 | |
| 1099 | serializer = UserTypeIO if (is_namedtuple_udt or (type(value) in self.user_types)) else serializer |
| 1100 | |
| 1101 | return serializer |
| 1102 | |
| 1103 | |
| 1104 | GraphSON3Serializer.register(dict, MapTypeIO) |
no test coverage detected