Ejemplo n.º 1
0
def get(service_id: str) -> Algorithm:
    log = logging.getLogger(__name__)
    log.info('Algorithms service get algorithms',
             action=' service algorithms get')
    try:
        log.info('Fetch beachfront service `%s` from Piazza',
                 service_id,
                 action='fetch service',
                 actee=service_id)
        service = piazza.get_service(service_id)
    except piazza.ServerError as err:
        log.error('Service lookup failed: %s', err)
        if err.status_code == 404:
            raise NotFound(service_id)
        raise
    except piazza.Error as err:
        log.error('Service lookup failed: %s', err)
        raise
    if 'metadata' not in service.metadata:
        raise ValidationError('missing `metadata` hash')
    try:
        return Algorithm(
            interface=_extract_interface(service),
            description=_extract_description(service),
            max_cloud_cover=_extract_max_cloud_cover(service),
            name=_extract_name(service),
            service_id=service.service_id,
            version=_extract_version(service),
        )
    except ValidationError as err:
        log.error('Algorithm conversion failed: %s', err)
        raise
Ejemplo n.º 2
0
 def test_deserializes_metadata(self, m: Mocker):
     m.get('/service/test-id', text=RESPONSE_SERVICE)
     descriptor = piazza.get_service(service_id='test-id')
     self.assertEqual(
         {
             'classType': {
                 'classification': 'UNCLASSIFIED'
             },
             'version': 'test-version'
         }, descriptor.metadata)
Ejemplo n.º 3
0
 def test_throws_when_descriptors_are_malformed(self, m: Mocker):
     mangled_response = json.loads(RESPONSE_SERVICE)
     mangled_response['data'].pop('serviceId')
     m.get('/service/test-id', json=mangled_response)
     with self.assertRaises(piazza.InvalidResponse):
         piazza.get_service(service_id='test-id')
Ejemplo n.º 4
0
 def test_throws_when_name_is_missing(self, m: Mocker):
     mangled_response = json.loads(RESPONSE_SERVICE)
     mangled_response['data']['resourceMetadata'].pop('name')
     m.get('/service/test-id', json=mangled_response)
     with self.assertRaises(piazza.InvalidResponse):
         piazza.get_service(service_id='test-id')
Ejemplo n.º 5
0
 def test_throws_when_service_does_not_exist(self, m: Mocker):
     m.get('/service/test-id',
           text=RESPONSE_SERVICE_NOT_FOUND,
           status_code=404)
     with self.assertRaises(piazza.ServerError):
         piazza.get_service(service_id='test-id')
Ejemplo n.º 6
0
 def test_throws_when_piazza_is_unreachable(self, _):
     with unittest.mock.patch('requests.get') as stub:
         stub.side_effect = ConnectionError(request=unittest.mock.Mock())
         with self.assertRaises(piazza.Unreachable):
             piazza.get_service(service_id='test-id')
Ejemplo n.º 7
0
 def test_handles_http_errors_gracefully(self, m: Mocker):
     m.get('/service/test-id', text=RESPONSE_ERROR_GENERIC, status_code=500)
     with self.assertRaises(piazza.ServerError):
         piazza.get_service(service_id='test-id')
Ejemplo n.º 8
0
 def test_deserializes_canonical_data(self, m: Mocker):
     m.get('/service/test-id', text=RESPONSE_SERVICE)
     descriptor = piazza.get_service(service_id='test-id')
     self.assertEqual('test-id', descriptor.service_id)
     self.assertEqual('test-description', descriptor.description)
     self.assertEqual('test-name', descriptor.name)
Ejemplo n.º 9
0
 def test_returns_a_service_descriptor(self, m: Mocker):
     m.get('/service/test-id', text=RESPONSE_SERVICE)
     descriptor = piazza.get_service(service_id='test-id')
     self.assertIsInstance(descriptor, piazza.ServiceDescriptor)
Ejemplo n.º 10
0
 def test_calls_correct_url(self, m: Mocker):
     m.get('/service/test-id', text=RESPONSE_SERVICE)
     piazza.get_service(service_id='test-id')
     self.assertEqual(
         'https://test-piazza-host.localdomain/service/test-id',
         m.request_history[0].url)