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)
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()
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)