You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@thrift.apache.org by dc...@apache.org on 2019/12/10 22:13:41 UTC

[thrift] branch master updated (b40f5c2 -> 3d9f50d)

This is an automated email from the ASF dual-hosted git repository.

dcelasun pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git.


    from b40f5c2  THRIFT-4002: Make generated exception classes immutable by default
     new 1234ddf  Revert "THRIFT-4002: Make generated exception classes immutable by default"
     new 3d9f50d  Revert "Remove unnecessary TException.message hack"

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 compiler/cpp/src/thrift/generate/t_py_generator.cc | 27 +++-------------------
 lib/py/src/Thrift.py                               |  9 ++++++++
 lib/py/src/protocol/TBase.py                       |  4 ----
 lib/py/src/protocol/TProtocol.py                   | 10 ++------
 test/DebugProtoTest.thrift                         |  4 ----
 test/py/TestFrozen.py                              | 17 --------------
 6 files changed, 14 insertions(+), 57 deletions(-)


[thrift] 01/02: Revert "THRIFT-4002: Make generated exception classes immutable by default"

Posted by dc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dcelasun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git

commit 1234ddf8a5c98d5d700c82e087f04725170ad581
Author: D. Can Celasun <ca...@dcc.im>
AuthorDate: Tue Dec 10 22:13:06 2019 +0000

    Revert "THRIFT-4002: Make generated exception classes immutable by default"
    
    This reverts commit b40f5c227f8db61be523f23ca017519167589d97.
---
 compiler/cpp/src/thrift/generate/t_py_generator.cc | 27 +++-------------------
 lib/py/src/protocol/TBase.py                       |  4 ----
 lib/py/src/protocol/TProtocol.py                   | 10 ++------
 test/DebugProtoTest.thrift                         |  4 ----
 test/py/TestFrozen.py                              | 17 --------------
 5 files changed, 5 insertions(+), 57 deletions(-)

diff --git a/compiler/cpp/src/thrift/generate/t_py_generator.cc b/compiler/cpp/src/thrift/generate/t_py_generator.cc
index e93bbe1..982bca1 100644
--- a/compiler/cpp/src/thrift/generate/t_py_generator.cc
+++ b/compiler/cpp/src/thrift/generate/t_py_generator.cc
@@ -65,7 +65,6 @@ public:
     coding_ = "";
     gen_dynbaseclass_ = "";
     gen_dynbaseclass_exc_ = "";
-    gen_dynbaseclass_frozen_exc_ = "";
     gen_dynbaseclass_frozen_ = "";
     import_dynbase_ = "";
     package_prefix_ = "";
@@ -95,11 +94,8 @@ public:
         if( gen_dynbaseclass_exc_.empty()) {
           gen_dynbaseclass_exc_ = "TExceptionBase";
         }
-        if( gen_dynbaseclass_frozen_exc_.empty()) {
-          gen_dynbaseclass_frozen_exc_ = "TFrozenExceptionBase";
-        }
         if( import_dynbase_.empty()) {
-          import_dynbase_ = "from thrift.protocol.TBase import TBase, TFrozenBase, TExceptionBase, TFrozenExceptionBase, TTransport\n";
+          import_dynbase_ = "from thrift.protocol.TBase import TBase, TFrozenBase, TExceptionBase, TTransport\n";
         }
       } else if( iter->first.compare("dynbase") == 0) {
         gen_dynbase_ = true;
@@ -108,8 +104,6 @@ public:
         gen_dynbaseclass_frozen_ = (iter->second);
       } else if( iter->first.compare("dynexc") == 0) {
         gen_dynbaseclass_exc_ = (iter->second);
-      } else if( iter->first.compare("dynfrozenexc") == 0) {
-        gen_dynbaseclass_frozen_exc_ = (iter->second);
       } else if( iter->first.compare("dynimport") == 0) {
         gen_dynbase_ = true;
         import_dynbase_ = (iter->second);
@@ -275,16 +269,7 @@ public:
   }
 
   static bool is_immutable(t_type* ttype) {
-    std::map<std::string, std::string>::iterator it = ttype->annotations_.find("python.immutable");
-
-    if (it == ttype->annotations_.end()) {
-      // Exceptions are immutable by default.
-      return ttype->is_xception();
-    } else if (it->second == "false") {
-      return false;
-    } else {
-      return true;
-    }
+    return ttype->annotations_.find("python.immutable") != ttype->annotations_.end();
   }
 
 private:
@@ -303,7 +288,6 @@ private:
   std::string gen_dynbaseclass_;
   std::string gen_dynbaseclass_frozen_;
   std::string gen_dynbaseclass_exc_;
-  std::string gen_dynbaseclass_frozen_exc_;
 
   std::string import_dynbase_;
 
@@ -758,11 +742,7 @@ void t_py_generator::generate_py_struct_definition(ostream& out,
   out << endl << endl << "class " << tstruct->get_name();
   if (is_exception) {
     if (gen_dynamic_) {
-      if (is_immutable(tstruct)) {
-        out << "(" << gen_dynbaseclass_frozen_exc_ << ")";
-      } else {
-        out << "(" << gen_dynbaseclass_exc_ << ")";
-      }
+      out << "(" << gen_dynbaseclass_exc_ << ")";
     } else {
       out << "(TException)";
     }
@@ -2794,7 +2774,6 @@ THRIFT_REGISTER_GENERATOR(
     "    dynbase=CLS      Derive generated classes from class CLS instead of TBase.\n"
     "    dynfrozen=CLS    Derive generated immutable classes from class CLS instead of TFrozenBase.\n"
     "    dynexc=CLS       Derive generated exceptions from CLS instead of TExceptionBase.\n"
-    "    dynfrozenexc=CLS Derive generated immutable exceptions from CLS instead of TFrozenExceptionBase.\n"
     "    dynimport='from foo.bar import CLS'\n"
     "                     Add an import line to generated code to find the dynbase class.\n"
     "    package_prefix='top.package.'\n"
diff --git a/lib/py/src/protocol/TBase.py b/lib/py/src/protocol/TBase.py
index 6c6ef18..9ae1b11 100644
--- a/lib/py/src/protocol/TBase.py
+++ b/lib/py/src/protocol/TBase.py
@@ -80,7 +80,3 @@ class TFrozenBase(TBase):
                                       [self.__class__, self.thrift_spec])
         else:
             return iprot.readStruct(cls, cls.thrift_spec, True)
-
-
-class TFrozenExceptionBase(TFrozenBase, TExceptionBase):
-    pass
diff --git a/lib/py/src/protocol/TProtocol.py b/lib/py/src/protocol/TProtocol.py
index 339a283..3456e8f 100644
--- a/lib/py/src/protocol/TProtocol.py
+++ b/lib/py/src/protocol/TProtocol.py
@@ -303,14 +303,8 @@ class TProtocolBase(object):
 
     def readContainerStruct(self, spec):
         (obj_class, obj_spec) = spec
-
-        # If obj_class.read is a classmethod (e.g. in frozen structs),
-        # call it as such.
-        if getattr(obj_class.read, '__self__', None) is obj_class:
-            obj = obj_class.read(self)
-        else:
-            obj = obj_class()
-            obj.read(self)
+        obj = obj_class()
+        obj.read(self)
         return obj
 
     def readContainerMap(self, spec):
diff --git a/test/DebugProtoTest.thrift b/test/DebugProtoTest.thrift
index 1ab0f6a..de47ea7 100644
--- a/test/DebugProtoTest.thrift
+++ b/test/DebugProtoTest.thrift
@@ -241,10 +241,6 @@ exception ExceptionWithAMap {
   2: map<string, string> map_field;
 }
 
-exception MutableException {
-  1: string msg;
-} (python.immutable = "false")
-
 service ServiceForExceptionWithAMap {
   void methodThatThrowsAnException() throws (1: ExceptionWithAMap xwamap);
 }
diff --git a/test/py/TestFrozen.py b/test/py/TestFrozen.py
index ce7425f..6d2595c 100755
--- a/test/py/TestFrozen.py
+++ b/test/py/TestFrozen.py
@@ -19,9 +19,7 @@
 # under the License.
 #
 
-from DebugProtoTest import Srv
 from DebugProtoTest.ttypes import CompactProtoTestStruct, Empty, Wrapper
-from DebugProtoTest.ttypes import ExceptionWithAMap, MutableException
 from thrift.Thrift import TFrozenDict
 from thrift.transport import TTransport
 from thrift.protocol import TBinaryProtocol, TCompactProtocol
@@ -96,21 +94,6 @@ class TestFrozenBase(unittest.TestCase):
         x2 = self._roundtrip(x, Wrapper)
         self.assertEqual(x2.foo, Empty())
 
-    def test_frozen_exception(self):
-        exc = ExceptionWithAMap(blah='foo')
-        with self.assertRaises(TypeError):
-            exc.blah = 'bar'
-        mutexc = MutableException(msg='foo')
-        mutexc.msg = 'bar'
-        self.assertEqual(mutexc.msg, 'bar')
-
-    def test_frozen_exception_serialization(self):
-        result = Srv.declaredExceptionMethod_result(
-            xwamap=ExceptionWithAMap(blah="error"))
-        deserialized = self._roundtrip(
-            result, Srv.declaredExceptionMethod_result())
-        self.assertEqual(result, deserialized)
-
 
 class TestFrozen(TestFrozenBase):
     def protocol(self, trans):


[thrift] 02/02: Revert "Remove unnecessary TException.message hack"

Posted by dc...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

dcelasun pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/thrift.git

commit 3d9f50d61728d377951f9b6df5f19196f6b3af46
Author: D. Can Celasun <ca...@dcc.im>
AuthorDate: Tue Dec 10 22:13:19 2019 +0000

    Revert "Remove unnecessary TException.message hack"
    
    This reverts commit 45a9827f0f455d377ae87d9a35349c10181d6893.
---
 lib/py/src/Thrift.py | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/lib/py/src/Thrift.py b/lib/py/src/Thrift.py
index b335bc1..c390cbb 100644
--- a/lib/py/src/Thrift.py
+++ b/lib/py/src/Thrift.py
@@ -90,6 +90,15 @@ class TProcessor(object):
 class TException(Exception):
     """Base class for all thrift exceptions."""
 
+    # BaseException.message is deprecated in Python v[2.6,3.0)
+    if (2, 6, 0) <= sys.version_info < (3, 0):
+        def _get_message(self):
+            return self._message
+
+        def _set_message(self, message):
+            self._message = message
+        message = property(_get_message, _set_message)
+
     def __init__(self, message=None):
         Exception.__init__(self, message)
         self.message = message