Source code for cedar.metadata.core
""" Core functions for metadata creation
"""
import datetime as dt
from .. import __version__
from ..utils import load_ee, serialize_filter
ee = load_ee(False)
[docs]def get_program_metadata():
""" Return metadata about this program (name & version)
Returns
-------
dict
Program "name" and "version"
"""
return {
"name": __package__,
"version": __version__,
"ee": ee.__version__
}
[docs]def get_order_metadata(collection, date_start, date_end, filters):
""" Get metadata about a pre-ARD order against a collection
"""
return {
'collection': collection,
'date_start': date_start.isoformat(),
'date_end': date_end.isoformat(),
'filters': [serialize_filter(filter) for filter in filters],
'submitted': dt.datetime.now().isoformat()
}
[docs]def get_tracking_metadata(tracking_name, tracking_prefix,
name_template, prefix_template,
collections, tiles):
""" Get general tracking information about an order
"""
meta = {
"submitted": dt.datetime.now().isoformat(),
"name": tracking_name,
"prefix": tracking_prefix,
"collections": list(collections),
"tiles": [tile.to_dict() for tile in tiles],
"name_template": name_template,
"prefix_template": prefix_template
}
return meta
[docs]def get_submission_info(tile_grid, collections, tile_indices,
period_start, period_end, period_freq):
""" Return information about tracked order submissions
"""
return {
'submitted': dt.datetime.today().isoformat(),
'collections': collections,
'tile_grid': tile_grid.to_dict(),
'tile_indices': list(tile_indices),
'period_start': period_start.isoformat(),
'period_end': period_end.isoformat(),
'period_freq': period_freq
}
[docs]def get_task_metadata(task):
""" Get metadata about an EE task's status
Parameters
----------
task : ee.batch.task.Task
Earth Engine task
Returns
-------
dict
Task metadata
"""
info = {}
# When active, task config information has:
# GDrive keys:
# description, dimensions, crs, fileFormat, driveFolder, crs_transform,
# driveFileNamePrefix, json
# GCS keys:
# description, dimensions, crs, fileFormat, crs_transform, outputBucket,
# outputPrefix, json
bucket = task.config.get('outputBucket', '')
if bucket: # GCS
info['name'] = task.config['description']
info['prefix'] = task.config['outputPrefix'].rstrip(name)
elif 'driveFolder' in task.config: # GDrive
info['name'] = task.config['driveFileNamePrefix']
info['prefix'] = task.config['driveFolder']
# When submitted/complete, we can get status info
status = task.status()
info['status'] = {
"id": status['id'],
"state": status["state"],
# Attributes available post-run
'creation_timestamp_ms': status.get('creation_timestamp_ms', ''),
'update_timestamp_ms': status.get('update_timestamp_ms', ''),
'start_timestamp_ms': status.get('start_timestamp_ms', ''),
'output_url': status.get('output_url', [])
}
return info