NovaBryan/EVE_Dump
Log | Files | 📦 下载最新源码 (.zip) | Refs | README

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)