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

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)