mirror of
https://github.com/OpenBankProject/API-Manager.git
synced 2026-02-06 18:36:51 +00:00
Merge remote-tracking branch 'upstream/develop' into develop
This commit is contained in:
commit
a3cff2cd18
@ -227,9 +227,9 @@ EXCLUDE_URL_PATTERN = []
|
||||
API_EXPLORER_APP_NAME = 'xxx'
|
||||
|
||||
#Map Java: yyyy-MM-dd'T'HH:mm'Z'
|
||||
API_DATETIMEFORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
||||
API_DATE_TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
||||
#Map Java: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
||||
API_DATEFORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
|
||||
API_DATE_FORMAT = '%Y-%m-%dT%H:%M:%S.000Z'
|
||||
|
||||
```
|
||||
|
||||
|
||||
@ -244,9 +244,9 @@ LOGGING = {
|
||||
LOGIN_URL = reverse_lazy('home')
|
||||
|
||||
#Map Java: yyyy-MM-dd'T'HH:mm'Z'
|
||||
API_DATETIMEFORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
||||
API_DATE_TIME_FORMAT = '%Y-%m-%dT%H:%M:%SZ'
|
||||
#Map Java: yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
|
||||
API_DATEFORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
|
||||
API_DATE_FORMAT = '%Y-%m-%dT%H:%M:%S.%fZ'
|
||||
|
||||
# the API_Manager the web form date format, eg: 2020-10-11
|
||||
API_MANAGER_DATE_FORMAT= '%Y-%m-%d'
|
||||
@ -257,7 +257,7 @@ API_EXPLORER_HOST = 'http://127.0.0.1:8082'
|
||||
# Only override this if you have a separate portal instance
|
||||
API_PORTAL = API_HOST
|
||||
API_BASE_PATH = '/obp/v'
|
||||
API_VERSION = '5.1.0'
|
||||
API_VERSION = '5.0.0'
|
||||
|
||||
# URL to API Tester
|
||||
API_TESTER_URL = 'https://www.example.com'
|
||||
|
||||
@ -77,7 +77,7 @@ class FilterTime(BaseFilter):
|
||||
print(filtered)
|
||||
for item in data:
|
||||
item_date = datetime.strptime(
|
||||
item[self.time_fieldname], settings.API_DATETIMEFORMAT)
|
||||
item[self.time_fieldname], settings.API_DATE_TIME_FORMAT)
|
||||
if now - item_date <= delta:
|
||||
filtered.append(item)
|
||||
return filtered
|
||||
|
||||
@ -66,7 +66,7 @@
|
||||
<hr class="dropdown-hr">
|
||||
<li {% if accounts_create_url in request.path %} class="active" {% endif %}><a href="{{ accounts_create_url }}">{% trans "Account Create" %}</a></li>
|
||||
<li {% if accounts_list_url in request.path %} class="active" {% endif %}><a href="{{ accounts_list_url }}">{% trans "Account List" %}</a></li>
|
||||
<li {% if customers_create_url in request.path %} class="active" {% endif %}><a href="{{ customers_create_url }}">{% trans "Customers" %}</a></li>
|
||||
<li {% if customers_create_url in request.path %} class="active" {% endif %}><a href="{{ customers_create_url }}">{% trans "Customer Create" %}</a></li>
|
||||
<li {% if customer_list_url in request.path %} class="active" {% endif %}><a href="{{ customer_list_url }}">{% trans "Customer List" %}</a></li>
|
||||
<li {% if branches_list_url in request.path %} class="active" {% endif %}><a href="{{ branches_list_url }}">{% trans "Branches" %}</a></li>
|
||||
<li {% if atms_create_url in request.path %} class="active" {% endif %}><a href="{{ atms_create_url }}">{% trans "ATM Create" %}</a></li>
|
||||
|
||||
@ -4,7 +4,7 @@ Base utilities
|
||||
"""
|
||||
from django.contrib.humanize.templatetags.humanize import naturaltime
|
||||
from datetime import datetime, timedelta
|
||||
from apimanager.settings import API_DATEFORMAT, API_MANAGER_DATE_FORMAT
|
||||
from apimanager.settings import API_DATE_FORMAT, API_MANAGER_DATE_FORMAT
|
||||
from base import context_processors
|
||||
from django.contrib import messages
|
||||
import functools
|
||||
@ -61,7 +61,7 @@ def convert_form_date_to_obpapi_datetime_format(form_to_date_string):
|
||||
"""
|
||||
convert the String 2020-10-22 to 2020-10-22T00:00:00.000000Z
|
||||
"""
|
||||
return datetime.strptime(form_to_date_string, API_MANAGER_DATE_FORMAT).strftime(API_DATEFORMAT)
|
||||
return datetime.strptime(form_to_date_string, API_MANAGER_DATE_FORMAT).strftime(API_DATE_FORMAT)
|
||||
|
||||
def return_to_days_ago(date, days):
|
||||
"""
|
||||
@ -70,4 +70,4 @@ def return_to_days_ago(date, days):
|
||||
days =1
|
||||
return 2020-10-21T00:00:00.000000Z
|
||||
"""
|
||||
return (datetime.strptime(date, API_DATEFORMAT) - timedelta(days)).strftime(API_DATEFORMAT)
|
||||
return (datetime.strptime(date, API_DATE_FORMAT) - timedelta(days)).strftime(API_DATE_FORMAT)
|
||||
@ -44,7 +44,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
|
||||
"""Scrubs data in the given consumers to adher to certain formats"""
|
||||
for consumer in consumers:
|
||||
consumer['created'] = datetime.strptime(
|
||||
consumer['created'], settings.API_DATETIMEFORMAT)
|
||||
consumer['created'], settings.API_DATE_TIME_FORMAT)
|
||||
return consumers
|
||||
|
||||
def compile_statistics(self, consumers):
|
||||
@ -146,7 +146,7 @@ class DetailView(LoginRequiredMixin, FormView):
|
||||
urlpath = '/management/consumers/{}'.format(self.kwargs['consumer_id'])
|
||||
consumer = api.get(urlpath)
|
||||
consumer['created'] = datetime.strptime(
|
||||
consumer['created'], settings.API_DATETIMEFORMAT)
|
||||
consumer['created'], settings.API_DATE_TIME_FORMAT)
|
||||
|
||||
call_limits_urlpath = '/management/consumers/{}/consumer/call-limits'.format(self.kwargs['consumer_id'])
|
||||
consumer_call_limtis = api.get(call_limits_urlpath)
|
||||
|
||||
@ -81,7 +81,7 @@ class CreateCustomerForm(forms.Form):
|
||||
)
|
||||
face_image_date = forms.DateTimeField(
|
||||
label=_('Face Image Date'),
|
||||
input_formats=[settings.API_DATETIMEFORMAT],
|
||||
input_formats=[settings.API_DATE_TIME_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': PLACEHOLDER,
|
||||
@ -92,7 +92,7 @@ class CreateCustomerForm(forms.Form):
|
||||
)
|
||||
date_of_birth = forms.DateTimeField(
|
||||
label=_('Date of Birth'),
|
||||
input_formats=[settings.API_DATETIMEFORMAT],
|
||||
input_formats=[settings.API_DATE_TIME_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': PLACEHOLDER,
|
||||
@ -204,7 +204,7 @@ class CreateCustomerForm(forms.Form):
|
||||
)
|
||||
last_ok_date = forms.DateTimeField(
|
||||
label=_('Last OK Date'),
|
||||
input_formats=[settings.API_DATETIMEFORMAT],
|
||||
input_formats=[settings.API_DATE_TIME_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': PLACEHOLDER,
|
||||
@ -221,14 +221,14 @@ class CreateCustomerForm(forms.Form):
|
||||
def clean_face_image_date(self):
|
||||
data = self.cleaned_data['face_image_date']
|
||||
if data:
|
||||
return data.strftime(settings.API_DATETIMEFORMAT)
|
||||
return data.strftime(settings.API_DATE_TIME_FORMAT)
|
||||
else:
|
||||
return None
|
||||
|
||||
def clean_date_of_birth(self):
|
||||
data = self.cleaned_data['date_of_birth']
|
||||
if data:
|
||||
return data.strftime(settings.API_DATETIMEFORMAT)
|
||||
return data.strftime(settings.API_DATE_TIME_FORMAT)
|
||||
else:
|
||||
return None
|
||||
|
||||
|
||||
@ -38,7 +38,7 @@ class CreateView(LoginRequiredMixin, FormView):
|
||||
except Exception as err:
|
||||
messages.error(self.request, err)
|
||||
fields['last_ok_date'].initial =\
|
||||
datetime.datetime.now().strftime(settings.API_DATETIMEFORMAT)
|
||||
datetime.datetime.now().strftime(settings.API_DATE_TIME_FORMAT)
|
||||
return form
|
||||
|
||||
def form_valid(self, form):
|
||||
@ -71,7 +71,7 @@ class CreateView(LoginRequiredMixin, FormView):
|
||||
'employment_status': data['employment_status'],
|
||||
'kyc_status': data['kyc_status'],
|
||||
'last_ok_date':
|
||||
data['last_ok_date'].strftime(settings.API_DATETIMEFORMAT),
|
||||
data['last_ok_date'].strftime(settings.API_DATE_TIME_FORMAT),
|
||||
}
|
||||
try:
|
||||
result = self.api.post(urlpath, payload=payload)
|
||||
|
||||
@ -24,7 +24,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
|
||||
"""Scrubs data in the given entitlement requests to adher to certain formats"""
|
||||
for entitlement_request in entitlement_requests:
|
||||
entitlement_request['created'] = datetime.strptime(
|
||||
entitlement_request['created'], settings.API_DATETIMEFORMAT)
|
||||
entitlement_request['created'], settings.API_DATE_TIME_FORMAT)
|
||||
return entitlement_requests
|
||||
|
||||
def get_context_data(self, **kwargs):
|
||||
|
||||
@ -13,7 +13,7 @@ from django.utils.translation import ugettext_lazy as _
|
||||
from bootstrap_datepicker_plus import DatePickerInput, DateTimePickerInput
|
||||
from apimanager.settings import API_MANAGER_DATE_FORMAT
|
||||
|
||||
API_DATEFORMAT_PLACEHOLDER = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
|
||||
API_DATE_FORMAT_PLACEHOLDER = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
|
||||
FORM_CONTROL = 'form-control'
|
||||
FROM_DATE = 'From Date'
|
||||
TO_DATE = 'To Date'
|
||||
@ -21,10 +21,10 @@ TO_DATE = 'To Date'
|
||||
class MetricsForm(forms.Form):
|
||||
from_date = forms.DateTimeField(
|
||||
label=_(FROM_DATE),
|
||||
input_formats=[settings.API_DATEFORMAT],
|
||||
input_formats=[settings.API_DATE_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': API_DATEFORMAT_PLACEHOLDER,
|
||||
'placeholder': API_DATE_FORMAT_PLACEHOLDER,
|
||||
'class': FORM_CONTROL,
|
||||
}
|
||||
),
|
||||
@ -33,10 +33,10 @@ class MetricsForm(forms.Form):
|
||||
)
|
||||
to_date = forms.DateTimeField(
|
||||
label=_(TO_DATE),
|
||||
input_formats=[settings.API_DATEFORMAT],
|
||||
input_formats=[settings.API_DATE_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': API_DATEFORMAT_PLACEHOLDER,
|
||||
'placeholder': API_DATE_FORMAT_PLACEHOLDER,
|
||||
'class': FORM_CONTROL,
|
||||
}
|
||||
),
|
||||
@ -176,10 +176,10 @@ class ConnectorMetricsForm(MetricsForm):
|
||||
# override from_date until API returns values without given date
|
||||
from_date = forms.DateTimeField(
|
||||
label=_(FROM_DATE),
|
||||
input_formats=[settings.API_DATEFORMAT],
|
||||
input_formats=[settings.API_DATE_FORMAT],
|
||||
widget=forms.DateTimeInput(
|
||||
attrs={
|
||||
'placeholder': API_DATEFORMAT_PLACEHOLDER,
|
||||
'placeholder': API_DATE_FORMAT_PLACEHOLDER,
|
||||
'class': FORM_CONTROL,
|
||||
}
|
||||
),
|
||||
@ -239,7 +239,7 @@ class CustomSummaryForm(forms.Form):
|
||||
required=False,
|
||||
initial='API-Manager',
|
||||
)
|
||||
include_obp_apps = forms.BooleanField(required=False, label=_('Include System Date'))
|
||||
include_obp_apps = forms.BooleanField(required=False, label=_('Include System Data'))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs.setdefault('label_suffix', '')
|
||||
@ -263,7 +263,7 @@ class MonthlyMetricsSummaryForm(forms.Form):
|
||||
required=False,
|
||||
initial='API-Manager',
|
||||
)
|
||||
include_obp_apps = forms.BooleanField(required=False, label=_('Include System Date'))
|
||||
include_obp_apps = forms.BooleanField(required=False, label=_('Include System Data'))
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
kwargs.setdefault('label_suffix', '')
|
||||
|
||||
@ -38,14 +38,14 @@
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.from_date_custom.errors %}<div class="alert alert-danger">{{ form.from_date_custom.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
<strong>{% trans "from_date_custom" %} </strong>
|
||||
<strong>{% trans "From Date Custom" %} </strong>
|
||||
{{ form.from_date_custom }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.to_date.errors %}<div class="alert alert-danger">{{ form.to_date.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
<strong>{% trans "to_date" %} </strong>
|
||||
<strong>{% trans "To Date Custom" %} </strong>
|
||||
{{ form.to_date }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -45,7 +45,7 @@
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.to_date.errors %}<div class="alert alert-danger">{{ form.to_date.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
<strong>{% trans "to_date" %} </strong>
|
||||
<strong>{% trans "To Date" %} </strong>
|
||||
{{ form.to_date }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -40,7 +40,7 @@
|
||||
<div class="col-xs-6 col-sm-3">
|
||||
{% if form.to_date.errors %}<div class="alert alert-danger">{{ form.to_date.errors }}</div>{% endif %}
|
||||
<div class="form-group">
|
||||
<strong>{% trans "to_date" %} </strong>
|
||||
<strong>{% trans "To Date" %} </strong>
|
||||
{{ form.to_date }}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -11,7 +11,7 @@ from enum import Enum
|
||||
|
||||
from django.conf import settings
|
||||
from apimanager import local_settings
|
||||
from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATEFORMAT
|
||||
from apimanager.settings import API_HOST, EXCLUDE_APPS, EXCLUDE_FUNCTIONS, EXCLUDE_URL_PATTERN, API_EXPLORER_APP_NAME, API_DATE_FORMAT, API_DATE_TIME_FORMAT
|
||||
from django.contrib import messages
|
||||
from django.contrib.auth.mixins import LoginRequiredMixin
|
||||
from django.views.generic import TemplateView
|
||||
@ -112,7 +112,7 @@ class MetricsView(LoginRequiredMixin, TemplateView):
|
||||
"""
|
||||
for metric in metrics:
|
||||
metric['date'] = datetime.datetime.strptime(
|
||||
metric['date'], settings.API_DATETIMEFORMAT)
|
||||
metric['date'], settings.API_DATE_TIME_FORMAT)
|
||||
return metrics
|
||||
|
||||
def to_api(self, cleaned_data):
|
||||
@ -127,7 +127,7 @@ class MetricsView(LoginRequiredMixin, TemplateView):
|
||||
# Maybe we should define the API format as Django format to not
|
||||
# have to convert in places like this?
|
||||
if value.__class__.__name__ == 'datetime':
|
||||
value = value.strftime(settings.API_DATEFORMAT)
|
||||
value = value.strftime(settings.API_DATE_FORMAT)
|
||||
if value:
|
||||
# API does not like quoted data
|
||||
params.append('{}={}'.format(name, value))
|
||||
@ -224,7 +224,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
"""
|
||||
for metric in metrics:
|
||||
metric['date'] = datetime.datetime.strptime(
|
||||
metric['date'], API_DATEFORMAT)
|
||||
metric['date'], API_DATE_FORMAT)
|
||||
return metrics
|
||||
|
||||
def to_api(self, cleaned_data):
|
||||
@ -239,7 +239,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
# Maybe we should define the API format as Django format to not
|
||||
# have to convert in places like this?
|
||||
if value.__class__.__name__ == 'datetime':
|
||||
value = value.strftime(settings.API_DATEFORMAT)
|
||||
value = value.strftime(settings.API_DATE_FORMAT)
|
||||
if value:
|
||||
# API does not like quoted data
|
||||
params.append('{}={}'.format(name, value))
|
||||
@ -253,9 +253,10 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
There are different use cases, so we accept different parameters.
|
||||
only_show_api_explorer_metrics has the default value False, because it is just used for app = API_Explorer.
|
||||
"""
|
||||
api_calls_total = 0
|
||||
average_response_time = 0
|
||||
average_calls_per_day = 0
|
||||
try:
|
||||
api_calls_total = 0
|
||||
average_response_time = 0
|
||||
urlpath = '/management/aggregate-metrics'
|
||||
if only_show_api_explorer_metrics:
|
||||
urlpath = urlpath + '?from_date={}&to_date={}&app_name={}'.format(from_date, to_date, API_EXPLORER_APP_NAME)
|
||||
@ -265,34 +266,35 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
else:
|
||||
urlpath = urlpath + '?from_date={}&to_date={}'.format(from_date, to_date)
|
||||
cache_key = get_cache_key_for_current_call(self.request, urlpath)
|
||||
apicaches = None
|
||||
api_cache = None
|
||||
try:
|
||||
apicaches = cache.get(cache_key)
|
||||
api_cache = cache.get(cache_key)
|
||||
except Exception as err:
|
||||
apicaches = None
|
||||
if not apicaches is None:
|
||||
metrics = apicaches
|
||||
api_cache = None
|
||||
if api_cache is not None:
|
||||
metrics = api_cache
|
||||
else:
|
||||
api = API(self.request.session.get('obp'))
|
||||
metrics = api.get(urlpath)
|
||||
apicaches = cache.set(cache_key, metrics)
|
||||
api_cache = cache.set(cache_key, metrics)
|
||||
LOGGER.warning('{0}: {1}'.format(CACHE_SETTING_URL_MSG, urlpath))
|
||||
LOGGER.warning('{0}: {1}'.format(CACHE_SETTING_KEY_MSG, cache_key))
|
||||
|
||||
api_calls_total, average_calls_per_day, average_response_time = self.get_internal_api_call_metrics(
|
||||
api_calls_total, average_response_time, cache_key, from_date, metrics, to_date, urlpath)
|
||||
return api_calls_total, average_response_time, int(average_calls_per_day)
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, err)
|
||||
finally:
|
||||
return api_calls_total, average_response_time, int(average_calls_per_day)
|
||||
|
||||
def get_internal_api_call_metrics(self, api_calls_total, average_response_time, cache_key, from_date, metrics,
|
||||
to_date, urlpath):
|
||||
api_calls_total = metrics[0]["count"]
|
||||
average_response_time = metrics[0]["average_response_time"]
|
||||
to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
|
||||
from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
|
||||
to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT)
|
||||
from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT)
|
||||
number_of_days = abs((to_date - from_date).days)
|
||||
# if number_of_days= 0, then it means calls_per_hour
|
||||
average_calls_per_day = api_calls_total if (number_of_days == 0) else api_calls_total / number_of_days
|
||||
@ -308,7 +310,6 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
only_show_api_explorer_metrics has the default value False, because it is just used for app = API_Explorer.
|
||||
"""
|
||||
apps = []
|
||||
form = self.get_form()
|
||||
active_apps_list = []
|
||||
if is_included_obp_apps:
|
||||
urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}'.format(from_date, to_date, exclude_app_names)
|
||||
@ -340,12 +341,12 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
def get_total_number_of_apps(self, cleaned_data, from_date, to_date):
|
||||
apps = []
|
||||
from_date = datetime.datetime.strptime(from_date, API_DATEFORMAT)
|
||||
to_date = datetime.datetime.strptime(to_date, API_DATEFORMAT)
|
||||
from_date = datetime.datetime.strptime(from_date, API_DATE_FORMAT)
|
||||
to_date = datetime.datetime.strptime(to_date, API_DATE_FORMAT)
|
||||
apps_list = self.get_all_consumers()
|
||||
|
||||
for app in apps_list:
|
||||
app_created_date = datetime.datetime.strptime(app["created"], '%Y-%m-%dT%H:%M:%SZ')
|
||||
app_created_date = datetime.datetime.strptime(app["created"], API_DATE_TIME_FORMAT)
|
||||
|
||||
if app_created_date < from_date and app_created_date > to_date:
|
||||
apps_list.remove(app)
|
||||
@ -356,9 +357,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
app_names.append(apps["app_name"])
|
||||
|
||||
# If include OBP Apps is selected
|
||||
if cleaned_data.get('include_obp_apps'):
|
||||
app_names = app_names
|
||||
else:
|
||||
if not cleaned_data.get('include_obp_apps'):
|
||||
for app in app_names:
|
||||
if app in local_settings.EXCLUDE_APPS:
|
||||
app_names.remove(app)
|
||||
@ -383,13 +382,13 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
urlpath = '/management/consumers'
|
||||
api = API(self.request.session.get('obp'))
|
||||
cache_key = get_cache_key_for_current_call(self.request, urlpath)
|
||||
apicaches = None
|
||||
api_cache = None
|
||||
try:
|
||||
apicaches = cache.get(cache_key)
|
||||
api_cache = cache.get(cache_key)
|
||||
except Exception as err:
|
||||
apicaches = None
|
||||
if not apicaches is None:
|
||||
apps_list = apicaches
|
||||
api_cache = None
|
||||
if api_cache is not None:
|
||||
apps_list = api_cache
|
||||
else:
|
||||
try:
|
||||
apps = api.get(urlpath)
|
||||
@ -410,8 +409,8 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
"""
|
||||
|
||||
# we need to convert string to datetime object, then we can calculate the date
|
||||
from_datetime_object = datetime.datetime.strptime(from_date_string, API_DATEFORMAT)
|
||||
to_datetime_object = datetime.datetime.strptime(to_date_string , API_DATEFORMAT)
|
||||
from_datetime_object = datetime.datetime.strptime(from_date_string, API_DATE_FORMAT)
|
||||
to_datetime_object = datetime.datetime.strptime(to_date_string , API_DATE_FORMAT)
|
||||
time_delta_in_loop = from_datetime_object + timedelta(**delta)
|
||||
|
||||
result_list = []
|
||||
@ -420,8 +419,8 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
while time_delta_in_loop <= to_datetime_object:
|
||||
try:
|
||||
# here we need to first convert datetime object to String
|
||||
form_date= from_datetime_object.strftime(API_DATEFORMAT)
|
||||
to_date= time_delta_in_loop.strftime(API_DATEFORMAT)
|
||||
form_date= from_datetime_object.strftime(API_DATE_FORMAT)
|
||||
to_date= time_delta_in_loop.strftime(API_DATE_FORMAT)
|
||||
aggregate_metrics = self.get_aggregate_metrics(form_date, to_date, is_included_obp_apps)
|
||||
result = aggregate_metrics[0]
|
||||
result_list_pure.append(result)
|
||||
@ -450,7 +449,6 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
"""
|
||||
Convenience function to print number of calls per day
|
||||
"""
|
||||
index = []
|
||||
calls_per_day, calls_per_day_pure, date_list = self.calls_per_delta(is_included_obp_apps, from_date, to_date,exclude_app_names, days=1)
|
||||
|
||||
if len(calls_per_day) >= 90:
|
||||
@ -485,40 +483,13 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
hour_list = []
|
||||
|
||||
if period == 'day':
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Dates", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per day", fontsize=14)
|
||||
plt.xlabel("Dates", fontsize=8)
|
||||
for date in date_month_list:
|
||||
date = date.strftime('%B %d')
|
||||
date_list.append(str(date))
|
||||
plt.plot(date_list, plot_data, linewidth=1, marker='o')
|
||||
self._day(plot_data, date_month_list, date_list)
|
||||
|
||||
elif period == 'month':
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Months", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per month", fontsize=14)
|
||||
plt.xlabel("Months", fontsize=8)
|
||||
for date in date_month_list:
|
||||
month = date.strftime('%B %Y')
|
||||
month_list.append(str(month))
|
||||
plt.plot(month_list, plot_data, linewidth=1, marker='o')
|
||||
self._month(plot_data, date_month_list, month_list)
|
||||
|
||||
elif period == 'hour':
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Hours", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per hour", fontsize=14)
|
||||
plt.xlabel("Hours", fontsize=8)
|
||||
for date in date_month_list:
|
||||
hour = date.strftime('%B %d -- %H : %m')
|
||||
hour_list.append(str(hour))
|
||||
plt.plot(hour_list, plot_data, linewidth=1, marker='o')
|
||||
self._hour(plot_data, date_month_list, hour_list)
|
||||
|
||||
plt.xticks(rotation=90, fontsize=6)
|
||||
|
||||
@ -535,7 +506,41 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
plt.gcf().clear()
|
||||
return image_base64
|
||||
|
||||
def _day(self, plot_data, date_month_list, date_list):
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Dates", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per day", fontsize=14)
|
||||
plt.xlabel("Dates", fontsize=8)
|
||||
for date in date_month_list:
|
||||
date = date.strftime('%B %d')
|
||||
date_list.append(str(date))
|
||||
plt.plot(date_list, plot_data, linewidth=1, marker='o')
|
||||
|
||||
def _month(self, plot_data, date_month_list, month_list):
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Months", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per month", fontsize=14)
|
||||
plt.xlabel("Months", fontsize=8)
|
||||
for date in date_month_list:
|
||||
month = date.strftime('%B %Y')
|
||||
month_list.append(str(month))
|
||||
plt.plot(month_list, plot_data, linewidth=1, marker='o')
|
||||
|
||||
def _hour(self, plot_data, date_month_list, hour_list):
|
||||
if len(plot_data) == 0:
|
||||
plt.xlabel("Hours", fontsize=8)
|
||||
plt.plot()
|
||||
else:
|
||||
plt.title("API calls per hour", fontsize=14)
|
||||
plt.xlabel("Hours", fontsize=8)
|
||||
for date in date_month_list:
|
||||
hour = date.strftime('%B %d -- %H : %m')
|
||||
hour_list.append(str(hour))
|
||||
plt.plot(hour_list, plot_data, linewidth=1, marker='o')
|
||||
|
||||
def plot_bar_chart(self, data):
|
||||
x = []
|
||||
@ -595,60 +600,51 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
error_once_only(self.request, users['message'])
|
||||
if 'users' not in users:
|
||||
users['users']=[]
|
||||
else:
|
||||
self._update_user_with_cansearchwarehouse(users, users_with_cansearchwarehouse, email_with_cansearchwarehouse)
|
||||
# fail gracefully in case API provides new structure
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except KeyError as err:
|
||||
messages.error(self.request, 'KeyError: {}'.format(err))
|
||||
except Exception as err:
|
||||
error_once_only(self.request, err)
|
||||
|
||||
else:
|
||||
try:
|
||||
for user in users['users']:
|
||||
for entitlement in user['entitlements']['list']:
|
||||
if 'CanSearchWarehouse' in entitlement['role_name']:
|
||||
users_with_cansearchwarehouse.append(user["username"])
|
||||
email_with_cansearchwarehouse.append(user["email"])
|
||||
# fail gracefully in case API provides new structure
|
||||
except KeyError as err:
|
||||
messages.error(self.request, 'KeyError: {}'.format(err))
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
|
||||
user_email_cansearchwarehouse = dict(zip(users_with_cansearchwarehouse, email_with_cansearchwarehouse))
|
||||
number_of_users_with_cansearchwarehouse = len(user_email_cansearchwarehouse)
|
||||
return user_email_cansearchwarehouse, number_of_users_with_cansearchwarehouse
|
||||
|
||||
def _update_user_with_cansearchwarehouse(self, users, users_with_cansearchwarehouse, email_with_cansearchwarehouse):
|
||||
for user in users['users']:
|
||||
for entitlement in user['entitlements']['list']:
|
||||
if 'CanSearchWarehouse' in entitlement['role_name']:
|
||||
users_with_cansearchwarehouse.append(user["username"])
|
||||
email_with_cansearchwarehouse.append(user["email"])
|
||||
|
||||
def _api_data(self, urlpath, data_key):
|
||||
api = API(self.request.session.get('obp'))
|
||||
data = []
|
||||
try:
|
||||
data = api.get(urlpath)
|
||||
if data is not None and 'code' in data and data['code']==403:
|
||||
error_once_only(self.request, data['message'])
|
||||
data=[]
|
||||
else:
|
||||
data = data[data_key]
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, err)
|
||||
return data
|
||||
|
||||
def get_top_apis(self, cleaned_data, from_date, to_date):
|
||||
top_apis = []
|
||||
form = self.get_form()
|
||||
if cleaned_data.get('include_obp_apps'):
|
||||
urlpath = '/management/metrics/top-apis?from_date={}&to_date={}'.format(from_date, to_date)
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
top_apis = api.get(urlpath)
|
||||
if top_apis is not None and 'code' in top_apis and top_apis['code']==403:
|
||||
error_once_only(self.request, top_apis['message'])
|
||||
top_apis=[]
|
||||
else:
|
||||
top_apis = top_apis['top_apis']
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
else:
|
||||
urlpath = '/management/metrics/top-apis?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
|
||||
from_date, to_date, ",".join(local_settings.EXCLUDE_APPS), ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
top_apis = api.get(urlpath)
|
||||
if top_apis is not None and 'code' in top_apis and top_apis['code']==403:
|
||||
error_once_only(self.request, top_apis['message'])
|
||||
top_apis=[]
|
||||
else:
|
||||
top_apis = top_apis['top_apis']
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
top_apis = self._api_data(urlpath, 'top_apis')
|
||||
|
||||
for api in top_apis:
|
||||
if api['Implemented_by_partial_function'] == "":
|
||||
@ -662,36 +658,13 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
def get_top_consumers(self, cleaned_data, from_date, to_date):
|
||||
top_consumers = []
|
||||
form = self.get_form()
|
||||
if cleaned_data.get('include_obp_apps'):
|
||||
urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}'.format(from_date, to_date)
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
top_consumers = api.get(urlpath)
|
||||
if top_consumers is not None and 'code' in top_consumers and top_consumers['code']==403:
|
||||
error_once_only(self.request, top_consumers['message'])
|
||||
top_consumers=[]
|
||||
else:
|
||||
top_consumers = top_consumers['top_consumers']
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
else:
|
||||
urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}&exclude_implemented_by_partial_functions={}&exclude_url_pattern={}'.format(
|
||||
from_date, to_date, ",".join(local_settings.EXCLUDE_APPS), ",".join(EXCLUDE_FUNCTIONS), ",".join(EXCLUDE_URL_PATTERN))
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
top_consumers = api.get(urlpath)
|
||||
if top_consumers is not None and 'code' in top_consumers and top_consumers['code']==403:
|
||||
error_once_only(self.request, top_consumers['message'])
|
||||
top_consumers=[]
|
||||
else:
|
||||
top_consumers = top_consumers['top_consumers']
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
top_consumers = self._api_data(urlpath, 'top_consumers')
|
||||
|
||||
for consumer in top_consumers:
|
||||
if consumer['app_name'] == "":
|
||||
top_consumers.remove(consumer)
|
||||
@ -715,7 +688,6 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
return top_warehouse_calls
|
||||
|
||||
def get_top_apps_using_warehouse(self, from_date, to_date, exclude_app_names):
|
||||
form = self.get_form()
|
||||
top_apps_using_warehouse = []
|
||||
|
||||
urlpath = '/management/metrics/top-consumers?from_date={}&to_date={}&exclude_app_names={}&implemented_by_partial_function={}'.format(
|
||||
@ -731,43 +703,43 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
except APIError as err:
|
||||
error_once_only(self.request, err)
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
error_once_only(self.request, err)
|
||||
|
||||
return top_apps_using_warehouse
|
||||
|
||||
def median_time_to_first_api_call(self, from_date, to_date):
|
||||
return 0 #TODO this cost too much time, do not use this at the moment.
|
||||
form = self.get_form()
|
||||
form = self.get_form()
|
||||
new_apps_list = []
|
||||
apps = []
|
||||
apps_list = self.get_all_consumers()
|
||||
|
||||
|
||||
for app in apps_list:
|
||||
created_date = datetime.datetime.strptime(app['created'], '%Y-%m-%dT%H:%M:%SZ')
|
||||
created_date = created_date.strftime(API_DATEFORMAT)
|
||||
created_date = datetime.datetime.strptime(created_date, API_DATEFORMAT)
|
||||
if created_date >= datetime.datetime.strptime(from_date, API_DATEFORMAT):
|
||||
created_date = created_date.strftime(API_DATE_FORMAT)
|
||||
created_date = datetime.datetime.strptime(created_date, API_DATE_FORMAT)
|
||||
if created_date >= datetime.datetime.strptime(from_date, API_DATE_FORMAT):
|
||||
new_apps_list.append(app)
|
||||
|
||||
times_to_first_call = []
|
||||
|
||||
strfrom_date=datetime.datetime.strptime(from_date, API_DATEFORMAT)
|
||||
strto_date=datetime.datetime.strptime(to_date, API_DATEFORMAT)
|
||||
strfrom_date=datetime.datetime.strptime(from_date, API_DATE_FORMAT)
|
||||
strto_date=datetime.datetime.strptime(to_date, API_DATE_FORMAT)
|
||||
for app in new_apps_list:
|
||||
urlpath_metrics = '/management/metrics?from_date={}&to_date={}&consumer_id={}&sort_by={}&direction={}&limit={}'.format(
|
||||
from_date, to_date, app['consumer_id'], 'date', 'asc', '1')
|
||||
cache_key = get_cache_key_for_current_call(self.request, urlpath_metrics)
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
apicaches=None
|
||||
api_cache=None
|
||||
try:
|
||||
apicaches=cache.get(cache_key)
|
||||
api_cache=cache.get(cache_key)
|
||||
except Exception as err:
|
||||
apicaches=None
|
||||
api_cache=None
|
||||
metrics=[]
|
||||
if not apicaches is None:
|
||||
metrics=apicaches
|
||||
if not api_cache is None:
|
||||
metrics=api_cache
|
||||
else:
|
||||
metrics = api.get(urlpath_metrics)
|
||||
|
||||
@ -837,7 +809,7 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
|
||||
if (web_page_type == SummaryType.QUARTERLY):
|
||||
# for one quarter, the from_date is 90 days ago.
|
||||
from_date = (datetime.datetime.strptime(to_date, API_DATEFORMAT) - timedelta(90)).strftime(API_DATEFORMAT)
|
||||
from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT) - timedelta(90)).strftime(API_DATE_FORMAT)
|
||||
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_month_chart = self.plot_line_chart(calls_per_month, month_list, 'month')
|
||||
|
||||
@ -891,8 +863,8 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
'user_email_cansearchwarehouse': user_email_cansearchwarehouse,
|
||||
'number_of_users_with_cansearchwarehouse': number_of_users_with_cansearchwarehouse,
|
||||
'api_host_name': api_host_name,
|
||||
'from_date': (datetime.datetime.strptime(from_date, API_DATEFORMAT)).strftime('%Y-%m-%d'),
|
||||
'to_date': (datetime.datetime.strptime(to_date, API_DATEFORMAT)).strftime('%Y-%m-%d'),
|
||||
'from_date': (datetime.datetime.strptime(from_date, API_DATE_FORMAT)).strftime('%Y-%m-%d'),
|
||||
'to_date': (datetime.datetime.strptime(to_date, API_DATE_FORMAT)).strftime('%Y-%m-%d'),
|
||||
'top_apis': top_apis,
|
||||
'top_apis_bar_chart': top_apis_bar_chart,
|
||||
'top_consumers_bar_chart': top_consumers_bar_chart,
|
||||
@ -903,7 +875,52 @@ class MonthlyMetricsSummaryView(LoginRequiredMixin, TemplateView):
|
||||
else:
|
||||
error_once_only(self.request, str(form.errors))
|
||||
except Exception as err:
|
||||
error_once_only(self.request, 'Unknown Error. {}'.format(err))
|
||||
error_once_only(self.request, err)
|
||||
|
||||
def _daily_and_weekly(self, web_page_type, is_included_obp_apps, to_date, exclude_app_names, per_hour_chart, per_day_chart, from_date):
|
||||
if (web_page_type == SummaryType.DAILY):
|
||||
# for one day, the from_date is 1 day ago.
|
||||
from_date = return_to_days_ago(to_date, 1)
|
||||
calls_per_hour_list, calls_per_hour, hour_list = self.calls_per_hour(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_hour_chart = self.plot_line_chart(calls_per_hour, hour_list, 'hour')
|
||||
|
||||
if (web_page_type == SummaryType.WEEKLY):
|
||||
# for one month, the from_date is 7 days ago.
|
||||
from_date = return_to_days_ago(to_date, 7)
|
||||
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_day_chart = self.plot_line_chart(calls_per_day, date_list, "day")
|
||||
|
||||
return (from_date, per_hour_chart, per_day_chart)
|
||||
|
||||
def _monthly_and_quarterly(self, web_page_type, is_included_obp_apps, to_date, exclude_app_names, per_day_chart, per_month_chart, from_date):
|
||||
if (web_page_type == SummaryType.MONTHLY):
|
||||
# for one month, the from_date is 30 days ago.
|
||||
from_date = return_to_days_ago(to_date, 30)
|
||||
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_day_chart = self.plot_line_chart(calls_per_day, date_list, "day")
|
||||
|
||||
if (web_page_type == SummaryType.QUARTERLY):
|
||||
# for one quarter, the from_date is 90 days ago.
|
||||
from_date = (datetime.datetime.strptime(to_date, API_DATE_FORMAT) - timedelta(90)).strftime(API_DATE_FORMAT)
|
||||
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_month_chart = self.plot_line_chart(calls_per_month, month_list, 'month')
|
||||
|
||||
return (from_date, per_day_chart, per_month_chart)
|
||||
|
||||
def _yearly_and_custom(self, web_page_type, is_included_obp_apps, to_date, exclude_app_names, per_month_chart, per_day_chart, from_date):
|
||||
if (web_page_type == SummaryType.YEARLY):
|
||||
from_date = return_to_days_ago(to_date, 365)
|
||||
calls_per_month_list, calls_per_month, month_list = self.calls_per_month(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_month_chart = self.plot_line_chart(calls_per_month, month_list, "month")
|
||||
|
||||
if (web_page_type == SummaryType.CUSTOM):
|
||||
# for one month, the from_date is x day ago.
|
||||
form_from_date_string = form.data['from_date_custom']
|
||||
from_date = convert_form_date_to_obpapi_datetime_format(form_from_date_string)
|
||||
calls_per_day_list, calls_per_day, date_list = self.calls_per_day(is_included_obp_apps, from_date, to_date, exclude_app_names)
|
||||
per_day_chart = self.plot_line_chart(calls_per_day, date_list, "day")
|
||||
|
||||
return (from_date, per_month_chart, per_day_chart)
|
||||
|
||||
class YearlySummaryView(MonthlyMetricsSummaryView):
|
||||
template_name = 'metrics/yearly_summary.html'
|
||||
|
||||
@ -248,7 +248,6 @@ class MyDetailView(LoginRequiredMixin, FormView):
|
||||
messages.error(self.request, err)
|
||||
except Exception as err:
|
||||
messages.error(self.request, err)
|
||||
user["entitlements"]["list"] = sorted(user["entitlements"]["list"], key=lambda d: d['role_name'])
|
||||
context.update({
|
||||
'apiuser': user, # 'user' is logged-in user in template context
|
||||
})
|
||||
@ -340,7 +339,7 @@ class DeleteEntitlementView(LoginRequiredMixin, View):
|
||||
except Exception as err:
|
||||
messages.error(self.request, err)
|
||||
|
||||
# from sonarcloud: Change this code to not perform redirects based on user-controlled data.
|
||||
# from sonarcloud: Change this code to not perform redirects based on user-controlled data.
|
||||
redirect_url_from_gui = request.POST.get('next', reverse('users-index'))
|
||||
if "/users/all/user_id/" in str(redirect_url_from_gui):
|
||||
redirect_url = reverse('users-detail',kwargs={"user_id":kwargs['user_id']})
|
||||
@ -348,7 +347,6 @@ class DeleteEntitlementView(LoginRequiredMixin, View):
|
||||
redirect_url = reverse('my-user-detail',kwargs={"user_id":kwargs['user_id']})
|
||||
else:
|
||||
redirect_url = reverse('users-index')
|
||||
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
|
||||
@ -360,11 +358,33 @@ class UserStatusUpdateView(LoginRequiredMixin, View):
|
||||
api = API(self.request.session.get('obp'))
|
||||
try:
|
||||
if(request.POST.get("Delete")):
|
||||
self._delete_user(api, request, args, kwargs)
|
||||
urlpath = '/users/{}'.format(kwargs['user_id'])
|
||||
result = api.delete(urlpath)
|
||||
if result is not None and 'code' in result and result['code'] >= 400:
|
||||
messages.error(request, result['message'])
|
||||
else:
|
||||
msg = 'User with ID {} has been deleted.'.format(kwargs['user_id'])
|
||||
messages.success(request, msg)
|
||||
elif(request.POST.get("Lock")):
|
||||
self._lock_user(api, request, args, kwargs)
|
||||
urlpath = '/users/{}/locks'.format(kwargs['username'])
|
||||
result = api.post(urlpath, None)
|
||||
if result is not None and 'code' in result and result['code'] >= 400:
|
||||
messages.error(request, result['message'])
|
||||
else:
|
||||
msg = 'User {} has been lock.'.format(kwargs['username'])
|
||||
messages.success(request, msg)
|
||||
else:
|
||||
self._lock_status_user(api, request, args, kwargs)
|
||||
urlpath = '/users/{}/lock-status'.format(kwargs['username'])
|
||||
result = api.put(urlpath, None)
|
||||
#if result is not None and 'code' in result and result['code'] >= 400:
|
||||
if 'code' in result and result['code'] == 404:
|
||||
msg = 'User {} has been unlocked.'.format(kwargs['username'])
|
||||
messages.success(request, msg)
|
||||
else:
|
||||
messages.error(request, result['message'])
|
||||
#else:
|
||||
# msg = 'User {} has been unlocked.'.format(kwargs['username'])
|
||||
# messages.success(request, msg)
|
||||
|
||||
except APIError as err:
|
||||
messages.error(request, err)
|
||||
@ -382,36 +402,6 @@ class UserStatusUpdateView(LoginRequiredMixin, View):
|
||||
|
||||
return HttpResponseRedirect(redirect_url)
|
||||
|
||||
def _delete_user(self, api, request, *args, **kwargs):
|
||||
urlpath = '/users/{}'.format(kwargs['user_id'])
|
||||
result = api.delete(urlpath)
|
||||
if result is not None and 'code' in result and result['code'] >= 400:
|
||||
messages.error(request, result['message'])
|
||||
else:
|
||||
msg = 'User with ID {} has been deleted.'.format(kwargs['user_id'])
|
||||
messages.success(request, msg)
|
||||
|
||||
def _lock_user(self, api, request, *args, **kwargs):
|
||||
urlpath = '/users/{}/locks'.format(kwargs['username'])
|
||||
result = api.post(urlpath, None)
|
||||
if result is not None and 'code' in result and result['code'] >= 400:
|
||||
messages.error(request, result['message'])
|
||||
else:
|
||||
msg = 'User {} has been lock.'.format(kwargs['username'])
|
||||
messages.success(request, msg)
|
||||
|
||||
def _lock_status_user(self, api, request, *args, **kwargs):
|
||||
urlpath = '/users/{}/lock-status'.format(kwargs['username'])
|
||||
result = api.put(urlpath, None)
|
||||
#if result is not None and 'code' in result and result['code'] >= 400:
|
||||
if 'code' in result and result['code'] == 404:
|
||||
msg = 'User {} has been unlocked.'.format(kwargs['username'])
|
||||
messages.success(request, msg)
|
||||
else:
|
||||
messages.error(request, result['message'])
|
||||
#else:
|
||||
# msg = 'User {} has been unlocked.'.format(kwargs['username'])
|
||||
# messages.success(request, msg)
|
||||
|
||||
class ExportCsvView(LoginRequiredMixin, View):
|
||||
"""View to export the user to csv"""
|
||||
@ -449,4 +439,3 @@ class ExportCsvView(LoginRequiredMixin, View):
|
||||
writer.writerow([user['username'], user['user_id'], user['email'], user['provider_id'], user['provider'],
|
||||
user['last_marketing_agreement_signed_date']])
|
||||
return response
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user