[pytango] 325/483: add safety imports to green modes

Sandor Bodo-Merle sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:14:56 UTC 2017


This is an automated email from the git hooks/post-receive script.

sbodomerle-guest pushed a commit to annotated tag bliss_8.10
in repository pytango.

commit 1eb1e329096fb7cc949b7e7b261678c1dd55559b
Author: tiagocoutinho <tiagocoutinho at 4e9c00fd-8f2e-0410-aa12-93ce3db5e235>
Date:   Mon Nov 25 15:14:44 2013 +0000

    add safety imports to green modes
    
    git-svn-id: http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk@24365 4e9c00fd-8f2e-0410-aa12-93ce3db5e235
---
 src/boost/python/futures.py | 15 ++++++++++++++-
 src/boost/python/gevent.py  | 26 ++++++++++++++++++++++++--
 src/boost/python/green.py   | 11 +++++++++--
 3 files changed, 47 insertions(+), 5 deletions(-)

diff --git a/src/boost/python/futures.py b/src/boost/python/futures.py
index ad98474..b34f876 100644
--- a/src/boost/python/futures.py
+++ b/src/boost/python/futures.py
@@ -12,7 +12,7 @@
 """This module exposes a futures version of :class:`PyTango.DeviceProxy` and
 :class:`PyTango.AttributeProxy"""
 
-__all__ = ["DeviceProxy", "AttributeProxy"]
+__all__ = ["DeviceProxy", "AttributeProxy", "check_requirements"]
 
 from functools import partial
 
@@ -21,6 +21,19 @@ from PyTango.device_proxy import get_device_proxy
 from PyTango.attribute_proxy import get_attribute_proxy
 
 
+def check_requirements():
+    try:
+        import concurrent.futures
+    except ImportError:
+        import sys
+        if sys.version_info[0] < 3:
+            raise ImportError("No module named concurrent. You need to " \
+                              "install the futures backport module to have " \
+                              "access to PyTango futures green mode")
+                              
+
+check_requirements()
+
 DeviceProxy = partial(get_device_proxy, green_mode=GreenMode.Futures)
 DeviceProxy.__doc__ = """
     DeviceProxy(self, dev_name, wait=True, timeout=True) -> DeviceProxy
diff --git a/src/boost/python/gevent.py b/src/boost/python/gevent.py
index b556318..72aa86c 100644
--- a/src/boost/python/gevent.py
+++ b/src/boost/python/gevent.py
@@ -12,15 +12,37 @@
 """This module exposes a gevent version of :class:`PyTango.DeviceProxy` and
 :class:`PyTango.AttributeProxy"""
 
-__all__ = ["DeviceProxy", "AttributeProxy"]
+from __future__ import absolute_import
 
-from functools import partial
+__all__ = ["DeviceProxy", "AttributeProxy", "check_requirements"]
 
+from functools import partial
+    
 from PyTango import GreenMode
 from PyTango.device_proxy import get_device_proxy
 from PyTango.attribute_proxy import get_attribute_proxy
 
 
+def check_requirements():
+    try:
+        import gevent
+    except ImportError:
+        raise ImportError("No module named gevent. You need to install " \
+                          "gevent module to have access to PyTango gevent " \
+                          "green mode. Consider using the futures green mode " \
+                          "instead")
+
+    import distutils.version
+    gevent_version = ".".join(map(str, gevent.version_info[:3]))
+    if distutils.version.StrictVersion(gevent_version) < "1.0":
+        raise ImportError("You need gevent >= 1.0. You are using %s. " \
+                          "Consider using the futures green mode instead" \
+                          % gevent_version)
+
+
+check_requirements()    
+
+
 DeviceProxy = partial(get_device_proxy, green_mode=GreenMode.Gevent)
 DeviceProxy.__doc__ = """
     DeviceProxy(self, dev_name, wait=True, timeout=True) -> DeviceProxy
diff --git a/src/boost/python/green.py b/src/boost/python/green.py
index a5ea588..02f1e9e 100644
--- a/src/boost/python/green.py
+++ b/src/boost/python/green.py
@@ -47,8 +47,15 @@ def set_green_mode(green_mode=None):
     :type green_mode: GreenMode
     """
     global __current_green_mode
-    if green_mode is None:
-        green_mode = GreenMode.Synchronous
+    if __current_green_mode == green_mode:
+        return
+    if green_mode == GreenMode.Gevent:
+        # check if we can change to gevent mode
+        import PyTango.gevent
+    elif green_mode == GreenMode.Futures:
+        # check if we can change to futures mode
+        import PyTango.futures
+        
     __current_green_mode = green_mode
 
 

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/debian-science/packages/pytango.git



More information about the debian-science-commits mailing list