From d67a3efe660d5dec7d36684b4631138d121198ed Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Milk?= <rene.milk@wwu.de>
Date: Wed, 11 Jul 2018 11:11:33 +0200
Subject: [PATCH] [py] do not bind exceptions in every module

This is not actually necessary. Adding a handler for std::exception also
hid the more specialized handlers provided by pybind11 itself.
---
 .gitsuper                                    | 113 +++++++++++++++++++
 python/dune/xt/bindings.cc                   |  35 +++++-
 python/dune/xt/common/exceptions.bindings.hh |  40 +------
 python/dune/xt/empty.cc                      |   2 -
 python/dune/xt/logging.cc                    |   2 -
 python/dune/xt/timings.cc                    |   2 -
 6 files changed, 152 insertions(+), 42 deletions(-)
 create mode 100644 .gitsuper

diff --git a/.gitsuper b/.gitsuper
new file mode 100644
index 000000000..ef8274a10
--- /dev/null
+++ b/.gitsuper
@@ -0,0 +1,113 @@
+[supermodule]
+remote = https://zivgitlab.uni-muenster.de/falbr_01/parabolic-lrbms-2017-code
+status = +a3f7e3b4c5317dc77a3c9d6578dd58d880ffcdc1 config.opts (heads/master)
+	 8f2c5aba441417bf2c42f22272f538c68a89cc4a dune-alugrid (remotes/origin/releases/2.5)
+	 707acf201d5a754c80f87cc4d71aa36bf29a6e3f dune-common (v2.5.1-9-g707acf20)
+	+1b68586a2d8b3bf13eea60f2249dacc255eadaea dune-gdt (heads/master)
+	 6bd2463d53617b8c0c0f11a485277a32e9c8e98a dune-geometry (v2.5.2)
+	 d7b20bbc5f6fdcfc312beb0ea5d16d39ea26904e dune-grid (v2.5.1-2-gd7b20bbc5)
+	 583ad7009ff4de9c6905076ec7ed179c93468957 dune-istl (v2.5.1-1-g583ad700)
+	+c3267259cb0d75ac585f31e034f1b64fee672fe0 dune-localfunctions (v2.5.1)
+	+1c43ee1eb2815912ba570917c6f17aa85dc7010c dune-pybindxi (v2.2.1-13-g1c43ee1)
+	 741e4f8e53bdd3e1b6e19d84eb22b6e3dc48526c dune-python (remotes/origin/releases/2.5)
+	 26cc8cb4161a3a51002ab2a81b8c81d2c951ee79 dune-testtools (remotes/origin/p/renemilk/testname_listing_hack_no-skiptest)
+	-87f81bcc161d385bb4d52978b78443f65aa43f02 dune-visibility-demo
+	+f4143e9b3f861dc553711e3b322a8d4565ce0614 dune-xt-common (heads/bindings_update)
+	 ecf3bc96b7dc011f2d74923a496b5ad0bd5b1ec7 dune-xt-functions (heads/master)
+	+916b98050c9bdec9dc9df070dbd5e72af3daef78 dune-xt-grid (heads/master)
+	 c82a8502baddbc85185f1c142945111ba52fa759 dune-xt-la (heads/master)
+	 1a90ca104f7551110c402dbbee50b4fa2a2a0f26 local/bin (remotes/origin/semicolonAsSeperator-89-g1a90ca1)
+	-d1d56509f0744dc6003234c2b72e393c64faf050 pylrbms
+	 37f7861dd9b8fd00cc28fc6c80d2b005567e8a0d pymor (0.1.0-3239-g37f7861d)
+commit = 9f4f9cbe8905a8a167acbe56cdad7766227b9fb3
+
+[submodule.config.opts]
+remote = https://github.com/dune-community/config.opts.git
+status = 
+commit = a3f7e3b4c5317dc77a3c9d6578dd58d880ffcdc1
+
+[submodule.dune-alugrid]
+remote = https://github.com/dune-mirrors/dune-alugrid.git
+status = 
+commit = 8f2c5aba441417bf2c42f22272f538c68a89cc4a
+
+[submodule.dune-common]
+remote = https://github.com/dune-community/dune-common.git
+status = 
+commit = 707acf201d5a754c80f87cc4d71aa36bf29a6e3f
+
+[submodule.dune-gdt]
+remote = https://github.com/dune-community/dune-gdt.git
+status = 2424627f0ad5de7e4aaa5e7f48bc2a02414d95a1 .vcsetup (heads/master)
+commit = 1b68586a2d8b3bf13eea60f2249dacc255eadaea
+
+[submodule.dune-geometry]
+remote = https://github.com/dune-mirrors/dune-geometry.git
+status = 
+commit = 6bd2463d53617b8c0c0f11a485277a32e9c8e98a
+
+[submodule.dune-grid]
+remote = https://github.com/dune-community/dune-grid.git
+status = 
+commit = d7b20bbc5f6fdcfc312beb0ea5d16d39ea26904e
+
+[submodule.dune-istl]
+remote = https://github.com/dune-mirrors/dune-istl.git
+status = 
+commit = 583ad7009ff4de9c6905076ec7ed179c93468957
+
+[submodule.dune-localfunctions]
+remote = https://github.com/dune-community/dune-localfunctions.git
+status = 
+commit = c3267259cb0d75ac585f31e034f1b64fee672fe0
+
+[submodule.dune-pybindxi]
+remote = https://github.com/dune-community/dune-pybindxi.git
+status = -a18500d497d2ffa2f627bc6e7da0aa1169b81ea3 .vcsetup
+commit = 1c43ee1eb2815912ba570917c6f17aa85dc7010c
+
+[submodule.dune-python]
+remote = https://github.com/dune-mirrors/dune-python.git
+status = 
+commit = 741e4f8e53bdd3e1b6e19d84eb22b6e3dc48526c
+
+[submodule.dune-testtools]
+remote = https://github.com/dune-mirrors/dune-testtools.git
+status = 
+commit = 26cc8cb4161a3a51002ab2a81b8c81d2c951ee79
+
+[submodule.dune-xt-common]
+remote = https://github.com/dune-community/dune-xt-common.git
+status = +2424627f0ad5de7e4aaa5e7f48bc2a02414d95a1 .vcsetup (heads/master)
+commit = f4143e9b3f861dc553711e3b322a8d4565ce0614
+
+[submodule.dune-xt-functions]
+remote = https://github.com/dune-community/dune-xt-functions.git
+status = +2424627f0ad5de7e4aaa5e7f48bc2a02414d95a1 .vcsetup (heads/master)
+commit = ecf3bc96b7dc011f2d74923a496b5ad0bd5b1ec7
+
+[submodule.dune-xt-grid]
+remote = https://github.com/dune-community/dune-xt-grid.git
+status = 2424627f0ad5de7e4aaa5e7f48bc2a02414d95a1 .vcsetup (heads/master)
+commit = 916b98050c9bdec9dc9df070dbd5e72af3daef78
+
+[submodule.dune-xt-la]
+remote = https://github.com/dune-community/dune-xt-la.git
+status = +2424627f0ad5de7e4aaa5e7f48bc2a02414d95a1 .vcsetup (heads/master)
+commit = c82a8502baddbc85185f1c142945111ba52fa759
+
+[submodule.bin]
+remote = https://github.com/dune-community/local-bin.git
+status = 
+commit = 1a90ca104f7551110c402dbbee50b4fa2a2a0f26
+
+[submodule.pylrbms]
+remote = git@zivgitlab.uni-muenster.de:r_milk01/pylrbms.git
+status = 
+commit = 00596a8f38cd148c8e074504f9d913d2acbb228f
+
+[submodule.pymor]
+remote = git@zivgitlab.uni-muenster.de:srave_01/pymor.git
+status = 
+commit = 37f7861dd9b8fd00cc28fc6c80d2b005567e8a0d
+
diff --git a/python/dune/xt/bindings.cc b/python/dune/xt/bindings.cc
index 0ba21536c..809287cca 100644
--- a/python/dune/xt/bindings.cc
+++ b/python/dune/xt/bindings.cc
@@ -14,11 +14,19 @@
 
 #include <string>
 #include <vector>
+#include <boost/exception/all.hpp>
+
+#if HAVE_TBB
+#include <tbb/tbb_exception.h>
+#endif
+
+#include <dune/pybindxi/pybind11.h>
 
 #include <python/dune/xt/common/exceptions.bindings.hh>
 #include <python/dune/xt/common/fvector.hh>
 #include <python/dune/xt/common/fmatrix.hh>
 #include <python/dune/xt/common/configuration.hh>
+#include <dune/xt/common/exceptions.hh>
 #include <dune/xt/common/numeric_cast.hh>
 #include <dune/xt/common/string.hh>
 #include <dune/xt/common/timedlogging.hh>
@@ -30,13 +38,38 @@
 #include <dune/xt/common/numeric_cast.hh>
 #include <dune/xt/common/timedlogging.hh>
 
+void addbind_exceptions(pybind11::module& m)
+{
+  namespace py = pybind11;
+
+#if HAVE_TBB
+  static py::exception<tbb::tbb_exception> tbb_exc(m, "TbbError");
+#endif
+  static py::exception<boost::exception> boost_exc(m, "BoostError");
+  static py::exception<Dune::Exception> dune_exc(m, "DuneError");
+
+  py::register_exception_translator([](std::exception_ptr p) {
+    try {
+      if (p)
+        std::rethrow_exception(p);
+    } catch (const boost::exception& e) {
+      boost_exc(boost::diagnostic_information_what(e));
+    } catch (const Dune::Exception& e) {
+      dune_exc(e.what());
+#if HAVE_TBB
+    } catch (const tbb::tbb_exception& e) {
+      tbb_exc((std::string(e.name()) + ": " + e.what()).c_str());
+#endif
+    }
+  });
+} // ... addbind_exceptions(...)
 
 PYBIND11_MODULE(_common, m)
 {
   namespace py = pybind11;
   using namespace pybind11::literals;
 
-  Dune::XT::Common::bindings::addbind_exceptions(m);
+  addbind_exceptions(m);
 
   Dune::XT::Common::bindings::add_initialization(m, "dune.xt.common");
 
diff --git a/python/dune/xt/common/exceptions.bindings.hh b/python/dune/xt/common/exceptions.bindings.hh
index 8045af2e7..43ab2765c 100644
--- a/python/dune/xt/common/exceptions.bindings.hh
+++ b/python/dune/xt/common/exceptions.bindings.hh
@@ -12,17 +12,11 @@
 #ifndef DUNE_XT_COMMON_EXCEPTIONS_BINDINGS_HH
 #define DUNE_XT_COMMON_EXCEPTIONS_BINDINGS_HH
 
-#include <string>
+#include <dune/xt/common/deprecated.hh>
 
-#include <boost/exception/all.hpp>
-
-#if HAVE_TBB
-#include <tbb/tbb_exception.h>
-#endif
-
-#include <dune/pybindxi/pybind11.h>
-
-#include <dune/xt/common/exceptions.hh>
+namespace pybind11 {
+class module;
+}
 
 namespace Dune {
 namespace XT {
@@ -30,33 +24,9 @@ namespace Common {
 namespace bindings {
 
 
-void addbind_exceptions(pybind11::module& m)
+DXT_DEPRECATED_MSG("you no longer need to call this for your module") void addbind_exceptions(pybind11::module&)
 {
-  namespace py = pybind11;
-
-  static py::exception<std::exception> std_exc(m, "StdError");
-#if HAVE_TBB
-  static py::exception<tbb::tbb_exception> tbb_exc(m, "TbbError");
-#endif
-  static py::exception<boost::exception> boost_exc(m, "BoostError");
-  static py::exception<Dune::Exception> dune_exc(m, "DuneError");
 
-  py::register_exception_translator([](std::exception_ptr p) {
-    try {
-      if (p)
-        std::rethrow_exception(p);
-    } catch (const boost::exception& e) {
-      boost_exc(boost::diagnostic_information_what(e));
-    } catch (const Dune::Exception& e) {
-      dune_exc(e.what());
-#if HAVE_TBB
-    } catch (const tbb::tbb_exception& e) {
-      tbb_exc((std::string(e.name()) + ": " + e.what()).c_str());
-#endif
-    } catch (const std::exception& e) {
-      std_exc(e.what());
-    }
-  });
 } // ... addbind_exceptions(...)
 
 
diff --git a/python/dune/xt/empty.cc b/python/dune/xt/empty.cc
index 2a2aedf51..407c33d2e 100644
--- a/python/dune/xt/empty.cc
+++ b/python/dune/xt/empty.cc
@@ -65,8 +65,6 @@ PYBIND11_MODULE(_empty, m)
   namespace py = pybind11;
   using namespace pybind11::literals;
 
-  Dune::XT::Common::bindings::addbind_exceptions(m);
-
   Dune::XT::Common::bindings::add_initialization(m, "dune.xt.empty");
 
   py::class_<Pet>(m, "Pet")
diff --git a/python/dune/xt/logging.cc b/python/dune/xt/logging.cc
index 5fe02b6d2..ddac21e95 100644
--- a/python/dune/xt/logging.cc
+++ b/python/dune/xt/logging.cc
@@ -29,8 +29,6 @@ PYBIND11_MODULE(_logging, m)
   using namespace pybind11::literals;
   using namespace Dune::XT::Common;
 
-  Dune::XT::Common::bindings::addbind_exceptions(m);
-
   Dune::XT::Common::bindings::add_initialization(m, "dune.xt.logging");
 
   m.def("create",
diff --git a/python/dune/xt/timings.cc b/python/dune/xt/timings.cc
index f1bc27a48..bcf9dc164 100644
--- a/python/dune/xt/timings.cc
+++ b/python/dune/xt/timings.cc
@@ -29,8 +29,6 @@ PYBIND11_MODULE(_timings, m)
   using namespace pybind11::literals;
   using namespace Dune::XT::Common;
 
-  Dune::XT::Common::bindings::addbind_exceptions(m);
-
   Dune::XT::Common::bindings::add_initialization(m, "dune.xt.common.timings");
 
 
-- 
GitLab