THRIFT-5923: UUID python
Client: py
Patch: CJCombrink

This closes #3330
diff --git a/test/py/Makefile.am b/test/py/Makefile.am
index 078ba02..c471b92 100644
--- a/test/py/Makefile.am
+++ b/test/py/Makefile.am
@@ -77,56 +77,56 @@
 
 
 gen-py/%/__init__.py: ../%.thrift $(THRIFT)
-	test -f ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py  ../v0.16/$(notdir $<) \
+	test -f ../$(notdir $<) \
+	&& $(THRIFT) --gen py  ../$(notdir $<) \
 	|| $(THRIFT) --gen py  $<
 
 gen-py-default/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-default || $(MKDIR_P) gen-py-default
-	test -f ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py -out gen-py-default ../v0.16/$(notdir $<) \
+	test -f ../$(notdir $<) \
+	&& $(THRIFT) --gen py -out gen-py-default ../$(notdir $<) \
 	|| $(THRIFT) --gen py -out gen-py-default $<
 
 gen-py-slots/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-slots || $(MKDIR_P) gen-py-slots
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:slots -out gen-py-slots ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:slots -out gen-py-slots ../$(notdir $<) \
 	|| $(THRIFT) --gen py:slots -out gen-py-slots $<
 
 gen-py-oldstyle/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-oldstyle || $(MKDIR_P) gen-py-oldstyle
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:old_style -out gen-py-oldstyle ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:old_style -out gen-py-oldstyle ../$(notdir $<) \
 	|| $(THRIFT) --gen py:old_style -out gen-py-oldstyle $<
 
 gen-py-no_utf8strings/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-no_utf8strings || $(MKDIR_P) gen-py-no_utf8strings
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:no_utf8strings -out gen-py-no_utf8strings ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:no_utf8strings -out gen-py-no_utf8strings ../$(notdir $<) \
 	|| $(THRIFT) --gen py:no_utf8strings -out gen-py-no_utf8strings $<
 
 gen-py-dynamic/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-dynamic || $(MKDIR_P) gen-py-dynamic
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:dynamic -out gen-py-dynamic ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:dynamic -out gen-py-dynamic ../$(notdir $<) \
 	|| $(THRIFT) --gen py:dynamic -out gen-py-dynamic $<
 
 gen-py-dynamicslots/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-dynamicslots || $(MKDIR_P) gen-py-dynamicslots
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:dynamic,slots -out gen-py-dynamicslots ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:dynamic,slots -out gen-py-dynamicslots ../$(notdir $<) \
 	|| $(THRIFT) --gen py:dynamic,slots -out gen-py-dynamicslots $<
 
 gen-py-enum/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-enum || $(MKDIR_P) gen-py-enum
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:enum -out gen-py-enum ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:enum -out gen-py-enum ../$(notdir $<) \
 	|| $(THRIFT) --gen py:enum -out gen-py-enum $<
 
 gen-py-type_hints/%/__init__.py: ../%.thrift $(THRIFT)
 	test -d gen-py-type_hints || $(MKDIR_P) gen-py-type_hints
-	test ../v0.16/$(notdir $<) \
-	&& $(THRIFT) --gen py:type_hints,enum -out gen-py-type_hints ../v0.16/$(notdir $<) \
+	test ../$(notdir $<) \
+	&& $(THRIFT) --gen py:type_hints,enum -out gen-py-type_hints ../$(notdir $<) \
 	|| $(THRIFT) --gen py:type_hints,enum -out gen-py-type_hints $<
 
 clean-local:
diff --git a/test/py/TestClient.py b/test/py/TestClient.py
index f608e4e..07b39a0 100755
--- a/test/py/TestClient.py
+++ b/test/py/TestClient.py
@@ -24,6 +24,7 @@
 import sys
 import time
 import unittest
+import uuid
 
 from optparse import OptionParser
 from util import local_libpath
@@ -160,6 +161,13 @@
         val = bytearray([i for i in range(0, 256)])
         self.assertEqual(bytearray(self.client.testBinary(bytes(val))), val)
 
+    def testUuid(self):
+        print('testUuid')
+        val1 = uuid.UUID('00112233-4455-6677-8899-aabbccddeeff')
+        val2 = uuid.uuid4()
+        self.assertEqual(self.client.testUuid(val1), val1)
+        self.assertEqual(self.client.testUuid(val2), val2)
+
     def testStruct(self):
         print('testStruct')
         x = Xtruct()
diff --git a/test/py/TestServer.py b/test/py/TestServer.py
index 0108c98..59a06ad 100755
--- a/test/py/TestServer.py
+++ b/test/py/TestServer.py
@@ -82,6 +82,11 @@
             logging.info('testBinary()')  # TODO: hex output
         return thing
 
+    def testUuid(self, thing):
+        if self.options.verbose > 1:
+            logging.info('testUuid(%s)' % thing)
+        return thing
+
     def testStruct(self, thing):
         if self.options.verbose > 1:
             logging.info('testStruct({%s, %s, %s, %s})' % (thing.string_thing, thing.byte_thing, thing.i32_thing, thing.i64_thing))
diff --git a/test/py/TestTypes.py b/test/py/TestTypes.py
index bb1bc35..0df87aa 100644
--- a/test/py/TestTypes.py
+++ b/test/py/TestTypes.py
@@ -20,6 +20,7 @@
 from ThriftTest import ThriftTest
 from ThriftTest.ThriftTest import Client
 from ThriftTest.ttypes import Xtruct
+from uuid import UUID
 
 import unittest
 
@@ -66,3 +67,6 @@
 
     def test_set(self):
         self.assertEqual(Client.testSet.__annotations__, {'return': set[int], 'thing': set[int]})
+
+    def test_uuid(self):
+        self.assertEqual(Client.testUuid.__annotations__, {'return': UUID, 'thing': UUID})
diff --git a/test/py/generate.cmake b/test/py/generate.cmake
index 7139802..b5170f0 100644
--- a/test/py/generate.cmake
+++ b/test/py/generate.cmake
@@ -7,23 +7,23 @@
   endif()
 endmacro(GENERATE)
 
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py gen-py-default)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:slots gen-py-slots)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:old_style gen-py-oldstyle)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:no_utf8strings gen-py-no_utf8strings)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:dynamic gen-py-dynamic)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:dynamic,slots gen-py-dynamicslots)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:enum gen-py-enum)
-generate(${MY_PROJECT_DIR}/test/v0.16/ThriftTest.thrift py:type_hints,enum gen-py-type_hints)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py gen-py-default)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:slots gen-py-slots)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:old_style gen-py-oldstyle)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:no_utf8strings gen-py-no_utf8strings)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:dynamic gen-py-dynamic)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:dynamic,slots gen-py-dynamicslots)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:enum gen-py-enum)
+generate(${MY_PROJECT_DIR}/test/ThriftTest.thrift py:type_hints,enum gen-py-type_hints)
 
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py gen-py-default)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:slots gen-py-slots)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:old_style gen-py-oldstyle)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:no_utf8strings gen-py-no_utf8strings)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:dynamic gen-py-dynamic)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:dynamic,slots gen-py-dynamicslots)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:enum gen-py-enum)
-generate(${MY_PROJECT_DIR}/test/v0.16/DebugProtoTest.thrift py:type_hints,enum gen-py-type_hints)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py gen-py-default)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:slots gen-py-slots)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:old_style gen-py-oldstyle)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:no_utf8strings gen-py-no_utf8strings)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:dynamic gen-py-dynamic)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:dynamic,slots gen-py-dynamicslots)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:enum gen-py-enum)
+generate(${MY_PROJECT_DIR}/test/DebugProtoTest.thrift py:type_hints,enum gen-py-type_hints)
 
 generate(${MY_PROJECT_DIR}/test/DoubleConstantsTest.thrift py gen-py-default)
 generate(${MY_PROJECT_DIR}/test/DoubleConstantsTest.thrift py:slots gen-py-slots)