From 37df20febef9a9f991d8c615d4e7ae315cce0a25 Mon Sep 17 00:00:00 2001 From: Filip Valder Date: Oct 31 2018 14:56:23 +0000 Subject: New: About API --- diff --git a/freshmaker/__init__.py b/freshmaker/__init__.py index d56746a..2cbb935 100644 --- a/freshmaker/__init__.py +++ b/freshmaker/__init__.py @@ -23,6 +23,8 @@ # Matt Prahl # Jan Kaluza +import pkg_resources + from logging import getLogger from flask import Flask @@ -33,6 +35,11 @@ from freshmaker.logger import init_logging from freshmaker.config import init_config from freshmaker.proxy import ReverseProxy +try: + version = pkg_resources.get_distribution('freshmaker').version +except pkg_resources.DistributionNotFound: + version = 'unknown' + app = Flask(__name__) app.wsgi_app = ReverseProxy(app.wsgi_app) diff --git a/freshmaker/views.py b/freshmaker/views.py index 7721ec8..3a6bb7c 100644 --- a/freshmaker/views.py +++ b/freshmaker/views.py @@ -30,6 +30,8 @@ from freshmaker import messaging from freshmaker import models from freshmaker import types from freshmaker import db +from freshmaker import conf +from freshmaker import version from freshmaker.api_utils import filter_artifact_builds from freshmaker.api_utils import filter_events from freshmaker.api_utils import json_error @@ -121,6 +123,14 @@ api_v1 = { }, }, 'monitor': MonitorAPI.rest_api_v1, + 'about': { + 'about': { + 'url': '/api/1/about/', + 'options': { + 'methods': ['GET'], + } + }, + } } @@ -274,6 +284,20 @@ class BuildAPI(MethodView): return jsonify(db_event.json()), 200 +class AboutAPI(MethodView): + def get(self): + json = {'version': version} + config_items = ['auth_backend'] + for item in config_items: + config_item = getattr(conf, item) + # All config items have a default, so if doesn't exist it is an error + if not config_item: + raise ValueError( + 'An invalid config item of "{0}" was specified'.format(item)) + json[item] = config_item + return jsonify(json), 200 + + API_V1_MAPPING = { 'events': EventAPI, 'builds': BuildAPI, @@ -281,6 +305,7 @@ API_V1_MAPPING = { 'build_types': BuildTypeAPI, 'build_states': BuildStateAPI, 'monitor': MonitorAPI, + 'about': AboutAPI, } diff --git a/tests/test_views.py b/tests/test_views.py index 24a73e5..2ab3251 100644 --- a/tests/test_views.py +++ b/tests/test_views.py @@ -407,6 +407,12 @@ class TestViews(helpers.ModelsTestCase): self.assertEqual(data['error'], 'Not Found') self.assertEqual(data['message'], 'No such build state found.') + def test_about_api(self): + resp = self.client.get('/api/1/about/') + data = json.loads(resp.get_data(as_text=True)) + # version is 'unknown' in case of skip_install=True in tox.ini + self.assertEqual(data['version'], 'unknown') + class TestViewsMultipleFilterValues(helpers.ModelsTestCase): def setUp(self):