diff options
| author | Sergey Fedoseev <fedoseev.sergey@gmail.com> | 2018-10-03 00:42:56 +0500 |
|---|---|---|
| committer | Tim Graham <timograham@gmail.com> | 2018-10-02 15:42:56 -0400 |
| commit | e4df8e6dc021fa472fa77f9b835db74810184748 (patch) | |
| tree | 20e9957d67db34f4c1c54b92c4932f783eb31c25 | |
| parent | bf8b625a3bb6c2cb5f1be3713f3bafe2c1050366 (diff) | |
Simplified contrib.admin.utils.unquote().
| -rw-r--r-- | django/contrib/admin/utils.py | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/django/contrib/admin/utils.py b/django/contrib/admin/utils.py index 1590b6f65d..dd6b108ff3 100644 --- a/django/contrib/admin/utils.py +++ b/django/contrib/admin/utils.py @@ -1,5 +1,6 @@ import datetime import decimal +import re from collections import defaultdict from django.core.exceptions import FieldDoesNotExist @@ -14,6 +15,8 @@ from django.utils.text import capfirst from django.utils.translation import ngettext, override as translation_override QUOTE_MAP = {i: '_%02X' % i for i in b'":/_#?;@&=+$,"[]<>%\n\\'} +UNQUOTE_MAP = {v: chr(k) for k, v in QUOTE_MAP.items()} +UNQUOTE_RE = re.compile('_(?:%s)' % '|'.join([x[1:] for x in UNQUOTE_MAP])) class FieldIsAForeignKeyColumnName(Exception): @@ -70,22 +73,8 @@ def quote(s): def unquote(s): - """Undo the effects of quote(). Based heavily on urllib.parse.unquote().""" - mychr = chr - myatoi = int - list = s.split('_') - res = [list[0]] - myappend = res.append - del list[0] - for item in list: - if item[1:2]: - try: - myappend(mychr(myatoi(item[:2], 16)) + item[2:]) - except ValueError: - myappend('_' + item) - else: - myappend('_' + item) - return "".join(res) + """Undo the effects of quote().""" + return UNQUOTE_RE.sub(lambda m: UNQUOTE_MAP[m.group(0)], s) def flatten(fields): |
