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

campaigns_messenger.py (17577B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v1\messengers\campaigns_messenger.py
      2 import logging
      3 from campaigns.client.v1.data_model.campaign import CampaignStats, Campaign, UnredeemedReward, CampaignID
      4 from campaigns.client.v1.data_model.objective import ObjectiveParticipantStats, ObjectiveStats
      5 from campaigns.client.errors import CampaignRequestError, CampaignNotFoundError, CampaignUnauthorizedError, CampaignBadRequestError, CampaignForbiddenError, CampaignStatsRequestError, CampaignObjectiveGetStatsTimeoutError
      6 from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetLimitsRequest, GetLimitsResponse, GetAllRequest, GetAllResponse, GetParticipantStatsRequest, GetParticipantStatsResponse, GetStatsRequest, GetStatsResponse, GetRequest, GetResponse, GetAllUnredeemedRewardsRequest, GetAllUnredeemedRewardsResponse
      7 from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import GetStatsRequest as ObjectiveGetStatsRequest, GetStatsResponse as ObjectiveGetStatsResponse, CommitRequest, CommitResponse, ResignRequest, ResignResponse, RedeemRewardsRequest, RedeemRewardsResponse
      8 from eveProto.generated.eve_public.public_pb2 import Page
      9 from six.moves.http_client import OK, UNAUTHORIZED, NOT_FOUND, BAD_REQUEST, NOT_MODIFIED, FORBIDDEN
     10 from stackless_response_router.exceptions import TimeoutException, UnpackException
     11 try:
     12     from typing import List, Dict
     13 except ImportError:
     14     pass
     15 
     16 logger = logging.getLogger('campaigns')
     17 PAGE_SIZE = 1000
     18 
     19 class CampaignsMessenger(object):
     20 
     21     def __init__(self, public_gateway):
     22         self.public_gateway = public_gateway
     23 
     24     def override_gateway(self, public_gateway):
     25         self.public_gateway = public_gateway
     26 
     27     def get_all_request(self):
     28         request = GetAllRequest()
     29         info_log = 'Request: Campaigns: GetAllRequest: {request}\n'.format(request=request)
     30         try:
     31             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
     32         except (TimeoutException, UnpackException) as exc:
     33             info_log += 'ERROR: %s' % exc.__class__.__name__
     34             logger.info(info_log)
     35             raise CampaignRequestError('Failed to receive response from GetAllRequest: %s' % exc)
     36 
     37         status_code = response_primitive.status_code
     38         if status_code != OK:
     39             raise CampaignRequestError('Received error status code for GetAllRequest: %s' % status_code)
     40         info_log += 'Response: Campaigns: GetAllResponse: {response}'.format(response=response)
     41         logger.info(info_log)
     42         results = [ CampaignID.from_proto(campaign_id) for campaign_id in response.campaigns ]
     43         return results
     44 
     45     def get_limits_request(self):
     46         request = GetLimitsRequest()
     47         info_log = 'Request: Campaigns: GetLimitsRequest: {request}\n'.format(request=request)
     48         try:
     49             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetLimitsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
     50         except (TimeoutException, UnpackException) as exc:
     51             info_log += 'ERROR: %s' % exc.__class__.__name__
     52             logger.info(info_log)
     53             raise CampaignRequestError('Failed to receive response from GetLimitsRequest: %s' % exc)
     54 
     55         status_code = response_primitive.status_code
     56         if status_code != OK:
     57             raise CampaignRequestError('Received error status code for GetLimitsResponse: %s' % status_code)
     58         info_log += 'Response: Campaigns: GetLimitsResponse: {response}'.format(response=response)
     59         logger.info(info_log)
     60         limit = response.max_active_objectives_per_participant
     61         return limit
     62 
     63     def get_request(self, campaign_id, current_version = None):
     64         campaign_identifier = campaign_id.to_proto()
     65         request = GetRequest(campaign=campaign_identifier)
     66         if current_version is None:
     67             request.no_version = True
     68         else:
     69             request.version.MergeFrom(current_version.to_proto())
     70         info_log = 'Request: Campaigns: GetRequest: {request}\n'.format(request=request)
     71         try:
     72             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)
     73         except (TimeoutException, UnpackException) as exc:
     74             info_log += 'ERROR: %s' % exc.__class__.__name__
     75             logger.info(info_log)
     76             raise CampaignRequestError('Failed to receive response from GetRequest: %s' % exc)
     77 
     78         status_code = response_primitive.status_code
     79         if status_code == NOT_MODIFIED:
     80             return NOT_MODIFIED
     81         if status_code == NOT_FOUND:
     82             raise CampaignNotFoundError('Could not find requested campaign in GetRequest: %s' % campaign_id)
     83         if status_code == BAD_REQUEST:
     84             raise CampaignBadRequestError('Could bad request in GetRequest: %s' % campaign_id)
     85         if status_code != OK:
     86             raise CampaignRequestError('Received error status code for GetRequest: %s' % status_code)
     87         info_log += 'Response: Campaigns: GetResponse: {response}'.format(response=response)
     88         logger.info(info_log)
     89         campaign = Campaign.from_proto(campaign_identifier, response.attributes, response.available_objectives, response.restricted_objectives)
     90         return campaign
     91 
     92     def get_stats_request(self, campaign_id):
     93         request = GetStatsRequest(campaign=campaign_id.to_proto())
     94         info_log = 'Request: Campaigns: GetStatsRequest: {request}\n'.format(request=request)
     95         try:
     96             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
     97         except (TimeoutException, UnpackException) as exc:
     98             info_log += 'ERROR: %s' % exc.__class__.__name__
     99             logger.info(info_log)
    100             raise CampaignStatsRequestError('Failed to receive response from GetStatsRequest: %s' % exc)
    101 
    102         status_code = response_primitive.status_code
    103         if status_code == NOT_FOUND:
    104             raise CampaignNotFoundError('Could not find requested campaign in GetStatsRequest: %s' % campaign_id)
    105         if status_code == BAD_REQUEST:
    106             raise CampaignBadRequestError('Could bad request in GetStatsRequest: %s' % campaign_id)
    107         if status_code != OK:
    108             raise CampaignStatsRequestError('Received error status code for GetStatsRequest: %s' % status_code)
    109         info_log += 'Response: Campaigns: GetStatsResponse: {response}'.format(response=response)
    110         logger.info(info_log)
    111         campaign_stats = CampaignStats.from_proto(request.campaign, response.campaign_stats)
    112         objective_stats = [ ObjectiveStats.from_proto(objective_stats.objective, objective_stats.stats) for objective_stats in response.objective_stats ]
    113         return (campaign_stats, objective_stats)
    114 
    115     def get_participant_stats_request(self, campaign_id):
    116         request = GetParticipantStatsRequest(campaign=campaign_id.to_proto())
    117         info_log = 'Request: Campaigns: GetParticipantStatsRequest: {request}\n'.format(request=request)
    118         try:
    119             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetParticipantStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    120         except (TimeoutException, UnpackException) as exc:
    121             info_log += 'ERROR: %s' % exc.__class__.__name__
    122             logger.info(info_log)
    123             raise CampaignRequestError('Failed to receive response from GetParticipantStatsRequest: %s' % exc)
    124 
    125         status_code = response_primitive.status_code
    126         if status_code == NOT_FOUND:
    127             raise CampaignNotFoundError('Could not find requested campaign in GetParticipantStatsRequest: %s' % campaign_id)
    128         if status_code == UNAUTHORIZED:
    129             raise CampaignUnauthorizedError('Could not authorize request in GetParticipantStatsRequest: %s' % campaign_id)
    130         if status_code == BAD_REQUEST:
    131             raise CampaignBadRequestError('Could bad request in GetParticipantStatsRequest: %s' % campaign_id)
    132         if status_code != OK:
    133             raise CampaignRequestError('Received error status code for GetParticipantStatsRequest: %s' % status_code)
    134         info_log += 'Response: Campaigns: GetParticipantStatsResponse: {response}'.format(response=response)
    135         logger.info(info_log)
    136         results = [ ObjectiveParticipantStats.from_proto(participant_stats) for participant_stats in response.participant_stats ]
    137         return results
    138 
    139     def get_all_unredeemed_rewards_request(self, page_token = None):
    140         request = GetAllUnredeemedRewardsRequest(page=Page(size=PAGE_SIZE))
    141         request.page.token = '' if page_token is None else page_token
    142         info_log = 'Request: Campaigns: GetAllUnredeemedRewardsRequest: {request}\n'.format(request=request)
    143         try:
    144             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllUnredeemedRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    145         except (TimeoutException, UnpackException) as exc:
    146             info_log += 'ERROR: %s' % exc.__class__.__name__
    147             logger.info(info_log)
    148             raise CampaignRequestError('Failed to receive response from GetAllUnredeemedRewardsRequest: %s' % exc)
    149 
    150         status_code = response_primitive.status_code
    151         if status_code == NOT_FOUND:
    152             raise CampaignNotFoundError('Could not find requested campaign in GetAllUnredeemedRewardsRequest: %s' % page_token)
    153         if status_code == UNAUTHORIZED:
    154             raise CampaignUnauthorizedError('Could not authorize request in GetAllUnredeemedRewardsRequest: %s' % page_token)
    155         if status_code == BAD_REQUEST:
    156             raise CampaignBadRequestError('Could bad request in GetAllUnredeemedRewardsRequest: %s' % page_token)
    157         if status_code != OK:
    158             raise CampaignRequestError('Received error status code for GetAllUnredeemedRewardsResponse: %s' % status_code)
    159         info_log += 'Response: Campaigns: GetAllUnredeemedRewardsResponse: {response}'.format(response=response)
    160         logger.info(info_log)
    161         results = [ UnredeemedReward.from_proto(reward) for reward in response.objectives ]
    162         next_page_token = response.next_page.token
    163         return (results, next_page_token)
    164 
    165     def get_objective_stats_request(self, objective_id_list):
    166         request = ObjectiveGetStatsRequest(objective=[ objective_id.to_proto() for objective_id in objective_id_list ])
    167         info_log = 'Request: Campaigns: ObjectiveGetStatsRequest: {request}\n'.format(request=request)
    168         try:
    169             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ObjectiveGetStatsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    170         except TimeoutException as exc:
    171             info_log += 'ERROR: %s' % exc.__class__.__name__
    172             logger.info(info_log)
    173             raise CampaignObjectiveGetStatsTimeoutError('Public gateway timed out waiting for ObjectiveGetStatsResponse (timeout_seconds=4, max_attempts=2): %s' % exc)
    174         except UnpackException as exc:
    175             info_log += 'ERROR: %s' % exc.__class__.__name__
    176             logger.info(info_log)
    177             raise CampaignRequestError('Failed to receive response from ObjectiveGetStatsRequest: %s' % exc)
    178 
    179         status_code = response_primitive.status_code
    180         if status_code == NOT_FOUND:
    181             raise CampaignNotFoundError('Could not find requested campaign in ObjectiveGetStatsRequest: %s' % objective_id_list)
    182         if status_code == BAD_REQUEST:
    183             raise CampaignBadRequestError('Could bad request in ObjectiveGetStatsRequest: %s' % objective_id_list)
    184         if status_code != OK:
    185             raise CampaignRequestError('Received error status code for ObjectiveGetStatsRequest: %s' % status_code)
    186         info_log += 'Response: Campaigns: ObjectiveGetStatsResponse: {response}'.format(response=response)
    187         logger.info(info_log)
    188         results = [ ObjectiveStats.from_proto(objective.objective, objective.stats) for objective in response.objective_stats ]
    189         return results
    190 
    191     def commit_request(self, objective_id):
    192         request = CommitRequest(objective=objective_id.to_proto())
    193         info_log = 'Request: Campaigns: CommitRequest: {request}\n'.format(request=request)
    194         try:
    195             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=CommitResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    196         except (TimeoutException, UnpackException) as exc:
    197             info_log += 'ERROR: %s' % exc.__class__.__name__
    198             logger.info(info_log)
    199             raise CampaignRequestError('Failed to receive response from CommitRequest: %s' % exc)
    200 
    201         status_code = response_primitive.status_code
    202         if status_code == NOT_FOUND:
    203             raise CampaignNotFoundError('Could not find requested campaign in CommitRequest: %s' % objective_id)
    204         if status_code == UNAUTHORIZED:
    205             raise CampaignUnauthorizedError('Could not authorize request in CommitRequest: %s' % objective_id)
    206         if status_code == BAD_REQUEST:
    207             raise CampaignBadRequestError('Could bad request in CommitRequest: %s' % objective_id)
    208         if status_code == FORBIDDEN:
    209             raise CampaignForbiddenError('Cannot commit in CommitRequest: %s' % objective_id)
    210         if status_code != OK:
    211             raise CampaignRequestError('Received error status code for CommitRequest: %s' % status_code)
    212         info_log += 'Response: Campaigns: CommitResponse: {response}'.format(response=response)
    213         logger.info(info_log)
    214 
    215     def resign_request(self, objective_id):
    216         request = ResignRequest(objective=objective_id.to_proto())
    217         info_log = 'Request: Campaigns: ResignRequest: {request}\n'.format(request=request)
    218         try:
    219             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=ResignResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    220         except (TimeoutException, UnpackException) as exc:
    221             info_log += 'ERROR: %s' % exc.__class__.__name__
    222             logger.info(info_log)
    223             raise CampaignRequestError('Failed to receive response from ResignRequest: %s' % exc)
    224 
    225         status_code = response_primitive.status_code
    226         if status_code == NOT_FOUND:
    227             raise CampaignNotFoundError('Could not find requested campaign in ResignRequest: %s' % objective_id)
    228         if status_code == UNAUTHORIZED:
    229             raise CampaignUnauthorizedError('Could not authorize request in ResignRequest: %s' % objective_id)
    230         if status_code == BAD_REQUEST:
    231             raise CampaignBadRequestError('Could bad request in ResignRequest: %s' % objective_id)
    232         if status_code == FORBIDDEN:
    233             raise CampaignForbiddenError('Cannot resign in ResignRequest: %s' % objective_id)
    234         if status_code != OK:
    235             raise CampaignRequestError('Received error status code for ResignRequest: %s' % status_code)
    236         info_log += 'Response: Campaigns: ResignResponse: {response}'.format(response=response)
    237         logger.info(info_log)
    238 
    239     def redeem_rewards_request(self, objective_id):
    240         request = RedeemRewardsRequest(objective=objective_id.to_proto())
    241         info_log = 'Request: Campaigns: RedeemRewardsRequest: {request}\n'.format(request=request)
    242         try:
    243             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=RedeemRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    244         except (TimeoutException, UnpackException) as exc:
    245             info_log += 'ERROR: %s' % exc.__class__.__name__
    246             logger.info(info_log)
    247             raise CampaignRequestError('Failed to receive response from RedeemRewardsRequest: %s' % exc)
    248 
    249         status_code = response_primitive.status_code
    250         if status_code == NOT_FOUND:
    251             raise CampaignNotFoundError('Could not find requested campaign in RedeemRewardsRequest: %s' % objective_id)
    252         if status_code == UNAUTHORIZED:
    253             raise CampaignUnauthorizedError('Could not authorize request in RedeemRewardsRequest: %s' % objective_id)
    254         if status_code == BAD_REQUEST:
    255             raise CampaignBadRequestError('Bad request in RedeemRewardsRequest: %s' % objective_id)
    256         if status_code != OK:
    257             raise CampaignRequestError('Received error status code for RedeemRewardsRequest: %s' % status_code)
    258         info_log += 'Response: Campaigns: RedeemRewardsResponse: {response}'.format(response=response)
    259         logger.info(info_log)