From 4f1a1663154f4ba415896dd0ac80b39e025bca07 Mon Sep 17 00:00:00 2001 From: Hongwei Date: Wed, 27 Oct 2021 22:59:23 +0200 Subject: [PATCH 1/2] bugfix/fix the mixed session for the export users csv --- .../users/includes/filter_pagination.html | 6 +- apimanager/users/urls.py | 5 +- apimanager/users/views.py | 65 ++++++++++++++----- 3 files changed, 54 insertions(+), 22 deletions(-) diff --git a/apimanager/users/templates/users/includes/filter_pagination.html b/apimanager/users/templates/users/includes/filter_pagination.html index 3b1cc9e..2d5d480 100644 --- a/apimanager/users/templates/users/includes/filter_pagination.html +++ b/apimanager/users/templates/users/includes/filter_pagination.html @@ -1,12 +1,12 @@
- +
- - Export CSV + +
\ No newline at end of file diff --git a/apimanager/users/urls.py b/apimanager/users/urls.py index f82e280..72cb253 100644 --- a/apimanager/users/urls.py +++ b/apimanager/users/urls.py @@ -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') ] diff --git a/apimanager/users/views.py b/apimanager/users/views.py index 16f5ad0..dccd5c9 100644 --- a/apimanager/users/views.py +++ b/apimanager/users/views.py @@ -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 + From 6dc4f211ca9e57c284ce8baa05ba09be302a8918 Mon Sep 17 00:00:00 2001 From: Hongwei Date: Wed, 27 Oct 2021 23:14:23 +0200 Subject: [PATCH 2/2] feature/set the header logo to z-index 10 --- apimanager/base/static/css/base.css | 1 + 1 file changed, 1 insertion(+) diff --git a/apimanager/base/static/css/base.css b/apimanager/base/static/css/base.css index 12c568f..c43b0ed 100644 --- a/apimanager/base/static/css/base.css +++ b/apimanager/base/static/css/base.css @@ -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{