0004-manager-add-roles-export-fixes-29162.patch
src/authentic2/manager/role_views.py | ||
---|---|---|
1 |
import json |
|
2 | ||
1 | 3 |
from django.core.exceptions import PermissionDenied |
2 | 4 |
from django.utils.translation import ugettext_lazy as _ |
3 | 5 |
from django.views.generic import ListView, FormView, TemplateView |
... | ... | |
15 | 17 |
get_role_parenting_model, get_ou_model |
16 | 18 | |
17 | 19 |
from authentic2.utils import redirect |
18 |
from authentic2 import hooks |
|
20 |
from authentic2 import hooks, data_transfer
|
|
19 | 21 | |
20 | 22 |
from . import tables, views, resources, forms, app_settings |
21 | 23 | |
... | ... | |
51 | 53 |
search_form_class = forms.RoleSearchForm |
52 | 54 |
permissions = ['a2_rbac.search_role'] |
53 | 55 |
title = _('Roles') |
56 |
formats = ['csv', 'json'] |
|
54 | 57 | |
55 | 58 |
def get_queryset(self): |
56 | 59 |
qs = super(RolesView, self).get_queryset() |
... | ... | |
92 | 95 |
class RolesExportView(views.ExportMixin, RolesView): |
93 | 96 |
resource_class = resources.RoleResource |
94 | 97 | |
98 |
def get(self, request, *args, **kwargs): |
|
99 |
export_format = kwargs['format'].lower() |
|
100 |
if export_format == 'json': |
|
101 |
export = data_transfer.export_site( |
|
102 |
data_transfer.ExportContext( |
|
103 |
role_qs=self.get_table_data(), |
|
104 |
export_roles=True, |
|
105 |
export_ous=False)) |
|
106 |
return self.export_response(json.dumps(export), 'application/json', 'json') |
|
107 |
return super(RolesExportView, self).get(request, *args, **kwargs) |
|
108 | ||
109 | ||
95 | 110 |
export = RolesExportView.as_view() |
96 | 111 | |
97 | 112 |
src/authentic2/manager/urls.py | ||
---|---|---|
60 | 60 |
name='a2-manager-roles'), |
61 | 61 |
url(r'^roles/add/$', role_views.add, |
62 | 62 |
name='a2-manager-role-add'), |
63 |
url(r'^roles/export/(?P<format>csv)/$', |
|
63 |
url(r'^roles/export/(?P<format>csv|json)/$',
|
|
64 | 64 |
role_views.export, name='a2-manager-roles-export'), |
65 | 65 |
url(r'^roles/(?P<pk>\d+)/$', role_views.members, |
66 | 66 |
name='a2-manager-role-members'), |
src/authentic2/manager/views.py | ||
---|---|---|
363 | 363 |
raise Http404('unknown format') |
364 | 364 |
content = getattr(self.get_dataset(), export_format) |
365 | 365 |
content_type = content_types[export_format] |
366 |
return self.export_response(content, content_type, export_format) |
|
367 | ||
368 |
def export_response(self, content, content_type, export_format): |
|
366 | 369 |
response = HttpResponse(content, content_type=content_type) |
367 | 370 |
filename = '%s%s.%s' % (self.get_export_prefix(), now().isoformat(), |
368 | 371 |
export_format) |
tests/test_role_manager.py | ||
---|---|---|
1 |
from utils import login |
|
2 | ||
3 | ||
4 |
def test_manager_role_export(app, admin, ou1, role_ou1, ou2, role_ou2): |
|
5 |
response = login(app, admin, '/manage/roles/') |
|
6 | ||
7 |
export_response = response.click('JSON') |
|
8 |
export = export_response.json |
|
9 | ||
10 |
assert export.keys() == ['roles'] |
|
11 |
assert len(export['roles']) == 2 |
|
12 |
assert set([role['slug'] for role in export['roles']]) == set(['role_ou1', 'role_ou2']) |
|
13 | ||
14 |
response.form.set('search-text', 'role_ou1') |
|
15 |
search_response = response.form.submit() |
|
16 | ||
17 |
export_response = search_response.click('JSON') |
|
18 |
export = export_response.json |
|
19 | ||
20 |
assert export.keys() == ['roles'] |
|
21 |
assert len(export['roles']) == 1 |
|
22 |
assert export['roles'][0]['slug'] == 'role_ou1' |
|
0 |
- |