[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