NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

__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 *