objective_messenger.py (6242B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\objective_messenger.py 2 from __future__ import absolute_import, division, print_function 3 import logging 4 from campaigns.client.errors import CampaignRequestError, CampaignBadRequestError, CampaignNotFoundError, CampaignUnauthorizedError 5 from campaigns.client.v2.data_model.objective import ObjectiveDefinition, ObjectiveStatus, ObjectiveParticipantStats 6 from campaigns.client.v2.data_model.track import TrackID, TrackStatus, TrackParticipantStats 7 from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import GetRequest, GetResponse, GetStatusRequest, GetStatusResponse, GetParticipantStatusRequest, GetParticipantStatusResponse 8 from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, NOT_MODIFIED, UNAUTHORIZED 9 from stackless_response_router.exceptions import TimeoutException, UnpackException 10 logger = logging.getLogger('campaigns_v2') 11 12 class ObjectiveMessenger(object): 13 14 def __init__(self, public_gateway): 15 self.public_gateway = public_gateway 16 17 def override_gateway(self, public_gateway): 18 self.public_gateway = public_gateway 19 20 def get_request(self, objective_id, current_version = None): 21 request = GetRequest(objective=objective_id.to_proto()) 22 if current_version is None: 23 request.no_version = True 24 else: 25 request.version.MergeFrom(current_version.to_proto()) 26 info_log = 'Request: Objectives: GetRequest: {request}\n'.format(request=request) 27 try: 28 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) 29 except (TimeoutException, UnpackException) as exc: 30 info_log += 'ERROR: %s' % exc.__class__.__name__ 31 logger.info(info_log) 32 raise CampaignRequestError('Failed to receive response from objective GetRequest: %s' % exc) 33 34 status_code = response_primitive.status_code 35 if status_code == NOT_MODIFIED: 36 logger.info(info_log + 'Response: Objectives: GetResponse: NOT_MODIFIED') 37 return NOT_MODIFIED 38 if status_code == NOT_FOUND: 39 raise CampaignNotFoundError('Could not find requested objective in GetRequest: %s' % objective_id) 40 if status_code == BAD_REQUEST: 41 raise CampaignBadRequestError('Bad request in objective GetRequest: %s' % objective_id) 42 if status_code != OK: 43 raise CampaignRequestError('Received error status code for objective GetRequest: %s' % status_code) 44 info_log += 'Response: Objectives: GetResponse: {response}'.format(response=response) 45 logger.info(info_log) 46 return ObjectiveDefinition.from_proto(objective_id, response) 47 48 def get_status_request(self, objective_id): 49 request = GetStatusRequest(objective=objective_id.to_proto()) 50 info_log = 'Request: Objectives: GetStatusRequest: {request}\n'.format(request=request) 51 try: 52 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatusResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) 53 except (TimeoutException, UnpackException) as exc: 54 info_log += 'ERROR: %s' % exc.__class__.__name__ 55 logger.info(info_log) 56 raise CampaignRequestError('Failed to receive response from objective GetStatusRequest: %s' % exc) 57 58 status_code = response_primitive.status_code 59 if status_code == NOT_FOUND: 60 raise CampaignNotFoundError('Could not find requested objective in GetStatusRequest: %s' % objective_id) 61 if status_code == BAD_REQUEST: 62 raise CampaignBadRequestError('Bad request in objective GetStatusRequest: %s' % objective_id) 63 if status_code != OK: 64 raise CampaignRequestError('Received error status code for objective GetStatusRequest: %s' % status_code) 65 info_log += 'Response: Objectives: GetStatusResponse: {response}'.format(response=response) 66 logger.info(info_log) 67 return (ObjectiveStatus.from_status_proto(objective_id, response), [ TrackStatus.from_status_proto(track) for track in response.tracks ]) 68 69 def get_participant_status_request(self, objective_id): 70 request = GetParticipantStatusRequest(objective=objective_id.to_proto()) 71 info_log = 'Request: Objectives: GetParticipantStatusRequest: {request}\n'.format(request=request) 72 try: 73 response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetParticipantStatusResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1) 74 except (TimeoutException, UnpackException) as exc: 75 info_log += 'ERROR: %s' % exc.__class__.__name__ 76 logger.info(info_log) 77 raise CampaignRequestError('Failed to receive response from GetParticipantStatusRequest: %s' % exc) 78 79 status_code = response_primitive.status_code 80 if status_code == NOT_FOUND: 81 raise CampaignNotFoundError('Could not find requested objective in GetParticipantStatusRequest: %s' % objective_id) 82 if status_code == BAD_REQUEST: 83 raise CampaignBadRequestError('Bad request in GetParticipantStatusRequest: %s' % objective_id) 84 if status_code == UNAUTHORIZED: 85 raise CampaignUnauthorizedError('Unauthorized in GetParticipantStatusRequest: %s' % objective_id) 86 if status_code != OK: 87 raise CampaignRequestError('Received error status code for GetParticipantStatusRequest: %s' % status_code) 88 info_log += 'Response: Objectives: GetParticipantStatusResponse: {response}'.format(response=response) 89 logger.info(info_log) 90 track_participant_stats = {TrackID.from_proto(track.id):TrackParticipantStats.from_proto(track.stats) for track in response.tracks} 91 return (ObjectiveParticipantStats.from_proto(response), track_participant_stats)