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

messenger.py (4178B)


      1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\freelanceprojects\client\contributionmethods\messenger.py
      2 from eveProto.generated.eve_public.freelance.contributionmethod.definition.api.requests_pb2 import GetAllLatestRequest, GetAllLatestResponse, GetAllLatestWithinMajorRequest, GetAllLatestWithinMajorResponse
      3 from freelanceprojects.client.contributionmethods.data.definitions import ContributionMethodDefinitions
      4 from freelanceprojects.client.contributionmethods.errors import ServiceUnavailable, DefinitionsNotModified, DefinitionsNotFound, GenericError
      5 from six.moves.http_client import OK, NOT_MODIFIED, NOT_FOUND
      6 from logging import getLogger
      7 from semantic_version import SemanticVersion
      8 from stackless_response_router.exceptions import TimeoutException, UnpackException
      9 logger = getLogger('freelance_projects')
     10 
     11 class ContributionMethodsMessenger(object):
     12 
     13     def __init__(self, public_gateway):
     14         self.public_gateway = public_gateway
     15 
     16     def get_latest_definitions(self, known_version = None):
     17         if known_version is None:
     18             request = GetAllLatestRequest(no_known_version=True)
     19         else:
     20             request = GetAllLatestRequest(known_version=known_version.to_eve_public_proto())
     21         info_log = 'Request: Contribution Methods: GetAllLatestRequest: {request}\n'.format(request=request)
     22         try:
     23             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllLatestResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
     24         except (TimeoutException, UnpackException) as exc:
     25             info_log += 'ERROR: %s' % exc.__class__.__name__
     26             logger.info(info_log)
     27             raise ServiceUnavailable('Failed to receive response from GetAllLatestRequest: %s' % exc)
     28 
     29         status_code = response_primitive.status_code
     30         if status_code == OK:
     31             info_log += 'Response: Contribution Methods: GetAllLatestResponse: {response}'.format(response=response)
     32             logger.info(info_log)
     33             definitions = ContributionMethodDefinitions.from_proto(response.version, response.definitions)
     34             return definitions
     35         self._raise_error(info_log, status_code)
     36 
     37     def get_latest_definitions_within_major(self, major, known_version = None):
     38         if known_version is None:
     39             request = GetAllLatestWithinMajorRequest(major=major, no_known_version=True)
     40         else:
     41             request = GetAllLatestWithinMajorRequest(major=major, known_version=known_version.to_eve_public_proto())
     42         info_log = 'Request: Contribution Methods: GetAllLatestWithinMajorRequest: {request}\n'.format(request=request)
     43         try:
     44             response_primitive, response = self.public_gateway.send_blocking_character_request_and_receive_response(request_payload=request, expected_response_class=GetAllLatestWithinMajorResponse, timeout_seconds=4, max_attempts=2, retry_delay_in_seconds=1)
     45         except (TimeoutException, UnpackException) as exc:
     46             info_log += 'ERROR: %s' % exc.__class__.__name__
     47             logger.info(info_log)
     48             raise ServiceUnavailable('Failed to receive response from GetAllLatestWithinMajorRequest: %s' % exc)
     49 
     50         status_code = response_primitive.status_code
     51         if status_code == OK:
     52             info_log += 'Response: Contribution Methods: GetAllLatestWithinMajorResponse: {response}'.format(response=response)
     53             logger.info(info_log)
     54             definitions = ContributionMethodDefinitions.from_proto(response.version, response.definitions)
     55             return definitions
     56         self._raise_error(info_log, status_code)
     57 
     58     def _raise_error(self, info_log, status_code):
     59         info_log += 'ERROR: %s' % status_code
     60         logger.info(info_log)
     61         if status_code == NOT_MODIFIED:
     62             raise DefinitionsNotModified('Client already has the latest definitions')
     63         if status_code == NOT_FOUND:
     64             raise DefinitionsNotFound('Failed to find data for these definitions')
     65         raise GenericError('Unexpected error when requesting definitions')