Add code that will allow build triggers to be deactivated or deleted from their services.

This commit is contained in:
jakedt 2014-02-24 16:36:49 -05:00
parent d505a4edbb
commit b094480164
3 changed files with 54 additions and 17 deletions

View file

@ -28,6 +28,9 @@ class InvalidServiceException(Exception):
class TriggerActivationException(Exception):
pass
class TriggerDeactivationException(Exception):
pass
class ValidationRequestException(Exception):
pass
@ -70,6 +73,15 @@ class BuildTrigger(object):
def activate(self, trigger_uuid, standard_webhook_url, auth_token, config):
"""
Activates the trigger for the service, with the given new configuration.
Returns new configuration that should be stored if successful.
"""
raise NotImplementedError
def deactivate(self, auth_token, config):
"""
Deactivates the trigger for the service, removing any hooks installed in
the remote service. Returns the new config that should be stored if this
trigger is going to be re-activated.
"""
raise NotImplementedError
@ -104,7 +116,7 @@ class GithubBuildTrigger(BuildTrigger):
return 'github'
def is_active(self, config):
return 'build_source' in config and len(config['build_source']) > 0
return 'hook_id' in config
def activate(self, trigger_uuid, standard_webhook_url, auth_token, config):
new_build_source = config['build_source']
@ -122,11 +134,30 @@ class GithubBuildTrigger(BuildTrigger):
}
try:
to_add_webhook.create_hook('web', webhook_config)
hook = to_add_webhook.create_hook('web', webhook_config)
config['hook_id'] = hook.id
except GithubException:
msg = 'Unable to create webhook on repository: %s'
raise TriggerActivationException(msg % new_build_source)
return config
def deactivate(self, auth_token, config):
gh_client = self._get_client(auth_token)
try:
repo = gh_client.get_repo(config['build_source'])
to_delete = repo.get_hook(config['hook_id'])
to_delete.delete()
except GithubException:
msg = 'Unable to remove hook: %s' % config['hook_id']
raise TriggerDeactivationException(msg)
config.pop('hook_id', None)
return config
def list_build_sources(self, auth_token):
gh_client = self._get_client(auth_token)
usr = gh_client.get_user()