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)