Compare commits

..

1 Commits

Author SHA1 Message Date
Agate 1282779c1d user: allow customization of User.get_full_name() through templates (#72945)
gitea-wip/hobo/pipeline/pr-main This commit looks good Details
2023-02-07 10:43:59 +01:00
4 changed files with 19 additions and 31 deletions

View File

@ -4,9 +4,9 @@ import logging
import django.db
import django.template.exceptions
from django.apps import AppConfig
from django.conf import settings
from django.contrib.auth import get_user_model
from . import utils
from django.template import engines
logger = logging.getLogger(__name__)
@ -14,17 +14,18 @@ logger = logging.getLogger(__name__)
def get_full_name(user):
from hobo.agent.common.models import UserExtraAttributes
try:
return utils.get_full_name_from_template(user)
except (
# There may have been an issue during provisionning
UserExtraAttributes.DoesNotExist,
# In case some templates are missing or invalid
django.template.exceptions.TemplateDoesNotExist,
django.template.exceptions.TemplateSyntaxError,
) as e:
logger.exception('hobo.user_name: cannot render user "%s" name', user)
return user.original_get_full_name()
context = {}
context['user'] = user
template_vars = getattr(settings, 'TEMPLATE_VARS', {})
if 'user_full_name_template' in template_vars:
try:
template = engines['django'].from_string(template_vars['user_full_name_template'])
return template.render(context)
except django.template.exceptions.TemplateSyntaxError:
logger.exception('hobo.user_name: syntax error in inline user name template var')
except UserExtraAttributes.DoesNotExist:
logger.exception('hobo.user_name: inline user name template refers to nonexistent attribute')
return user.original_get_full_name()
def cached_extra_attributes(user):

View File

@ -1,13 +0,0 @@
from django.conf import settings
from django.template import engines
from django.template.exceptions import TemplateDoesNotExist
def get_full_name_from_template(user):
context = {}
context['user'] = user
template_vars = getattr(settings, 'TEMPLATE_VARS', {})
if 'user_full_name_template' not in template_vars:
raise TemplateDoesNotExist('user full name inline template var does not exist')
template = engines['django'].from_string(template_vars['user_full_name_template'])
return template.render(context)

View File

@ -3,7 +3,7 @@ from django.contrib.auth.models import User
from django.test import override_settings
from hobo.agent.common.models import UserExtraAttributes
from hobo.user_name.utils import get_full_name_from_template
from hobo.user_name.apps import get_full_name
@pytest.fixture
@ -34,7 +34,7 @@ def test_user_get_full_name_from_template(user):
with override_settings(
TEMPLATE_VARS={'user_full_name_template': '{{ user.first_name }} {{ user.attributes.foo }}'}
):
assert get_full_name_from_template(user) == 'Jane bar'
assert get_full_name(user) == 'Jane bar'
def test_user_get_full_name(user):

View File

@ -3,7 +3,7 @@ from django.contrib.auth import get_user_model
from django.test import override_settings
from tenant_schemas.utils import tenant_context
from hobo.user_name.utils import get_full_name_from_template
from hobo.user_name.apps import get_full_name
User = get_user_model()
@ -40,14 +40,14 @@ def test_get_full_name_from_template_utils_from_multiple_attrs(db, tenant, setti
with override_settings(
TEMPLATE_VARS={'user_full_name_template': '{{ user.first_name }} {{ user.attributes.foo }}'}
):
assert get_full_name_from_template(user) == 'Jane bar'
assert get_full_name(user) == 'Jane bar'
with override_settings(
TEMPLATE_VARS={
'user_full_name_template': '{{ user.first_name }} {{ user.attributes.nicknames.0 }} {{ user.attributes.nicknames.2 }}'
}
):
assert get_full_name_from_template(user) == 'Jane Milly Minnie'
assert get_full_name(user) == 'Jane Milly Minnie'
def test_get_full_name_from_template_accessor_from_multiple_attrs(db, tenant, settings):