|
60 | 60 | "Mysqlx.Connection.Compression"),
|
61 | 61 | )
|
62 | 62 |
|
| 63 | +PROTOBUF_VERSION = None |
63 | 64 | PROTOBUF_REPEATED_TYPES = [list]
|
64 | 65 |
|
65 | 66 | try:
|
|
74 | 75 | from ..helpers import encode_to_bytes
|
75 | 76 |
|
76 | 77 | try:
|
77 |
| - from . import mysqlx_connection_pb2 |
78 |
| - from . import mysqlx_crud_pb2 |
79 |
| - from . import mysqlx_cursor_pb2 |
80 |
| - from . import mysqlx_datatypes_pb2 |
81 |
| - from . import mysqlx_expect_pb2 |
82 |
| - from . import mysqlx_expr_pb2 |
83 |
| - from . import mysqlx_notice_pb2 |
84 |
| - from . import mysqlx_pb2 |
85 |
| - from . import mysqlx_prepare_pb2 |
86 |
| - from . import mysqlx_resultset_pb2 |
87 |
| - from . import mysqlx_session_pb2 |
88 |
| - from . import mysqlx_sql_pb2 |
89 |
| - |
| 78 | + from google import protobuf |
90 | 79 | from google.protobuf import descriptor_database
|
91 | 80 | from google.protobuf import descriptor_pb2
|
92 | 81 | from google.protobuf import descriptor_pool
|
|
101 | 90 | pass
|
102 | 91 |
|
103 | 92 | PROTOBUF_REPEATED_TYPES.append(RepeatedCompositeFieldContainer)
|
| 93 | + if hasattr(protobuf, "__version__"): |
| 94 | + # Only Protobuf versions >=3.0.0 provide `__version__` |
| 95 | + PROTOBUF_VERSION = protobuf.__version__ |
| 96 | + |
| 97 | + from . import mysqlx_connection_pb2 |
| 98 | + from . import mysqlx_crud_pb2 |
| 99 | + from . import mysqlx_cursor_pb2 |
| 100 | + from . import mysqlx_datatypes_pb2 |
| 101 | + from . import mysqlx_expect_pb2 |
| 102 | + from . import mysqlx_expr_pb2 |
| 103 | + from . import mysqlx_notice_pb2 |
| 104 | + from . import mysqlx_pb2 |
| 105 | + from . import mysqlx_prepare_pb2 |
| 106 | + from . import mysqlx_resultset_pb2 |
| 107 | + from . import mysqlx_session_pb2 |
| 108 | + from . import mysqlx_sql_pb2 |
104 | 109 |
|
105 | 110 | # Dictionary with all messages descriptors
|
106 | 111 | _MESSAGES = {}
|
@@ -236,11 +241,13 @@ def parse_server_message(msg_type, payload):
|
236 | 241 | msg = _mysqlxpb_pure.new_message(msg_type_name)
|
237 | 242 | msg.ParseFromString(payload)
|
238 | 243 | return msg
|
239 |
| -except ImportError as err: |
| 244 | +except (ImportError, SyntaxError, TypeError) as err: |
240 | 245 | HAVE_PROTOBUF = False
|
241 |
| - HAVE_PROTOBUF_ERROR = err |
| 246 | + HAVE_PROTOBUF_ERROR = err if PROTOBUF_VERSION is not None \ |
| 247 | + else "Protobuf >=3.0.0 is required" |
242 | 248 | if not HAVE_MYSQLXPB_CEXT:
|
243 |
| - raise ImportError("Protobuf is not available: {}".format(err)) |
| 249 | + raise ImportError("Protobuf is not available: {}" |
| 250 | + "".format(HAVE_PROTOBUF_ERROR)) |
244 | 251 |
|
245 | 252 | CRUD_PREPARE_MAPPING = {
|
246 | 253 | "Mysqlx.ClientMessages.Type.CRUD_FIND": (
|
|
0 commit comments