import logging

from util.timedeltastring import convert_to_timedelta

logger = logging.getLogger(__name__)

def _expires_after(label_dict, manifest, model):
  """ Sets the expiration of a manifest based on the quay.expires-in label. """
  try:
    timedelta = convert_to_timedelta(label_dict['value'])
  except ValueError:
    logger.exception('Could not convert %s to timedeltastring', label_dict['value'])
    return

  total_seconds = timedelta.total_seconds()
  logger.debug('Labeling manifest %s with expiration of %s', manifest, total_seconds)
  model.set_tags_expiration_for_manifest(manifest, total_seconds)


_LABEL_HANDLERS = {
  'quay.expires-after': _expires_after,
}

def apply_label_to_manifest(label_dict, manifest, model):
  """ Runs the handler defined, if any, for the given label. """
  handler = _LABEL_HANDLERS.get(label_dict['key'])
  if handler is not None:
    handler(label_dict, manifest, model)