Merge "Restore quotes removal for swift config in Python3"

This commit is contained in:
Zuul 2020-03-05 17:09:51 +00:00 committed by Gerrit Code Review
commit 4f5b1f403b
3 changed files with 65 additions and 2 deletions

View File

@ -105,9 +105,33 @@ _config_defaults = {'user_domain_id': 'default',
'project_domain_name': 'default'}
if sys.version_info >= (3, 2):
CONFIG = configparser.ConfigParser(defaults=_config_defaults)
parser_class = configparser.ConfigParser
else:
CONFIG = configparser.SafeConfigParser(defaults=_config_defaults)
parser_class = configparser.SafeConfigParser
class SwiftConfigParser(parser_class):
def get(self, *args, **kwargs):
value = super(parser_class, self).get(*args, **kwargs)
return self._process_quotes(value)
@staticmethod
def _process_quotes(value):
if value:
if value[0] in "\"'":
if len(value) == 1 or value[-1] != value[0]:
raise ValueError('Non-closed quote: %s' %
value)
value = value[1:-1]
return value
if sys.version_info >= (3,):
CONFIG = SwiftConfigParser(defaults=_config_defaults)
else:
CONFIG = parser_class(defaults=_config_defaults)
LOG = logging.getLogger(__name__)

View File

@ -11,6 +11,11 @@ project_domain_id = default
auth_version = 3
auth_address = http://example.com
[ref3]
user = "user3"
key = "key3"
auth_address = "http://example.com"
[store_2]
user = tenant:user1
key = key1

View File

@ -85,3 +85,37 @@ class TestSwiftParams(base.StoreBaseTest):
self.assertEqual('http://example.com',
swift_params['ref2']['auth_address']
)
def test_swift_store_config_validates_quotes_removal(self):
swift_params = sutils.SwiftParams(self.conf).params
self.assertEqual('user3',
swift_params['ref3']['user']
)
self.assertEqual('key3',
swift_params['ref3']['key']
)
self.assertEqual('http://example.com',
swift_params['ref3']['auth_address']
)
class TestSwiftConfigParser(base.StoreBaseTest):
def setUp(self):
super(TestSwiftConfigParser, self).setUp()
self.method = sutils.SwiftConfigParser._process_quotes
def test_quotes_processor(self):
self.assertEqual('user', self.method('user'))
self.assertEqual('user', self.method('"user"'))
self.assertEqual("user", self.method("'user'"))
self.assertEqual("user'", self.method("user'"))
self.assertEqual('user"', self.method('user"'))
def test_quotes_processor_negative(self):
negative_values = [
'\'user"', '"user\'', '\'user', '"user\'',
"'user", '"user', '"', "'",
]
for value in negative_values:
self.assertRaises(ValueError, self.method, value)