messenger.py (4178B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\freelanceprojects\client\contributionmethods\messenger.py 2 from eveProto.generated.eve_public.freelance.contributionmethod.definition.api.requests_pb2 import GetAllLatestRequest, GetAllLatestResponse, GetAllLatestWithinMajorRequest, GetAllLatestWithinMajorResponse 3 from freelanceprojects.client.contributionmethods.data.definitions import ContributionMethodDefinitions 4 from freelanceprojects.client.contributionmethods.errors import ServiceUnavailable, DefinitionsNotModified, DefinitionsNotFound, GenericError 5 from six.moves.http_client import OK, NOT_MODIFIED, NOT_FOUND 6 from logging import getLogger 7 from semantic_version import SemanticVersion 8 from stackless_response_router.exceptions import TimeoutException, UnpackException 9 logger = getLogger('freelance_projects') 10 11 class ContributionMethodsMessenger(object): 12 13 def __init__(self, public_gateway): 14 self.public_gateway = public_gateway 15 16 def get_latest_definitions(self, known_version = None): 17 if known_version is None: 18 request = GetAllLatestRequest(no_known_version=True) 19 else: 20 request = GetAllLatestRequest(known_version=known_version.to_eve_public_proto()) 21 info_log = 'Request: Contribution Methods: GetAllLatestRequest: {request}\n'.format(request=request) 22 try: 23 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllLatestResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) 24 except (TimeoutException, UnpackException) as exc: 25 info_log += 'ERROR: %s' % exc.__class__.__name__ 26 logger.info(info_log) 27 raise ServiceUnavailable('Failed to receive response from GetAllLatestRequest: %s' % exc) 28 29 status_code = response_primitive.status_code 30 if status_code == OK: 31 info_log += 'Response: Contribution Methods: GetAllLatestResponse: {response}'.format(response=response) 32 logger.info(info_log) 33 definitions = ContributionMethodDefinitions.from_proto(response.version, response.definitions) 34 return definitions 35 self._raise_error(info_log, status_code) 36 37 def get_latest_definitions_within_major(self, major, known_version = None): 38 if known_version is None: 39 request = GetAllLatestWithinMajorRequest(major=major, no_known_version=True) 40 else: 41 request = GetAllLatestWithinMajorRequest(major=major, known_version=known_version.to_eve_public_proto()) 42 info_log = 'Request: Contribution Methods: GetAllLatestWithinMajorRequest: {request}\n'.format(request=request) 43 try: 44 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllLatestWithinMajorResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) 45 except (TimeoutException, UnpackException) as exc: 46 info_log += 'ERROR: %s' % exc.__class__.__name__ 47 logger.info(info_log) 48 raise ServiceUnavailable('Failed to receive response from GetAllLatestWithinMajorRequest: %s' % exc) 49 50 status_code = response_primitive.status_code 51 if status_code == OK: 52 info_log += 'Response: Contribution Methods: GetAllLatestWithinMajorResponse: {response}'.format(response=response) 53 logger.info(info_log) 54 definitions = ContributionMethodDefinitions.from_proto(response.version, response.definitions) 55 return definitions 56 self._raise_error(info_log, status_code) 57 58 def _raise_error(self, info_log, status_code): 59 info_log += 'ERROR: %s' % status_code 60 logger.info(info_log) 61 if status_code == NOT_MODIFIED: 62 raise DefinitionsNotModified('Client already has the latest definitions') 63 if status_code == NOT_FOUND: 64 raise DefinitionsNotFound('Failed to find data for these definitions') 65 raise GenericError('Unexpected error when requesting definitions')