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)