unquote key name multiple times until stable value

This commit is contained in:
Jesse Vogt 2019-09-24 15:22:25 -05:00
commit 2df0309db5
3 changed files with 66 additions and 5 deletions

View file

@ -68,11 +68,22 @@ def metadata_from_headers(headers):
return metadata
def clean_key_name(key_name):
def clean_key_name(key_name, attempts=4):
if six.PY2:
return unquote(key_name.encode('utf-8')).decode('utf-8')
def uq(k):
return unquote(k.encode('utf-8')).decode('utf-8')
else:
uq = unquote
return unquote(key_name)
original = cleaned = key_name
last_attempt = attempts - 1
for attempt in range(attempts):
cleaned = uq(key_name)
if cleaned == key_name:
return cleaned
if attempt != last_attempt:
key_name = cleaned
raise Exception('unable to fully clean name: original %s, last clean %s prior clean %s' % (original, cleaned, key_name))
class _VersionedKeyStore(dict):