From 3f8819d3f675ef53557bb37cb309852571ea4578 Mon Sep 17 00:00:00 2001 From: Isaak Uchakaev Date: Sun, 16 Aug 2020 13:44:30 +0300 Subject: [PATCH] Fix #918 (#922) * Fix code duplication in docs * Add version testing for Cryptographic.uuid * Fix #918 * Change version in __init__.py --- CHANGELOG.rst | 3 ++- mimesis/__init__.py | 2 +- mimesis/providers/cryptographic.py | 21 ++++++++++++++----- tests/test_providers/test_cryptographic.py | 24 ++++++++++++++++++++-- 4 files changed, 41 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.rst b/CHANGELOG.rst index ea1b331ec..629d903c3 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -1,4 +1,4 @@ -Version 5.0.0 +Version 4.1.0 ------------- .. warning:: Work still in progress. @@ -8,6 +8,7 @@ Version 5.0.0 - Added method ``manufacturer()`` for class ``Transport()`` - Added ``sk`` (Slovak) locale support - Added new parameter ``unique`` for method ``Person().email()`` +- Added new parameter ``as_object`` for method ``Cryptographic().uuid()`` **Updated**: diff --git a/mimesis/__init__.py b/mimesis/__init__.py index ec329360c..aff0d10c1 100755 --- a/mimesis/__init__.py +++ b/mimesis/__init__.py @@ -72,7 +72,7 @@ '__license__', ] -__version__ = '4.0.0' +__version__ = '4.1.0' __title__ = 'mimesis' __description__ = 'Mimesis: fake data generator.' __url__ = 'https://github.com/lk-geimfari/mimesis' diff --git a/mimesis/providers/cryptographic.py b/mimesis/providers/cryptographic.py index b1c64e04a..3d0914f00 100755 --- a/mimesis/providers/cryptographic.py +++ b/mimesis/providers/cryptographic.py @@ -4,8 +4,8 @@ import hashlib import secrets -import uuid -from typing import Optional +from typing import Optional, Union +from uuid import UUID from mimesis.enums import Algorithm from mimesis.providers.base import BaseProvider @@ -30,14 +30,25 @@ class Meta: name = 'cryptographic' - def uuid(self, version: int = None) -> str: + def uuid(self, version: int = None, + as_object: bool = False) -> Union[UUID, str]: """Generate random UUID. + This method returns string by default, + but yoy can make it return uuid.UUID object using + parameter **as_object** + + :param as_object: Returns uuid.UUID object instead of string. :param version: UUID version. - :return: UUID + :return: UUID. """ bits = self.random.getrandbits(128) - return str(uuid.UUID(int=bits, version=version)) + uuid_obj = UUID(int=bits, version=version) + + if not as_object: + return str(uuid_obj) + + return uuid_obj def hash(self, algorithm: Algorithm = None) -> str: # noqa: A003 """Generate random hash. diff --git a/tests/test_providers/test_cryptographic.py b/tests/test_providers/test_cryptographic.py index f23dcae87..17732a28e 100755 --- a/tests/test_providers/test_cryptographic.py +++ b/tests/test_providers/test_cryptographic.py @@ -1,4 +1,5 @@ import re +import uuid import pytest @@ -18,8 +19,27 @@ def crypto(self): def test_str(self, crypto): assert re.match(patterns.PROVIDER_STR_REGEX, str(crypto)) - def test_uuid(self, crypto): - assert re.match(patterns.UUID_REGEX, crypto.uuid()) + @pytest.mark.parametrize( + 'version, as_object', [ + (0, False), + (1, True), + (2, False), + (3, True), + (4, True), + (5, False), + (6, False), + ], + ) + def test_uuid(self, crypto, version, as_object): + if 1 <= version <= 5: + uuid_result = crypto.uuid(version, as_object=as_object) + if as_object: + assert isinstance(uuid_result, uuid.UUID) + else: + assert re.match(patterns.UUID_REGEX, crypto.uuid(version)) + else: + with pytest.raises(ValueError): + re.match(patterns.UUID_REGEX, crypto.uuid(version)) @pytest.mark.parametrize( 'algorithm, length', [