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

campaigns_messenger.py (13065B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\campaigns\client\v2\messengers\campaigns_messenger.py
      2 from __future__ import absolute_import, division, print_function
      3 import logging
      4 from campaigns.client.errors import CampaignRequestError, CampaignBadRequestError, CampaignNotFoundError, CampaignUnauthorizedError, CampaignForbiddenError, CampaignCommitmentNotRequiredError
      5 from campaigns.client.v2.data_model.campaign import CampaignDefinition, CampaignID, CampaignStatus, UpcomingCampaign
      6 from campaigns.client.v2.data_model.track import TrackID, TrackStatus
      7 from campaigns.client.v2.data_model.track_reward import TrackUnredeemedRewards
      8 from eveProto.generated.eve_public.campaign.api.requests_pb2 import GetAllForNamespaceRequest, GetAllForNamespaceResponse, GetLimitsRequest, GetLimitsResponse, GetRequest, GetResponse, GetStatusRequest, GetStatusResponse, GetAllUnredeemedParticipantRewardsRequest, GetAllUnredeemedParticipantRewardsResponse
      9 from eveProto.generated.eve_public.public_pb2 import Page
     10 from eveProto.generated.eve_public.campaign.objective.api.requests_pb2 import CommitRequest, CommitResponse, ResignRequest, ResignResponse
     11 from six.moves.http_client import OK, BAD_REQUEST, NOT_FOUND, UNAUTHORIZED, FORBIDDEN, NOT_ACCEPTABLE, NOT_MODIFIED
     12 from stackless_response_router.exceptions import TimeoutException, UnpackException
     13 logger = logging.getLogger('campaigns_v2')
     14 PAGE_SIZE = 1000
     15 
     16 class CampaignsMessenger(object):
     17 
     18     def __init__(self, public_gateway):
     19         self.public_gateway = public_gateway
     20 
     21     def override_gateway(self, public_gateway):
     22         self.public_gateway = public_gateway
     23 
     24     def get_all_for_namespace_request(self, namespace):
     25         request = GetAllForNamespaceRequest(namespace=namespace.to_proto())
     26         info_log = 'Request: Campaigns: GetAllForNamespaceRequest: {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=GetAllForNamespaceResponse, 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 GetAllForNamespaceRequest: %s' % exc)
     33 
     34         status_code = response_primitive.status_code
     35         if status_code == NOT_FOUND:
     36             raise CampaignNotFoundError('Namespace not found in GetAllForNamespaceRequest: %s' % namespace)
     37         if status_code == BAD_REQUEST:
     38             raise CampaignBadRequestError('Bad request in GetAllForNamespaceRequest: %s' % namespace)
     39         if status_code != OK:
     40             raise CampaignRequestError('Received error status code for GetAllForNamespaceResponse: %s' % status_code)
     41         info_log += 'Response: Campaigns: GetAllForNamespaceResponse: {response}'.format(response=response)
     42         logger.info(info_log)
     43         campaign_ids = [ CampaignID.from_proto(identifier) for identifier in response.campaigns ]
     44         upcoming = [ UpcomingCampaign.from_proto(namespace, upcoming) for upcoming in response.upcoming_campaigns ]
     45         return (campaign_ids, upcoming)
     46 
     47     def get_limits_request(self):
     48         request = GetLimitsRequest()
     49         info_log = 'Request: Campaigns: GetLimitsRequest: {request}\n'.format(request=request)
     50         try:
     51             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)
     52         except (TimeoutException, UnpackException) as exc:
     53             info_log += 'ERROR: %s' % exc.__class__.__name__
     54             logger.info(info_log)
     55             raise CampaignRequestError('Failed to receive response from GetLimitsRequest: %s' % exc)
     56 
     57         status_code = response_primitive.status_code
     58         if status_code != OK:
     59             raise CampaignRequestError('Received error status code for GetLimitsResponse: %s' % status_code)
     60         info_log += 'Response: Campaigns: GetLimitsResponse: {response}'.format(response=response)
     61         logger.info(info_log)
     62         return response.max_active_objectives_per_participant
     63 
     64     def commit_request(self, objective_id):
     65         request = CommitRequest(objective=objective_id.to_proto())
     66         info_log = 'Request: Campaigns: CommitRequest: {request}\n'.format(request=request)
     67         try:
     68             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)
     69         except (TimeoutException, UnpackException) as exc:
     70             info_log += 'ERROR: %s' % exc.__class__.__name__
     71             logger.info(info_log)
     72             raise CampaignRequestError('Failed to receive response from CommitRequest: %s' % exc)
     73 
     74         status_code = response_primitive.status_code
     75         if status_code == NOT_FOUND:
     76             raise CampaignNotFoundError('Could not find requested objective in CommitRequest: %s' % objective_id)
     77         if status_code == UNAUTHORIZED:
     78             raise CampaignUnauthorizedError('Could not authorize request in CommitRequest: %s' % objective_id)
     79         if status_code == BAD_REQUEST:
     80             raise CampaignBadRequestError('Bad request in CommitRequest: %s' % objective_id)
     81         if status_code == FORBIDDEN:
     82             raise CampaignForbiddenError('Cannot commit in CommitRequest: %s' % objective_id)
     83         if status_code == NOT_ACCEPTABLE:
     84             raise CampaignCommitmentNotRequiredError('Objective does not require commitment in CommitRequest: %s' % objective_id)
     85         if status_code != OK:
     86             raise CampaignRequestError('Received error status code for CommitRequest: %s' % status_code)
     87         info_log += 'Response: Campaigns: CommitResponse: {response}'.format(response=response)
     88         logger.info(info_log)
     89 
     90     def resign_request(self, objective_id):
     91         request = ResignRequest(objective=objective_id.to_proto())
     92         info_log = 'Request: Campaigns: ResignRequest: {request}\n'.format(request=request)
     93         try:
     94             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)
     95         except (TimeoutException, UnpackException) as exc:
     96             info_log += 'ERROR: %s' % exc.__class__.__name__
     97             logger.info(info_log)
     98             raise CampaignRequestError('Failed to receive response from ResignRequest: %s' % exc)
     99 
    100         status_code = response_primitive.status_code
    101         if status_code == NOT_FOUND:
    102             raise CampaignNotFoundError('Could not find requested objective in ResignRequest: %s' % objective_id)
    103         if status_code == UNAUTHORIZED:
    104             raise CampaignUnauthorizedError('Could not authorize request in ResignRequest: %s' % objective_id)
    105         if status_code == BAD_REQUEST:
    106             raise CampaignBadRequestError('Bad request in ResignRequest: %s' % objective_id)
    107         if status_code == FORBIDDEN:
    108             raise CampaignForbiddenError('Cannot resign in ResignRequest: %s' % objective_id)
    109         if status_code != OK:
    110             raise CampaignRequestError('Received error status code for ResignRequest: %s' % status_code)
    111         info_log += 'Response: Campaigns: ResignResponse: {response}'.format(response=response)
    112         logger.info(info_log)
    113 
    114     def get_request(self, campaign_id, current_version = None):
    115         request = GetRequest(campaign=campaign_id.to_proto())
    116         if current_version is None:
    117             request.no_version = True
    118         else:
    119             request.version.MergeFrom(current_version.to_proto())
    120         info_log = 'Request: Campaigns: GetRequest: {request}\n'.format(request=request)
    121         try:
    122             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)
    123         except (TimeoutException, UnpackException) as exc:
    124             info_log += 'ERROR: %s' % exc.__class__.__name__
    125             logger.info(info_log)
    126             raise CampaignRequestError('Failed to receive response from GetRequest: %s' % exc)
    127 
    128         status_code = response_primitive.status_code
    129         if status_code == NOT_MODIFIED:
    130             logger.info(info_log + 'Response: Campaigns: GetResponse: NOT_MODIFIED')
    131             return NOT_MODIFIED
    132         if status_code == NOT_FOUND:
    133             raise CampaignNotFoundError('Could not find requested campaign in GetRequest: %s' % campaign_id)
    134         if status_code == BAD_REQUEST:
    135             raise CampaignBadRequestError('Bad request in GetRequest: %s' % campaign_id)
    136         if status_code != OK:
    137             raise CampaignRequestError('Received error status code for GetRequest: %s' % status_code)
    138         info_log += 'Response: Campaigns: GetResponse: {response}'.format(response=response)
    139         logger.info(info_log)
    140         campaign_definition = CampaignDefinition.from_proto(campaign_id, response)
    141         campaign_status = None
    142         if response.HasField('stats'):
    143             campaign_status = CampaignStatus.from_get_proto(campaign_id, response)
    144         track_statuses = [ TrackStatus.from_get_proto(track) for track in response.tracks if track.HasField('stats') ]
    145         return (campaign_definition, campaign_status, track_statuses)
    146 
    147     def get_status_request(self, campaign_id):
    148         request = GetStatusRequest(campaign=campaign_id.to_proto())
    149         info_log = 'Request: Campaigns: GetStatusRequest: {request}\n'.format(request=request)
    150         try:
    151             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)
    152         except (TimeoutException, UnpackException) as exc:
    153             info_log += 'ERROR: %s' % exc.__class__.__name__
    154             logger.info(info_log)
    155             raise CampaignRequestError('Failed to receive response from GetStatusRequest: %s' % exc)
    156 
    157         status_code = response_primitive.status_code
    158         if status_code == NOT_FOUND:
    159             raise CampaignNotFoundError('Could not find requested campaign in GetStatusRequest: %s' % campaign_id)
    160         if status_code == BAD_REQUEST:
    161             raise CampaignBadRequestError('Bad request in GetStatusRequest: %s' % campaign_id)
    162         if status_code != OK:
    163             raise CampaignRequestError('Received error status code for GetStatusRequest: %s' % status_code)
    164         info_log += 'Response: Campaigns: GetStatusResponse: {response}'.format(response=response)
    165         logger.info(info_log)
    166         return (CampaignStatus.from_status_proto(campaign_id, response), [ TrackStatus.from_status_proto(track) for track in response.tracks ])
    167 
    168     def get_all_unredeemed_participant_rewards_request(self, namespace, page_token = None):
    169         request = GetAllUnredeemedParticipantRewardsRequest(namespace=namespace.to_proto(), page=Page(size=PAGE_SIZE, token=page_token or ''))
    170         info_log = 'Request: Campaigns: GetAllUnredeemedParticipantRewardsRequest: {request}\n'.format(request=request)
    171         try:
    172             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllUnredeemedParticipantRewardsResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
    173         except (TimeoutException, UnpackException) as exc:
    174             info_log += 'ERROR: %s' % exc.__class__.__name__
    175             logger.info(info_log)
    176             raise CampaignRequestError('Failed to receive response from GetAllUnredeemedParticipantRewardsRequest: %s' % exc)
    177 
    178         status_code = response_primitive.status_code
    179         if status_code == BAD_REQUEST:
    180             raise CampaignBadRequestError('Bad request in GetAllUnredeemedParticipantRewardsRequest: %s' % namespace)
    181         if status_code == UNAUTHORIZED:
    182             raise CampaignUnauthorizedError('Unauthorized in GetAllUnredeemedParticipantRewardsRequest: %s' % namespace)
    183         if status_code != OK:
    184             raise CampaignRequestError('Received error status code for GetAllUnredeemedParticipantRewardsRequest: %s' % status_code)
    185         info_log += 'Response: Campaigns: GetAllUnredeemedParticipantRewardsResponse: {response}'.format(response=response)
    186         logger.info(info_log)
    187         unredeemed_rewards = [ (TrackID.from_proto(track_rewards.track), TrackUnredeemedRewards.from_proto(track_rewards)) for track_rewards in response.tracks ]
    188         return (unredeemed_rewards, response.next_page.token)