bugfix/webui: fix messages display error

This commit is contained in:
yuanxiaojun 2019-11-28 09:17:11 +08:00
parent e5cc78d32a
commit 534fd0ebe8
5 changed files with 53 additions and 78 deletions

View File

@ -136,7 +136,7 @@ class API(object):
return response.text
else:
data = response.json()
if 'error' in data:
if isinstance(data,dict) and 'error' in data:
self.handle_response_error(prefix, data['error'])
return data

View File

@ -2,6 +2,7 @@ from django.contrib import messages
import functools
from obp.api import API, APIError
from django.http import JsonResponse
import traceback
def error_once_only(request, err):
"""
@ -19,7 +20,7 @@ def exception_handle(fn):
def wrapper(request, *args, **kwargs):
try:
result = fn(request, *args, **kwargs)
if 'code' in result and result['code'] >= 400:
if isinstance(result,dict) and 'code' in result and result['code'] >= 400:
error_once_only(request, result['message'])
else:
msg = 'Submit successfully!'

View File

@ -5,9 +5,7 @@ $(document).ready(function($) {
var runner = t.parent().parent().parent();
var web_ui_props_name = $(runner).find('.web_ui_props_name').text();
var web_ui_props_value = $(runner).find('.web_ui_props_value').val();
$('.dynamic-message').each(function(i, d_msg){
$(d_msg).remove();
});
var webui = $('#webui');
if(web_ui_props_value.trim() === '') {
$('<div class="alert alert-dismissible alert-danger dynamic-message" role="alert">\n' +
@ -17,6 +15,7 @@ $(document).ready(function($) {
).insertBefore(webui);
return;
}
/*
t.attr("disabled","disabled").toggleClass("disabled");
t.next().attr("disabled","disabled").toggleClass("disabled");
$.ajax({
@ -48,22 +47,30 @@ $(document).ready(function($) {
t.next().removeAttr("disabled").toggleClass("disabled")
}
});
*/
$('.runner button.forSave').attr("disabled","disabled");
$('.runner button.forDelete').attr("disabled","disabled");
$.post('/webui/save/method', {
'web_ui_props_name': web_ui_props_name,
'web_ui_props_value': web_ui_props_value,
}, function (response) {
location.reload();
});
});
$('.runner button.forDelete').click(function() {
$('.runner button.forDelete').click(function(e) {
e.preventDefault();
var t = $(this);
var runner = t.parent().parent().parent();
var web_ui_props_name = $(runner).find('.web_ui_props_name').text();
var textArea = runner.find('.web_ui_props_value');
var props_id = $(runner).find('.web_ui_props_id');
var web_ui_props_id = props_id.val();
$('.dynamic-message').each(function(i, d_msg){
$(d_msg).remove();
});
var webui = $('#webui');
/*
t.attr("disabled","disabled").toggleClass("disabled");
t.next().attr("disabled","disabled").toggleClass("disabled");
$.ajax({
type: 'POST',
url: '/webui/delete/method',
@ -93,5 +100,13 @@ $(document).ready(function($) {
t.next().removeAttr("disabled").toggleClass("disabled")
}
});
*/
$('.runner button.forSave').attr("disabled","disabled");
$('.runner button.forDelete').attr("disabled","disabled");
$.post('/webui/delete/method', {
'web_ui_props_id': web_ui_props_id
}, function (response) {
location.reload();
});
});
});

View File

@ -8,13 +8,16 @@
<div id="webui_list">
<h1>WEBUI</h1>
<div class="row">
<div class="col-xs-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<label class="form-group">Web UI Props Name:</label> <br>
</div>
<div class="col-xs-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<label class="form-group">Web UI Props Value:</label> <br>
</div>
<div class="col-sm-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<label class="form-group">Web UI Props Id:</label> <br>
</div>
<div class="col-sm-12 col-sm-3">
<label class="form-group">Save Value:</label> <br>
</div>
</div>
@ -24,18 +27,22 @@
<div class="runner">
<div class="row">
<input type="hidden" class="web_ui_props_id" value="{{ webui_prop.web_ui_props_id }}"/>
<div class="col-xs-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<div class="form-group" cols="20" rows="1">
<div class="web_ui_props_name">{{ webui_prop.name }}</div>
</div>
</div>
<div class="col-xs-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<div class="form-group">
<textarea class="form-control required web_ui_props_value" cols="40"
rows="1">{{ webui_prop.value }}</textarea>
</div>
</div>
<div class="col-sm-12 col-sm-4">
<div class="col-xs-12 col-sm-3">
<div class="form-group" cols="1" rows="1"><div
class="">{{ webui_prop.web_ui_props_id }}</div></div>
</div>
<div class="col-sm-12 col-sm-3">
<div class="form-group">
<button class="btn btn-primary btn-green forSave">Save</button>
<button class="btn btn-primary btn-red forDelete">Delete</button>
@ -54,7 +61,6 @@
{% endblock extrajs %}
{% block extracss %}
<link href="{% static 'webui/css/webui.css' %}" rel="stylesheet">
{% endblock extracss %}

View File

@ -13,19 +13,7 @@ from django.http import JsonResponse
from .forms import WebuiForm
from django.urls import reverse_lazy
from django.views.decorators.csrf import csrf_exempt
def error_once_only(request, err):
"""
Just add the error once
:param request:
:param err:
:return:
"""
storage = messages.get_messages(request)
if str(err) not in [str(m.message) for m in storage]:
messages.error(request, err)
from utils.ErrorHandler import exception_handle, error_once_only
class IndexView(LoginRequiredMixin, FormView):
"""Index view for config"""
@ -58,6 +46,7 @@ class IndexView(LoginRequiredMixin, FormView):
# }
# ]
# }
#print(response)
context.update(response)
except APIError as err:
messages.error(self.request, Exception("The OBP-API server is not running or does not respond properly."
@ -71,7 +60,7 @@ class IndexView(LoginRequiredMixin, FormView):
form = super(IndexView, self).get_form(*args, **kwargs)
return form
@exception_handle
@csrf_exempt
def webui_save(request):
web_ui_props_name = request.POST.get('web_ui_props_name')
@ -81,58 +70,22 @@ def webui_save(request):
'name': web_ui_props_name,
'value': web_ui_props_value
}
response = __send_request(request, '/management/webui_props', 'post', payload)
status_code = response['code']
errors = [str(m.message) for m in messages.get_messages(request)]
response = JsonResponse(
{'code': status_code, 'errors': errors, 'web_ui_props_id': response['result'].get('web_ui_props_id')})
response.status_code = status_code
api = API(request.session.get('obp'))
urlpath = '/management/webui_props'
response = api.post(urlpath, payload=payload)
return response
@exception_handle
@csrf_exempt
def webui_delete(request):
web_ui_props_id = request.POST.get('web_ui_props_id')
web_ui_props_name = request.POST.get('web_ui_props_name')
if web_ui_props_id == 'default' or web_ui_props_id == '' or web_ui_props_id is None:
status_code = 200
return {'code':403,'message':'Cann\'t delete web_ui_props_id default'}
else:
status_code = __send_request(request, '/management/webui_props/' + web_ui_props_id, 'delete')['code']
default_value = ''
if 200 <= status_code <= 299:
all_webui = __send_request(request, '/management/webui_props?active=true', 'get')
status_code = all_webui['code']
for v in all_webui['result']['webui_props']:
if v['name'] == web_ui_props_name:
default_value = v['value']
break
errors = [str(m.message) for m in messages.get_messages(request)]
response = JsonResponse({'code': status_code, 'errors': errors, 'default_value': default_value})
response.status_code = status_code
return response
def __send_request(request, url, method_name, payload=None):
api = API(request.session.get('obp'))
code = 200
try:
if payload:
result = getattr(api, method_name)(url, payload=payload)
else:
result = getattr(api, method_name)(url)
except APIError as err:
code = 500
error_once_only(request, APIError(Exception("The OBP-API server is not running or does not respond properly."
"Please check OBP-API server. Details: " + str(err))))
except Exception as err:
code = 500
error_once_only(request, "Unknown Error. Details: " + str(err))
if 'code' in result and result['code'] >= 400:
code = int(result['code'])
error_once_only(request, result['message'])
return {'code': code, 'result': result}
api = API(request.session.get('obp'))
urlpath = '/management/webui_props/{}'.format(web_ui_props_id)
result = api.delete(urlpath)
print(result)
return result