__init__.py (3862B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\eveProto\__init__.py 2 from __future__ import print_function 3 from __future__ import absolute_import 4 import logging 5 import sys 6 import monolithconfig 7 import os 8 import six 9 TYPE_URL = 'type.evetech.net/' 10 DEV_SUFFIX = '_dev' 11 GRPC_CLIENT_MODULE_NAME = 'eve_public_grpc_client' 12 GRPC_SERVER_MODULE_NAME = 'eve_grpc_client' 13 fast_native_serialization = False 14 grpc_module = None 15 16 def get_grpc_client_import_name(): 17 import monolithconfig 18 if monolithconfig.on_client(): 19 return GRPC_CLIENT_MODULE_NAME 20 else: 21 return GRPC_SERVER_MODULE_NAME 22 23 24 def toggle_cpp_implementation(enabled = True): 25 import os 26 if enabled: 27 os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp' 28 else: 29 os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'python' 30 31 32 def patch_pickle(): 33 import cPickle 34 sys.modules['pickle'] = cPickle 35 36 37 def is_x64(): 38 return sys.maxsize > 4294967296L 39 40 41 def is_running_stackless(): 42 try: 43 import stackless 44 return True 45 except ImportError: 46 return False 47 48 return False 49 50 51 def log_everywhere(msg): 52 logging.info(msg) 53 print(msg) 54 55 56 def import_grpc_and_protobuf_module(import_name): 57 global grpc_module 58 global fast_native_serialization 59 patch_pickle() 60 toggle_cpp_implementation(True) 61 import imp 62 log_everywhere('loading protobuf and grpc: {}'.format(import_name)) 63 module = imp.find_module(import_name) 64 log_everywhere('...found: {}'.format(module[1])) 65 protobuf_unique_path = os.path.split(module[1]) 66 protobuf_unique_path = os.path.join(protobuf_unique_path[0], '.', protobuf_unique_path[1]) 67 protobuf_module = imp.load_module('google.protobuf.pyext._message', module[0], protobuf_unique_path, module[2]) 68 import google.protobuf.pyext as pyext 69 pyext._message = protobuf_module 70 log_everywhere('...protobuf loaded') 71 if import_name.endswith(DEV_SUFFIX): 72 import_name = import_name[:-len(DEV_SUFFIX)] 73 grpc_module = imp.load_module(import_name, module[0], module[1], module[2]) 74 log_everywhere('...grpc loaded') 75 fast_native_serialization = True 76 77 78 def set_grpc_dns_resolver(resolver): 79 key = 'GRPC_DNS_RESOLVER' 80 import os 81 os.environ[key] = resolver 82 83 84 def get_grpc_module(): 85 global grpc_module 86 if not is_running_stackless() or not is_x64(): 87 return 88 set_grpc_dns_resolver('native') 89 if grpc_module is not None: 90 return grpc_module 91 grpc_module = __import__(get_grpc_client_import_name()) 92 return grpc_module 93 94 95 def get_message_type_url(messageName): 96 return '{}{}'.format(TYPE_URL, messageName) 97 98 99 def on_import(): 100 if not is_running_stackless() or not is_x64(): 101 logging.warn('x64 Stackless not detected. Quasar unavailable') 102 return 103 import_name = get_grpc_client_import_name() 104 try: 105 import_grpc_and_protobuf_module(import_name) 106 except Exception as grpc_import_exception: 107 if monolithconfig.get_tier() != 'dev': 108 six.raise_from(Exception('Quasar unavailable: {}'.format(grpc_import_exception)), grpc_import_exception) 109 try: 110 log_everywhere('...standard loading failed, trying dev fallback.') 111 dev_library_name = import_name + DEV_SUFFIX 112 import_grpc_and_protobuf_module(dev_library_name) 113 log_everywhere('...protobuf is in dev mode (reflection), which means 10x faster than python, but 10x slower than generated C++ messages. You can update generated python message code without C++ changes.') 114 except Exception as grpc_dev_exception: 115 six.raise_from(Exception('Quasar unavailable: Both standard ({}) and dev ({}) modules failed.'.format(grpc_import_exception, grpc_dev_exception)), grpc_dev_exception) 116 117 118 on_import() 119 from .monolith_converters import *