request_messenger.py (6672B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\careergoals\client\messenger\request_messenger.py 2 import uuid 3 import logging 4 from careergoals.client.const import RewardLabel 5 from careergoals.client.goal_progress import GoalProgress 6 from publicGateway.grpc.exceptions import GenericException 7 from careergoals.client.goal_definition import GoalDefinition 8 from eveProto.generated.eve_public.career.goal.api.requests_pb2 import GetDefinitionsRequest, GetDefinitionsResponse, GetAllRequest, GetAllResponse, ClaimRewardRequest, ClaimRewardResponse 9 from eveProto.generated.eve_public.career.goal.api.admin.requests_pb2 import CompleteRequest, CompleteResponse, ProgressRequest, ProgressResponse 10 from stackless_response_router.exceptions import TimeoutException 11 _TIMEOUT_SECONDS = 10 12 logger = logging.getLogger(__name__) 13 14 class PublicCareerGoalRequestMessenger(object): 15 16 def __init__(self, public_gateway): 17 self.public_gateway = public_gateway 18 19 def get_goals_definition_request(self): 20 request = GetDefinitionsRequest() 21 info_log = 'CAREER GOALS - Get goal definitions requested. ' 22 try: 23 response_primitive, response_payload = self._blocking_request(request, GetDefinitionsResponse) 24 if response_payload is None: 25 info_log += 'Response: no data found. ' 26 return [] 27 info_log += 'Response: {amount} goals found. '.format(amount=len(response_payload.goals)) 28 return [ GoalDefinition.from_proto(uuid.UUID(bytes=g.goal.uuid), g.attributes) for g in response_payload.goals ] 29 except GenericException as exc: 30 status_code = exc.response_primitive.status_code 31 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 32 logger.exception('Unexpected exception when requesting to get goal definitions: %s', exc) 33 raise 34 except TimeoutException as exc: 35 info_log += 'TIMED OUT' 36 logger.exception('Timed out when requesting to get goal definitions: %s', exc) 37 raise 38 finally: 39 logger.info(info_log) 40 41 def get_goals_and_rewards_progress_request(self): 42 request = GetAllRequest() 43 info_log = 'CAREER GOALS - Get goals and rewards progress requested. ' 44 try: 45 response_primitive, response_payload = self._blocking_request(request, GetAllResponse) 46 if response_payload is None: 47 info_log += 'Response: no data found. ' 48 return [] 49 info_log += 'Response: {amount} entries found. '.format(amount=len(response_payload.goals)) 50 return [ GoalProgress.from_proto(x) for x in response_payload.goals ] 51 except GenericException as exc: 52 status_code = exc.response_primitive.status_code 53 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 54 logger.exception('Unexpected exception when requesting to get goals and rewards progress: %s', exc) 55 raise 56 except TimeoutException as exc: 57 info_log += 'TIMED OUT' 58 logger.exception('Timed out when requesting to get goals and rewards progress: %s', exc) 59 raise 60 finally: 61 logger.info(info_log) 62 63 def admin_complete_goal_request(self, goal_id): 64 request = CompleteRequest() 65 request.goal.uuid = goal_id.bytes 66 info_log = 'CAREER GOALS - admin complete request for goal {goal_id}. '.format(goal_id=goal_id) 67 try: 68 self._blocking_request(request, CompleteResponse) 69 info_log += 'Response: admin goal completed.' 70 except GenericException as exc: 71 status_code = exc.response_primitive.status_code 72 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 73 logger.exception('Unexpected exception when requesting to get admin complete goal: %s', exc) 74 raise 75 except TimeoutException as exc: 76 info_log += 'TIMED OUT' 77 logger.exception('Timed out when requesting to admin complete goal: %s', exc) 78 raise 79 finally: 80 logger.info(info_log) 81 82 def admin_progress_goal_request(self, goal_id, progress): 83 request = ProgressRequest() 84 request.goal.uuid = goal_id.bytes 85 request.progress = progress 86 info_log = 'CAREER GOALS - admin progress request to progress {progress} for goal {goal_id}. '.format(progress=progress, goal_id=goal_id) 87 try: 88 self._blocking_request(request, ProgressResponse) 89 info_log += 'Response: admin goal progressed.' 90 except GenericException as exc: 91 status_code = exc.response_primitive.status_code 92 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 93 logger.exception('Unexpected exception when requesting to get admin progress goal: %s', exc) 94 raise 95 except TimeoutException as exc: 96 info_log += 'TIMED OUT' 97 logger.exception('Timed out when requesting to admin progress goal: %s', exc) 98 raise 99 finally: 100 logger.info(info_log) 101 102 def claim_reward_request(self, goal_id, reward_label): 103 request = ClaimRewardRequest() 104 request.goal.uuid = goal_id.bytes 105 request.label = RewardLabel.to_proto(reward_label) 106 info_log = 'CAREER GOALS - Claim reward for label %s requested, goal id %s. ' % (reward_label, goal_id) 107 try: 108 self._blocking_request(request, ClaimRewardResponse) 109 info_log += 'Response: claim successful. ' 110 return True 111 except GenericException as exc: 112 status_code = exc.response_primitive.status_code 113 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 114 logger.exception('Unexpected exception when requesting to claim reward: %s', exc) 115 raise 116 except TimeoutException as exc: 117 info_log += 'TIMED OUT' 118 logger.exception('Timed out when requesting to claim reward: %s', exc) 119 raise 120 finally: 121 logger.info(info_log) 122 123 def _blocking_request(self, request, response_class): 124 request_primitive, response_channel = self.public_gateway.send_character_request(request, response_class, _TIMEOUT_SECONDS) 125 response_primitive, payload = response_channel.receive() 126 if response_primitive.status_code != 200: 127 raise GenericException(request_primitive, response_primitive) 128 return (response_primitive, payload)