manager: add roles export (fixes #29162)
This commit is contained in:
parent
a26417bb76
commit
6f2b7f63bc
|
@ -1,3 +1,5 @@
|
|||
import json
|
||||
|
||||
from django.core.exceptions import PermissionDenied
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.views.generic import ListView, FormView, TemplateView
|
||||
|
@ -15,7 +17,7 @@ from django_rbac.utils import get_role_model, get_permission_model, \
|
|||
get_role_parenting_model, get_ou_model
|
||||
|
||||
from authentic2.utils import redirect
|
||||
from authentic2 import hooks
|
||||
from authentic2 import hooks, data_transfer
|
||||
|
||||
from . import tables, views, resources, forms, app_settings
|
||||
|
||||
|
@ -51,6 +53,7 @@ class RolesView(views.HideOUColumnMixin, RolesMixin, views.BaseTableView):
|
|||
search_form_class = forms.RoleSearchForm
|
||||
permissions = ['a2_rbac.search_role']
|
||||
title = _('Roles')
|
||||
formats = ['csv', 'json']
|
||||
|
||||
def get_queryset(self):
|
||||
qs = super(RolesView, self).get_queryset()
|
||||
|
@ -92,6 +95,18 @@ add = RoleAddView.as_view()
|
|||
class RolesExportView(views.ExportMixin, RolesView):
|
||||
resource_class = resources.RoleResource
|
||||
|
||||
def get(self, request, *args, **kwargs):
|
||||
export_format = kwargs['format'].lower()
|
||||
if export_format == 'json':
|
||||
export = data_transfer.export_site(
|
||||
data_transfer.ExportContext(
|
||||
role_qs=self.get_table_data(),
|
||||
export_roles=True,
|
||||
export_ous=False))
|
||||
return self.export_response(json.dumps(export), 'application/json', 'json')
|
||||
return super(RolesExportView, self).get(request, *args, **kwargs)
|
||||
|
||||
|
||||
export = RolesExportView.as_view()
|
||||
|
||||
|
||||
|
|
|
@ -60,7 +60,7 @@ urlpatterns = required(
|
|||
name='a2-manager-roles'),
|
||||
url(r'^roles/add/$', role_views.add,
|
||||
name='a2-manager-role-add'),
|
||||
url(r'^roles/export/(?P<format>csv)/$',
|
||||
url(r'^roles/export/(?P<format>csv|json)/$',
|
||||
role_views.export, name='a2-manager-roles-export'),
|
||||
url(r'^roles/(?P<pk>\d+)/$', role_views.members,
|
||||
name='a2-manager-role-members'),
|
||||
|
|
|
@ -363,6 +363,9 @@ class ExportMixin(object):
|
|||
raise Http404('unknown format')
|
||||
content = getattr(self.get_dataset(), export_format)
|
||||
content_type = content_types[export_format]
|
||||
return self.export_response(content, content_type, export_format)
|
||||
|
||||
def export_response(self, content, content_type, export_format):
|
||||
response = HttpResponse(content, content_type=content_type)
|
||||
filename = '%s%s.%s' % (self.get_export_prefix(), now().isoformat(),
|
||||
export_format)
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
from utils import login
|
||||
|
||||
|
||||
def test_manager_role_export(app, admin, ou1, role_ou1, ou2, role_ou2):
|
||||
response = login(app, admin, 'a2-manager-roles')
|
||||
|
||||
export_response = response.click('JSON')
|
||||
export = export_response.json
|
||||
|
||||
assert export.keys() == ['roles']
|
||||
assert len(export['roles']) == 2
|
||||
assert set([role['slug'] for role in export['roles']]) == set(['role_ou1', 'role_ou2'])
|
||||
|
||||
response.form.set('search-text', 'role_ou1')
|
||||
search_response = response.form.submit()
|
||||
|
||||
export_response = search_response.click('JSON')
|
||||
export = export_response.json
|
||||
|
||||
assert export.keys() == ['roles']
|
||||
assert len(export['roles']) == 1
|
||||
assert export['roles'][0]['slug'] == 'role_ou1'
|
Loading…
Reference in New Issue