diff options
-rw-r--r-- | pycadf/identifier.py | 12 | ||||
-rw-r--r-- | pycadf/tests/test_cadf_spec.py | 11 |
2 files changed, 18 insertions, 5 deletions
diff --git a/pycadf/identifier.py b/pycadf/identifier.py index cb60627..c032bd2 100644 --- a/pycadf/identifier.py +++ b/pycadf/identifier.py @@ -13,9 +13,11 @@ # the License. import hashlib import uuid +import warnings from debtcollector import removals from oslo_config import cfg +import six CONF = cfg.CONF opts = [ @@ -54,7 +56,9 @@ def is_valid(value): return True try: uuid.UUID(value) - except ValueError: - return False - else: - return True + except (ValueError, TypeError): + if not isinstance(value, six.string_types) or not value: + return False + warnings.warn('Invalid uuid. To ensure interoperability, identifiers' + 'should be a valid uuid.') + return True diff --git a/pycadf/tests/test_cadf_spec.py b/pycadf/tests/test_cadf_spec.py index a5a4dde..6223060 100644 --- a/pycadf/tests/test_cadf_spec.py +++ b/pycadf/tests/test_cadf_spec.py @@ -15,6 +15,8 @@ import time import uuid +import mock + from pycadf import attachment from pycadf import cadftype from pycadf import credential @@ -35,9 +37,16 @@ from pycadf import timestamp class TestCADFSpec(base.TestCase): - def test_identifier_empty(self): + @mock.patch('pycadf.identifier.warnings.warn') + def test_identifier(self, warning_mock): + # empty string self.assertFalse(identifier.is_valid('')) + # generated uuid self.assertTrue(identifier.is_valid(identifier.generate_uuid())) + self.assertFalse(warning_mock.called) + # any string + self.assertTrue(identifier.is_valid('blah')) + self.assertTrue(warning_mock.called) def test_endpoint(self): endp = endpoint.Endpoint(url='http://192.168.0.1', |