mirror of
https://github.com/ansible/awx.git
synced 2026-02-28 16:28:43 -03:30
Merge pull request #5330 from ryanpetrello/fix-5322
work around a DRF issue that causes CharField to cast `None` to `"None"`
This commit is contained in:
@@ -19,6 +19,18 @@ logger = logging.getLogger('awx.conf.fields')
|
|||||||
# appropriate Python type to be used in settings.
|
# appropriate Python type to be used in settings.
|
||||||
|
|
||||||
|
|
||||||
|
class CharField(CharField):
|
||||||
|
|
||||||
|
def to_representation(self, value):
|
||||||
|
# django_rest_frameworks' default CharField implementation casts `None`
|
||||||
|
# to a string `"None"`:
|
||||||
|
#
|
||||||
|
# https://github.com/tomchristie/django-rest-framework/blob/cbad236f6d817d992873cd4df6527d46ab243ed1/rest_framework/fields.py#L761
|
||||||
|
if value is None:
|
||||||
|
return None
|
||||||
|
return super(CharField, self).to_representation(value)
|
||||||
|
|
||||||
|
|
||||||
class StringListField(ListField):
|
class StringListField(ListField):
|
||||||
|
|
||||||
child = CharField()
|
child = CharField()
|
||||||
|
|||||||
@@ -9,10 +9,9 @@ from django.conf import LazySettings
|
|||||||
from django.core.cache.backends.locmem import LocMemCache
|
from django.core.cache.backends.locmem import LocMemCache
|
||||||
from django.core.exceptions import ImproperlyConfigured
|
from django.core.exceptions import ImproperlyConfigured
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from rest_framework import fields
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from awx.conf import models
|
from awx.conf import models, fields
|
||||||
from awx.conf.settings import SettingsWrapper, EncryptedCacheProxy, SETTING_CACHE_NOTSET
|
from awx.conf.settings import SettingsWrapper, EncryptedCacheProxy, SETTING_CACHE_NOTSET
|
||||||
from awx.conf.registry import SettingsRegistry
|
from awx.conf.registry import SettingsRegistry
|
||||||
|
|
||||||
@@ -330,6 +329,31 @@ def test_read_only_setting_deletion(settings):
|
|||||||
assert settings.AWX_SOME_SETTING == 'DEFAULT'
|
assert settings.AWX_SOME_SETTING == 'DEFAULT'
|
||||||
|
|
||||||
|
|
||||||
|
def test_charfield_properly_sets_none(settings, mocker):
|
||||||
|
"see: https://github.com/ansible/ansible-tower/issues/5322"
|
||||||
|
settings.registry.register(
|
||||||
|
'AWX_SOME_SETTING',
|
||||||
|
field_class=fields.CharField,
|
||||||
|
category=_('System'),
|
||||||
|
category_slug='system',
|
||||||
|
allow_null=True
|
||||||
|
)
|
||||||
|
|
||||||
|
setting_list = mocker.Mock(**{'order_by.return_value.first.return_value': None})
|
||||||
|
with apply_patches([
|
||||||
|
mocker.patch('awx.conf.models.Setting.objects.filter',
|
||||||
|
return_value=setting_list),
|
||||||
|
mocker.patch('awx.conf.models.Setting.objects.create', mocker.Mock())
|
||||||
|
]):
|
||||||
|
settings.AWX_SOME_SETTING = None
|
||||||
|
|
||||||
|
models.Setting.objects.create.assert_called_with(
|
||||||
|
key='AWX_SOME_SETTING',
|
||||||
|
user=None,
|
||||||
|
value=None
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_settings_use_an_encrypted_cache(settings):
|
def test_settings_use_an_encrypted_cache(settings):
|
||||||
settings.registry.register(
|
settings.registry.register(
|
||||||
'AWX_ENCRYPTED',
|
'AWX_ENCRYPTED',
|
||||||
|
|||||||
Reference in New Issue
Block a user