diff --git a/sner/server/storage/views/versioninfo.py b/sner/server/storage/views/versioninfo.py index 9fc4a176..f97bea61 100644 --- a/sner/server/storage/views/versioninfo.py +++ b/sner/server/storage/views/versioninfo.py @@ -7,14 +7,16 @@ import json from datatables import ColumnDT, DataTables -from flask import jsonify, render_template, request, Response +from flask import jsonify, redirect, render_template, request, Response, url_for from sqlalchemy import func from sner.server.auth.core import session_required from sner.server.extensions import db +from sner.server.forms import ButtonForm from sner.server.storage.forms import VersionInfoQueryForm from sner.server.storage.models import VersionInfo from sner.server.storage.version_parser import is_in_version_range, parse as versionspec_parse +from sner.server.storage.versioninfo import VersionInfoManager from sner.server.storage.views import blueprint from sner.server.utils import filter_query, SnerJSONEncoder @@ -26,7 +28,8 @@ def versioninfo_list_route(): return render_template( 'storage/versioninfo/list.html', - form=VersionInfoQueryForm(request.values) + form=VersionInfoQueryForm(request.values), + button_form=ButtonForm() ) @@ -66,3 +69,16 @@ def versioninfo_list_json_route(): versioninfos["recordsFiltered"] = len(versioninfos["data"]) return Response(json.dumps(versioninfos, cls=SnerJSONEncoder), mimetype='application/json') + + +@blueprint.route('/versioninfo/rebuild', methods=['GET', 'POST']) +@session_required('operator') +def versioninfo_rebuild_route(): + """rebuild versioninfo route""" + + form = ButtonForm() + if form.validate_on_submit(): + VersionInfoManager.rebuild() + return redirect(url_for('storage.versioninfo_list_route')) + + return render_template('button-generic.html', form=form, button_caption='Rebuild') diff --git a/sner/server/templates/button-generic.html b/sner/server/templates/button-generic.html index b8367325..642afdd6 100644 --- a/sner/server/templates/button-generic.html +++ b/sner/server/templates/button-generic.html @@ -2,5 +2,5 @@ {% import "bootstrap_wtf.html" as bwtf %}
diff --git a/sner/server/templates/storage/versioninfo/list.html b/sner/server/templates/storage/versioninfo/list.html index 590cd13b..4f665fab 100644 --- a/sner/server/templates/storage/versioninfo/list.html +++ b/sner/server/templates/storage/versioninfo/list.html @@ -42,6 +42,7 @@ {% block content %} {% call cm.heading(['Versioninfo']) %} {% endcall %} diff --git a/tests/server/storage/views/test_versioninfo.py b/tests/server/storage/views/test_versioninfo.py index cdce4a97..0b32ca27 100644 --- a/tests/server/storage/views/test_versioninfo.py +++ b/tests/server/storage/views/test_versioninfo.py @@ -8,6 +8,8 @@ from flask import url_for +from sner.server.storage.models import VersionInfo + def test_versioninfo_list_route(cl_operator): """versioninfo list route test""" @@ -44,3 +46,15 @@ def test_versioninfo_list_json_route(cl_operator, versioninfo): response = cl_operator.post(url_for('storage.versioninfo_list_json_route', filter='invalid'), {'draw': 1, 'start': 0, 'length': 1}, status='*') assert response.status_code == HTTPStatus.BAD_REQUEST + + +def test_versioninfo_rebuild_route(cl_operator, versioninfo_notes): + """test versioninfo rebuild route""" + + assert VersionInfo.query.count() == 0 + + form = cl_operator.get(url_for('storage.versioninfo_rebuild_route')).form + response = form.submit() + assert response.status_code == HTTPStatus.FOUND + + assert VersionInfo.query.count() > 0