settings: add export/import for api_access objects (#48751)

This commit is contained in:
Nicolas Roche 2020-11-28 15:54:21 +01:00
parent 4653ad1b8b
commit 119288b7cd
3 changed files with 17 additions and 3 deletions

View File

@ -23,6 +23,7 @@ from wcs.qommon.ident.password_accounts import PasswordAccount
from wcs.qommon.http_request import HTTPRequest
from wcs.qommon.template import get_current_theme
from wcs.admin.settings import UserFieldsFormDef
from wcs.api_access import ApiAccess
from wcs.categories import Category, CardDefCategory
from wcs.data_sources import NamedDataSource
from wcs.wscalls import NamedWsCall
@ -644,6 +645,7 @@ def test_settings_export_import(pub, studio):
CardDefCategory.wipe()
NamedDataSource.wipe()
NamedWsCall.wipe()
ApiAccess.wipe()
wipe()
create_superuser(pub)
@ -692,6 +694,12 @@ def test_settings_export_import(pub, studio):
export_to.parent = st1
wf.store()
api_access = ApiAccess()
api_access.name = 'Jhon'
api_access.api_identifier = 'jhon'
api_access.api_key = '1234'
api_access.store()
resp = app.get('/backoffice/settings/export')
resp = resp.form.submit('submit')
assert resp.location.startswith('http://example.net/backoffice/settings/export?job=')
@ -713,6 +721,7 @@ def test_settings_export_import(pub, studio):
assert 'carddef_categories/1' in filelist
assert 'datasources/1' in filelist
assert 'wscalls/corge' in filelist
assert 'apiaccess/1' in filelist
for filename in filelist:
assert '.indexes' not in filename
@ -737,6 +746,7 @@ def test_settings_export_import(pub, studio):
assert FormDef.select()[0].url_name == 'foo'
assert CardDef.count() == 1
assert CardDef.select()[0].url_name == 'bar'
assert ApiAccess.count() == 1
# check roles are found by name
wipe()

View File

@ -879,6 +879,7 @@ class SettingsDirectory(QommonSettingsDirectory):
form.add(CheckboxWidget, 'datasources', title=_('Data sources'), value=True)
form.add(CheckboxWidget, 'mail-templates', title=_('Mail templates'), value=True)
form.add(CheckboxWidget, 'wscalls', title=_('Webservice calls'), value=True)
form.add(CheckboxWidget, 'apiaccess', title=_('API access'), value=True)
form.add_submit('submit', _('Submit'))
form.add_submit('cancel', _('Cancel'))
if form.get_submit() == 'cancel':
@ -902,7 +903,8 @@ class SettingsDirectory(QommonSettingsDirectory):
c = BytesIO()
z = zipfile.ZipFile(c, 'w')
for d in self.dirs:
if d not in ('roles', 'categories', 'carddef_categories', 'datasources', 'wscalls', 'mail-templates'):
if d not in ('roles', 'categories', 'carddef_categories', 'datasources',
'wscalls', 'mail-templates', 'apiaccess'):
continue
path = os.path.join(self.app_dir, d)
if not os.path.exists(path):
@ -951,7 +953,7 @@ class SettingsDirectory(QommonSettingsDirectory):
dirs = []
for w in ('formdefs', 'carddefs', 'workflows', 'roles', 'categories', 'carddef_categories',
'datasources', 'wscalls', 'mail-templates', 'blockdefs'):
'datasources', 'wscalls', 'mail-templates', 'blockdefs', 'apiaccess'):
if form.get_widget(w) and form.get_widget(w).parse():
dirs.append(w)
if not dirs and not form.get_widget('settings').parse():
@ -1053,6 +1055,8 @@ class SettingsDirectory(QommonSettingsDirectory):
r += htmltext('<li>%d %s</li>') % (results['mail-templates'], _('mail templates'))
if results['wscalls']:
r += htmltext('<li>%d %s</li>') % (results['wscalls'], _('webservice calls'))
if results['apiaccess']:
r += htmltext('<li>%d %s</li>') % (results['apiaccess'], _('API access'))
r += htmltext('</ul>')
else:
r += htmltext('<p>%s %s</p>') % (_('Error:'), reason)

View File

@ -168,7 +168,7 @@ class WcsPublisher(StubWcsPublisher):
z = zipfile.ZipFile(fd)
results = {'formdefs': 0, 'carddefs': 0, 'workflows': 0, 'categories': 0, 'roles': 0,
'settings': 0, 'datasources': 0, 'wscalls': 0, 'mail-templates': 0,
'blockdefs': 0}
'blockdefs': 0, 'apiaccess': 0}
def _decode_list(data):
rv = []