manager: add ous export (#29162)

This commit is contained in:
Benjamin Dauvergne 2018-12-18 15:22:19 +01:00
parent 6f2b7f63bc
commit 8efca74775
4 changed files with 43 additions and 0 deletions

View File

@ -1,8 +1,12 @@
import json
from django_rbac.utils import get_ou_model
from django.http import HttpResponseRedirect
from django.contrib import messages
from django.utils.translation import ugettext as _
from authentic2 import data_transfer
from . import tables, views, forms
@ -13,6 +17,7 @@ class OrganizationalUnitView(views.BaseTableView):
search_form_class = forms.NameSearchForm
permissions = ['a2_rbac.search_organizationalunit']
title = _('Organizational units')
formats = ['json']
listing = OrganizationalUnitView.as_view()
@ -74,3 +79,16 @@ class OrganizationalUnitDeleteView(views.BaseDeleteView):
**kwargs)
delete = OrganizationalUnitDeleteView.as_view()
class RolesExportView(views.ExportMixin, OrganizationalUnitView):
def get(self, request, *args, **kwargs):
export = data_transfer.export_site(
data_transfer.ExportContext(
ou_qs=self.get_table_data(),
export_roles=False,
export_ous=True))
return self.export_response(json.dumps(export), 'application/json', 'json')
export = RolesExportView.as_view()

View File

@ -26,4 +26,5 @@
{% with row_link=1 %}
{% render_table table "authentic2/manager/table.html" %}
{% endwith %}
{% include "authentic2/manager/export_include.html" with export_view_name="a2-manager-ou-export" %}
{% endblock %}

View File

@ -105,6 +105,9 @@ urlpatterns = required(
name='a2-manager-ou-edit'),
url(r'^organizational-units/(?P<pk>\d+)/delete/$', ou_views.delete,
name='a2-manager-ou-delete'),
url(r'^organizational-units/export/(?P<format>json)/$',
ou_views.export,
name='a2-manager-ou-export'),
# Services
url(r'^services/$', service_views.listing,

21
tests/test_ou_manager.py Normal file
View File

@ -0,0 +1,21 @@
from utils import login
def test_manager_ou_export(app, admin, ou1, role_ou1, ou2, role_ou2):
response = login(app, admin, 'a2-manager-ous')
export_response = response.click('JSON')
export = export_response.json
assert export.keys() == ['ous']
assert len(export['ous']) == 3
assert set([ou['slug'] for ou in export['ous']]) == set(['default', 'ou1', 'ou2'])
response.form.set('search-text', 'ou1')
search_response = response.form.submit()
export_response = search_response.click('JSON')
export = export_response.json
assert len(export['ous']) == 1
assert export['ous'][0]['slug'] == 'ou1'