diff options
Diffstat (limited to 'django/utils')
| -rw-r--r-- | django/utils/html.py | 1 | ||||
| -rw-r--r-- | django/utils/http.py | 21 | ||||
| -rw-r--r-- | django/utils/text.py | 1 |
3 files changed, 20 insertions, 3 deletions
diff --git a/django/utils/html.py b/django/utils/html.py index 0d28c77a61..4893b6b18a 100644 --- a/django/utils/html.py +++ b/django/utils/html.py @@ -3,7 +3,6 @@ from __future__ import unicode_literals import re -import string try: from urllib.parse import quote, urlsplit, urlunsplit except ImportError: # Python 2 diff --git a/django/utils/http.py b/django/utils/http.py index f4911b4ec0..4647d89847 100644 --- a/django/utils/http.py +++ b/django/utils/http.py @@ -1,5 +1,6 @@ from __future__ import unicode_literals +import base64 import calendar import datetime import re @@ -11,7 +12,7 @@ except ImportError: # Python 2 import urlparse urllib_parse.urlparse = urlparse.urlparse - +from binascii import Error as BinasciiError from email.utils import formatdate from django.utils.datastructures import MultiValueDict @@ -202,6 +203,24 @@ def int_to_base36(i): factor -= 1 return ''.join(base36) +def urlsafe_base64_encode(s): + """ + Encodes a bytestring in base64 for use in URLs, stripping any trailing + equal signs. + """ + return base64.urlsafe_b64encode(s).rstrip(b'\n=') + +def urlsafe_base64_decode(s): + """ + Decodes a base64 encoded string, adding back any trailing equal signs that + might have been stripped. + """ + s = s.encode('utf-8') # base64encode should only return ASCII. + try: + return base64.urlsafe_b64decode(s.ljust(len(s) + len(s) % 4, b'=')) + except (LookupError, BinasciiError) as e: + raise ValueError(e) + def parse_etags(etag_str): """ Parses a string with one or several etags passed in If-None-Match and diff --git a/django/utils/text.py b/django/utils/text.py index 4fe92ab509..7bb8e7eb3e 100644 --- a/django/utils/text.py +++ b/django/utils/text.py @@ -2,7 +2,6 @@ from __future__ import unicode_literals import re import unicodedata -import warnings from gzip import GzipFile from io import BytesIO |
