users: look for attributes in extra fields (#22389)
This commit is contained in:
parent
b8fa1798fd
commit
653a2b8efc
|
@ -5,9 +5,12 @@ import shutil
|
|||
import sys
|
||||
import time
|
||||
|
||||
import pytest
|
||||
|
||||
from quixote import cleanup
|
||||
|
||||
from wcs import publisher
|
||||
from wcs import fields
|
||||
|
||||
from utilities import create_temporary_pub
|
||||
|
||||
|
@ -54,3 +57,23 @@ def test_get_users_with_role():
|
|||
|
||||
assert len(pub.user_class.get_users_with_role(1)) == 1
|
||||
assert pub.user_class.get_users_with_role(1)[0].name == 'Pierre'
|
||||
|
||||
def test_user_formdef_getattr():
|
||||
from wcs.admin.settings import UserFieldsFormDef
|
||||
formdef = UserFieldsFormDef(pub)
|
||||
formdef.fields = [
|
||||
fields.StringField(id='3', label='test', type='string', varname='plop'),
|
||||
fields.StringField(id='9', label='noop', type='string', varname='get_formdef'),
|
||||
]
|
||||
formdef.store()
|
||||
|
||||
user = pub.user_class()
|
||||
assert user.plop is None
|
||||
assert user.get_formdef() # get_formdef is not overrided by varname "get_formdef"
|
||||
|
||||
user.form_data = {'3': 'Bar', '9': 'Foo'}
|
||||
assert user.plop == 'Bar'
|
||||
assert user.get_formdef != 'Foo'
|
||||
|
||||
with pytest.raises(AttributeError):
|
||||
user.xxx
|
||||
|
|
11
wcs/users.py
11
wcs/users.py
|
@ -179,9 +179,20 @@ class User(StorableObject):
|
|||
def __getattr__(self, attr):
|
||||
if attr in self.__dict__:
|
||||
return self.__dict__[attr]
|
||||
|
||||
formdef = self.get_formdef()
|
||||
if formdef:
|
||||
# lookup based on field varname
|
||||
field = [x for x in formdef.fields if x.varname == attr]
|
||||
if field:
|
||||
if 'form_data' not in self.__dict__:
|
||||
return None
|
||||
return self.__dict__['form_data'].get(field[0].id)
|
||||
|
||||
if attr[0] == 'f' and (self.__dict__['form_data'] and attr[0] == 'f' and
|
||||
self.__dict__['form_data']):
|
||||
return self.__dict__['form_data'].get(attr[1:])
|
||||
|
||||
raise AttributeError()
|
||||
|
||||
def get_json_export_dict(self):
|
||||
|
|
Loading…
Reference in New Issue