summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMariusz Felisiak <felisiak.mariusz@gmail.com>2021-01-13 22:33:42 +0100
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2021-01-14 17:50:04 +0100
commitbe6e46813010f47e3dec22dd8c360df2dcf53369 (patch)
tree91fbbe318edd44dbcf7fc241d827b8ab0477ac26
parentd992f4e3c29a81c956d3d616f0bc19701431b26e (diff)
downloaddjango-be6e46813010f47e3dec22dd8c360df2dcf53369.tar.gz
Refs #31359 -- Made get_random_string()'s length argument required.
Per deprecation timeline.
-rw-r--r--django/utils/crypto.py13
-rw-r--r--docs/releases/4.0.txt3
-rw-r--r--tests/utils_tests/test_crypto.py17
3 files changed, 6 insertions, 27 deletions
diff --git a/django/utils/crypto.py b/django/utils/crypto.py
index 4fb3a9da9d..9d76f950b2 100644
--- a/django/utils/crypto.py
+++ b/django/utils/crypto.py
@@ -4,10 +4,8 @@ Django's standard crypto functions and utilities.
import hashlib
import hmac
import secrets
-import warnings
from django.conf import settings
-from django.utils.deprecation import RemovedInDjango40Warning
from django.utils.encoding import force_bytes
@@ -46,13 +44,10 @@ def salted_hmac(key_salt, value, secret=None, *, algorithm='sha1'):
return hmac.new(key, msg=force_bytes(value), digestmod=hasher)
-NOT_PROVIDED = object() # RemovedInDjango40Warning.
RANDOM_STRING_CHARS = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
-# RemovedInDjango40Warning: when the deprecation ends, replace with:
-# def get_random_string(length, allowed_chars=RANDOM_STRING_CHARS):
-def get_random_string(length=NOT_PROVIDED, allowed_chars=RANDOM_STRING_CHARS):
+def get_random_string(length, allowed_chars=RANDOM_STRING_CHARS):
"""
Return a securely generated random string.
@@ -63,12 +58,6 @@ def get_random_string(length=NOT_PROVIDED, allowed_chars=RANDOM_STRING_CHARS):
* length: 12, bit length =~ 71 bits
* length: 22, bit length =~ 131 bits
"""
- if length is NOT_PROVIDED:
- warnings.warn(
- 'Not providing a length argument is deprecated.',
- RemovedInDjango40Warning,
- )
- length = 12
return ''.join(secrets.choice(allowed_chars) for i in range(length))
diff --git a/docs/releases/4.0.txt b/docs/releases/4.0.txt
index 4e89cf2230..e15023ed66 100644
--- a/docs/releases/4.0.txt
+++ b/docs/releases/4.0.txt
@@ -302,6 +302,9 @@ to remove usage of these features.
* The ``providing_args`` argument for ``django.dispatch.Signal`` is removed.
+* The ``length`` argument for ``django.utils.crypto.get_random_string()`` is
+ required.
+
* The ``list`` message for ``ModelMultipleChoiceField`` is removed.
* Support for passing raw column aliases to ``QuerySet.order_by()`` is removed.
diff --git a/tests/utils_tests/test_crypto.py b/tests/utils_tests/test_crypto.py
index 4469d6e985..9dbfd9fe57 100644
--- a/tests/utils_tests/test_crypto.py
+++ b/tests/utils_tests/test_crypto.py
@@ -1,12 +1,10 @@
import hashlib
import unittest
-from django.test import SimpleTestCase, ignore_warnings
+from django.test import SimpleTestCase
from django.utils.crypto import (
- InvalidAlgorithm, constant_time_compare, get_random_string, pbkdf2,
- salted_hmac,
+ InvalidAlgorithm, constant_time_compare, pbkdf2, salted_hmac,
)
-from django.utils.deprecation import RemovedInDjango40Warning
class TestUtilsCryptoMisc(SimpleTestCase):
@@ -185,14 +183,3 @@ class TestUtilsCryptoPBKDF2(unittest.TestCase):
def test_default_hmac_alg(self):
kwargs = {'password': b'password', 'salt': b'salt', 'iterations': 1, 'dklen': 20}
self.assertEqual(pbkdf2(**kwargs), hashlib.pbkdf2_hmac(hash_name=hashlib.sha256().name, **kwargs))
-
-
-class DeprecationTests(SimpleTestCase):
- @ignore_warnings(category=RemovedInDjango40Warning)
- def test_get_random_string(self):
- self.assertEqual(len(get_random_string()), 12)
-
- def test_get_random_string_warning(self):
- msg = 'Not providing a length argument is deprecated.'
- with self.assertRaisesMessage(RemovedInDjango40Warning, msg):
- get_random_string()