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

request_messenger.py (3878B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\store\client\payment\schedule\messenger\request_messenger.py
      2 import logging
      3 from six.moves.http_client import NOT_FOUND
      4 from publicGateway.grpc.exceptions import GenericException
      5 from stackless_response_router.exceptions import TimeoutException
      6 from store.client.const import LOG_ENTRY_NAME
      7 from store.client.payment.schedule.payment_schedule import PaymentScheduleIdentifier, PaymentSchedule, PaymentScheduleType
      8 from eveProto.generated.eve_public.payment.schedule.requests_pb2 import GetRequest, GetResponse, GetActiveByTypeRequest, GetActiveByTypeResponse
      9 _TIMEOUT_SECONDS = 5
     10 logger = logging.getLogger(__name__)
     11 
     12 class PublicPaymentScheduleRequestMessenger(object):
     13 
     14     def __init__(self, public_gateway):
     15         self.public_gateway = public_gateway
     16 
     17     def get_payment_schedule_request(self, schedule_identifier):
     18         request = GetRequest(schedule=PaymentScheduleIdentifier.to_proto(schedule_identifier))
     19         info_log = '{log_entry} - Get schedule id {id} '.format(log_entry=LOG_ENTRY_NAME, id=schedule_identifier)
     20         try:
     21             response_primitive, response_payload = self._blocking_request(request, GetResponse)
     22             if response_payload is None:
     23                 info_log += 'Response: no schedule found. '
     24                 return
     25             info_log += 'Response: schedule found: {schedule}. '.format(schedule=response_payload.attributes)
     26             return PaymentSchedule.build_from_proto(response_payload.attributes)
     27         except GenericException as exc:
     28             status_code = exc.response_primitive.status_code
     29             info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code)
     30             logger.exception('Unexpected exception when requesting schedule: %s', exc)
     31             raise
     32         except TimeoutException as exc:
     33             info_log += 'TIMED OUT'
     34             logger.exception('Timed out when requesting schedule: %s', exc)
     35             raise
     36         finally:
     37             logger.info(info_log)
     38 
     39     def get_active_payment_schedule_by_type_request(self, schedule_type):
     40         request = GetActiveByTypeRequest(type=PaymentScheduleType.to_proto(schedule_type))
     41         info_log = '{log_entry} - Get active schedule of type {type} '.format(log_entry=LOG_ENTRY_NAME, type=schedule_type)
     42         try:
     43             response_primitive, response_payload = self._blocking_request(request, GetActiveByTypeResponse)
     44             if response_payload is None:
     45                 info_log += 'Response: no active schedule found. '
     46                 return
     47             info_log += 'Response: active schedule found: {schedule}. '.format(schedule=response_payload.schedule)
     48             return PaymentScheduleIdentifier.build_from_proto(response_payload.schedule)
     49         except GenericException as exc:
     50             status_code = exc.response_primitive.status_code
     51             if status_code == NOT_FOUND:
     52                 info_log += 'Response: no active schedule found. '
     53                 return
     54             info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code)
     55             logger.exception('Unexpected exception when requesting schedules: %s', exc)
     56             raise
     57         except TimeoutException as exc:
     58             info_log += 'TIMED OUT'
     59             logger.exception('Timed out when requesting schedules: %s', exc)
     60             raise
     61         finally:
     62             logger.info(info_log)
     63 
     64     def _blocking_request(self, request, response_class):
     65         request_primitive, response_channel = self.public_gateway.send_user_request(request, response_class, _TIMEOUT_SECONDS)
     66         response_primitive, payload = response_channel.receive()
     67         if response_primitive.status_code != 200:
     68             raise GenericException(request_primitive, response_primitive)
     69         return (response_primitive, payload)