summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Fedoseev <fedoseev.sergey@gmail.com>2018-10-03 00:42:56 +0500
committerTim Graham <timograham@gmail.com>2018-10-02 15:42:56 -0400
commite4df8e6dc021fa472fa77f9b835db74810184748 (patch)
tree20e9957d67db34f4c1c54b92c4932f783eb31c25
parentbf8b625a3bb6c2cb5f1be3713f3bafe2c1050366 (diff)
Simplified contrib.admin.utils.unquote().
-rw-r--r--django/contrib/admin/utils.py21
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):