Work in progress: bitbucket support

This commit is contained in:
Joseph Schorr 2015-04-24 18:36:48 -04:00
parent c480fb2105
commit 5cc91ed202
11 changed files with 352 additions and 259 deletions

View file

@ -13,7 +13,7 @@ from endpoints.api import (RepositoryParamResource, nickname, resource, require_
from endpoints.api.build import (build_status_view, trigger_view, RepositoryBuildStatus,
get_trigger_config)
from endpoints.common import start_build
from endpoints.trigger import (BuildTrigger as BuildTriggerBase, TriggerDeactivationException,
from endpoints.trigger import (BuildTriggerHandler, TriggerDeactivationException,
TriggerActivationException, EmptyRepositoryException,
RepositoryReadException, TriggerStartException)
from data import model
@ -71,18 +71,17 @@ class BuildTrigger(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
config_dict = get_trigger_config(trigger)
if handler.is_active(config_dict):
handler = BuildTriggerHandler.get_handler(trigger)
if handler.is_active():
try:
handler.deactivate(trigger.auth_token, config_dict)
handler.deactivate()
except TriggerDeactivationException as ex:
# We are just going to eat this error
logger.warning('Trigger deactivation problem: %s', ex)
log_action('delete_repo_trigger', namespace,
{'repo': repository, 'trigger_id': trigger_uuid,
'service': trigger.service.name, 'config': config_dict},
'service': trigger.service.name},
repo=model.get_repository(namespace, repository))
trigger.delete_instance(recursive=True)
@ -117,13 +116,13 @@ class BuildTriggerSubdirs(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
user_permission = UserAdminPermission(trigger.connected_user.username)
if user_permission.can():
new_config_dict = request.get_json()
handler = BuildTriggerHandler.get_handler(trigger, new_config_dict)
try:
subdirs = handler.list_build_subdirs(trigger.auth_token, new_config_dict)
subdirs = handler.list_build_subdirs()
return {
'subdir': subdirs,
'status': 'success'
@ -178,9 +177,8 @@ class BuildTriggerActivate(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
existing_config_dict = get_trigger_config(trigger)
if handler.is_active(existing_config_dict):
handler = BuildTriggerHandler.get_handler(trigger)
if handler.is_active():
raise InvalidRequest('Trigger config is not sufficient for activation.')
user_permission = UserAdminPermission(trigger.connected_user.username)
@ -217,8 +215,8 @@ class BuildTriggerActivate(RepositoryParamResource):
'$token', write_token.code,
app.config['SERVER_HOSTNAME'], path)
final_config, private_config = handler.activate(trigger.uuid, authed_url,
trigger.auth_token, new_config_dict)
handler = BuildTriggerHandler.get_handler(trigger, new_config_dict)
final_config, private_config = handler.activate(authed_url)
if 'private_key' in private_config:
trigger.private_key = private_config['private_key']
@ -279,12 +277,12 @@ class BuildTriggerAnalyze(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
new_config_dict = request.get_json()['config']
handler = BuildTriggerHandler.get_handler(trigger, new_config_dict)
try:
# Load the contents of the Dockerfile.
contents = handler.load_dockerfile_contents(trigger.auth_token, new_config_dict)
contents = handler.load_dockerfile_contents()
if not contents:
return {
'status': 'error',
@ -370,7 +368,7 @@ class BuildTriggerAnalyze(RepositoryParamResource):
'is_public': found_repository.visibility.name == 'public',
'robots': read_robots,
'status': 'analyzed',
'dockerfile_url': handler.dockerfile_url(trigger.auth_token, new_config_dict)
'dockerfile_url': handler.dockerfile_url()
}
except RepositoryReadException as rre:
@ -420,14 +418,13 @@ class ActivateBuildTrigger(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
config_dict = get_trigger_config(trigger)
if not handler.is_active(config_dict):
handler = BuildTriggerHandler.get_handler(trigger)
if not handler.is_active():
raise InvalidRequest('Trigger is not active.')
try:
run_parameters = request.get_json()
specs = handler.manual_start(trigger, run_parameters=run_parameters)
specs = handler.manual_start(run_parameters=run_parameters)
dockerfile_id, tags, name, subdir, metadata = specs
repo = model.get_repository(namespace, repository)
@ -481,11 +478,11 @@ class BuildTriggerFieldValues(RepositoryParamResource):
except model.InvalidBuildTriggerException:
raise NotFound()
config = request.get_json() or json.loads(trigger.config)
config = request.get_json() or None
user_permission = UserAdminPermission(trigger.connected_user.username)
if user_permission.can():
trigger_handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
values = trigger_handler.list_field_values(trigger.auth_token, config, field_name)
handler = BuildTriggerHandler.get_handler(trigger, config)
values = handler.list_field_values(field_name)
if values is None:
raise NotFound()
@ -514,10 +511,13 @@ class BuildTriggerSources(RepositoryParamResource):
user_permission = UserAdminPermission(trigger.connected_user.username)
if user_permission.can():
trigger_handler = BuildTriggerBase.get_trigger_for_service(trigger.service.name)
handler = BuildTriggerHandler.get_handler(trigger)
return {
'sources': trigger_handler.list_build_sources(trigger.auth_token)
}
try:
return {
'sources': handler.list_build_sources()
}
except RepositoryReadException as rre:
raise InvalidRequest(rre.message)
else:
raise Unauthorized()