Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_encoding(self):
su = ShortUUID()
u = UUID("{3b1f8b40-222c-4a6e-b77e-779d5a94e21c}")
self.assertEqual(su.encode(u), "CXc85b4rqinB7s5J52TRYb")
def test_consistency(self):
su = ShortUUID()
num_iterations = 1000
uid_lengths = defaultdict(int)
for count in range(num_iterations):
random_uid = uuid4()
encoded_random = su.encode(random_uid)
uid_lengths[len(encoded_random)] += 1
decoded_random = su.decode(encoded_random)
self.assertEqual(random_uid, decoded_random)
self.assertEqual(len(uid_lengths), 1)
uid_length = next(iter(uid_lengths.keys())) # Get the 1 value
self.assertEqual(uid_lengths[uid_length], num_iterations)
self.assertRaises(ValueError, lambda x: ShortUUID(x), "0")
def test_encoded_length(self):
su1 = ShortUUID()
self.assertEqual(su1.encoded_length(), 22)
base64_alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/"
su2 = ShortUUID(base64_alphabet)
self.assertEqual(su2.encoded_length(), 22)
binary_alphabet = "01"
su3 = ShortUUID(binary_alphabet)
self.assertEqual(su3.encoded_length(), 128)
su4 = ShortUUID()
self.assertEqual(su4.encoded_length(num_bytes=8), 11)
def test_decoding(self):
su = ShortUUID()
u = UUID("{3b1f8b40-222c-4a6e-b77e-779d5a94e21c}")
self.assertEqual(su.decode("CXc85b4rqinB7s5J52TRYb"), u)
def test_alphabet(self):
alphabet = "01"
su1 = ShortUUID(alphabet)
su2 = ShortUUID()
self.assertEqual(alphabet, su1.get_alphabet())
su1.set_alphabet("01010101010101")
self.assertEqual(alphabet, su1.get_alphabet())
self.assertEqual(set(su1.uuid()), set("01"))
self.assertTrue(116 < len(su1.uuid()) < 140)
self.assertTrue(20 < len(su2.uuid()) < 24)
u = uuid4()
self.assertEqual(u, su1.decode(su1.encode(u)))
u = su1.uuid()
self.assertEqual(u, su1.encode(su1.decode(u)))
def test_random(self):
su = ShortUUID()
for i in range(1000):
self.assertEqual(len(su.random()), 22)
for i in range(1, 100):
self.assertEqual(len(su.random(i)), i)
def test_encoded_length(self):
su1 = ShortUUID()
self.assertEqual(su1.encoded_length(), 22)
base64_alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/"
su2 = ShortUUID(base64_alphabet)
self.assertEqual(su2.encoded_length(), 22)
binary_alphabet = "01"
su3 = ShortUUID(binary_alphabet)
self.assertEqual(su3.encoded_length(), 128)
su4 = ShortUUID()
self.assertEqual(su4.encoded_length(num_bytes=8), 11)
def test_encoded_length(self):
su1 = ShortUUID()
self.assertEqual(su1.encoded_length(), 22)
base64_alphabet = string.ascii_uppercase + string.ascii_lowercase + string.digits + "+/"
su2 = ShortUUID(base64_alphabet)
self.assertEqual(su2.encoded_length(), 22)
binary_alphabet = "01"
su3 = ShortUUID(binary_alphabet)
self.assertEqual(su3.encoded_length(), 128)
su4 = ShortUUID()
self.assertEqual(su4.encoded_length(num_bytes=8), 11)
if len(new_alphabet) > 1:
self._alphabet = new_alphabet
self._alpha_len = len(self._alphabet)
else:
raise ValueError("Alphabet with more than " "one unique symbols required.")
def encoded_length(self, num_bytes=16):
"""
Returns the string length of the shortened UUID.
"""
factor = math.log(256) / math.log(self._alpha_len)
return int(math.ceil(factor * num_bytes))
# For backwards compatibility
_global_instance = ShortUUID()
encode = _global_instance.encode
decode = _global_instance.decode
uuid = _global_instance.uuid
random = _global_instance.random
get_alphabet = _global_instance.get_alphabet
set_alphabet = _global_instance.set_alphabet