Fixes and refinements to the dockerfile build system.

This commit is contained in:
yackob03 2013-10-25 15:13:11 -04:00
parent 9b9a29c310
commit ffc33e454c
6 changed files with 58 additions and 10 deletions

View file

@ -1,6 +1,7 @@
import logging
import stripe
import re
import requests
from flask import request, make_response, jsonify, abort, url_for
from flask.ext.login import login_required, current_user, logout_user
@ -180,11 +181,12 @@ user_files = UserRequestFiles(app.config['AWS_ACCESS_KEY'],
@app.route('/api/repository/', methods=['POST'])
@api_login_required
def create_repo_api():
namespace_name = request.values['namespace']
owner = current_user.db_user()
namespace_name = owner.username
repository_name = request.values['repository']
visibility = request.values['visibility']
owner = current_user.db_user()
repo = model.create_repository(namespace_name, repository_name, owner,
visibility)
@ -349,6 +351,8 @@ def get_repo_api(namespace, repository):
tag_dict = {tag.name: tag_view(tag) for tag in tags}
can_write = ModifyRepositoryPermission(namespace, repository).can()
can_admin = AdministerRepositoryPermission(namespace, repository).can()
builds = model.list_repository_builds(namespace, repository)
return jsonify({
'namespace': namespace,
'name': repository,
@ -356,13 +360,44 @@ def get_repo_api(namespace, repository):
'tags': tag_dict,
'can_write': can_write,
'can_admin': can_admin,
'is_public': is_public
'is_public': is_public,
'is_building': len(builds) > 0,
})
abort(404) # Not fount
abort(403) # Permission denied
@app.route('/api/repository/<path:repository>/build/', methods=['GET'])
@parse_repository_name
def get_repo_builds(namespace, repository):
permission = AdministerRepositoryPermission(namespace, repository)
if permission.can():
def build_view(build_obj):
if build_obj.status_url:
# Delegate the status to the build node
node_status = requests.get(build_obj.status_url).json()
node_status['id'] = build_obj.id
return node_status
# If there was no status url, do the best we can
return {
'id': build_obj.id,
'total_commands': None,
'total_images': None,
'current_command': None,
'current_image': None,
'image_completion_percent': None,
'status': build_obj.phase,
'message': None,
}
builds = model.list_repository_builds(namespace, repository)
return jsonify({
'builds': [build_view(build) for build in builds]
})
def role_view(repo_perm_obj):
return {
'role': repo_perm_obj.role.name