From b1d0b5d886afef8c08330bf3c2291e180aa1f534 Mon Sep 17 00:00:00 2001 From: Seyeong Kim Date: Thu, 29 Mar 2018 10:03:51 -0700 Subject: [PATCH] Fixing UUID coerce function for unicode non uuid form If we use non uuid unicode user id in py27 env, unicode error pop up when function is called. Closes-bug: #1760918 Change-Id: Ic6b6308fb1960ec40407e6efde30137b64543e72 --- oslo_versionedobjects/fields.py | 8 +++++--- oslo_versionedobjects/tests/test_fields.py | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/oslo_versionedobjects/fields.py b/oslo_versionedobjects/fields.py index 0ee27f9d..a430f1e5 100644 --- a/oslo_versionedobjects/fields.py +++ b/oslo_versionedobjects/fields.py @@ -352,7 +352,7 @@ class UUID(StringPattern): # like 'error' for this warning. warnings.filterwarnings(action="once", append=True) try: - uuid.UUID(str(value)) + uuid.UUID(u"%s" % value) except Exception: # This is to ensure no breaking behaviour for current # users @@ -363,9 +363,11 @@ class UUID(StringPattern): "code to input valid UUIDs or accept " "ValueErrors for invalid UUIDs. See " "https://docs.openstack.org/oslo.versionedobjects/latest/reference/fields.html#oslo_versionedobjects.fields.UUIDField " # noqa - "for further details" % value, FutureWarning) + "for further details" % + repr(value).encode('utf8'), + FutureWarning) - return str(value) + return u"%s" % value class MACAddress(StringPattern): diff --git a/oslo_versionedobjects/tests/test_fields.py b/oslo_versionedobjects/tests/test_fields.py index 77c7dd48..1953788d 100644 --- a/oslo_versionedobjects/tests/test_fields.py +++ b/oslo_versionedobjects/tests/test_fields.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- # Copyright 2013 Red Hat, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); you may @@ -285,6 +286,9 @@ class TestUUID(TestField): ('da66a411-af0e-4829-9b67-475017ddz152', 'da66a411-af0e-4829-9b67-475017ddz152'), ('fake_uuid', 'fake_uuid'), + (u'fake_uāid', u'fake_uāid'), + (b'fake_u\xe1id'.decode('latin_1'), + b'fake_u\xe1id'.decode('latin_1')), ('1', '1'), (1, '1') ]