Merge branch 'mprahl/change-api-layout'

This commit is contained in:
Nils Philippsen
2016-09-22 13:27:06 +02:00

View File

@@ -28,7 +28,7 @@ This is the implementation of the orchestrator's public RESTful API.
"""
from flask import request, jsonify
from flask.views import View
from flask.views import MethodView
import json
import logging
import modulemd
@@ -44,10 +44,37 @@ from rida.utils import pagination_metadata, filter_module_builds
from rida.errors import (
ValidationError, Unauthorized, UnprocessableEntity, Conflict, NotFound)
class SubmitBuild(View):
"""Handles new module build submissions."""
def dispatch_request(self):
class ModuleBuildAPI(MethodView):
def get(self, id):
if id is None:
# Lists all tracked module builds
p_query = filter_module_builds(request)
json_data = {
'meta': pagination_metadata(p_query)
}
verbose_flag = request.args.get('verbose', 'false')
if verbose_flag.lower() == 'true' or verbose_flag == '1':
json_data['items'] = [item.api_json() for item in p_query.items]
else:
json_data['items'] = [{'id': item.id, 'state': item.state} for
item in p_query.items]
return jsonify(json_data), 200
else:
# Lists details for the specified module builds
module = models.ModuleBuild.query.filter_by(id=id).first()
if module:
return jsonify(module.api_json()), 200
else:
raise NotFound('No such module found.')
def post(self):
username = rida.auth.get_username(request.environ)
rida.auth.assert_is_packager(username, fas_kwargs=dict(
base_url=conf.fas_url,
@@ -63,7 +90,7 @@ class SubmitBuild(View):
raise ValidationError('Missing scmurl')
url = r["scmurl"]
if not any(url.startswith(prefix) for prefix in conf.scmurls):
if not any(url.startswith(prefix) for prefix in conf.scmurls):
raise Unauthorized("The submitted scmurl is not allowed")
yaml = ""
@@ -149,59 +176,18 @@ class SubmitBuild(View):
db.session.add(module)
db.session.commit()
logging.info("%s submitted build of %s-%s-%s", username, mmd.name,
mmd.version, mmd.release)
mmd.version, mmd.release)
return jsonify(module.json()), 201
class QueryBuilds(View):
"""Lists all tracked module builds."""
def dispatch_builds_request(self):
"""Lists all tracked module builds."""
p_query = filter_module_builds(request)
json_data = {
'meta': pagination_metadata(p_query)
}
verbose_flag = request.args.get('verbose', 'false')
if verbose_flag.lower() == 'true' or verbose_flag == '1':
json_data['items'] = [item.api_json() for item in p_query.items]
else:
json_data['items'] = [{'id': item.id, 'state': item.state} for item in p_query.items]
return jsonify(json_data), 200
def dispatch_build_request(self, id):
"""Lists details for the specified module builds."""
module = models.ModuleBuild.query.filter_by(id=id).first()
if module:
return jsonify(module.api_json()), 200
else:
raise NotFound('No such module found.')
def dispatch_request(self, id):
if id is None:
return self.dispatch_builds_request()
else:
return self.dispatch_build_request(id)
def register_v1_api():
""" Registers version 1 of Rida API. """
query_builds = QueryBuilds.as_view("query-builds")
module_builds = SubmitBuild.as_view("module-builds")
app.add_url_rule('/rida/1/module-builds/',
view_func=module_builds,
methods=['POST'])
app.add_url_rule('/rida/1/module-builds/',
defaults={'id': None}, view_func=query_builds,
methods=['GET'])
app.add_url_rule('/rida/1/module-builds/<int:id>',
view_func=query_builds,
methods=['GET'])
module_view = ModuleBuildAPI.as_view('module_builds')
app.add_url_rule('/rida/1/module-builds/', defaults={'id': None},
view_func=module_view, methods=['GET'])
app.add_url_rule('/rida/1/module-builds/', view_func=module_view,
methods=['POST'])
app.add_url_rule('/rida/1/module-builds/<int:id>', view_func=module_view,
methods=['GET'])
register_v1_api()