예제 #1
0
def _update_service_metadata_async(service):
    entity = storage.ServiceDynamicMetadata(id=service.id)
    if service.metadata_url:
        try:
            res = yield call_service_async(service, service.metadata_url)
        except net.Error as ex:
            raise DynamicMetadataError('Net error: %s' % ex.message)
        entity.metadata = _dict_to_dynamic_metadata(res).SerializeToString()

    prev_entity = yield storage.ServiceDynamicMetadata.get_by_id_async(
        service.id)
    if not prev_entity or prev_entity.metadata != entity.metadata:
        yield entity.put_async()
        logging.info('Updated service metadata for %s', service.id)
예제 #2
0
 def mock_metadata_entity(self):
   dct = {
     'version': '1.0',
     'validation': {
       'url': 'https://a.com/validate',
       'patterns': [
         {'config_set': 'projects/foo', 'path': 'bar.cfg'},
         {'config_set': 'regex:services/.+', 'path': 'regex:.+'},
       ]
     }
   }
   mck_meta = (services._dict_to_dynamic_metadata(dct).SerializeToString())
   storage.ServiceDynamicMetadata(
       id='deadbeef',
       metadata=mck_meta,
   ).put()
예제 #3
0
 def test_get_metadata_async_no_metadata(self):
   storage.ServiceDynamicMetadata(id='metadataless').put()
   metadata = services.get_metadata_async('metadataless').get_result()
   self.assertIsNotNone(metadata)
   self.assertFalse(metadata.validation.patterns)