import logging

from buildman.manager.etcd_canceller import EtcdCanceller
from buildman.manager.noop_canceller import NoopCanceller

logger = logging.getLogger(__name__)

CANCELLERS = {'ephemeral': EtcdCanceller}


class BuildCanceller(object):
  """ A class to manage cancelling a build """

  def __init__(self, app=None):
    build_manager_config = app.config.get('BUILD_MANAGER')
    if app is None or build_manager_config is None:
      self.handler = NoopCanceller()
      return

    canceller = CANCELLERS.get(build_manager_config[0], NoopCanceller)
    self.handler = canceller(build_manager_config[1])

  def try_cancel_build(self, uuid):
    """ A method to kill a running build """
    return self.handler.try_cancel_build(uuid)