misc: extend users data sources with attributes (#77887) #344
|
@ -1,7 +1,9 @@
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from wcs import data_sources
|
from wcs import data_sources
|
||||||
|
from wcs.admin.settings import UserFieldsFormDef
|
||||||
from wcs.data_sources import NamedDataSource
|
from wcs.data_sources import NamedDataSource
|
||||||
|
from wcs.fields import StringField
|
||||||
from wcs.qommon.http_request import HTTPRequest
|
from wcs.qommon.http_request import HTTPRequest
|
||||||
from wcs.qommon.template import Template
|
from wcs.qommon.template import Template
|
||||||
|
|
||||||
|
@ -53,32 +55,136 @@ def test_datasource_users(pub):
|
||||||
users.append(user)
|
users.append(user)
|
||||||
|
|
||||||
assert data_sources.get_items({'type': datasource.slug}) == [
|
assert data_sources.get_items({'type': datasource.slug}) == [
|
||||||
('1', 'John Doe 0', '1', {'id': 1, 'text': 'John Doe 0'}),
|
(
|
||||||
('2', 'John Doe 1', '2', {'id': 2, 'text': 'John Doe 1'}),
|
'1',
|
||||||
|
'John Doe 0',
|
||||||
|
'1',
|
||||||
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'2',
|
||||||
|
'John Doe 1',
|
||||||
|
'2',
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
assert data_sources.get_items(datasource.extended_data_source) == [
|
assert data_sources.get_items(datasource.extended_data_source) == [
|
||||||
('1', 'John Doe 0', '1', {'id': 1, 'text': 'John Doe 0'}),
|
(
|
||||||
('2', 'John Doe 1', '2', {'id': 2, 'text': 'John Doe 1'}),
|
'1',
|
||||||
|
'John Doe 0',
|
||||||
|
'1',
|
||||||
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
),
|
||||||
|
(
|
||||||
|
'2',
|
||||||
|
'John Doe 1',
|
||||||
|
'2',
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
),
|
||||||
]
|
]
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
||||||
|
|
||||||
datasource.users_included_roles = [role1.id]
|
datasource.users_included_roles = [role1.id]
|
||||||
datasource.store()
|
datasource.store()
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
||||||
|
|
||||||
|
@ -90,9 +196,25 @@ def test_datasource_users(pub):
|
||||||
|
|
||||||
users[0].roles = [role1.id, role2.id]
|
users[0].roles = [role1.id, role2.id]
|
||||||
users[0].store()
|
users[0].store()
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [{'id': 1, 'text': 'John Doe 0'}]
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'}
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0'
|
assert tmpl.render(context) == 'John Doe 0'
|
||||||
|
|
||||||
|
@ -101,9 +223,25 @@ def test_datasource_users(pub):
|
||||||
datasource.users_included_roles = []
|
datasource.users_included_roles = []
|
||||||
datasource.users_excluded_roles = [role1.id]
|
datasource.users_excluded_roles = [role1.id]
|
||||||
datasource.store()
|
datasource.store()
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [{'id': 1, 'text': 'John Doe 0'}]
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'}
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0'
|
assert tmpl.render(context) == 'John Doe 0'
|
||||||
|
|
||||||
|
@ -118,20 +256,102 @@ def test_datasource_users(pub):
|
||||||
users[1].is_active = False
|
users[1].is_active = False
|
||||||
users[1].store()
|
users[1].store()
|
||||||
assert not datasource.include_disabled_users
|
assert not datasource.include_disabled_users
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [{'id': 1, 'text': 'John Doe 0'}]
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'}
|
{
|
||||||
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
}
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0'
|
assert tmpl.render(context) == 'John Doe 0'
|
||||||
|
|
||||||
datasource.include_disabled_users = True
|
datasource.include_disabled_users = True
|
||||||
datasource.store()
|
datasource.store()
|
||||||
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
assert data_sources.get_structured_items({'type': datasource.slug}) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
assert data_sources.get_structured_items(datasource.extended_data_source) == [
|
||||||
{'id': 1, 'text': 'John Doe 0'},
|
{
|
||||||
{'id': 2, 'text': 'John Doe 1'},
|
'id': 1,
|
||||||
|
'text': 'John Doe 0',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 0',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'id': 2,
|
||||||
|
'text': 'John Doe 1',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'user_display_name': 'John Doe 1',
|
||||||
|
'user_email': None,
|
||||||
|
},
|
||||||
]
|
]
|
||||||
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
assert tmpl.render(context) == 'John Doe 0, John Doe 1'
|
||||||
|
|
||||||
|
|
||||||
|
def test_datasource_users_user_formdef(pub):
|
||||||
|
pub.user_class.wipe()
|
||||||
|
|
||||||
|
formdef = UserFieldsFormDef(pub)
|
||||||
|
formdef.fields = [
|
||||||
|
StringField(id='3', label='test', varname='plop'),
|
||||||
|
]
|
||||||
|
formdef.store()
|
||||||
|
|
||||||
|
user = pub.user_class(name='John Doe')
|
||||||
|
user.form_data = {'3': 'Bar'}
|
||||||
|
user.store()
|
||||||
|
|
||||||
|
NamedDataSource.wipe()
|
||||||
|
datasource = NamedDataSource(name='foo')
|
||||||
|
datasource.data_source = {'type': 'wcs:users'}
|
||||||
|
datasource.store()
|
||||||
|
|
||||||
|
assert data_sources.get_items({'type': datasource.slug}) == [
|
||||||
|
(
|
||||||
|
'3',
|
||||||
|
'John Doe',
|
||||||
|
'3',
|
||||||
|
{
|
||||||
|
'user_display_name': 'John Doe',
|
||||||
|
'user_email': None,
|
||||||
|
'user_f3': 'Bar',
|
||||||
|
'user_field_test': 'Bar',
|
||||||
|
'user_var_plop': 'Bar',
|
||||||
|
'user_admin_access': False,
|
||||||
|
'user_backoffice_access': False,
|
||||||
|
'id': 3,
|
||||||
|
'text': 'John Doe',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
]
|
||||||
|
|
|
@ -423,7 +423,15 @@ def _get_structured_items(data_source, mode=None, raise_on_error=False):
|
||||||
)
|
)
|
||||||
|
|
||||||
include_disabled_users = data_source.get('include_disabled_users')
|
include_disabled_users = data_source.get('include_disabled_users')
|
||||||
return [{'id': u.id, 'text': u.name} for u in users if u.is_active or include_disabled_users]
|
|
||||||
|
def get_dict(user):
|
||||||
|
user_dict = user.get_substitution_variables(prefix='')
|
||||||
|
del user_dict['user']
|
||||||
|
user_dict['id'] = user.id
|
||||||
|
user_dict['text'] = user.name
|
||||||
|
return user_dict
|
||||||
|
|
||||||
|
return [get_dict(u) for u in users if u.is_active or include_disabled_users]
|
||||||
|
|
||||||
if data_source.get('type') == 'jsonvalue':
|
if data_source.get('type') == 'jsonvalue':
|
||||||
try:
|
try:
|
||||||
|
|
Loading…
Reference in New Issue