in data-access/nexustiles/nexustiles.py [0:0]
def tile_data(default_fetch=True):
def tile_data_decorator(func):
@wraps(func)
def fetch_data_for_func(*args, **kwargs):
metadatastore_start = datetime.now()
metadatastore_docs = func(*args, **kwargs)
metadatastore_duration = (datetime.now() - metadatastore_start).total_seconds()
# Try to determine source dataset to route calls to proper backend
guessed_dataset = None
if 'ds' in kwargs:
guessed_dataset = kwargs['ds']
elif 'dataset' in kwargs:
guessed_dataset = kwargs['dataset']
else:
for arg in args:
if isinstance(arg, str) and arg in NexusTileService.backends:
guessed_dataset = arg
break
tiles = NexusTileService._get_backend(guessed_dataset)._metadata_store_docs_to_tiles(*metadatastore_docs)
cassandra_duration = 0
if ('fetch_data' in kwargs and kwargs['fetch_data']) or ('fetch_data' not in kwargs and default_fetch):
if len(tiles) > 0:
cassandra_start = datetime.now()
NexusTileService._get_backend(guessed_dataset).fetch_data_for_tiles(*tiles)
cassandra_duration += (datetime.now() - cassandra_start).total_seconds()
if 'metrics_callback' in kwargs and kwargs['metrics_callback'] is not None:
try:
kwargs['metrics_callback'](cassandra=cassandra_duration,
metadatastore=metadatastore_duration,
num_tiles=len(tiles))
except Exception as e:
logger.error("Metrics callback '{}'raised an exception. Will continue anyway. " +
"The exception was: {}".format(kwargs['metrics_callback'], e))
return tiles
return fetch_data_for_func
return tile_data_decorator