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)