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

request_messenger.py (3063B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\communitytracks\client\messenger\request_messenger.py
      2 from six.moves import http_client as httplib
      3 from communitytracks.client.data.instance_attributes import InstanceAttributes
      4 from communitytracks.client.mock.mock_gateway import MockCommunityTracksGateway
      5 from communitytracks.client.data.instance_identifier import InstanceIdentifier
      6 from communitytracks.common.const import LOGGER_NAME
      7 from communitytracks.common.errors import ServiceUnavailableError, GenericNotFoundError, GenericInternalServerError, GenericError
      8 from logging import getLogger
      9 from publicGateway.gateway import PublicGateway
     10 from eveProto.generated.eve_public.communitytrack.api.requests_pb2 import GetRequest, GetResponse
     11 from stackless_response_router.exceptions import TimeoutException, UnpackException
     12 logger = getLogger(LOGGER_NAME)
     13 
     14 class CommunityTracksRequestMessenger(object):
     15 
     16     def __init__(self, public_gateway):
     17         self.public_gateway = public_gateway
     18 
     19     def request_instance_attributes(self, instance_id):
     20         info_log = 'Request Instance Attributes - '
     21         request = GetRequest(instance=InstanceIdentifier.to_proto(instance_id))
     22         info_log += 'GetRequest: {request}\n'.format(request=request)
     23         status_code, payload = self._send_request(request, response_class=GetResponse, info_log=info_log)
     24         if status_code == httplib.OK:
     25             info_log += 'SUCCESS, payload: {payload}\n'.format(payload=payload)
     26             instance_attributes = InstanceAttributes.from_proto(payload.attributes)
     27             info_log += 'Returning: {attributes}\n'.format(attributes=instance_attributes)
     28             logger.info(info_log)
     29             return instance_attributes
     30         self._raise_error_and_log(info_log, status_code)
     31 
     32     def _send_request(self, request, response_class, info_log, timeout_seconds = 10, max_attempts = 1):
     33         try:
     34             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=response_class, timeout_seconds=timeout_seconds, max_attempts=max_attempts, retry_delay_in_seconds=1)
     35         except (TimeoutException, UnpackException) as exc:
     36             error_info = 'ERROR: %s' % exc.__class__.__name__
     37             info_log += error_info
     38             logger.info(info_log)
     39             request_cls = request.__class__.__name__
     40             raise ServiceUnavailableError('%s, Failed to receive response from %s: %s' % (error_info, request_cls, exc))
     41 
     42         return (response_primitive.status_code, response)
     43 
     44     @staticmethod
     45     def _raise_error_and_log(info_text, status_code):
     46         info_text += 'ERROR: %s(%s)\n' % (httplib.responses[status_code], status_code)
     47         logger.info(info_text)
     48         if status_code == httplib.NOT_FOUND:
     49             raise GenericNotFoundError(info_text)
     50         if status_code == httplib.INTERNAL_SERVER_ERROR:
     51             raise GenericInternalServerError(info_text)
     52         raise GenericError(info_text)