[pytango] 287/483: preparing 8.1.0

Sandor Bodo-Merle sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:14:51 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 f48781f5c5df05f22225df6bd9c31c3a37fff1bf
Author: tiagocoutinho <tiagocoutinho at 4e9c00fd-8f2e-0410-aa12-93ce3db5e235>
Date:   Tue Oct 29 14:27:04 2013 +0000

    preparing 8.1.0
    
    git-svn-id: http://svn.code.sf.net/p/tango-cs/code/bindings/PyTango/trunk@24070 4e9c00fd-8f2e-0410-aa12-93ce3db5e235
---
 MANIFEST.in                      |   8 +-
 Makefile                         |  49 ++++-
 doc/revision.rst                 | 453 ++++++++++++++++++++-------------------
 setup.py                         | 205 +++++++++---------
 src/boost/cpp/base_types.cpp     |   2 +
 src/boost/cpp/constants.cpp      |  23 +-
 src/boost/cpp/device_proxy.cpp   |   4 +-
 src/boost/python/device_proxy.py | 171 ++++++++-------
 src/boost/python/pytango_init.py |  62 +++++-
 src/boost/python/tango_gevent.py |  20 +-
 src/boost/python/utils.py        | 212 ++++++++++--------
 11 files changed, 678 insertions(+), 531 deletions(-)

diff --git a/MANIFEST.in b/MANIFEST.in
index e917e44..4b8d750 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -12,8 +12,8 @@ graft tests
 global-exclude *.pyc
 global-exclude *.pyo
 exclude setup.cfg
-exclude .project
-exclude .ropeproject
-exclude .pydevproject
-exclude images/*
+#exclude .project
+#exclude .ropeproject
+#exclude .pydevproject
+exclude images/
 exclude src/precompiled_header.hpp.gch
diff --git a/Makefile b/Makefile
index 300c88d..1672209 100644
--- a/Makefile
+++ b/Makefile
@@ -61,6 +61,8 @@ else
 NUMPY_INC = -I$(NUMPY_ROOT)/include
 endif
 
+PYTANGO_NUMPY_VERSION = $(shell $(PY_EXC) -c "import sys, numpy; sys.stdout.write(numpy.__version__)")
+
 ifndef prefix
 ifdef user
 _PY_DIR=$(shell $(PY_EXC) -c "import sys, os; sys.stdout.write(os.path.split(os.path.join(os.path.dirname(os.__file__)))[1])")
@@ -80,22 +82,40 @@ endif
 CC = gcc
 
 PY_INC := $(shell python$(PY_VER)-config --includes)
+
+ifdef optimize
+OPTIMIZE_CC = -g -O2
+OPTIMIZE_LN = -O2
+else
 OPTIMIZE_CC = -g -O0
 OPTIMIZE_LN = -O0
+endif
+
+TANGO_CFLAGS=`pkg-config --cflags-only-other tango`
+TANGO_LIBS=`pkg-config --libs-only-l tango`
+BOOST_LIB = boost_python-py$(PY_VER_S)
 
 PRE_C_H := precompiled_header.hpp
 PRE_C_H_O := $(OBJS_DIR)/$(PRE_C_H).gch
 PRE_C := -include$(OBJS_DIR)/$(PRE_C_H)
-LN := g++ -pthread -shared -Wl,$(OPTIMIZE_LN) -Wl,-Bsymbolic-functions
+
+LN := g++ -pthread -shared -Wl,$(OPTIMIZE_LN) -Wl,-Bsymbolic-functions -z defs
 LN_STATIC := g++ -pthread -static -Wl,$(OPTIMIZE_LN) -Wl,-Bsymbolic-functions
+
 LN_VER := -Wl,-h -Wl,--strip-all
-BOOST_LIB := boost_python-py$(PY_VER_S)
-LN_LIBS := -ltango -llog4tango -lpthread -lrt -ldl -lomniORB4 -lomniDynamic4 -lomnithread -lCOS4 -l$(BOOST_LIB) -lzmq
+
+LN_LIBS := -l$(BOOST_LIB) -lpython$(PY_VER)
 
 INCLUDE_DIRS =
+
 ifdef TANGO_ROOT
 LN_DIRS += -L$(TANGO_ROOT)/lib
 INCLUDE_DIRS += -I$(TANGO_ROOT)/include -I$(TANGO_ROOT)/include/tango
+LN_LIBS += -ltango -lomniDynamic4 -lCOS4 -llog4tango -lzmq -lomniORB4 -lomnithread
+else
+LN_DIRS += `pkg-config --libs-only-L tango`
+INCLUDE_DIRS += `pkg-config --cflags-only-I tango`
+LN_LIBS += `pkg-config --libs-only-l tango`
 endif
 
 ifdef LOG4TANGO_ROOT
@@ -114,6 +134,7 @@ endif
 
 ifdef ZMQ_ROOT
 LN_DIRS += -L$(ZMQ_ROOT)/lib
+INCLUDE_DIRS += -I$(ZMQ_ROOT)/include
 endif
 
 INCLUDE_DIRS += \
@@ -122,14 +143,14 @@ INCLUDE_DIRS += \
     $(PY_INC) \
     $(NUMPY_INC)
 
-CCFLAGS := -pthread -fno-strict-aliasing -DNDEBUG $(OPTIMIZE_CC) -fwrapv -Wall -fPIC -std=c++0x -DPYTANGO_HAS_UNIQUE_PTR $(INCLUDE_DIRS)
+MACROS := -DNDEBUG -DPYTANGO_NUMPY_VERSION=\"$(PYTANGO_NUMPY_VERSION)\" -DPYTANGO_HAS_UNIQUE_PTR
+CFLAGS := -pthread -fno-strict-aliasing -fwrapv -Wall -fPIC $(OPTIMIZE_CC) $(MACROS) $(TANGO_CFLAGS) $(INCLUDE_DIRS)
+LNFLAGS := $(LN_DIRS) $(LN_LIBS)
 
 LIB_NAME := _PyTango.so
 LIB_NAME_STATIC := _PyTangoStatic.so
 LIB_SYMB_NAME := $(LIB_NAME).dbg
 
-
-
 OBJS := \
 $(OBJS_DIR)/api_util.o \
 $(OBJS_DIR)/archive_event_info.o \
@@ -207,6 +228,12 @@ command.h \
 device_class.h \
 device_impl.h
 
+ifdef optimize
+LINKER=$(LN) $(LNFLAGS) $(OBJS) $(LN_VER) -o $(OBJS_DIR)/$(LIB_NAME).full ; strip --strip-all -o $(OBJS_DIR)/$(LIB_NAME) $(OBJS_DIR)/$(LIB_NAME).full
+else
+LINKER=$(LN) $(LNFLAGS) $(OBJS) $(LN_VER) -o $(OBJS_DIR)/$(LIB_NAME)
+endif
+
 #-----------------------------------------------------------------
 
 all: build
@@ -215,23 +242,25 @@ build: init $(PRE_C_H_O) $(LIB_NAME)
 
 init:
 	@echo Using python $(PY_VER)
+	@echo CFLAGS  = $(CFLAGS)
+	@echo LNFLAGS = $(LNFLAGS)
 	@echo Preparing build directories... 
 	@mkdir -p $(OBJS_DIR)
 
 $(PRE_C_H_O): $(SRC_DIR)/$(PRE_C_H)
 	@echo Compiling pre-compiled header...
-	@$(CC) $(CCFLAGS) -c $< -o $(PRE_C_H_O)
+	@$(CC) $(CFLAGS) -c $< -o $(PRE_C_H_O)
 
 #
 # Rule for API files
 #
 $(OBJS_DIR)/%.o: $(SRC_DIR)/%.cpp
 	@echo Compiling $(<F) ...
-	@$(CC) $(CCFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
+	@$(CC) $(CFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
 
 $(OBJS_DIR)/%.o: $(SRC_DIR)/server/%.cpp
 	@echo Compiling $(<F) ...
-	@$(CC) $(CCFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
+	@$(CC) $(CFLAGS) -c $< -o $(OBJS_DIR)/$*.o $(PRE_C)
 
 #
 #	The shared libs
@@ -239,7 +268,7 @@ $(OBJS_DIR)/%.o: $(SRC_DIR)/server/%.cpp
 
 $(LIB_NAME): $(PRE_C_H_0) $(OBJS)
 	@echo Linking shared $(LIB_NAME) ...
-	@$(LN) $(OBJS) $(LN_DIRS) $(LN_LIBS) -o $(OBJS_DIR)/$(LIB_NAME) $(LN_VER)
+	@$(LINKER)
 
 clean:
 	@echo Cleaning ...
diff --git a/doc/revision.rst b/doc/revision.rst
index 0c2f5a1..d5548d8 100644
--- a/doc/revision.rst
+++ b/doc/revision.rst
@@ -12,7 +12,7 @@ Revision
 History of modifications:
 
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-|   Date   | Revision                                                                         |                          Description                | Author                |
+| Date     | Revision                                                                         | Description                                         | Author                |
 +==========+==================================================================================+=====================================================+=======================+
 | 18/07/03 | 1.0                                                                              | Initial Version                                     | M\. Ounsy             |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
@@ -71,9 +71,9 @@ History of modifications:
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 | 20/05/13 | `8.16 <http://www.tango-controls.org/static/PyTango/v803/doc/html/index.html>`_  | Update to PyTango 8.0.3                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-| 09/07/13 | `8.17 <http://www.tango-controls.org/static/PyTango/v804/doc/html/index.html>`_  | Update to PyTango 8.0.4                             | T\. Coutinho          |
+| 28/08/13 | `8.13 <http://www.tango-controls.org/static/PyTango/v723/doc/html/index.html>`_  | Update to PyTango 7.2.4                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
-|   /07/13 | `8.18 <http://www.tango-controls.org/static/PyTango/v810/doc/html/index.html>`_  | Update to PyTango 8.1.0                             | T\. Coutinho          |
+| 26/09/13 | `8.18 <http://www.tango-controls.org/static/PyTango/v810/doc/html/index.html>`_  | Update to PyTango 8.1.0                             | T\. Coutinho          |
 +----------+----------------------------------------------------------------------------------+-----------------------------------------------------+-----------------------+
 
 .. _version-history:
@@ -81,224 +81,229 @@ History of modifications:
 Version history
 ---------------
 
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| version    | Changes                                                                                                                                                                      |
-+============+==============================================================================================================================================================================+
-| 8.1.0      | Features:                                                                                                                                                                    |
-|            |     - Implemented tango C++ 8.1 API                                                                                                                                          |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.4      | Bug fixes:                                                                                                                                                                   |
-|            |         - `598: [pytango][8.0.3] failed to build from source on s390 <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                        |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.3      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `88: Implement Util::server_set_event_loop method in python <https://sourceforge.net/p/tango-cs/feature-requests/88>`_                                             |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3576353: [pytango] segfault on 'RestartServer' <https://sourceforge.net/tracker/?func=detail&aid=3576353&group_id=57612&atid=484769>`_                            |
-|            |         - `3579062: [pytango] Attribute missing methods <https://sourceforge.net/tracker/?func=detail&aid=3579062&group_id=57612&atid=484769>`_                              |
-|            |         - `3586337: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/tracker/?func=detail&aid=3586337&group_id=57612&atid=484769>`_           |
-|            |         - `3598514: DeviceProxy.__setattr__ break python's descriptors <https://sourceforge.net/tracker/?func=detail&aid=3598514&group_id=57612&atid=484769>`_               |
-|            |         - `3607779: [pytango] IPython 0.10 error <https://sourceforge.net/tracker/?func=detail&aid=3607779&group_id=57612&atid=484769>`_                                     |
-|            |         - `598: Import DLL by PyTango failed on windows <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                                     |
-|            |         - `605: [pytango] use distutils.version module <https://sourceforge.net/p/tango-cs/bugs/605/>`_                                                                      |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.2      | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3570970: [pytango] problem during the python3 building <https://sourceforge.net/tracker/?func=detail&aid=3570970&group_id=57612&atid=484769>`_                    |
-|            |         - `3570971: [pytango] itango does not work without qtconsole <https://sourceforge.net/tracker/?func=detail&aid=3570971&group_id=57612&atid=484769>`_                 |
-|            |         - `3570972: [pytango] warning/error when building 8.0.0 <https://sourceforge.net/tracker/?func=detail&aid=3570972&group_id=57612&atid=484769>`_                      |
-|            |         - `3570975: [pytango] problem during use of python3 version <https://sourceforge.net/tracker/?func=detail&aid=3570975&group_id=57612&atid=484769>`_                  |
-|            |         - `3574099: [pytango] compile error with gcc < 4.5 <https://sourceforge.net/tracker/?func=detail&aid=3574099&group_id=57612&atid=484769>`_                           |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.1      | *SKIPPED*                                                                                                                                                                    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 8.0.0      | Features:                                                                                                                                                                    |
-|            |     - Implemented tango C++ 8.0 API                                                                                                                                          |
-|            |     - Python 3k compatible                                                                                                                                                   |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3023857: DevEncoded write attribute not supported <https://sourceforge.net/tracker/?func=detail&aid=3023857&group_id=57612&atid=484769>`_                         |
-|            |         - `3521545: [pytango] problem with tango profile <https://sourceforge.net/tracker/?func=detail&aid=3521545&group_id=57612&atid=484769>`_                             |
-|            |         - `3530535: PyTango group writting fails <https://sourceforge.net/tracker/?func=detail&aid=3530535&group_id=57612&atid=484769>`_                                     |
-|            |         - `3564959: EncodedAttribute.encode_xxx() methods don't accept bytearray  <https://sourceforge.net/tracker/?func=detail&aid=3564959&group_id=57612&atid=484769>`_    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.3      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3495607: DeviceClass.device_name_factory is missing <https://sourceforge.net/tracker/?func=detail&aid=3495607&group_id=57612&atid=484772>`_                       |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3103588: documentation of PyTango.Attribute.Group <https://sourceforge.net/tracker/?func=detail&aid=3103588&group_id=57612&atid=484769>`_                         |
-|            |         - `3458336: Problem with pytango 7.2.2 <https://sourceforge.net/tracker/?func=detail&aid=3458336&group_id=57612&atid=484769>`_                                       |
-|            |         - `3463377: PyTango memory leak in read encoded attribute <https://sourceforge.net/tracker/?func=detail&aid=3463377&group_id=57612&atid=484769>`_                    |
-|            |         - `3487930: [pytango] wrong python dependency <https://sourceforge.net/tracker/?func=detail&aid=3487930&group_id=57612&atid=484769>`_                                |
-|            |         - `3511509: Attribute.set_value_date_quality for encoded does not work <https://sourceforge.net/tracker/?func=detail&aid=3511509&group_id=57612&atid=484769>`_       |
-|            |         - `3514457: [pytango]  TANGO_HOST multi-host support <https://sourceforge.net/tracker/?func=detail&aid=3514457&group_id=57612&atid=484769>`_                         |
-|            |         - `3520739: command_history(...) in  PyTango <https://sourceforge.net/tracker/?func=detail&aid=3520739&group_id=57612&atid=484769>`_                                 |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.2      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3305251: DS dynamic attributes discards some Attr properties <https://sourceforge.net/tracker/?func=detail&aid=3305251&group_id=57612&atid=484769>`_              |
-|            |         - `3365792: DeviceProxy.<cmd_name> could be documented <https://sourceforge.net/tracker/?func=detail&aid=3365792&group_id=57612&atid=484772>`_                       |
-|            |         - `3386079: add support for ipython 0.11 <https://sourceforge.net/tracker/?func=detail&aid=3386079&group_id=57612&atid=484772>`_                                     |
-|            |         - `3437654: throw python exception as tango exception <https://sourceforge.net/tracker/?func=detail&aid=3437654&group_id=57612&atid=484772>`_                        |
-|            |         - `3447477: spock profile installation <https://sourceforge.net/tracker/?func=detail&aid=3447477&group_id=57612&atid=484772>`_                                       |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3372371: write attribute of DevEncoded doesn't work <https://sourceforge.net/tracker/?func=detail&aid=3372371&group_id=57612&atid=484769>`_                       |
-|            |         - `3374026: [pytango] pyflakes warning <https://sourceforge.net/tracker/?func=detail&aid=3374026&group_id=57612&atid=484769>`_                                       |
-|            |         - `3404771: PyTango.MultiAttribute.get_attribute_list missing <https://sourceforge.net/tracker/?func=detail&aid=3404771&group_id=57612&atid=484769>`_                |
-|            |         - `3405580: PyTango.MultiClassAttribute missing <https://sourceforge.net/tracker/?func=detail&aid=3405580&group_id=57612&atid=484769>`_                              |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.1      | *SKIPPED*                                                                                                                                                                    |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.2.0      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3286678: Add missing EncodedAttribute JPEG methods <https://sourceforge.net/tracker/?func=detail&aid=3286678&group_id=57612&atid=484772>`_                        |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.6      | Bug fixes:                                                                                                                                                                   |
-|            |    - 7.1.5 distribution is missing some files                                                                                                                                |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.5      | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3284174: 7.1.4 does not build with gcc 4.5 and tango 7.2.6 <https://sourceforge.net/tracker/?func=detail&aid=3284174&group_id=57612&atid=484769>`_                |
-|            |         - `3284265: [pytango][7.1.4] a few files without licence and copyright <https://sourceforge.net/tracker/?func=detail&aid=3284265&group_id=57612&atid=484769>`_       |
-|            |         - `3284318: copyleft vs copyright <https://sourceforge.net/tracker/?func=detail&aid=3284318&group_id=57612&atid=484769>`_                                            |
-|            |         - `3284434: [pytango][doc] few ERROR during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284434&group_id=57612&atid=484769>`_               |
-|            |         - `3284435: [pytango][doc] few warning during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284435&group_id=57612&atid=484769>`_             |
-|            |         - `3284440: [pytango][spock] the profile can't be installed <https://sourceforge.net/tracker/?func=detail&aid=3284440&group_id=57612&atid=484769>`_                  |
-|            |         - `3285185: PyTango Device Server does not load Class Properties values <https://sourceforge.net/tracker/?func=detail&aid=3285185&group_id=57612&atid=484769>`_      |
-|            |         - `3286055: PyTango 7.1.x DS using Tango C++ 7.2.x seg faults on exit <https://sourceforge.net/tracker/?func=detail&aid=3286055&group_id=57612&atid=484769>`_        |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.4      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3274309: Generic Callback for events <https://sourceforge.net/tracker/?func=detail&aid=3274309&group_id=57612&atid=484772>`_                                      |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3011775: Seg Faults due to removed dynamic attributes <https://sourceforge.net/tracker/?func=detail&aid=3011775&group_id=57612&atid=484769>`_                     |
-|            |         - `3105169: PyTango 7.1.3 does not compile with Tango 7.2.X <https://sourceforge.net/tracker/?func=detail&aid=3105169&group_id=57612&atid=484769>`_                  |
-|            |         - `3107243: spock profile does not work with python 2.5 <https://sourceforge.net/tracker/?func=detail&aid=3107243&group_id=57612&atid=484769>`_                      |
-|            |         - `3124427: PyTango.WAttribute.set_max_value() changes min value <https://sourceforge.net/tracker/?func=detail&aid=3124427&group_id=57612&atid=484769>`_             |
-|            |         - `3170399: Missing documentation about is_<attr>_allowed method <https://sourceforge.net/tracker/?func=detail&aid=3170399&group_id=57612&atid=484769>`_             |
-|            |         - `3189082: Missing get_properties() for Attribute class <https://sourceforge.net/tracker/?func=detail&aid=3189082&group_id=57612&atid=484769>`_                     |
-|            |         - `3196068: delete_device() not called after server_admin.Kill() <https://sourceforge.net/tracker/?func=detail&aid=3196068&group_id=57612&atid=484769>`_             |
-|            |         - `3257286: Binding crashes when reading a WRITE string attribute <https://sourceforge.net/tracker/?func=detail&aid=3257286&group_id=57612&atid=484769>`_            |
-|            |         - `3267628: DP.read_attribute(, extract=List/tuple) write value is wrong <https://sourceforge.net/tracker/?func=detail&aid=3267628&group_id=57612&atid=484769>`_     |
-|            |         - `3274262: Database.is_multi_tango_host missing <https://sourceforge.net/tracker/?func=detail&aid=3274262&group_id=57612&atid=484769>`_                             |
-|            |         - `3274319: EncodedAttribute is missing in PyTango (<= 7.1.3) <https://sourceforge.net/tracker/?func=detail&aid=3274319&group_id=57612&atid=484769>`_                |
-|            |         - `3277269: read_attribute(DevEncoded) is not numpy as expected <https://sourceforge.net/tracker/?func=detail&aid=3277269&group_id=57612&atid=484769>`_              |
-|            |         - `3278946: DeviceAttribute copy constructor is not working <https://sourceforge.net/tracker/?func=detail&aid=3278946&group_id=57612&atid=484769>`_                  |
-|            |                                                                                                                                                                              |
-|            | Documentation:                                                                                                                                                               |
-|            |     - Added :ref:`utilities` chapter                                                                                                                                         |
-|            |     - Added :ref:`encoded` chapter                                                                                                                                           |
-|            |     - Improved :ref:`server` chapter                                                                                                                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.3      | Features:                                                                                                                                                                    |
-|            |     - tango logging with print statement                                                                                                                                     |
-|            |     - tango logging with decorators                                                                                                                                          |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3060380: ApiUtil should be exported to PyTango  <https://sourceforge.net/tracker/?func=detail&aid=3060380&group_id=57612&atid=484772>`_                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - added licence header to all source code files                                                                                                                          |
-|            |     - spock didn't work without TANGO_HOST env. variable (it didn't recognize                                                                                                |
-|            |       tangorc)                                                                                                                                                               |
-|            |     - spock should give a proper message if it tries to be initialized outside                                                                                               |
-|            |       ipython                                                                                                                                                                |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `3048798: licence issue GPL != LGPL <https://sourceforge.net/tracker/?func=detail&aid=3048798&group_id=57612&atid=484769>`_                                        |
-|            |         - `3073378: DeviceImpl.signal_handler raising exception crashes DS <https://sourceforge.net/tracker/?func=detail&aid=3073378&group_id=57612&atid=484769>`_           |
-|            |         - `3088031: Python DS unable to read DevVarBooleanArray property <https://sourceforge.net/tracker/?func=detail&aid=3088031&group_id=57612&atid=484769>`_             |
-|            |         - `3102776: PyTango 7.1.2 does not work with python 2.4 & boost 1.33.0 <https://sourceforge.net/tracker/?func=detail&aid=3102776&group_id=57612&atid=484769>`_       |
-|            |         - `3102778: Fix compilation warnings in linux <https://sourceforge.net/tracker/?func=detail&aid=3102778&group_id=57612&atid=484769>`_                                |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.2      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2995964: Dynamic device creation <https://sourceforge.net/tracker/?func=detail&aid=2995964&group_id=57612&atid=484772>`_                                          |
-|            |         - `3010399: The DeviceClass.get_device_list that exists in C++ is missing <https://sourceforge.net/tracker/?func=detail&aid=3010399&group_id=57612&atid=484772>`_    |
-|            |         - `3023686: Missing DeviceProxy.<attribute name> <https://sourceforge.net/tracker/?func=detail&aid=3023686&group_id=57612&atid=484772>`_                             |
-|            |         - `3025396: DeviceImpl is missing some CORBA methods <https://sourceforge.net/tracker/?func=detail&aid=3025396&group_id=57612&atid=484772>`_                         |
-|            |         - `3032005: IPython extension for PyTango <https://sourceforge.net/tracker/?func=detail&aid=3032005&group_id=57612&atid=484772>`_                                    |
-|            |         - `3033476: Make client objects pickable <https://sourceforge.net/tracker/?func=detail&aid=3033476&group_id=57612&atid=484772>`_                                     |
-|            |         - `3039902: PyTango.Util.add_class would be useful <https://sourceforge.net/tracker/?func=detail&aid=3039902&group_id=57612&atid=484772>`_                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2975940: DS command with DevVarCharArray return type fails <https://sourceforge.net/tracker/?func=detail&aid=2975940&group_id=57612&atid=484769>`_                |
-|            |         - `3000467: DeviceProxy.unlock is LOCKING instead of unlocking! <https://sourceforge.net/tracker/?func=detail&aid=3000467&group_id=57612&atid=484769>`_              |
-|            |         - `3010395: Util.get_device_* methods don't work <https://sourceforge.net/tracker/?func=detail&aid=3010395&group_id=57612&atid=484769>`_                             |
-|            |         - `3010425: Database.dev_name does not work <https://sourceforge.net/tracker/?func=detail&aid=3010425&group_id=57612&atid=484769>`_                                  |
-|            |         - `3016949: command_inout_asynch callback does not work <https://sourceforge.net/tracker/?func=detail&aid=3016949&group_id=57612&atid=484769>`_                      |
-|            |         - `3020300: PyTango does not compile with gcc 4.1.x <https://sourceforge.net/tracker/?func=detail&aid=3020300&group_id=57612&atid=484769>`_                          |
-|            |         - `3030399: Database put(delete)_attribute_alias generates segfault <https://sourceforge.net/tracker/?func=detail&aid=3030399&group_id=57612&atid=484769>`_          |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.1      | Features:                                                                                                                                                                    |
-|            |     - Improved setup script                                                                                                                                                  |
-|            |     - Interfaced with PyPI                                                                                                                                                   |
-|            |     - Cleaned build script warnings due to unclean python C++ macro definitions                                                                                              |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2985993: PyTango numpy command support <https://sourceforge.net/tracker/?func=detail&aid=2985993&group_id=57612&atid=484772>`_                                    |
-|            |         - `2971217: PyTango.GroupAttrReplyList slicing <https://sourceforge.net/tracker/?func=detail&aid=2971217&group_id=57612&atid=484772>`_                               |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2983299: Database.put_property() deletes the property <https://sourceforge.net/tracker/?func=detail&aid=2983299&group_id=57612&atid=484769>`_                     |
-|            |         - `2953689: can not write_attribute scalar/spectrum/image <https://sourceforge.net/tracker/?func=detail&aid=2953689&group_id=57612&atid=484769>`_                    |
-|            |         - `2953030: PyTango doc installation <https://sourceforge.net/tracker/?func=detail&aid=2953030&group_id=57612&atid=484769>`_                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.0      | Features:                                                                                                                                                                    |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2908176: read_*, write_* and is_*_allowed() methods can now be defined <https://sourceforge.net/tracker/?func=detail&aid=2908176&group_id=57612&atid=484772>`_    |
-|            |         - `2941036: TimeVal conversion to time and datetime <https://sourceforge.net/tracker/?func=detail&aid=2941036&group_id=57612&atid=484772>`_                          |
-|            |     - added str representation on Attr, Attribute, DeviceImpl and DeviceClass                                                                                                |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - from sourceforge:                                                                                                                                                      |
-|            |         - `2903755: get_device_properties() bug reading DevString properties <https://sourceforge.net/tracker/?func=detail&aid=2903755group_id=57612&atid=484769>`_          |
-|            |         - `2909927: PyTango.Group.read_attribute() return values <https://sourceforge.net/tracker/?func=detail&aid=2909927&group_id=57612&atid=484769>`_                     |
-|            |         - `2914194: DevEncoded does not work <https://sourceforge.net/tracker/?func=detail&aid=2914194&group_id=57612&atid=484769>`_                                         |
-|            |         - `2916397: PyTango.DeviceAttribute copy constructor does not work <https://sourceforge.net/tracker/?func=detail&aid=2916397&group_id=57612&atid=484769>`_           |
-|            |         - `2936173: PyTango.Group.read_attributes() fails <https://sourceforge.net/tracker/?func=detail&aid=2936173&group_id=57612&atid=484769>`_                            |
-|            |         - `2949099: Missing PyTango.Except.print_error_stack <https://sourceforge.net/tracker/?func=detail&aid=2949099&group_id=57612&atid=484769>`_                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
-| 7.1.0rc1   | Features:                                                                                                                                                                    |
-|            |     - v = image_attribute.get_write_value() returns square sequences (arrays of                                                                                              |
-|            |       arrays, or numpy objects) now instead of flat lists. Also for spectrum                                                                                                 |
-|            |       attributes a numpy is returned by default now instead.                                                                                                                 |
-|            |     - image_attribute.set_value(v) accepts numpy arrays now or square sequences                                                                                              |
-|            |       instead of just flat lists. So, dim_x and dim_y are useless now. Also the                                                                                              |
-|            |       numpy path is faster.                                                                                                                                                  |
-|            |     - new enum AttrSerialModel                                                                                                                                               |
-|            |     - Attribute new methods: set(get)_attr_serial_model, set_change_event,                                                                                                   |
-|            |       set_archive_event, is_change_event, is_check_change_event,                                                                                                             |
-|            |       is_archive_criteria, is_check_archive_criteria, remove_configuration                                                                                                   |
-|            |     - added support for numpy scalars in tango operations like write_attribute                                                                                               |
-|            |       (ex: now a DEV_LONG attribute can receive a numpy.int32 argument in a                                                                                                  |
-|            |       write_attribute method call)                                                                                                                                           |
-|            |                                                                                                                                                                              |
-|            | Bug fixes:                                                                                                                                                                   |
-|            |     - DeviceImpl.set_value for scalar attributes                                                                                                                             |
-|            |     - DeviceImpl.push_***_event                                                                                                                                              |
-|            |     - server commands with DevVar***StringArray as parameter or as return type                                                                                               |
-|            |     - in windows,a bug in PyTango.Util prevented servers from starting up                                                                                                    |
-|            |     - DeviceImpl.get_device_properties for string properties assigns only first                                                                                              |
-|            |       character of string to object member instead of entire string                                                                                                          |
-|            |     - added missing methods to Util                                                                                                                                          |
-|            |     - exported SubDevDiag class                                                                                                                                              |
-|            |     - error in read/events of attributes of type DevBoolean READ_WRITE                                                                                                       |
-|            |     - error in automatic unsubscribe events of DeviceProxy when the object                                                                                                   |
-|            |       disapears (happens only on some compilers with some optimization flags)                                                                                                |
-|            |     - fix possible bug when comparing attribute names in DeviceProxy                                                                                                         |
-|            |     - pretty print of DevFailed -> fix deprecation warning in python 2.6                                                                                                     |
-|            |     - device class properties where not properly fetched when there is no                                                                                                    |
-|            |       property value defined                                                                                                                                                 |
-|            |     - memory leak when converting DevFailed exceptions from C++ to python                                                                                                    |
-|            |     - python device server file without extension does not start                                                                                                             |
-|            |                                                                                                                                                                              |
-|            | Documentation:                                                                                                                                                               |
-|            |     - Improved FAQ                                                                                                                                                           |
-|            |     - Improved compilation chapter                                                                                                                                           |
-|            |     - Improved migration information                                                                                                                                         |
-+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| version  | Changes                                                                                                                                                           |
++==========+===================================================================================================================================================================+
+| 8.1.0    | Features:                                                                                                                                                         |
+|          | - Implemented tango C++ 8.1 API                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - `573: [pytango] python3 error with unregistered device <https://sourceforge.net/p/tango-cs/bugs/573/>`_                                                         |
+|          | - `611: URGENT fail to write attribute with PyTango 8.0.3 <https://sourceforge.net/p/tango-cs/bugs/611/>`_                                                        |
+|          | - `612: [pytango][8.0.3] failed to build from source on s390 <https://sourceforge.net/p/tango-cs/bugs/612/>`_                                                     |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.3    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `88: Implement Util::server_set_event_loop method in python <https://sourceforge.net/p/tango-cs/feature-requests/88>`_                                          |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3576353: [pytango] segfault on 'RestartServer' <https://sourceforge.net/tracker/?func=detail&aid=3576353&group_id=57612&atid=484769>`_                         |
+|          | - `3579062: [pytango] Attribute missing methods <https://sourceforge.net/tracker/?func=detail&aid=3579062&group_id=57612&atid=484769>`_                           |
+|          | - `3586337: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/tracker/?func=detail&aid=3586337&group_id=57612&atid=484769>`_        |
+|          | - `3598514: DeviceProxy.__setattr__ break python's descriptors <https://sourceforge.net/tracker/?func=detail&aid=3598514&group_id=57612&atid=484769>`_            |
+|          | - `3607779: [pytango] IPython 0.10 error <https://sourceforge.net/tracker/?func=detail&aid=3607779&group_id=57612&atid=484769>`_                                  |
+|          | - `598: Import DLL by PyTango failed on windows <https://sourceforge.net/p/tango-cs/bugs/598/>`_                                                                  |
+|          | - `605: [pytango] use distutils.version module <https://sourceforge.net/p/tango-cs/bugs/605/>`_                                                                   |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.2    | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3570970: [pytango] problem during the python3 building <https://sourceforge.net/tracker/?func=detail&aid=3570970&group_id=57612&atid=484769>`_                 |
+|          | - `3570971: [pytango] itango does not work without qtconsole <https://sourceforge.net/tracker/?func=detail&aid=3570971&group_id=57612&atid=484769>`_              |
+|          | - `3570972: [pytango] warning/error when building 8.0.0 <https://sourceforge.net/tracker/?func=detail&aid=3570972&group_id=57612&atid=484769>`_                   |
+|          | - `3570975: [pytango] problem during use of python3 version <https://sourceforge.net/tracker/?func=detail&aid=3570975&group_id=57612&atid=484769>`_               |
+|          | - `3574099: [pytango] compile error with gcc < 4.5 <https://sourceforge.net/tracker/?func=detail&aid=3574099&group_id=57612&atid=484769>`_                        |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.1    | *SKIPPED*                                                                                                                                                         |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 8.0.0    | Features:                                                                                                                                                         |
+|          | - Implemented tango C++ 8.0 API                                                                                                                                   |
+|          | - Python 3k compatible                                                                                                                                            |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3023857: DevEncoded write attribute not supported <https://sourceforge.net/tracker/?func=detail&aid=3023857&group_id=57612&atid=484769>`_                      |
+|          | - `3521545: [pytango] problem with tango profile <https://sourceforge.net/tracker/?func=detail&aid=3521545&group_id=57612&atid=484769>`_                          |
+|          | - `3530535: PyTango group writting fails <https://sourceforge.net/tracker/?func=detail&aid=3530535&group_id=57612&atid=484769>`_                                  |
+|          | - `3564959: EncodedAttribute.encode_xxx() methods don't accept bytearray  <https://sourceforge.net/tracker/?func=detail&aid=3564959&group_id=57612&atid=484769>`_ |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.4    | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `551: [pytango] Some DeviceClass methods are not python safe <https://sourceforge.net/p/tango-cs/bugs/551/>`_                                                   |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.3    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3495607: DeviceClass.device_name_factory is missing <https://sourceforge.net/tracker/?func=detail&aid=3495607&group_id=57612&atid=484772>`_                    |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3103588: documentation of PyTango.Attribute.Group <https://sourceforge.net/tracker/?func=detail&aid=3103588&group_id=57612&atid=484769>`_                      |
+|          | - `3458336: Problem with pytango 7.2.2 <https://sourceforge.net/tracker/?func=detail&aid=3458336&group_id=57612&atid=484769>`_                                    |
+|          | - `3463377: PyTango memory leak in read encoded attribute <https://sourceforge.net/tracker/?func=detail&aid=3463377&group_id=57612&atid=484769>`_                 |
+|          | - `3487930: [pytango] wrong python dependency <https://sourceforge.net/tracker/?func=detail&aid=3487930&group_id=57612&atid=484769>`_                             |
+|          | - `3511509: Attribute.set_value_date_quality for encoded does not work <https://sourceforge.net/tracker/?func=detail&aid=3511509&group_id=57612&atid=484769>`_    |
+|          | - `3514457: [pytango]  TANGO_HOST multi-host support <https://sourceforge.net/tracker/?func=detail&aid=3514457&group_id=57612&atid=484769>`_                      |
+|          | - `3520739: command_history(...) in  PyTango <https://sourceforge.net/tracker/?func=detail&aid=3520739&group_id=57612&atid=484769>`_                              |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.2    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3305251: DS dynamic attributes discards some Attr properties <https://sourceforge.net/tracker/?func=detail&aid=3305251&group_id=57612&atid=484769>`_           |
+|          | - `3365792: DeviceProxy.<cmd_name> could be documented <https://sourceforge.net/tracker/?func=detail&aid=3365792&group_id=57612&atid=484772>`_                    |
+|          | - `3386079: add support for ipython 0.11 <https://sourceforge.net/tracker/?func=detail&aid=3386079&group_id=57612&atid=484772>`_                                  |
+|          | - `3437654: throw python exception as tango exception <https://sourceforge.net/tracker/?func=detail&aid=3437654&group_id=57612&atid=484772>`_                     |
+|          | - `3447477: spock profile installation <https://sourceforge.net/tracker/?func=detail&aid=3447477&group_id=57612&atid=484772>`_                                    |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3372371: write attribute of DevEncoded doesn't work <https://sourceforge.net/tracker/?func=detail&aid=3372371&group_id=57612&atid=484769>`_                    |
+|          | - `3374026: [pytango] pyflakes warning <https://sourceforge.net/tracker/?func=detail&aid=3374026&group_id=57612&atid=484769>`_                                    |
+|          | - `3404771: PyTango.MultiAttribute.get_attribute_list missing <https://sourceforge.net/tracker/?func=detail&aid=3404771&group_id=57612&atid=484769>`_             |
+|          | - `3405580: PyTango.MultiClassAttribute missing <https://sourceforge.net/tracker/?func=detail&aid=3405580&group_id=57612&atid=484769>`_                           |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.1    | *SKIPPED*                                                                                                                                                         |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.2.0    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3286678: Add missing EncodedAttribute JPEG methods <https://sourceforge.net/tracker/?func=detail&aid=3286678&group_id=57612&atid=484772>`_                     |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.6    | Bug fixes:                                                                                                                                                        |
+|          | - 7.1.5 distribution is missing some files                                                                                                                        |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.5    | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3284174: 7.1.4 does not build with gcc 4.5 and tango 7.2.6 <https://sourceforge.net/tracker/?func=detail&aid=3284174&group_id=57612&atid=484769>`_             |
+|          | - `3284265: [pytango][7.1.4] a few files without licence and copyright <https://sourceforge.net/tracker/?func=detail&aid=3284265&group_id=57612&atid=484769>`_    |
+|          | - `3284318: copyleft vs copyright <https://sourceforge.net/tracker/?func=detail&aid=3284318&group_id=57612&atid=484769>`_                                         |
+|          | - `3284434: [pytango][doc] few ERROR during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284434&group_id=57612&atid=484769>`_            |
+|          | - `3284435: [pytango][doc] few warning during the doc generation <https://sourceforge.net/tracker/?func=detail&aid=3284435&group_id=57612&atid=484769>`_          |
+|          | - `3284440: [pytango][spock] the profile can't be installed <https://sourceforge.net/tracker/?func=detail&aid=3284440&group_id=57612&atid=484769>`_               |
+|          | - `3285185: PyTango Device Server does not load Class Properties values <https://sourceforge.net/tracker/?func=detail&aid=3285185&group_id=57612&atid=484769>`_   |
+|          | - `3286055: PyTango 7.1.x DS using Tango C++ 7.2.x seg faults on exit <https://sourceforge.net/tracker/?func=detail&aid=3286055&group_id=57612&atid=484769>`_     |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.4    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3274309: Generic Callback for events <https://sourceforge.net/tracker/?func=detail&aid=3274309&group_id=57612&atid=484772>`_                                   |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3011775: Seg Faults due to removed dynamic attributes <https://sourceforge.net/tracker/?func=detail&aid=3011775&group_id=57612&atid=484769>`_                  |
+|          | - `3105169: PyTango 7.1.3 does not compile with Tango 7.2.X <https://sourceforge.net/tracker/?func=detail&aid=3105169&group_id=57612&atid=484769>`_               |
+|          | - `3107243: spock profile does not work with python 2.5 <https://sourceforge.net/tracker/?func=detail&aid=3107243&group_id=57612&atid=484769>`_                   |
+|          | - `3124427: PyTango.WAttribute.set_max_value() changes min value <https://sourceforge.net/tracker/?func=detail&aid=3124427&group_id=57612&atid=484769>`_          |
+|          | - `3170399: Missing documentation about is_<attr>_allowed method <https://sourceforge.net/tracker/?func=detail&aid=3170399&group_id=57612&atid=484769>`_          |
+|          | - `3189082: Missing get_properties() for Attribute class <https://sourceforge.net/tracker/?func=detail&aid=3189082&group_id=57612&atid=484769>`_                  |
+|          | - `3196068: delete_device() not called after server_admin.Kill() <https://sourceforge.net/tracker/?func=detail&aid=3196068&group_id=57612&atid=484769>`_          |
+|          | - `3257286: Binding crashes when reading a WRITE string attribute <https://sourceforge.net/tracker/?func=detail&aid=3257286&group_id=57612&atid=484769>`_         |
+|          | - `3267628: DP.read_attribute(, extract=List/tuple) write value is wrong <https://sourceforge.net/tracker/?func=detail&aid=3267628&group_id=57612&atid=484769>`_  |
+|          | - `3274262: Database.is_multi_tango_host missing <https://sourceforge.net/tracker/?func=detail&aid=3274262&group_id=57612&atid=484769>`_                          |
+|          | - `3274319: EncodedAttribute is missing in PyTango (<= 7.1.3) <https://sourceforge.net/tracker/?func=detail&aid=3274319&group_id=57612&atid=484769>`_             |
+|          | - `3277269: read_attribute(DevEncoded) is not numpy as expected <https://sourceforge.net/tracker/?func=detail&aid=3277269&group_id=57612&atid=484769>`_           |
+|          | - `3278946: DeviceAttribute copy constructor is not working <https://sourceforge.net/tracker/?func=detail&aid=3278946&group_id=57612&atid=484769>`_               |
+|          |                                                                                                                                                                   |
+|          | Documentation:                                                                                                                                                    |
+|          | - Added :ref:`utilities` chapter                                                                                                                                  |
+|          | - Added :ref:`encoded` chapter                                                                                                                                    |
+|          | - Improved :ref:`server` chapter                                                                                                                                  |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.3    | Features:                                                                                                                                                         |
+|          | - tango logging with print statement                                                                                                                              |
+|          | - tango logging with decorators                                                                                                                                   |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3060380: ApiUtil should be exported to PyTango  <https://sourceforge.net/tracker/?func=detail&aid=3060380&group_id=57612&atid=484772>`_                        |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - added licence header to all source code files                                                                                                                   |
+|          | - spock didn't work without TANGO_HOST env. variable (it didn't recognize                                                                                         |
+|          | tangorc)                                                                                                                                                          |
+|          | - spock should give a proper message if it tries to be initialized outside                                                                                        |
+|          | ipython                                                                                                                                                           |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `3048798: licence issue GPL != LGPL <https://sourceforge.net/tracker/?func=detail&aid=3048798&group_id=57612&atid=484769>`_                                     |
+|          | - `3073378: DeviceImpl.signal_handler raising exception crashes DS <https://sourceforge.net/tracker/?func=detail&aid=3073378&group_id=57612&atid=484769>`_        |
+|          | - `3088031: Python DS unable to read DevVarBooleanArray property <https://sourceforge.net/tracker/?func=detail&aid=3088031&group_id=57612&atid=484769>`_          |
+|          | - `3102776: PyTango 7.1.2 does not work with python 2.4 & boost 1.33.0 <https://sourceforge.net/tracker/?func=detail&aid=3102776&group_id=57612&atid=484769>`_    |
+|          | - `3102778: Fix compilation warnings in linux <https://sourceforge.net/tracker/?func=detail&aid=3102778&group_id=57612&atid=484769>`_                             |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.2    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2995964: Dynamic device creation <https://sourceforge.net/tracker/?func=detail&aid=2995964&group_id=57612&atid=484772>`_                                       |
+|          | - `3010399: The DeviceClass.get_device_list that exists in C++ is missing <https://sourceforge.net/tracker/?func=detail&aid=3010399&group_id=57612&atid=484772>`_ |
+|          | - `3023686: Missing DeviceProxy.<attribute name> <https://sourceforge.net/tracker/?func=detail&aid=3023686&group_id=57612&atid=484772>`_                          |
+|          | - `3025396: DeviceImpl is missing some CORBA methods <https://sourceforge.net/tracker/?func=detail&aid=3025396&group_id=57612&atid=484772>`_                      |
+|          | - `3032005: IPython extension for PyTango <https://sourceforge.net/tracker/?func=detail&aid=3032005&group_id=57612&atid=484772>`_                                 |
+|          | - `3033476: Make client objects pickable <https://sourceforge.net/tracker/?func=detail&aid=3033476&group_id=57612&atid=484772>`_                                  |
+|          | - `3039902: PyTango.Util.add_class would be useful <https://sourceforge.net/tracker/?func=detail&aid=3039902&group_id=57612&atid=484772>`_                        |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2975940: DS command with DevVarCharArray return type fails <https://sourceforge.net/tracker/?func=detail&aid=2975940&group_id=57612&atid=484769>`_             |
+|          | - `3000467: DeviceProxy.unlock is LOCKING instead of unlocking! <https://sourceforge.net/tracker/?func=detail&aid=3000467&group_id=57612&atid=484769>`_           |
+|          | - `3010395: Util.get_device_* methods don't work <https://sourceforge.net/tracker/?func=detail&aid=3010395&group_id=57612&atid=484769>`_                          |
+|          | - `3010425: Database.dev_name does not work <https://sourceforge.net/tracker/?func=detail&aid=3010425&group_id=57612&atid=484769>`_                               |
+|          | - `3016949: command_inout_asynch callback does not work <https://sourceforge.net/tracker/?func=detail&aid=3016949&group_id=57612&atid=484769>`_                   |
+|          | - `3020300: PyTango does not compile with gcc 4.1.x <https://sourceforge.net/tracker/?func=detail&aid=3020300&group_id=57612&atid=484769>`_                       |
+|          | - `3030399: Database put(delete)_attribute_alias generates segfault <https://sourceforge.net/tracker/?func=detail&aid=3030399&group_id=57612&atid=484769>`_       |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.1    | Features:                                                                                                                                                         |
+|          | - Improved setup script                                                                                                                                           |
+|          | - Interfaced with PyPI                                                                                                                                            |
+|          | - Cleaned build script warnings due to unclean python C++ macro definitions                                                                                       |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2985993: PyTango numpy command support <https://sourceforge.net/tracker/?func=detail&aid=2985993&group_id=57612&atid=484772>`_                                 |
+|          | - `2971217: PyTango.GroupAttrReplyList slicing <https://sourceforge.net/tracker/?func=detail&aid=2971217&group_id=57612&atid=484772>`_                            |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2983299: Database.put_property() deletes the property <https://sourceforge.net/tracker/?func=detail&aid=2983299&group_id=57612&atid=484769>`_                  |
+|          | - `2953689: can not write_attribute scalar/spectrum/image <https://sourceforge.net/tracker/?func=detail&aid=2953689&group_id=57612&atid=484769>`_                 |
+|          | - `2953030: PyTango doc installation <https://sourceforge.net/tracker/?func=detail&aid=2953030&group_id=57612&atid=484769>`_                                      |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.0    | Features:                                                                                                                                                         |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2908176: read_*, write_* and is_*_allowed() methods can now be defined <https://sourceforge.net/tracker/?func=detail&aid=2908176&group_id=57612&atid=484772>`_ |
+|          | - `2941036: TimeVal conversion to time and datetime <https://sourceforge.net/tracker/?func=detail&aid=2941036&group_id=57612&atid=484772>`_                       |
+|          | - added str representation on Attr, Attribute, DeviceImpl and DeviceClass                                                                                         |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - from sourceforge:                                                                                                                                               |
+|          | - `2903755: get_device_properties() bug reading DevString properties <https://sourceforge.net/tracker/?func=detail&aid=2903755group_id=57612&atid=484769>`_       |
+|          | - `2909927: PyTango.Group.read_attribute() return values <https://sourceforge.net/tracker/?func=detail&aid=2909927&group_id=57612&atid=484769>`_                  |
+|          | - `2914194: DevEncoded does not work <https://sourceforge.net/tracker/?func=detail&aid=2914194&group_id=57612&atid=484769>`_                                      |
+|          | - `2916397: PyTango.DeviceAttribute copy constructor does not work <https://sourceforge.net/tracker/?func=detail&aid=2916397&group_id=57612&atid=484769>`_        |
+|          | - `2936173: PyTango.Group.read_attributes() fails <https://sourceforge.net/tracker/?func=detail&aid=2936173&group_id=57612&atid=484769>`_                         |
+|          | - `2949099: Missing PyTango.Except.print_error_stack <https://sourceforge.net/tracker/?func=detail&aid=2949099&group_id=57612&atid=484769>`_                      |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
+| 7.1.0rc1 | Features:                                                                                                                                                         |
+|          | - v = image_attribute.get_write_value() returns square sequences (arrays of                                                                                       |
+|          | arrays, or numpy objects) now instead of flat lists. Also for spectrum                                                                                            |
+|          | attributes a numpy is returned by default now instead.                                                                                                            |
+|          | - image_attribute.set_value(v) accepts numpy arrays now or square sequences                                                                                       |
+|          | instead of just flat lists. So, dim_x and dim_y are useless now. Also the                                                                                         |
+|          | numpy path is faster.                                                                                                                                             |
+|          | - new enum AttrSerialModel                                                                                                                                        |
+|          | - Attribute new methods: set(get)_attr_serial_model, set_change_event,                                                                                            |
+|          | set_archive_event, is_change_event, is_check_change_event,                                                                                                        |
+|          | is_archive_criteria, is_check_archive_criteria, remove_configuration                                                                                              |
+|          | - added support for numpy scalars in tango operations like write_attribute                                                                                        |
+|          | (ex: now a DEV_LONG attribute can receive a numpy.int32 argument in a                                                                                             |
+|          | write_attribute method call)                                                                                                                                      |
+|          |                                                                                                                                                                   |
+|          | Bug fixes:                                                                                                                                                        |
+|          | - DeviceImpl.set_value for scalar attributes                                                                                                                      |
+|          | - DeviceImpl.push_***_event                                                                                                                                       |
+|          | - server commands with DevVar***StringArray as parameter or as return type                                                                                        |
+|          | - in windows,a bug in PyTango.Util prevented servers from starting up                                                                                             |
+|          | - DeviceImpl.get_device_properties for string properties assigns only first                                                                                       |
+|          | character of string to object member instead of entire string                                                                                                     |
+|          | - added missing methods to Util                                                                                                                                   |
+|          | - exported SubDevDiag class                                                                                                                                       |
+|          | - error in read/events of attributes of type DevBoolean READ_WRITE                                                                                                |
+|          | - error in automatic unsubscribe events of DeviceProxy when the object                                                                                            |
+|          | disapears (happens only on some compilers with some optimization flags)                                                                                           |
+|          | - fix possible bug when comparing attribute names in DeviceProxy                                                                                                  |
+|          | - pretty print of DevFailed -> fix deprecation warning in python 2.6                                                                                              |
+|          | - device class properties where not properly fetched when there is no                                                                                             |
+|          | property value defined                                                                                                                                            |
+|          | - memory leak when converting DevFailed exceptions from C++ to python                                                                                             |
+|          | - python device server file without extension does not start                                                                                                      |
+|          |                                                                                                                                                                   |
+|          | Documentation:                                                                                                                                                    |
+|          | - Improved FAQ                                                                                                                                                    |
+|          | - Improved compilation chapter                                                                                                                                    |
+|          | - Improved migration information                                                                                                                                  |
++----------+-------------------------------------------------------------------------------------------------------------------------------------------------------------------+
diff --git a/setup.py b/setup.py
index 27b7809..f9995de 100644
--- a/setup.py
+++ b/setup.py
@@ -1,21 +1,21 @@
 ################################################################################
 ##
 ## This file is part of PyTango, a python binding for Tango
-## 
+##
 ## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## PyTango is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
 ## the Free Software Foundation, either version 3 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## PyTango is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU Lesser General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -83,16 +83,17 @@ def uniquify(seq):
     return no_dups
 
 def get_c_numpy():
-    NUMPY_ROOT = os.environ.get('NUMPY_ROOT')
-    if NUMPY_ROOT is not None:
-        d = os.path.join(NUMPY_ROOT, 'include')
-        if os.path.isdir(d):
-            return d
     if numpy is None:
-        return None
-    d = os.path.join(numpy.__path__[0], 'core', 'include')
-    if os.path.isdir(d):
-        return d
+        return
+    else:
+        get_include = getattr(numpy, "get_include", None)
+        if get_include is None:
+            get_include = getattr(numpy, "get_numpy_include", None)
+            if get_include is None:
+                return
+        inc = get_include()
+        if os.path.isdir(inc):
+            return inc
 
 def has_c_numpy():
     return get_c_numpy() is not None
@@ -104,9 +105,9 @@ def has_numpy(with_src=True):
     return ret
 
 def get_script_files():
-    
-    FILTER_OUT = (), # "winpostinstall.py",
-    
+
+    FILTER_OUT = (),  # "winpostinstall.py",
+
     scripts_dir = abspath('scripts')
     scripts = []
     items = os.listdir(scripts_dir)
@@ -129,14 +130,14 @@ def get_script_files():
     return scripts
 
 class build(dftbuild):
-    
+
     user_options = dftbuild.user_options + \
         [('without-ipython', None, "Tango IPython extension"),
          ('strip-lib', None, "strips the shared library of debugging symbols (Unix like systems only)"),
          ('no-doc', None, "do not build documentation") ]
-    
+
     boolean_options = dftbuild.boolean_options + ['without-ipython', 'strip-lib', 'no-doc']
-    
+
     def initialize_options (self):
         dftbuild.initialize_options(self)
         self.without_ipython = None
@@ -145,21 +146,21 @@ class build(dftbuild):
 
     def finalize_options(self):
         dftbuild.finalize_options(self)
-        
+
     def run(self):
         if numpy is None:
             self.warn('NOT using numpy: it is not available')
         elif get_c_numpy() is None:
             self.warn("NOT using numpy: numpy available but C source is not")
-        
+
         if IPython and not self.without_ipython:
             if V(IPython.__version__) > V('0.10'):
                 self.distribution.py_modules.append('IPython.config.profile.tango.ipython_config')
             else:
                 self.distribution.py_modules.append('IPython.Extensions.ipy_profile_tango')
-            
+
         dftbuild.run(self)
-        
+
         if self.strip_lib:
             if os.name == 'posix':
                 has_objcopy = os.system("type objcopy") == 0
@@ -186,15 +187,15 @@ class build(dftbuild):
             return False
         if V(sphinx.__version__) <= V("0.6.5"):
             print("Documentation will not be generated: sphinx version (%s) too low. Needs 0.6.6" % sphinx.__version__)
-            return False 
+            return False
         setup_dir = os.path.dirname(os.path.abspath(__file__))
         return os.path.isdir(os.path.join(setup_dir, 'doc'))
 
-    sub_commands = dftbuild.sub_commands + [('build_doc', has_doc),]
+    sub_commands = dftbuild.sub_commands + [('build_doc', has_doc), ]
 
 
-class build_ext(dftbuild_ext): 
-    
+class build_ext(dftbuild_ext):
+
     def build_extensions(self):
         self.use_cpp_0x = False
         if isinstance(self.compiler, UnixCCompiler):
@@ -202,11 +203,13 @@ class build_ext(dftbuild_ext):
             while '-Wstrict-prototypes' in compiler_pars:
                 del compiler_pars[compiler_pars.index('-Wstrict-prototypes')]
             #self.compiler.compiler_so = " ".join(compiler_pars)
-            
+
             # mimic tango check to activate C++0x extension
             import subprocess
             compiler = self.compiler.compiler
-            pipe = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE).stdout
+            proc = subprocess.Popen(compiler + ["-dumpversion"], stdout=subprocess.PIPE)
+            pipe = proc.stdout
+            proc.wait()
             gcc_ver = pipe.readlines()[0].decode().strip()
             if V(gcc_ver) >= V("4.3.3"):
                 self.use_cpp_0x = True
@@ -220,12 +223,12 @@ class build_ext(dftbuild_ext):
 
 if sphinx:
     class build_doc(BuildDoc):
-        
+
         def run(self):
             # make sure the python path is pointing to the newly built
             # code so that the documentation is built on this and not a
             # previously installed version
-            
+
             build = self.get_finalized_command('build')
             sys.path.insert(0, os.path.abspath(build.build_lib))
             sphinx.setup_command.BuildDoc.run(self)
@@ -236,14 +239,14 @@ class install_html(Command):
 
     user_options = [
         ('install-dir=', 'd', 'base directory for installing HTML documentation files')]
-    
+
     def initialize_options(self):
         self.install_dir = None
-        
+
     def finalize_options(self):
         self.set_undefined_options('install',
                                    ('install_html', 'install_dir'))
-                                   
+
     def run(self):
         build_doc = self.get_finalized_command('build_doc')
         src_html_dir = abspath(build_doc.build_dir, 'html')
@@ -251,9 +254,9 @@ class install_html(Command):
 
 
 class install(dftinstall):
-    
+
     user_options = dftinstall.user_options + \
-        [('install-html=', None, "installation directory for HTML documentation"),]
+        [('install-html=', None, "installation directory for HTML documentation"), ]
 
     def initialize_options(self):
         dftinstall.initialize_options(self)
@@ -264,7 +267,7 @@ class install(dftinstall):
         # We do a hack here. We cannot trust the 'install_base' value because it
         # is not always the final target. For example, in unix, the install_base
         # is '/usr' and all other install_* are directly relative to it. However,
-        # in unix-local (like ubuntu) install_base is still '/usr' but, for 
+        # in unix-local (like ubuntu) install_base is still '/usr' but, for
         # example, install_data, is '$install_base/local' which breaks everything.
         #
         # The hack consists in using install_data instead of install_base since
@@ -272,10 +275,10 @@ class install(dftinstall):
         # different systems.
         if self.install_html is None:
             self.install_html = os.path.join(self.install_data, 'share', 'doc', 'PyTango', 'html')
-        
+
     def has_html(self):
         return sphinx is not None
-    
+
     sub_commands = list(dftinstall.sub_commands)
     sub_commands.append(('install_html', has_html))
 
@@ -284,12 +287,12 @@ def main():
     ZMQ_ROOT = LOG4TANGO_ROOT = BOOST_ROOT = OMNI_ROOT = TANGO_ROOT = '/usr'
 
     TANGO_ROOT = os.environ.get('TANGO_ROOT', TANGO_ROOT)
-    OMNI_ROOT  = os.environ.get('OMNI_ROOT', OMNI_ROOT)
+    OMNI_ROOT = os.environ.get('OMNI_ROOT', OMNI_ROOT)
     BOOST_ROOT = os.environ.get('BOOST_ROOT', BOOST_ROOT)
     LOG4TANGO_ROOT = os.environ.get('LOG4TANGO_ROOT', LOG4TANGO_ROOT)
     ZMQ_ROOT = os.environ.get('ZMQ_ROOT', ZMQ_ROOT)
     numpy_c_include = get_c_numpy()
-    
+
     Release = get_release_info()
 
     author = Release.authors['Coutinho']
@@ -317,9 +320,9 @@ def main():
     package_data = {
         'PyTango' : [],
     }
-    
+
     scripts = get_script_files()
-    
+
     data_files = []
 
     classifiers = [
@@ -380,26 +383,28 @@ def main():
 
     macros = []
 
-    if not has_numpy():
-        macros.append( ('DISABLE_PYTANGO_NUMPY', None) )
+    if has_numpy():
+        macros.append(('PYTANGO_NUMPY_VERSION', numpy.__version__))
+    else:
+        macros.append(('DISABLE_PYTANGO_NUMPY', None))
 
     library_dirs = []
-    for f in (TANGO_ROOT,BOOST_ROOT,LOG4TANGO_ROOT,ZMQ_ROOT):
+    for f in (TANGO_ROOT, BOOST_ROOT, LOG4TANGO_ROOT, ZMQ_ROOT):
         is64 = 8 * struct.calcsize("P") == 64
-        d = os.path.join(f,'lib')
+        d = os.path.join(f, 'lib')
         if is64:
-            d = os.path.join(f,'lib64')
-            try: 
-                if not os.stat(d): raise Exception('%s_doesnt_exist'%d)
-            except: d = os.path.join(f,'lib')
+            d = os.path.join(f, 'lib64')
+            try:
+                if not os.stat(d): raise Exception('%s_doesnt_exist' % d)
+            except: d = os.path.join(f, 'lib')
         library_dirs.append(d)
-            
+
 #    library_dirs = [
 #        os.path.join(TANGO_ROOT, 'lib'),
 #        os.path.join(BOOST_ROOT, 'lib'),
 #        #os.path.join(LOG4TANGO_ROOT, 'lib'),
 #        os.path.join(ZMQ_ROOT, 'lib'),
-#    ]                                
+#    ]
 
     if os.name == 'nt':
         include_dirs += [ BOOST_ROOT ]
@@ -427,12 +432,12 @@ def main():
             ]
 
         library_dirs += [ os.path.join(OMNI_ROOT, 'lib', 'x86_win32') ]
-        
+
         extra_compile_args += [
             '/EHsc',
-            '/wd4005', # supress redefinition of HAVE_STRFTIME between python and omniORB
-            '/wd4996', # same as /D_SCL_SECURE_NO_WARNINGS
-            '/wd4250', # supress base class inheritance warning
+            '/wd4005',  # supress redefinition of HAVE_STRFTIME between python and omniORB
+            '/wd4996',  # same as /D_SCL_SECURE_NO_WARNINGS
+            '/wd4250',  # supress base class inheritance warning
         ]
 
         extra_link_args += []
@@ -451,9 +456,9 @@ def main():
         if please_debug:
             extra_compile_args += ['-g', '-O0']
             extra_link_args += ['-g' , '-O0']
-        
+
         include_dirs += [ os.path.join(BOOST_ROOT, 'include') ]
-        
+
         libraries += [
             'pthread',
             'rt',
@@ -463,9 +468,9 @@ def main():
             'omnithread',
             'COS4',
         ]
-        
+
         boost_library_name = 'boost_python'
-        
+
         if 'linux' in sys.platform:
             dist_name = platform.linux_distribution()[0].lower()
             debian_based = 'debian' in dist_name or 'ubuntu' in dist_name
@@ -480,8 +485,8 @@ def main():
         omni_lib = os.path.join(OMNI_ROOT, 'lib')
         if is64:
             omni_lib = os.path.join(OMNI_ROOT, 'lib64')
-            try: 
-                if not os.stat(d): raise Exception('%s_doesnt_exist'%d)
+            try:
+                if not os.stat(d): raise Exception('%s_doesnt_exist' % d)
             except:
                 omni_lib = os.path.join(OMNI_ROOT, 'lib')
         library_dirs += [ omni_lib ]
@@ -511,56 +516,56 @@ def main():
     src_dir = abspath('src', 'boost', 'cpp')
     client_dir = src_dir
     server_dir = os.path.join(src_dir, 'server')
-    _clientfiles = [ os.path.join(client_dir,fname) for fname in os.listdir(client_dir) if fname.endswith('.cpp') ]
+    _clientfiles = [ os.path.join(client_dir, fname) for fname in os.listdir(client_dir) if fname.endswith('.cpp') ]
     _clientfiles.sort()
-    _serverfiles = [ os.path.join(server_dir,fname) for fname in os.listdir(server_dir) if fname.endswith('.cpp') ]
+    _serverfiles = [ os.path.join(server_dir, fname) for fname in os.listdir(server_dir) if fname.endswith('.cpp') ]
     _serverfiles.sort()
     _cppfiles = _clientfiles + _serverfiles
-    
+
     _pytango = Extension(
-        name               = '_PyTango',
-        sources            = _cppfiles,
-        include_dirs       = include_dirs,
-        library_dirs       = library_dirs,
-        libraries          = libraries,
-        define_macros      = macros,
-        extra_compile_args = extra_compile_args,
-        extra_link_args    = extra_link_args,
-        language           = 'c++',
-        depends            = [])
+        name='_PyTango',
+        sources=_cppfiles,
+        include_dirs=include_dirs,
+        library_dirs=library_dirs,
+        libraries=libraries,
+        define_macros=macros,
+        extra_compile_args=extra_compile_args,
+        extra_link_args=extra_link_args,
+        language='c++',
+        depends=[])
 
     cmdclass = {'build'        : build,
                 'build_ext'    : build_ext,
                 'install_html' : install_html,
                 'install'      : install }
-    
+
     if sphinx:
         cmdclass['build_doc'] = build_doc
 
     dist = setup(
-        name             = 'PyTango',
-        version          = Release.version,
-        description      = Release.description,
-        long_description = Release.long_description,
-        author           = author[0],
-        author_email     = author[1],
-        url              = Release.url,
-        download_url     = Release.download_url,
-        platforms        = Release.platform,
-        license          = Release.license,
-        packages         = packages,
-        package_dir      = { 'PyTango' : os.path.join('src', 'boost', 'python') },
-        py_modules       = py_modules,
-        classifiers      = classifiers,
-        package_data     = package_data,
-        data_files       = data_files,
-        scripts          = scripts,
-        provides         = provides,
-        keywords         = Release.keywords,
-        requires         = requires,
-        ext_package      = 'PyTango',
-        ext_modules      = [_pytango],
-        cmdclass         = cmdclass)
+        name='PyTango',
+        version=Release.version,
+        description=Release.description,
+        long_description=Release.long_description,
+        author=author[0],
+        author_email=author[1],
+        url=Release.url,
+        download_url=Release.download_url,
+        platforms=Release.platform,
+        license=Release.license,
+        packages=packages,
+        package_dir={ 'PyTango' : os.path.join('src', 'boost', 'python') },
+        py_modules=py_modules,
+        classifiers=classifiers,
+        package_data=package_data,
+        data_files=data_files,
+        scripts=scripts,
+        provides=provides,
+        keywords=Release.keywords,
+        requires=requires,
+        ext_package='PyTango',
+        ext_modules=[_pytango],
+        cmdclass=cmdclass)
 
 if __name__ == "__main__":
     main()
diff --git a/src/boost/cpp/base_types.cpp b/src/boost/cpp/base_types.cpp
index 66e05b4..1869972 100644
--- a/src/boost/cpp/base_types.cpp
+++ b/src/boost/cpp/base_types.cpp
@@ -357,4 +357,6 @@ void export_base_types()
     export_time_val();
     
     def("raise_asynch_exception", &raise_asynch_exception);
+
+    def("_get_tango_lib_release", &Tango::_convert_tango_lib_release);
 }
diff --git a/src/boost/cpp/constants.cpp b/src/boost/cpp/constants.cpp
index d4f4a36..f50b87f 100644
--- a/src/boost/cpp/constants.cpp
+++ b/src/boost/cpp/constants.cpp
@@ -43,6 +43,25 @@ void export_constants()
     consts_scope.attr("NUMPY_SUPPORT") = true;
 #endif
 
+#ifdef PYTANGO_NUMPY_VERSION
+    consts_scope.attr("NUMPY_VERSION") = PYTANGO_NUMPY_VERSION;
+#else
+    consts_scope.attr("NUMPY_VERSION") = "0.0.0";
+#endif
+
+
+    consts_scope.attr("PY_MAJOR_VERSION") = PY_MAJOR_VERSION;
+    consts_scope.attr("PY_MINOR_VERSION") = PY_MINOR_VERSION;
+    consts_scope.attr("PY_MICRO_VERSION") = PY_MICRO_VERSION;
+    consts_scope.attr("PY_VERSION") = PY_VERSION;
+    consts_scope.attr("PY_VERSION_HEX") = PY_VERSION_HEX;
+
+    consts_scope.attr("BOOST_MAJOR_VERSION") = BOOST_VERSION / 100000;
+    consts_scope.attr("BOOST_MINOR_VERSION") = BOOST_VERSION / 100 % 1000;
+    consts_scope.attr("BOOST_PATCH_VERSION") = BOOST_VERSION % 100;
+    // missing BOOST_VERSION => do it in python
+
+
     //
     // From tango_const.h
     //
@@ -53,8 +72,10 @@ void export_constants()
     consts_scope.attr("TANGO_VERSION_MAJOR") = TANGO_VERSION_MAJOR;
     consts_scope.attr("TANGO_VERSION_MINOR") = TANGO_VERSION_MINOR;
     consts_scope.attr("TANGO_VERSION_PATCH") = TANGO_VERSION_PATCH;
-    
+    consts_scope.attr("TANGO_VERSION") = TgLibVers;
+
     consts_scope.attr("TgLibVers") = TgLibVers;
+    consts_scope.attr("TgLibVersNb") = TgLibVersNb;
     consts_scope.attr("DevVersion") = DevVersion;
     consts_scope.attr("DefaultMaxSeq") = DefaultMaxSeq;
     consts_scope.attr("DefaultBlackBoxDepth") = DefaultBlackBoxDepth;
diff --git a/src/boost/cpp/device_proxy.cpp b/src/boost/cpp/device_proxy.cpp
index eae6b5b..82dce1e 100644
--- a/src/boost/cpp/device_proxy.cpp
+++ b/src/boost/cpp/device_proxy.cpp
@@ -424,10 +424,10 @@ void export_device_proxy()
         .def("get_device_db", &Tango::DeviceProxy::get_device_db,
             bopy::return_value_policy<bopy::reference_existing_object>())
 
-        .def("status", &PyDeviceProxy::status,
+        .def("_status", &PyDeviceProxy::status,
             ( arg_("self") ) )
 
-        .def("state", &PyDeviceProxy::state,
+        .def("_state", &PyDeviceProxy::state,
             ( arg_("self") ) )
 
         .def("adm_name", &Tango::DeviceProxy::adm_name,
diff --git a/src/boost/python/device_proxy.py b/src/boost/python/device_proxy.py
index 82ddd08..167a37b 100644
--- a/src/boost/python/device_proxy.py
+++ b/src/boost/python/device_proxy.py
@@ -1,21 +1,21 @@
 ################################################################################
 ##
 ## This file is part of PyTango, a python binding for Tango
-## 
+##
 ## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## PyTango is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
 ## the Free Software Foundation, either version 3 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## PyTango is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU Lesser General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -43,7 +43,7 @@ from ._PyTango import StdStringVector, DbData, DbDatum, AttributeInfo, \
 
 from .utils import is_pure_str, is_non_str_seq, is_integer, \
     seq_2_StdStringVector, StdStringVector_2_seq, seq_2_DbData, DbData_2_dict
-    
+
 from .utils import document_method as __document_method
 from .utils import get_green_mode
 
@@ -52,7 +52,7 @@ from .tango_green import result, submit, green
 
 def get_device_proxy(*args, **kwargs):
     """get_device_proxy(self, dev_name, green_mode=None, wait=True, timeout=True) -> DeviceProxy
-    get_device_proxy(self, dev_name, need_check_acc, green_mode=None, wait=True, timeout=True) -> DeviceProxy
+    get_device_proxy(self, dev_name, need_check_acc, green_mode=None, wait=True, timeout=None) -> DeviceProxy
 
     Returns a new :class:`~PyTango.DeviceProxy`.
     There is no difference between using this function and the direct 
@@ -109,14 +109,14 @@ def get_device_proxy(*args, **kwargs):
     green_mode = kwargs.get('green_mode', get_green_mode())
     wait = kwargs.pop('wait', True)
     timeout = kwargs.pop('timeout', None)
-    
+
     d = submit(green_mode, DeviceProxy, *args, **kwargs)
     return result(d, green_mode, wait=wait, timeout=timeout)
 
 
 class __TangoInfo(object):
     """Helper class for when DeviceProxy.info() is not available"""
-    
+
     def __init__(self):
         self.dev_class = self.dev_type = 'Device'
         self.doc_url = 'http://www.esrf.fr/computing/cs/tango/tango_doc/ds_doc/'
@@ -190,7 +190,7 @@ def __DeviceProxy__getattr(self, name):
     # and the ugly trait_names could be removed.
     if name[:2] == "__" or name == 'trait_names':
         raise AttributeError(name)
-    
+
     name_l = name.lower()
     cmd_info = None
     if not hasattr(self, '__cmd_cache'):
@@ -202,28 +202,28 @@ def __DeviceProxy__getattr(self, name):
         cmd_info = self.__cmd_cache[name_l]
     except:
         pass
-        
+
     if cmd_info is not None:
         d, f = cmd_info
         if f is None:
-            doc =  "%s(%s) -> %s\n\n" % (d.cmd_name, d.in_type, d.out_type)
+            doc = "%s(%s) -> %s\n\n" % (d.cmd_name, d.in_type, d.out_type)
             doc += " -  in (%s): %s\n" % (d.in_type, d.in_type_desc)
             doc += " - out (%s): %s\n" % (d.out_type, d.out_type_desc)
-            def f(*args,**kwds): return self.command_inout(name, *args, **kwds)
+            def f(*args, **kwds): return self.command_inout(name, *args, **kwds)
             f.__doc__ = doc
             self.__cmd_cache[name_l] = d, f
         return f
-    
+
     find_attr = True
     if not hasattr(self, '__attr_cache') or name_l not in self.__attr_cache:
         try:
             self.__refresh_attr_cache()
         except:
             find_attr = False
-    
+
     if not find_attr or name_l not in self.__attr_cache:
         raise AttributeError(name)
-    
+
     return self.read_attribute(name).value
 
 def __DeviceProxy__setattr(self, name, value):
@@ -232,7 +232,7 @@ def __DeviceProxy__setattr(self, name, value):
             self.__refresh_attr_cache()
     except:
         return super(DeviceProxy, self).__setattr__(name, value)
-        
+
     if name.lower() in self.__attr_cache:
         self.write_attribute(name, value)
     else:
@@ -773,7 +773,7 @@ def __DeviceProxy__get_event_map(self):
         self.__dict__['_subscribed_events'] = dict()
     return self._subscribed_events
 
-def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesize, filters=[], stateless=False, extract_as=ExtractAs.Numpy):
+def __DeviceProxy__subscribe_event (self, attr_name, event_type, cb_or_queuesize, filters=[], stateless=False, extract_as=ExtractAs.Numpy):
     """
     subscribe_event(self, attr_name, event, callback, filters=[], stateless=False, extract_as=Numpy) -> int
 
@@ -837,7 +837,7 @@ def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesiz
             All other parameters are similar to the descriptions given in the
             other subscribe_event() version.
     """
-    
+
     if isinstance(cb_or_queuesize, collections.Callable):
         cb = __CallBackPushEvent()
         cb.push_event = cb_or_queuesize
@@ -845,7 +845,7 @@ def __DeviceProxy__subscribe_event ( self, attr_name, event_type, cb_or_queuesiz
         cb = __CallBackPushEvent()
         cb.push_event = cb_or_queuesize.push_event
     elif is_integer(cb_or_queuesize):
-        cb = cb_or_queuesize # queuesize
+        cb = cb_or_queuesize  # queuesize
     else:
         raise TypeError("Parameter cb_or_queuesize should be a number, a" + \
                     " callable object or an object with a 'push_event' method.")
@@ -986,6 +986,12 @@ def __DeviceProxy__write_attributes(self, *args, **kwargs):
 def __DeviceProxy__ping(self, *args, **kwargs):
     return self._ping(*args, **kwargs)
 
+def __DeviceProxy__state(self, *args, **kwargs):
+    return self._state(*args, **kwargs)
+
+def __DeviceProxy__status(self, *args, **kwargs):
+    return self._status(*args, **kwargs)
+
 def __init_DeviceProxy():
     DeviceProxy.__init_orig__ = DeviceProxy.__init__
     DeviceProxy.__init__ = __DeviceProxy__init__
@@ -998,7 +1004,7 @@ def __init_DeviceProxy():
     DeviceProxy.__getitem__ = __DeviceProxy__getitem
     DeviceProxy.__setitem__ = __DeviceProxy__setitem
     DeviceProxy.__contains__ = __DeviceProxy__contains
-    
+
     DeviceProxy._getAttributeNames = __DeviceProxy__getAttributeNames
 
     DeviceProxy.__refresh_cmd_cache = __DeviceProxy__refresh_cmd_cache
@@ -1012,11 +1018,14 @@ def __init_DeviceProxy():
     DeviceProxy.write_attributes_asynch = __DeviceProxy__write_attributes_asynch
     DeviceProxy.write_attribute_asynch = __DeviceProxy__write_attribute_asynch
     DeviceProxy.write_attribute_reply = DeviceProxy.write_attributes_reply
-    DeviceProxy.write_read_attribute = green(__DeviceProxy__write_read_attribute)
     DeviceProxy.write_attribute = green(__DeviceProxy__write_attribute)
     DeviceProxy.write_attributes = green(__DeviceProxy__write_attributes)
+    DeviceProxy.write_read_attribute = green(__DeviceProxy__write_read_attribute)
 
-    DeviceProxy.ping = green(__DeviceProxy__ping)   
+    DeviceProxy.ping = green(__DeviceProxy__ping)
+
+    DeviceProxy.state = green(__DeviceProxy__state)
+    DeviceProxy.status = green(__DeviceProxy__status)
 
     DeviceProxy.get_property = __DeviceProxy__get_property
     DeviceProxy.put_property = __DeviceProxy__put_property
@@ -1028,16 +1037,16 @@ def __init_DeviceProxy():
 
     DeviceProxy.__get_event_map = __DeviceProxy__get_event_map
     DeviceProxy.__get_event_map_lock = __DeviceProxy__get_event_map_lock
-    DeviceProxy.subscribe_event = __DeviceProxy__subscribe_event
-    DeviceProxy.unsubscribe_event = __DeviceProxy__unsubscribe_event
+    DeviceProxy.subscribe_event = green(__DeviceProxy__subscribe_event)
+    DeviceProxy.unsubscribe_event = green(__DeviceProxy__unsubscribe_event)
     DeviceProxy.__unsubscribe_event_all = __DeviceProxy__unsubscribe_event_all
     DeviceProxy.get_events = __DeviceProxy__get_events
     DeviceProxy.__str__ = __DeviceProxy__str
     DeviceProxy.__repr__ = __DeviceProxy__str
-    
+
     DeviceProxy._get_info_ = __DeviceProxy___get_info_
 
-    
+
 def __doc_DeviceProxy():
     def document_method(method_name, desc, append=True):
         return __document_method(DeviceProxy, method_name, desc, append)
@@ -1120,7 +1129,7 @@ def __doc_DeviceProxy():
 
             All DeviceInfo fields are strings except for the server_version
             which is an integer"
-    """ )
+    """)
 
     document_method("get_device_db", """
     get_device_db(self) -> Database
@@ -1131,7 +1140,7 @@ def __doc_DeviceProxy():
         Return     : (Database) object
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("status", """
     status(self) -> str
@@ -1140,7 +1149,7 @@ def __doc_DeviceProxy():
 
         Parameters : None
         Return     : (str) describing the device status
-    """ )
+    """)
 
     document_method("state", """
     state(self) -> DevState
@@ -1152,7 +1161,7 @@ def __doc_DeviceProxy():
         Example :
                 dev_st = dev.state()
                 if dev_st == DevState.ON : ...
-    """ )
+    """)
 
     document_method("adm_name", """
     adm_name(self) -> str
@@ -1162,7 +1171,7 @@ def __doc_DeviceProxy():
             server, e.g restart it
 
         New in PyTango 3.0.4
-    """ )
+    """)
 
     document_method("description", """
     description(self) -> str
@@ -1171,13 +1180,13 @@ def __doc_DeviceProxy():
 
         Parameters : None
         Return     : (str) describing the device
-    """ )
+    """)
 
     document_method("name", """
     name(self) -> str
 
             Return the device name from the device itself.
-    """ )
+    """)
 
     document_method("alias", """
     alias(self) -> str
@@ -1186,7 +1195,7 @@ def __doc_DeviceProxy():
             Otherwise, throws exception.
 
         Return     : (str) device alias
-    """ )
+    """)
 
     document_method("get_tango_lib_version", """
     get_tango_lib_version(self) -> int
@@ -1198,17 +1207,17 @@ def __doc_DeviceProxy():
                      Possible return value are: 100,200,500,520,700,800,810,...
         
         New in PyTango 8.1.0
-    """ )
-    
+    """)
+
     document_method("ping", """
     ping(self) -> int
 
             A method which sends a ping to the device
 
         Parameters : None
-        Return     : (int) time elapsed in milliseconds
+        Return     : (int) time elapsed in microseconds
         Throws     : exception if device is not alive
-    """ )
+    """)
 
     document_method("black_box", """
     black_box(self, n) -> sequence<str>
@@ -1222,7 +1231,7 @@ def __doc_DeviceProxy():
                      was executed
         Example :
                 print(black_box(4))
-    """ )
+    """)
 
 #-------------------------------------
 #   Device methods
@@ -1248,7 +1257,7 @@ def __doc_DeviceProxy():
                 print(com_info.disp_level)
                 
         See CommandInfo documentation string form more detail
-    """ )
+    """)
 
     document_method("command_list_query", """
     command_list_query(self) -> sequence<CommandInfo>
@@ -1257,7 +1266,7 @@ def __doc_DeviceProxy():
 
         Parameters : None
         Return     : (CommandInfoList) Sequence of CommandInfo objects
-    """ )
+    """)
 
     document_method("import_info", """
     import_info(self) -> DbDevImportInfo
@@ -1275,7 +1284,7 @@ def __doc_DeviceProxy():
 
         All DbDevImportInfo fields are strings except for exported which
         is an integer"
-    """ )
+    """)
 
 #-------------------------------------
 #   Property methods
@@ -1298,7 +1307,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     # get_attribute_config -> in code
     # get_attribute_config_ex -> in code
@@ -1315,7 +1324,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_list_query", """
     attribute_list_query(self) -> sequence<AttributeInfo>
@@ -1329,7 +1338,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_list_query_ex", """
     attribute_list_query_ex(self) -> sequence<AttributeInfoEx>
@@ -1343,7 +1352,7 @@ def __doc_DeviceProxy():
 
         Throws     : ConnectionFailed, CommunicationFailed,
                      DevFailed from device
-    """ )
+    """)
 
     # set_attribute_config -> in code
 
@@ -1391,7 +1400,7 @@ def __doc_DeviceProxy():
         *green_mode* parameter.
         *wait* parameter.
         *timeout* parameter.
-    """ )
+    """)
 
     document_method("read_attributes", """
     read_attributes(self, attr_names, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> sequence<DeviceAttribute>
@@ -1422,7 +1431,7 @@ def __doc_DeviceProxy():
         *green_mode* parameter.
         *wait* parameter.
         *timeout* parameter.
-    """ )
+    """)
 
     document_method("write_attribute", """
     write_attribute(self, attr_name, value, green_mode=None, wait=True, timeout=None) -> None
@@ -1453,7 +1462,7 @@ def __doc_DeviceProxy():
         *green_mode* parameter.
         *wait* parameter.
         *timeout* parameter.
-    """ )
+    """)
 
     document_method("write_attributes", """
     write_attributes(self, name_val, green_mode=None, wait=True, timeout=None) -> None
@@ -1482,7 +1491,7 @@ def __doc_DeviceProxy():
         *green_mode* parameter.
         *wait* parameter.
         *timeout* parameter.
-    """ )
+    """)
 
     document_method("write_read_attribute", """
     write_read_attribute(self, attr_name, value, extract_as=ExtractAs.Numpy, green_mode=None, wait=True, timeout=None) -> DeviceAttribute
@@ -1505,7 +1514,7 @@ def __doc_DeviceProxy():
         *green_mode* parameter.
         *wait* parameter.
         *timeout* parameter.
-    """ )
+    """)
 
 #-------------------------------------
 #   History methods
@@ -1523,7 +1532,7 @@ def __doc_DeviceProxy():
 
         Throws     : NonSupportedFeature, ConnectionFailed,
                      CommunicationFailed, DevFailed from device
-    """ )
+    """)
 
     document_method("attribute_history", """
     attribute_history(self, attr_name, depth, extract_as=ExtractAs.Numpy) -> sequence<DeviceAttributeHistory>
@@ -1540,7 +1549,7 @@ def __doc_DeviceProxy():
 
         Throws     : NonSupportedFeature, ConnectionFailed,
                      CommunicationFailed, DevFailed from device
-    """ )
+    """)
 
 #-------------------------------------
 #   Polling administration methods
@@ -1562,7 +1571,7 @@ def __doc_DeviceProxy():
                         - time since data in the ring buffer has not been updated
                         - delta time between the last records in the ring buffer
                         - exception parameters in case of the last execution failed
-    """ )
+    """)
 
     document_method("poll_command", """
     poll_command(self, cmd_name, period) -> None
@@ -1573,7 +1582,7 @@ def __doc_DeviceProxy():
             - cmd_name : (str) command name
             - period   : (int) polling period in milliseconds
         Return     : None
-    """ )
+    """)
 
     document_method("poll_attribute", """
     poll_attribute(self, attr_name, period) -> None
@@ -1584,7 +1593,7 @@ def __doc_DeviceProxy():
             - attr_name : (str) attribute name
             - period    : (int) polling period in milliseconds
         Return     : None
-    """ )
+    """)
 
     document_method("get_command_poll_period", """
     get_command_poll_period(self, cmd_name) -> int
@@ -1594,7 +1603,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : polling period in milliseconds
-    """ )
+    """)
 
     document_method("get_attribute_poll_period", """
     get_attribute_poll_period(self, attr_name) -> int
@@ -1604,7 +1613,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : polling period in milliseconds
-    """ )
+    """)
 
     document_method("is_command_polled", """
     is_command_polled(self, cmd_name) -> bool
@@ -1614,7 +1623,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : boolean value
-    """ )
+    """)
 
     document_method("is_attribute_polled", """
     is_attribute_polled(self, attr_name) -> bool
@@ -1624,7 +1633,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : boolean value
-    """ )
+    """)
 
     document_method("stop_poll_command", """
     stop_poll_command(self, cmd_name) -> None
@@ -1634,7 +1643,7 @@ def __doc_DeviceProxy():
         Parameters :
             - cmd_name : (str) command name
         Return     : None
-    """ )
+    """)
 
     document_method("stop_poll_attribute", """
     stop_poll_attribute(self, attr_name) -> None
@@ -1644,7 +1653,7 @@ def __doc_DeviceProxy():
         Parameters :
             - attr_name : (str) attribute name
         Return     : None
-    """ )
+    """)
 
 #-------------------------------------
 #   Asynchronous methods
@@ -1695,7 +1704,7 @@ def __doc_DeviceProxy():
                      CommunicationFailed, DevFailed from device
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("pending_asynch_call", """
     pending_asynch_call(self) -> int
@@ -1703,7 +1712,7 @@ def __doc_DeviceProxy():
             Return number of device asynchronous pending requests"
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     # write_attributes_asynch -> in code
 
@@ -1744,8 +1753,8 @@ def __doc_DeviceProxy():
         Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
 
         New in PyTango 7.0.0
-    """ )
-    
+    """)
+
     document_method("write_attribute_reply", """
     write_attribute_reply(self, id) -> None
 
@@ -1783,7 +1792,7 @@ def __doc_DeviceProxy():
         Throws     : AsynCall, AsynReplyNotArrived, CommunicationFailed, DevFailed from device.
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Logging administration methods
@@ -1812,7 +1821,7 @@ def __doc_DeviceProxy():
         Throws     : DevFailed from device
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("remove_logging_target", """
     remove_logging_target(self, target_type_target_name) -> None
@@ -1836,7 +1845,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_logging_target", """
     get_logging_target(self) -> sequence<str>
@@ -1850,7 +1859,7 @@ def __doc_DeviceProxy():
         Return     : a squence<str> with the logging targets
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_logging_level", """
     get_logging_level(self) -> int
@@ -1867,7 +1876,7 @@ def __doc_DeviceProxy():
         Return     : (int) representing the current logging level
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("set_logging_level", """
     set_logging_level(self, (int)level) -> None
@@ -1885,7 +1894,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Event methods
@@ -1911,7 +1920,7 @@ def __doc_DeviceProxy():
         Throws     : EventSystemFailed
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_last_event_date", """
     get_last_event_date(self, event_id) -> TimeVal
@@ -1930,7 +1939,7 @@ def __doc_DeviceProxy():
         Throws     : EventSystemFailed
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("is_event_queue_empty", """
     is_event_queue_empty(self, event_id) -> bool
@@ -1947,7 +1956,7 @@ def __doc_DeviceProxy():
             Throws     : EventSystemFailed
 
             New in PyTango 7.0.0
-    """ )
+    """)
 
 #-------------------------------------
 #   Locking methods
@@ -1992,7 +2001,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("unlock", """
     unlock(self, (bool)force) -> None
@@ -2011,7 +2020,7 @@ def __doc_DeviceProxy():
         Return     : None
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("locking_status", """
     locking_status(self) -> str
@@ -2032,7 +2041,7 @@ def __doc_DeviceProxy():
         Return     : a string representing the current locking status
 
         New in PyTango 7.0.0"
-    """ )
+    """)
 
     document_method("is_locked", """
     is_locked(self) -> bool
@@ -2043,7 +2052,7 @@ def __doc_DeviceProxy():
         Return     : (bool) True if the device is locked. Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("is_locked_by_me", """
     is_locked_by_me(self) -> bool
@@ -2056,7 +2065,7 @@ def __doc_DeviceProxy():
                         Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
     document_method("get_locker", """
     get_locker(self, lockinfo) -> bool
@@ -2072,7 +2081,7 @@ def __doc_DeviceProxy():
                      Otherwise, False
 
         New in PyTango 7.0.0
-    """ )
+    """)
 
 def device_proxy_init(doc=True):
     __init_DeviceProxy()
diff --git a/src/boost/python/pytango_init.py b/src/boost/python/pytango_init.py
index eaf6270..a11897b 100644
--- a/src/boost/python/pytango_init.py
+++ b/src/boost/python/pytango_init.py
@@ -1,21 +1,21 @@
 ################################################################################
 ##
 ## This file is part of PyTango, a python binding for Tango
-## 
+##
 ## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## PyTango is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
 ## the Free Software Foundation, either version 3 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## PyTango is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU Lesser General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -49,22 +49,62 @@ from .pytango_pprint import pytango_pprint_init
 from .pyutil import pyutil_init
 from .time_val import time_val_init
 from ._PyTango import constants
+from ._PyTango import _get_tango_lib_release
 
 __INITIALIZED = False
 __DOC = True
 
+
 def init_constants():
-    
-    tgver = tuple(map(int, constants.TgLibVers.split(".")))
-    tgver_str = "0x%02d%02d%02d00" % (tgver[0], tgver[1], tgver[2])
-    constants.TANGO_VERSION_HEX = int(tgver_str, 16)
-    
+    import sys
+    import platform
+
+    tg_ver = tuple(map(int, constants.TgLibVers.split(".")))
+    tg_ver_str = "0x%02d%02d%02d00" % (tg_ver[0], tg_ver[1], tg_ver[2])
+    constants.TANGO_VERSION_HEX = int(tg_ver_str, 16)
+
+    BOOST_VERSION = ".".join(map(str, (constants.BOOST_MAJOR_VERSION,
+                                       constants.BOOST_MINOR_VERSION,
+                                       constants.BOOST_PATCH_VERSION)))
+    constants.BOOST_VERSION = BOOST_VERSION
+
+    class Compile(object):
+        PY_VERSION = constants.PY_VERSION
+        TANGO_VERSION = constants.TANGO_VERSION
+        BOOST_VERSION = constants.BOOST_VERSION
+        if constants.NUMPY_SUPPORT:
+            NUMPY_VERSION = '0.0.0'
+        else:
+            NUMPY_VERSION = None
+        #UNAME = tuple(map(str, json.loads(constants.UNAME)))
+
+    tg_rt_ver_nb = _get_tango_lib_release()
+    tg_rt_major_ver = tg_rt_ver_nb / 100
+    tg_rt_minor_ver = tg_rt_ver_nb / 10 % 10
+    tg_rt_patch_ver = tg_rt_ver_nb % 10
+    tg_rt_ver = ".".join(map(str, (tg_rt_major_ver, tg_rt_minor_ver,
+                                   tg_rt_patch_ver)))
+
+    class Runtime(object):
+        PY_VERSION = ".".join(map(str, sys.version_info[:3]))
+        TANGO_VERSION = tg_rt_ver
+        BOOST_VERSION = '0.0.0'
+        if constants.NUMPY_SUPPORT:
+            import numpy
+            NUMPY_VERSION = numpy.__version__
+        else:
+            NUMPY_VERSION = None
+        UNAME = platform.uname()
+
+    constants.Compile = Compile
+    constants.Runtime = Runtime
+
 
 def init():
     global __INITIALIZED
     if __INITIALIZED:
         return
-    
+
     global __DOC
     doc = __DOC
     init_constants()
@@ -86,7 +126,7 @@ def init():
     pytango_pprint_init(doc=doc)
     pyutil_init(doc=doc)
     time_val_init(doc=doc)
-    
+
     # must come last: depends on device_proxy.init()
     attribute_proxy_init(doc=doc)
 
diff --git a/src/boost/python/tango_gevent.py b/src/boost/python/tango_gevent.py
index 72789f6..dec4958 100644
--- a/src/boost/python/tango_gevent.py
+++ b/src/boost/python/tango_gevent.py
@@ -1,37 +1,39 @@
 ################################################################################
 ##
 ## This file is part of PyTango, a python binding for Tango
-## 
+##
 ## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## PyTango is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
 ## the Free Software Foundation, either version 3 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## PyTango is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU Lesser General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
 ##
 ################################################################################
 
-__all__ = ["get_global_threadpool", "get_global_executor", "submit", "spawn"] 
+from __future__ import absolute_import
+
+__all__ = ["get_global_threadpool", "get_global_executor", "submit", "spawn"]
+
+import gevent
 
-__docformat__ = "restructuredtext"
 
 def get_global_threadpool():
-    import gevent
     return gevent.get_hub().threadpool
 
-get_global_executor = get_global_threadpool
-
 def spawn(fn, *args, **kwargs):
     return get_global_threadpool().spawn(fn, *args, **kwargs)
 
+
+get_global_executor = get_global_threadpool
 submit = spawn
diff --git a/src/boost/python/utils.py b/src/boost/python/utils.py
index c31b52e..584e754 100644
--- a/src/boost/python/utils.py
+++ b/src/boost/python/utils.py
@@ -1,21 +1,21 @@
 ################################################################################
 ##
 ## This file is part of PyTango, a python binding for Tango
-## 
+##
 ## http://www.tango-controls.org/static/PyTango/latest/doc/html/index.html
 ##
 ## Copyright 2011 CELLS / ALBA Synchrotron, Bellaterra, Spain
-## 
+##
 ## PyTango is free software: you can redistribute it and/or modify
 ## it under the terms of the GNU Lesser General Public License as published by
 ## the Free Software Foundation, either version 3 of the License, or
 ## (at your option) any later version.
-## 
+##
 ## PyTango is distributed in the hope that it will be useful,
 ## but WITHOUT ANY WARRANTY; without even the implied warranty of
 ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 ## GNU Lesser General Public License for more details.
-## 
+##
 ## You should have received a copy of the GNU Lesser General Public License
 ## along with PyTango.  If not, see <http://www.gnu.org/licenses/>.
 ##
@@ -41,14 +41,14 @@ __all__ = [ "get_green_mode", "set_green_mode",
 
 __docformat__ = "restructuredtext"
 
-import sys
 import os
-import collections
+import sys
+import inspect
 import numbers
 import functools
-import inspect
-import traceback
 import threading
+import traceback
+import collections
 
 from ._PyTango import StdStringVector, StdDoubleVector, \
     DbData, DbDevInfos, DbDevExportInfos, CmdArgType, AttrDataFormat, \
@@ -84,7 +84,7 @@ _array_str_types = (CmdArgType.DevVarStringArray,)
 _array_bool_types = (CmdArgType.DevVarBooleanArray,)
 
 _array_types = _array_numerical_types + _array_bool_types + _array_str_types + \
-    (CmdArgType.DevVarCharArray, 
+    (CmdArgType.DevVarCharArray,
      CmdArgType.DevVarDoubleStringArray, CmdArgType.DevVarLongStringArray)
 
 _binary_types = (CmdArgType.DevEncoded, CmdArgType.DevVarCharArray)
@@ -105,7 +105,14 @@ _scalar_to_array_type = {
     CmdArgType.ConstDevString : CmdArgType.DevVarStringArray,
 }
 
-__current_green_mode = GreenMode.Synchronous
+__default_green_mode = GreenMode.Synchronous
+try:
+    __current_green_mode = getattr(GreenMode,
+                                   os.environ.get("PYTANGO_GREEN_MODE",
+                                                  "Synchronous").capitalize())
+except:
+    __current_green_mode = __default_green_mode
+
 
 def set_green_mode(green_mode=None):
     """Sets the global default PyTango green mode.
@@ -122,6 +129,7 @@ def set_green_mode(green_mode=None):
         green_mode = GreenMode.Synchronous
     __current_green_mode = green_mode
 
+
 def get_green_mode():
     """Returns the current global default PyTango green mode.
 
@@ -146,7 +154,7 @@ def get_tango_device_classes():
             except AttributeError:
                 break
     return __device_classes
-            
+
 __str_klasses = str,
 __int_klasses = int,
 __number_klasses = numbers.Number,
@@ -173,7 +181,7 @@ if constants.NUMPY_SUPPORT:
     __int_klasses = tuple(list(__int_klasses) + [numpy.integer])
     __number_klasses = tuple(list(__number_klasses) + [numpy.number])
     __seq_klasses = tuple(list(__seq_klasses) + [numpy.ndarray])
-    
+
 __str_klasses = tuple(__str_klasses)
 __int_klasses = tuple(__int_klasses)
 __number_klasses = tuple(__number_klasses)
@@ -203,7 +211,7 @@ def is_scalar(tg_type):
     :return: True if the given tango type is a scalar or False otherwise
     :rtype: :py:obj:`bool`
     """
-    
+
     global _scalar_types
     return tg_type in _scalar_types
 
@@ -500,10 +508,10 @@ def seqStr_2_obj(seq, tg_type, tg_format=None):
     return _seqStr_2_obj_from_type(seq, tg_type)
 
 def _seqStr_2_obj_from_type(seq, tg_type):
-    
+
     if is_pure_str(seq):
         seq = seq,
-    
+
     #    Scalar cases
     global _scalar_int_types
     if tg_type in _scalar_int_types:
@@ -519,7 +527,7 @@ def _seqStr_2_obj_from_type(seq, tg_type):
 
     if tg_type == CmdArgType.DevBoolean:
         return seq[0].lower() == 'true'
-    
+
     #sequence cases
     if tg_type in (CmdArgType.DevVarCharArray, CmdArgType.DevVarStringArray):
         return seq
@@ -542,7 +550,7 @@ def _seqStr_2_obj_from_type(seq, tg_type):
         argout = []
         for x in seq:
             argout.append(x.lower() == 'true')
-        return argout        
+        return argout
 
     return []
 
@@ -574,7 +582,7 @@ def _seqStr_2_obj_from_type_format(seq, tg_type, tg_format):
                     tmp.append(float(y))
                 argout.append(tmp)
             return argout
-    
+
     #UNKNOWN_FORMAT
     return _seqStr_2_obj_from_type(tg_type, seq)
 
@@ -624,7 +632,7 @@ def document_method(klass, method_name, d, add=True):
             func.__doc__ = "%s\n%s" % (d, cpp_doc)
             return
     func.__doc__ = d
-    
+
     if func.__name__ != method_name:
         try:
             func.__name__ = method_name
@@ -673,28 +681,28 @@ class CaselessList(list):
     def __init__(self, inlist=[]):
         list.__init__(self)
         for entry in inlist:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. ' \
-                                'You supplied \"%s\" which is \"%s\"' % 
+                                'You supplied \"%s\" which is \"%s\"' %
                                 (entry, type(entry)))
             self.append(entry)
 
     def findentry(self, item):
         """A caseless way of checking if an item is in the list or not.
         It returns None or the entry."""
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. '\
                             'You supplied \"%s\"' % type(item))
         for entry in self:
             if item.lower() == entry.lower(): return entry
         return None
-    
+
     def __contains__(self, item):
         """A caseless way of checking if a list has a member in it or not."""
         for entry in self:
             if item.lower() == entry.lower(): return True
         return False
-        
+
     def remove(self, item):
         """Remove the first occurence of an item, the caseless way."""
         for entry in self:
@@ -702,7 +710,7 @@ class CaselessList(list):
                 list.remove(self, entry)
                 return
         raise ValueError(': list.remove(x): x not in list')
-    
+
     def copy(self):
         """Return a CaselessList copy of self."""
         return CaselessList(self)
@@ -710,29 +718,29 @@ class CaselessList(list):
     def list(self):
         """Return a normal list version of self."""
         return list(self)
-        
+
     def lowercopy(self):
         """Return a lowercase (list) copy of self."""
         return [entry.lower() for entry in self]
-    
+
     def append(self, item):
         """Adds an item to the list and checks it's a string."""
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. ' \
                             'You supplied \"%s\"' % type(item))
         list.append(self, item)
-        
+
     def extend(self, item):
         """Extend the list with another list. Each member of the list must be 
         a string."""
-        if not isinstance(item, list): 
+        if not isinstance(item, list):
             raise TypeError('You can only extend lists with lists. ' \
                             'You supplied \"%s\"' % type(item))
         for entry in item:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. '\
                                 'You supplied \"%s\"' % type(entry))
-            list.append(self, entry)        
+            list.append(self, entry)
 
     def count(self, item):
         """Counts references to 'item' in a caseless manner.
@@ -742,7 +750,7 @@ class CaselessList(list):
         for entry in self:
             if item.lower() == entry.lower():
                 count += 1
-        return count    
+        return count
 
     def index(self, item, minindex=0, maxindex=None):
         """Provide an index of first occurence of item in the list. (or raise 
@@ -752,9 +760,9 @@ class CaselessList(list):
         s.index(x[, i[, j]]) return smallest k such that s[k] == x and i <= k < j
         """
         if maxindex == None: maxindex = len(self)
-        minindex = max(0, minindex)-1
+        minindex = max(0, minindex) - 1
         maxindex = min(len(self), maxindex)
-        if not isinstance(item, str): 
+        if not isinstance(item, str):
             raise TypeError('Members of this object must be strings. '\
                             'You supplied \"%s\"' % type(item))
         index = minindex
@@ -763,11 +771,11 @@ class CaselessList(list):
             if item.lower() == self[index].lower():
                 return index
         raise ValueError(': list.index(x): x not in list')
-    
+
     def insert(self, i, x):
         """s.insert(i, x) same as s[i:i] = [x]
         Raises TypeError if x isn't a string."""
-        if not isinstance(x, str): 
+        if not isinstance(x, str):
             raise TypeError('Members of this object must be strings. ' \
                             'You supplied \"%s\"' % type(x))
         list.insert(self, i, x)
@@ -781,15 +789,15 @@ class CaselessList(list):
         the same length as the slice object requires.
         """
         if isinstance(index, int):
-            if not isinstance(value, str): 
+            if not isinstance(value, str):
                 raise TypeError('Members of this object must be strings. ' \
                                 'You supplied \"%s\"' % type(value))
             list.__setitem__(self, index, value)
         elif isinstance(index, slice):
-            if not hasattr(value, '__len__'): 
+            if not hasattr(value, '__len__'):
                 raise TypeError('Value given to set slice is not a sequence object.')
             for entry in value:
-                if not isinstance(entry, str): 
+                if not isinstance(entry, str):
                     raise TypeError('Members of this object must be strings. ' \
                                     'You supplied \"%s\"' % type(entry))
             list.__setitem__(self, index, value)
@@ -799,7 +807,7 @@ class CaselessList(list):
     def __setslice__(self, i, j, sequence):
         """Called to implement assignment to self[i:j]."""
         for entry in sequence:
-            if not isinstance(entry, str): 
+            if not isinstance(entry, str):
                 raise TypeError('Members of this object must be strings. ' \
                                 'You supplied \"%s\"' % type(entry))
         list.__setslice__(self, i, j, sequence)
@@ -818,7 +826,7 @@ class CaselessList(list):
             return list.__getitem__(self, index)
         else:
             return CaselessList(list.__getitem__(self, index))
-            
+
     def __add__(self, item):
         """To add a list, and return a CaselessList.
         Every element of item must be a string."""
@@ -828,7 +836,7 @@ class CaselessList(list):
         """To add a list, and return a CaselessList.
         Every element of item must be a string."""
         return CaselessList(list.__add__(self, item))
-    
+
     def __iadd__(self, item):
         """To add a list in place."""
         for entry in item: self.append(entry)
@@ -849,59 +857,59 @@ class CaselessDict(dict):
         if other:
             # Doesn't do keyword args
             if isinstance(other, dict):
-                for k,v in other.items():
+                for k, v in other.items():
                     dict.__setitem__(self, k.lower(), v)
             else:
-                for k,v in other:
+                for k, v in other:
                     dict.__setitem__(self, k.lower(), v)
-    
+
     def __getitem__(self, key):
         return dict.__getitem__(self, key.lower())
-    
+
     def __setitem__(self, key, value):
         dict.__setitem__(self, key.lower(), value)
-    
+
     def __contains__(self, key):
         return dict.__contains__(self, key.lower())
 
     def __delitem__(self, k):
         dict.__delitem__(self, k.lower())
-    
+
     def has_key(self, key):
         return dict.has_key(self, key.lower())
-    
+
     def get(self, key, def_val=None):
         return dict.get(self, key.lower(), def_val)
-    
+
     def setdefault(self, key, def_val=None):
         return dict.setdefault(self, key.lower(), def_val)
-    
+
     def update(self, other):
-        for k,v in other.items():
+        for k, v in other.items():
             dict.__setitem__(self, k.lower(), v)
-    
+
     def fromkeys(self, iterable, value=None):
         d = CaselessDict()
         for k in iterable:
             dict.__setitem__(d, k.lower(), value)
         return d
-    
+
     def pop(self, key, def_val=None):
         return dict.pop(self, key.lower(), def_val)
-    
+
     def keys(self):
         return CaselessList(dict.keys(self))
 
 __DEFAULT_FACT_IOR_FILE = "/tmp/rdifact.ior"
-__BASE_LINE             = "notifd"
-__END_NOTIFD_LINE       = "/DEVICE/notifd:"
+__BASE_LINE = "notifd"
+__END_NOTIFD_LINE = "/DEVICE/notifd:"
 __NOTIFD_FACTORY_PREFIX = "notifd/factory/"
 
 def notifd2db(notifd_ior_file=__DEFAULT_FACT_IOR_FILE, files=None, host=None, out=sys.stdout):
     ior_string = ""
     with file(notifd_ior_file) as ior_file:
         ior_string = ior_file.read()
-    
+
     if files is None:
         return _notifd2db_real_db(ior_string, host=host, out=out)
     else:
@@ -921,7 +929,7 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
     import PyTango
     print("going to export notification service event factory to " \
           "Tango database ...", file=out)
-                 
+
     num_retries = 3
     while num_retries > 0:
         try:
@@ -935,16 +943,16 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
                 print(str(df), file=out)
                 return
             print("Can't create Tango database object, retrying....", file=out)
-    
+
     if host is None:
         import socket
         host_name = socket.getfqdn()
-    
+
     global __NOTIFD_FACTORY_PREFIX
     notifd_factory_name = __NOTIFD_FACTORY_PREFIX + host_name
-    
+
     args = notifd_factory_name, ior_string, host_name, str(os.getpid()), "1"
-    
+
     num_retries = 3
     while num_retries > 0:
         try:
@@ -963,7 +971,7 @@ def _notifd2db_real_db(ior_string, host=None, out=sys.stdout):
                 num_retries = 0
         except Exception:
             num_retries = 0
-    
+
     if num_retries == 0:
         print("Failed to export notification service event factory " \
               "to TANGO database", file=out)
@@ -994,12 +1002,12 @@ class EventCallBack(object):
 
     def __init__(self, format="{date} {dev_name} {name} {type} {value}",
                  fd=sys.stdout, max_buf=100):
-        
+
         self._msg = format
         self._fd = fd
         self._evts = []
         self._max_buf = max_buf
-    
+
     def get_events(self):
         """Returns the list of events received by this callback
            
@@ -1007,7 +1015,7 @@ class EventCallBack(object):
            :rtype: sequence<obj>
         """
         return self._evts
-        
+
     def push_event(self, evt):
         """Internal usage only"""
         try:
@@ -1015,7 +1023,7 @@ class EventCallBack(object):
         except Exception as e:
             print("Unexpected error in callback for %s: %s" \
                   % (str(evt), str(e)), file=self._fd)
-    
+
     def _push_event(self, evt):
         """Internal usage only"""
         self._append(evt)
@@ -1056,15 +1064,15 @@ class EventCallBack(object):
         if len(evts) == self._max_buf:
             evts.pop(0)
         evts.append(evt)
-        
+
     def _get_value(self, evt):
         """Internal usage only"""
         if evt.err:
             e = evt.errors[0]
             return "[%s] %s" % (e.reason, e.desc)
-        
+
         if isinstance(evt, EventData):
-            return "[%s] %s" %(evt.attr_value.quality, str(evt.attr_value.value))
+            return "[%s] %s" % (evt.attr_value.quality, str(evt.attr_value.value))
         elif isinstance(evt, AttrConfEventData):
             cfg = evt.attr_conf
             return "label='%s'; unit='%s'" % (cfg.label, cfg.unit)
@@ -1080,9 +1088,9 @@ def get_home():
     
     New in PyTango 7.1.4
     """
-    path=''
+    path = ''
     try:
-        path=os.path.expanduser("~")
+        path = os.path.expanduser("~")
     except:
         pass
     if not os.path.isdir(path):
@@ -1114,10 +1122,10 @@ def _get_env_var(env_var_name):
     
     New in PyTango 7.1.4
     """
-    
+
     if env_var_name in os.environ:
         return os.environ[env_var_name]
-    
+
     fname = os.path.join(get_home(), '.tangorc')
     if not os.path.exists(fname):
         if os.name == 'posix':
@@ -1126,24 +1134,24 @@ def _get_env_var(env_var_name):
         return None
 
     for line in file(fname):
-        strippedline = line.split('#',1)[0].strip()
-        
+        strippedline = line.split('#', 1)[0].strip()
+
         if not strippedline:
             #empty line
             continue
-        
-        tup = strippedline.split('=',1)
-        if len(tup) !=2:
+
+        tup = strippedline.split('=', 1)
+        if len(tup) != 2:
             # illegal line!
             continue
-        
+
         key, val = map(str.strip, tup)
         if key == env_var_name:
             return val
 
 def from_version_str_to_hex_str(version_str):
     v = map(int, version_str.split('.'));
-    return "0x%02d%02d%02d00" % (v[0],v[1],v[2])
+    return "0x%02d%02d%02d00" % (v[0], v[1], v[2])
 
 def from_version_str_to_int(version_str):
     return int(from_version_str_to_hex_str(version_str, 16))
@@ -1153,10 +1161,10 @@ def __server_run(classes, args=None, msg_stream=sys.stderr, util=None):
     if msg_stream is None:
         import io
         msg_stream = io.BytesIO()
-    
+
     if args is None:
         args = sys.argv
-    
+
     if util is None:
         util = PyTango.Util(args)
 
@@ -1167,8 +1175,8 @@ def __server_run(classes, args=None, msg_stream=sys.stderr, util=None):
             klass_klass = klass_info._DeviceClass
             klass_name = klass_info._DeviceClassName
             klass = klass_info
-            util.add_class(klass_klass, klass, klass_name)          
-    else:            
+            util.add_class(klass_klass, klass, klass_name)
+    else:
         for klass_name, klass_info in classes.items():
             if is_seq(klass_info):
                 klass_klass, klass = klass_info
@@ -1184,7 +1192,7 @@ def __server_run(classes, args=None, msg_stream=sys.stderr, util=None):
     msg_stream.write("Ready to accept request\n")
     u_instance.server_run()
     return util
-    
+
 def server_run(classes, args=None, msg_stream=sys.stderr, verbose=False, util=None):
     """Provides a simple way to run a tango server. It handles exceptions
        by writting a message to the msg_stream.
@@ -1245,7 +1253,7 @@ def server_run(classes, args=None, msg_stream=sys.stderr, verbose=False, util=No
        .. versionchanged:: 8.0.3
            Added `util` keyword parameter.
            Returns util object"""
-       
+
     if msg_stream is None:
         import io
         msg_stream = io.BytesIO()
@@ -1265,3 +1273,29 @@ def server_run(classes, args=None, msg_stream=sys.stderr, verbose=False, util=No
             write(traceback.format_exc())
     write("\nExited\n")
 
+
+def info():
+    import PyTango.constants
+
+    Compile = PyTango.constants.Compile
+    Runtime = PyTango.constants.Runtime
+
+    msg = """\
+PyTango compiled with:
+    Python : {0.PY_VERSION}
+    Numpy  : {0.NUMPY_VERSION}
+    Tango  : {0.TANGO_VERSION}
+    Boost  : {0.BOOST_VERSION}
+
+PyTango runtime is:
+    Python : {1.PY_VERSION}
+    Numpy  : {1.NUMPY_VERSION}
+    Tango  : {1.TANGO_VERSION}
+    Boost  : {1.BOOST_VERSION}
+
+PyTango running on:
+{1.UNAME}   
+"""
+    msg = msg.format(Compile, Runtime)
+
+    print(msg)

-- 
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