mirror of
https://github.com/OpenBankProject/API-Manager.git
synced 2026-02-06 11:16:50 +00:00
Merge pull request #58 from shanhuhai/master
Added a form to update consumer's call limit on the consumer's details page
This commit is contained in:
commit
ed46c54b69
3
.gitignore
vendored
3
.gitignore
vendored
@ -2,3 +2,6 @@
|
||||
__pycache__/
|
||||
|
||||
apimanager/apimanager/local_settings.py
|
||||
.idea
|
||||
API-Manager.iml
|
||||
apimanager/.DS_Store
|
||||
68
apimanager/consumers/forms.py
Normal file
68
apimanager/consumers/forms.py
Normal file
@ -0,0 +1,68 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""
|
||||
Forms of consumers app
|
||||
"""
|
||||
|
||||
from django import forms
|
||||
|
||||
|
||||
|
||||
class ApiConsumersForm(forms.Form):
|
||||
|
||||
consumer_id = forms.CharField(
|
||||
label='Consumer ID',
|
||||
widget=forms.TextInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
|
||||
per_minute_call_limit = forms.IntegerField(
|
||||
label='per_minute_call_limit',
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
|
||||
per_hour_call_limit = forms.IntegerField(
|
||||
label='per_hour_call_limit',
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
per_day_call_limit = forms.IntegerField(
|
||||
label='per_day_call_limit',
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
per_week_call_limit = forms.IntegerField(
|
||||
label='per_week_call_limit',
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
|
||||
per_month_call_limit = forms.IntegerField(
|
||||
label='per_month_call_limit',
|
||||
widget=forms.NumberInput(
|
||||
attrs={
|
||||
'class': 'form-control',
|
||||
}
|
||||
),
|
||||
required=False,
|
||||
)
|
||||
@ -7,6 +7,74 @@
|
||||
<div id="consumers-detail">
|
||||
<h1>Consumer {{ consumer.app_name }}</h1>
|
||||
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
|
||||
<h2>Params</h2>
|
||||
<form action="" method="post">
|
||||
{% csrf_token %}
|
||||
{% if form.non_field_errors %}
|
||||
<div class="alert alert-danger">
|
||||
{{ form.non_field_errors }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.per_minute_call_limit.errors %}<div class="alert alert-danger">{{ form.per_minute_call_limit.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.per_minute_call_limit.label_tag }}
|
||||
{{ form.per_minute_call_limit }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.per_hour_call_limit.errors %}<div class="alert alert-danger">{{ form.per_hour_call_limit.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.per_hour_call_limit.label_tag }}
|
||||
{{ form.per_hour_call_limit }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.per_day_call_limit.errors %}<div class="alert alert-danger">{{ form.per_day_call_limit.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.per_day_call_limit.label_tag }}
|
||||
{{ form.per_day_call_limit }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.per_week_call_limit.errors %}<div class="alert alert-danger">{{ form.per_week_call_limit.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.per_week_call_limit.label_tag }}
|
||||
{{ form.per_week_call_limit }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-xs-6 col-sm-6">
|
||||
{% if form.per_month_call_limit.errors %}<div class="alert alert-danger">{{ form.per_month_call_limit.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.per_month_call_limit.label_tag }}
|
||||
{{ form.per_month_call_limit }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 col-sm-6">
|
||||
{% if form.consumer_id.errors %}<div class="alert alert-danger">{{ form.consumer_id.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
{{ form.consumer_id.label_tag }}
|
||||
{{ form.consumer_id }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<button type="submit" class="btn btn-primary">Update Consumer</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div id="consumers-detail-consumer_id">
|
||||
|
||||
@ -11,13 +11,13 @@ urlpatterns = [
|
||||
url(r'^$',
|
||||
IndexView.as_view(),
|
||||
name='consumers-index'),
|
||||
url(r'^(?P<consumer_id>[0-9]+)$',
|
||||
url(r'^(?P<consumer_id>[0-9a-z\-]+)$',
|
||||
DetailView.as_view(),
|
||||
name='consumers-detail'),
|
||||
url(r'^(?P<consumer_id>[0-9]+)/enable$',
|
||||
url(r'^(?P<consumer_id>[0-9a-z\-]+)/enable$',
|
||||
EnableView.as_view(),
|
||||
name='consumers-enable'),
|
||||
url(r'^(?P<consumer_id>[0-9]+)/disable$',
|
||||
url(r'^(?P<consumer_id>[0-9a-z\-]+)/disable$',
|
||||
DisableView.as_view(),
|
||||
name='consumers-disable'),
|
||||
]
|
||||
|
||||
@ -9,11 +9,13 @@ from django.conf import settings
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.urls import reverse
|
||||
from django.views.generic import TemplateView, RedirectView
|
||||
from django.views.generic import TemplateView, RedirectView, FormView
|
||||
|
||||
from obp.api import API, APIError
|
||||
from base.filters import BaseFilter, FilterTime
|
||||
|
||||
from .forms import ApiConsumersForm
|
||||
|
||||
|
||||
class FilterAppType(BaseFilter):
|
||||
"""Filter consumers by application type"""
|
||||
@ -69,7 +71,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
|
||||
urlpath = '/management/consumers'
|
||||
consumers = api.get(urlpath)
|
||||
consumers = FilterEnabled(context, self.request.GET)\
|
||||
.apply(consumers['list'])
|
||||
.apply(consumers['consumers'])
|
||||
consumers = FilterAppType(context, self.request.GET)\
|
||||
.apply(consumers)
|
||||
consumers = FilterTime(context, self.request.GET, 'created')\
|
||||
@ -87,16 +89,71 @@ class IndexView(LoginRequiredMixin, TemplateView):
|
||||
return context
|
||||
|
||||
|
||||
class DetailView(LoginRequiredMixin, TemplateView):
|
||||
class DetailView(LoginRequiredMixin, FormView):
|
||||
"""Detail view for a consumer"""
|
||||
form_class = ApiConsumersForm
|
||||
template_name = "consumers/detail.html"
|
||||
|
||||
def dispatch(self, request, *args, **kwargs):
|
||||
self.api = API(request.session.get('obp'))
|
||||
return super(DetailView, self).dispatch(request, *args, **kwargs)
|
||||
|
||||
def get_form(self):
|
||||
"""
|
||||
Get bound form either from request.GET or initials
|
||||
We need a bound form because we already send a request to the API
|
||||
without user intervention on initial request
|
||||
"""
|
||||
if self.request.GET:
|
||||
data = self.request.GET
|
||||
|
||||
else:
|
||||
fields = self.form_class.declared_fields
|
||||
data = {}
|
||||
for name, field in fields.items():
|
||||
if field.initial:
|
||||
data[name] = field.initial
|
||||
form = self.form_class(data)
|
||||
return form
|
||||
|
||||
def form_valid(self, form):
|
||||
|
||||
"""Put limits data to API"""
|
||||
try:
|
||||
|
||||
|
||||
data = ''
|
||||
form = ApiConsumersForm(self.request.POST)
|
||||
if form.is_valid():
|
||||
data = form.cleaned_data
|
||||
|
||||
|
||||
urlpath = '/management/consumers/{}/consumer/calls_limit'.format(data['consumer_id'])
|
||||
|
||||
payload = {
|
||||
'per_minute_call_limit': data['per_minute_call_limit'],
|
||||
'per_hour_call_limit': data['per_hour_call_limit'],
|
||||
'per_day_call_limit': data['per_day_call_limit'],
|
||||
'per_week_call_limit': data['per_week_call_limit'],
|
||||
'per_month_call_limit': data['per_month_call_limit']
|
||||
}
|
||||
user = self.api.put(urlpath, payload=payload)
|
||||
except APIError as err:
|
||||
messages.error(self.request, err)
|
||||
return super(DetailView, self).form_invalid(form)
|
||||
|
||||
msg = 'calls limit of consumer {} has been updated successfully.'.format(
|
||||
data['consumer_id'])
|
||||
messages.success(self.request, msg)
|
||||
self.success_url = self.request.path
|
||||
return super(DetailView, self).form_valid(form)
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
context = super(DetailView, self).get_context_data(**kwargs)
|
||||
api = API(self.request.session.get('obp'))
|
||||
|
||||
try:
|
||||
urlpath = '/management/consumers/{}'.format(kwargs['consumer_id'])
|
||||
urlpath = '/management/consumers/{}'.format(self.kwargs['consumer_id'])
|
||||
consumer = api.get(urlpath)
|
||||
consumer['created'] = datetime.strptime(
|
||||
consumer['created'], settings.API_DATETIMEFORMAT)
|
||||
@ -105,6 +162,7 @@ class DetailView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
context.update({
|
||||
'consumer': consumer,
|
||||
'form': self.get_form()
|
||||
})
|
||||
return context
|
||||
|
||||
|
||||
@ -8,4 +8,5 @@ gunicorn==19.6.0
|
||||
matplotlib
|
||||
django-bootstrap-datepicker-plus
|
||||
django-mathfilters
|
||||
django-bootstrap3
|
||||
django-bootstrap3
|
||||
django-bootstrap-datepicker-plus
|
||||
Loading…
Reference in New Issue
Block a user