Merge pull request #151 from hongwei1/master

bugfix/fixed the mixed session for export users
This commit is contained in:
Simon Redfern 2021-10-27 23:35:51 +02:00 committed by GitHub
commit a66192c8a6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 55 additions and 22 deletions

View File

@ -184,6 +184,7 @@ table.tablesorter thead tr .headerSortDown, table.tablesorter thead tr .headerSo
top: 0px;
background: #FFFFFF;
width: inherit;
z-index: 10;
}
#body-container{

View File

@ -1,12 +1,12 @@
<form class="form-inline" method="get">
<div class="form-group">
<label for="offset">Offset:</label>
<input type="number" class="form-control" name="offset" id="offset" placeholder="0" value="{{ offset }}">
<input type="number" class="form-control" name="offset" id="offset" placeholder="0" value="{{ offset }}">
</div>
<div class="form-group">
<label for="limit">Limit:</label>
<input type="number" class="form-control" name="limit" id="limit" placeholder="50" value="{{ limit }}">
</div>
<button type="submit" class="btn btn-default">Refresh</button>
<a href="{% url 'export-csv' %}" class="btn btn-default">Export CSV</a>
<input type="submit" class="btn btn-default" value ="Refresh" onclick="javascript: form.action='';"></input>
<input type="submit" class="btn btn-default" value ="Export CSV" onclick="javascript: form.action='{% url 'export-csv' %}';"></input>
</form>

View File

@ -5,7 +5,8 @@ URLs for users app
from django.conf.urls import url
from .views import IndexView, DetailView, MyDetailView, DeleteEntitlementView,InvitationView, DeleteUserView
from .views import IndexView, DetailView, MyDetailView, DeleteEntitlementView, InvitationView, DeleteUserView, \
ExportCsvView
urlpatterns = [
url(r'^all$',
@ -27,6 +28,6 @@ urlpatterns = [
DeleteUserView.as_view(),
name='users-delete-user'),
url(r'^export_csv$',
IndexView.export_scv,
ExportCsvView.as_view(),
name='export-csv')
]

View File

@ -48,7 +48,6 @@ class IndexView(LoginRequiredMixin, TemplateView):
"""Index view for users"""
template_name = "users/index.html"
users = []
def get_users_rolenames(self, context):
api = API(self.request.session.get('obp'))
@ -76,6 +75,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
return role_names
def get_context_data(self, **kwargs):
users = []
context = super(IndexView, self).get_context_data(**kwargs)
api = API(self.request.session.get('obp'))
@ -98,7 +98,7 @@ class IndexView(LoginRequiredMixin, TemplateView):
if 'code' in response and response['code'] >= 400:
messages.error(self.request, response['message'])
else:
IndexView.users = response
users = response
except APIError as err:
messages.error(self.request, err)
except:
@ -106,32 +106,22 @@ class IndexView(LoginRequiredMixin, TemplateView):
role_names = self.get_users_rolenames(context)
try:
IndexView.users = FilterRoleName(context, self.request.GET) \
.apply([IndexView.users] if username else IndexView.users['users'])
users = FilterRoleName(context, self.request.GET) \
.apply([users] if username else users['users'])
except:
IndexView.users = []
users = []
context.update({
'role_names': role_names,
'statistics': {
'users_num': len(IndexView.users),
'users_num': len(users),
},
'users': IndexView.users,
'users': users,
'limit': limit,
'offset': offset,
'locked_status': lockedstatus
})
return context
def export_scv(request):
response = HttpResponse(content_type = 'text/csv')
response['Content-Disposition'] = 'attachment;filename= Users'+ str(datetime.datetime.now())+'.csv'
writer = csv.writer(response)
writer.writerow(["username","user_id","email","provider_id","provider","last_marketing_agreement_signed_date"])
for user in IndexView.users:
writer.writerow([user['username'], user['user_id'], user['email'], user['provider_id'], user['provider'],
user['last_marketing_agreement_signed_date']])
return response
class DetailView(LoginRequiredMixin, FormView):
"""Detail view for a user"""
@ -392,3 +382,44 @@ class DeleteUserView(LoginRequiredMixin, View):
redirect_url = reverse('users-index')
return HttpResponseRedirect(redirect_url)
class ExportCsvView(LoginRequiredMixin, View):
"""View to export the user to csv"""
def get(self, request, *args, **kwargs):
users = []
api = API(self.request.session.get('obp'))
limit = self.request.GET.get('limit', 50)
offset = self.request.GET.get('offset', 0)
email = self.request.GET.get('email')
username = self.request.GET.get('username')
lockedstatus = self.request.GET.get('locked_status')
if lockedstatus is None: lockedstatus = "active"
if email:
urlpath = '/users/email/{}/terminator'.format(email)
elif username:
urlpath = '/users/username/{}'.format(username)
else:
urlpath = '/users?limit={}&offset={}&locked_status={}'.format(limit, offset, lockedstatus)
try:
response = api.get(urlpath)
if 'code' in response and response['code'] >= 400:
messages.error(self.request, response['message'])
else:
users = response['users']
except APIError as err:
messages.error(self.request, err)
except:
messages.error(self.request, 'Unknown Error')
response = HttpResponse(content_type = 'text/csv')
response['Content-Disposition'] = 'attachment;filename= Users'+ str(datetime.datetime.now())+'.csv'
writer = csv.writer(response)
writer.writerow(["username","user_id","email","provider_id","provider","last_marketing_agreement_signed_date"])
for user in users:
writer.writerow([user['username'], user['user_id'], user['email'], user['provider_id'], user['provider'],
user['last_marketing_agreement_signed_date']])
return response