request_messenger.py (4897B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\store\client\targetaudience\messenger\request_messenger.py 2 from __future__ import absolute_import, division, print_function 3 import logging 4 from localization.const import LOCALE_SHORT_ENGLISH 5 from publicGateway.grpc.exceptions import GenericException 6 from stackless_response_router.exceptions import TimeoutException 7 from store.client.const import LOG_ENTRY_NAME 8 from store.client.targetaudience.offer import TargetAudienceOffer 9 from store.client.targetaudience.offer_identifier import TargetAudienceOfferIdentifier 10 from eveProto.generated.eve_public.public_pb2 import Page 11 from eveProto.generated.eve_public.store.targetaudience.offer.api.requests_pb2 import GetRequest, GetResponse, ListRequest, ListResponse 12 _TIMEOUT_SECONDS = 5 13 _DEFAULT_PAGE_SIZE = 100 14 logger = logging.getLogger(__name__) 15 16 class PublicTargetAudienceOfferRequestMessenger(object): 17 18 def __init__(self, public_gateway): 19 self.public_gateway = public_gateway 20 21 def get_offer_request(self, offer_identifier, language = None): 22 offer_id = TargetAudienceOfferIdentifier.to_proto(offer_identifier) 23 if language is None: 24 request = GetRequest(offer_id=offer_id, all_languages=True) 25 else: 26 request = GetRequest(offer_id=offer_id, specified_language=language) 27 info_log = '{log_entry} - Get target audience offer id {id} '.format(log_entry=LOG_ENTRY_NAME, id=offer_identifier) 28 try: 29 response_primitive, response_payload = self._blocking_request(request, GetResponse) 30 if response_payload is None: 31 info_log += 'Response: no offer found. ' 32 return 33 info_log += 'Response: offer found: {offer}. '.format(offer=response_payload.offer) 34 return TargetAudienceOffer.build_from_proto(response_payload.offer) 35 except GenericException as exc: 36 status_code = exc.response_primitive.status_code 37 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 38 logger.exception('Unexpected exception when requesting target audience offer: %s', exc) 39 raise 40 except TimeoutException as exc: 41 info_log += 'TIMED OUT' 42 logger.exception('Timed out when requesting target audience offer: %s', exc) 43 raise 44 finally: 45 logger.info(info_log) 46 47 def list_offers_request(self, page_size = _DEFAULT_PAGE_SIZE, page_token = None): 48 first_page = page_token is None 49 page = Page(size=page_size, token=page_token if not first_page else '') 50 request = ListRequest(page=page) 51 info_log = '{log_entry} - List target audience offers '.format(log_entry=LOG_ENTRY_NAME) 52 if first_page: 53 info_log += ' - first page. ' 54 else: 55 info_log += ' - page {token}. '.format(token=page_token) 56 try: 57 response_primitive, response_payload = self._blocking_request(request, ListResponse) 58 if response_payload is None: 59 if first_page: 60 info_log += 'Response: no offers found. ' 61 else: 62 info_log += 'Response: no offers found on page {token}. '.format(token=page_token) 63 return ([], None) 64 if first_page: 65 info_log += 'Response: {amount} offers found on first page. '.format(amount=len(response_payload.offer_ids)) 66 else: 67 info_log += 'Response: {amount} offers found on page {token}. '.format(amount=len(response_payload.offer_ids), token=page_token) 68 next_page_token = response_payload.next_page.token if response_payload.next_page.token else None 69 offer_identifiers = [ TargetAudienceOfferIdentifier.build_from_proto(x) for x in response_payload.offer_ids ] 70 return (offer_identifiers, next_page_token) 71 except GenericException as exc: 72 status_code = exc.response_primitive.status_code 73 info_log += 'ERROR (status_code={status_code})'.format(status_code=status_code) 74 logger.exception('Unexpected exception when listing target audience offers: %s', exc) 75 raise 76 except TimeoutException as exc: 77 info_log += 'TIMED OUT' 78 logger.exception('Timed out when listing target audience offers: %s', exc) 79 raise 80 finally: 81 logger.info(info_log) 82 83 def _blocking_request(self, request, response_class): 84 request_primitive, response_channel = self.public_gateway.send_user_request(request, response_class, _TIMEOUT_SECONDS) 85 response_primitive, payload = response_channel.receive() 86 if response_primitive.status_code != 200: 87 raise GenericException(request_primitive, response_primitive) 88 return (response_primitive, payload)