[pytango] 20/37: Implement pipe config (client side)
Sandor Bodo-Merle
sbodomerle-guest at moszumanska.debian.org
Thu Sep 28 19:16:56 UTC 2017
This is an automated email from the git hooks/post-receive script.
sbodomerle-guest pushed a commit to annotated tag v9.2.0b
in repository pytango.
commit c98c90aa9fc8abae077c73714838d224991aad9a
Author: Jose Tiago Coutinho Macara <tiago.coutinho at esrf.fr>
Date: Wed Dec 2 13:18:09 2015 +0100
Implement pipe config (client side)
---
Makefile | 1 +
src/boost/cpp/base_types.cpp | 13 +++++
src/boost/cpp/device_proxy.cpp | 24 +++++++++
src/boost/cpp/from_py.cpp | 29 +++++++++++
src/boost/cpp/from_py.h | 3 ++
src/boost/cpp/pipe_info.cpp | 30 +++++++++++
src/boost/cpp/to_py.cpp | 29 +++++++++++
src/boost/cpp/to_py.h | 6 +++
src/boost/python/device_proxy.py | 103 ++++++++++++++++++++++++++++++++++++-
src/boost/python/device_server.py | 12 +++++
src/boost/python/pytango_pprint.py | 8 +--
11 files changed, 253 insertions(+), 5 deletions(-)
diff --git a/Makefile b/Makefile
index 7c00938..c465d95 100644
--- a/Makefile
+++ b/Makefile
@@ -154,6 +154,7 @@ $(OBJS_DIR)/attribute_dimension.o \
$(OBJS_DIR)/attribute_event_info.o \
$(OBJS_DIR)/attribute_info.o \
$(OBJS_DIR)/attribute_info_ex.o \
+$(OBJS_DIR)/pipe_info.o \
$(OBJS_DIR)/attribute_proxy.o \
$(OBJS_DIR)/base_types.o \
$(OBJS_DIR)/callback.o \
diff --git a/src/boost/cpp/base_types.cpp b/src/boost/cpp/base_types.cpp
index dcc9faa..90c9f2c 100644
--- a/src/boost/cpp/base_types.cpp
+++ b/src/boost/cpp/base_types.cpp
@@ -39,6 +39,7 @@ void export_device_data();
void export_device_attribute();
void export_device_data_history();
void export_device_attribute_history();
+void export_pipe_info();
void export_dev_error();
void export_time_val();
@@ -120,6 +121,15 @@ inline bool operator==(const Tango::DeviceDataHistory& ddh1_, const Tango::Devic
//ddh1.errors() == ddh2.errors();
}
+inline bool operator==(const Tango::PipeInfo& pi1, const Tango::PipeInfo& pi2)
+{
+ return pi1.name == pi2.name &&
+ pi1.description == pi2.description &&
+ pi1.label == pi2.label &&
+ pi1.disp_level == pi2.disp_level &&
+ pi1.writable == pi2.writable &&
+ pi1.extensions == pi2.extensions;
+}
}
/**
@@ -295,6 +305,8 @@ void export_base_types()
class_<Tango::AttributeInfoListEx>("AttributeInfoListEx")
.def(vector_indexing_suite<Tango::AttributeInfoListEx, false>());
+ class_<Tango::PipeInfoList>("PipeInfoList")
+ .def(vector_indexing_suite<Tango::PipeInfoList, false>());
class_<std::vector<Tango::Attr *> >("AttrList")
.def(vector_indexing_suite<std::vector<Tango::Attr *>, true>());
@@ -409,6 +421,7 @@ void export_base_types()
export_device_attribute();
export_device_data_history();
export_device_attribute_history();
+ export_pipe_info();
export_dev_error();
export_time_val();
diff --git a/src/boost/cpp/device_proxy.cpp b/src/boost/cpp/device_proxy.cpp
index a60f1f0..da3311d 100644
--- a/src/boost/cpp/device_proxy.cpp
+++ b/src/boost/cpp/device_proxy.cpp
@@ -555,6 +555,30 @@ void export_device_proxy()
( arg_("self"), arg_("filter"), arg_("array") ) )
//
+ // pipe methods
+ //
+
+ .def("get_pipe_list", &Tango::DeviceProxy::get_pipe_list,
+ ( arg_("self") ),
+ bopy::return_value_policy<bopy::manage_new_object>() )
+
+ .def("_get_pipe_config",
+ (Tango::PipeInfoList* (Tango::DeviceProxy::*)(StdStringVector &))
+ &Tango::DeviceProxy::get_pipe_config,
+ ( arg_("self"), arg_("pipe_names") ),
+ bopy::return_value_policy<bopy::manage_new_object>() )
+
+ .def("_get_pipe_config",
+ (Tango::PipeInfo (Tango::DeviceProxy::*)(const std::string&))
+ &Tango::DeviceProxy::get_pipe_config,
+ ( arg_("self"), arg_("pipe_name") ) )
+
+ .def("_set_pipe_config",
+ (void (Tango::DeviceProxy::*)(Tango::PipeInfoList &))
+ &Tango::DeviceProxy::set_pipe_config,
+ ( arg_("self"), arg_("seq") ) )
+
+ //
// attribute methods
//
diff --git a/src/boost/cpp/from_py.cpp b/src/boost/cpp/from_py.cpp
index 478c47c..22dca57 100644
--- a/src/boost/cpp/from_py.cpp
+++ b/src/boost/cpp/from_py.cpp
@@ -415,3 +415,32 @@ void from_py_object(object &py_obj, Tango::AttributeConfigList_5 &attr_conf_list
from_py_object(tmp, attr_conf_list[i]);
}
}
+
+void from_py_object(object &py_obj, Tango::PipeConfig &pipe_conf)
+{
+ pipe_conf.name = obj_to_new_char(py_obj.attr("name"));
+ pipe_conf.description = obj_to_new_char(py_obj.attr("description"));
+ pipe_conf.label = obj_to_new_char(py_obj.attr("label"));
+ pipe_conf.level = extract<Tango::DispLevel>(py_obj.attr("level"));
+ pipe_conf.writable = extract<Tango::PipeWriteType>(py_obj.attr("writable"));
+ convert2array(py_obj.attr("extensions"), pipe_conf.extensions);
+}
+
+void from_py_object(object &py_obj, Tango::PipeConfigList &pipe_conf_list)
+{
+ PyObject* py_obj_ptr = py_obj.ptr();
+
+ if (!PySequence_Check(py_obj_ptr))
+ {
+ pipe_conf_list.length(1);
+ from_py_object(py_obj, pipe_conf_list[0]);
+ return;
+ }
+
+ CORBA::ULong size = static_cast<CORBA::ULong>(boost::python::len(py_obj));
+ pipe_conf_list.length(size);
+ for (CORBA::ULong i=0; i < size; ++i) {
+ object tmp = py_obj[i];
+ from_py_object(tmp, pipe_conf_list[i]);
+ }
+}
diff --git a/src/boost/cpp/from_py.h b/src/boost/cpp/from_py.h
index efe33a5..d86cd65 100644
--- a/src/boost/cpp/from_py.h
+++ b/src/boost/cpp/from_py.h
@@ -701,3 +701,6 @@ void from_py_object(bopy::object &, Tango::AttributeConfigList &);
void from_py_object(bopy::object &, Tango::AttributeConfigList_2 &);
void from_py_object(bopy::object &, Tango::AttributeConfigList_3 &);
void from_py_object(bopy::object &, Tango::AttributeConfigList_5 &);
+
+void from_py_object(bopy::object &, Tango::PipeConfig &);
+void from_py_object(bopy::object &, Tango::PipeConfigList &);
diff --git a/src/boost/cpp/pipe_info.cpp b/src/boost/cpp/pipe_info.cpp
new file mode 100644
index 0000000..fb5ab30
--- /dev/null
+++ b/src/boost/cpp/pipe_info.cpp
@@ -0,0 +1,30 @@
+/******************************************************************************
+ This file is part of PyTango (http://www.tinyurl.com/PyTango)
+
+ Copyright 2006-2012 CELLS / ALBA Synchrotron, Bellaterra, Spain
+ Copyright 2013-2014 European Synchrotron Radiation Facility, Grenoble, France
+
+ Distributed under the terms of the GNU Lesser General Public License,
+ either version 3 of the License, or (at your option) any later version.
+ See LICENSE.txt for more info.
+******************************************************************************/
+
+#include "precompiled_header.hpp"
+#include <tango.h>
+
+using namespace boost::python;
+
+void export_pipe_info()
+{
+ class_<Tango::PipeInfo>
+ ("PipeInfo")
+ .def(init<const Tango::PipeInfo&>())
+ .enable_pickling()
+ .def_readwrite("name", &Tango::PipeInfo::name)
+ .def_readwrite("description", &Tango::PipeInfo::description)
+ .def_readwrite("label", &Tango::PipeInfo::label)
+ .def_readwrite("disp_level", &Tango::PipeInfo::disp_level)
+ .def_readwrite("writable", &Tango::PipeInfo::writable)
+ .def_readwrite("extensions", &Tango::PipeInfo::extensions)
+ ;
+}
diff --git a/src/boost/cpp/to_py.cpp b/src/boost/cpp/to_py.cpp
index ea57a03..66eff51 100644
--- a/src/boost/cpp/to_py.cpp
+++ b/src/boost/cpp/to_py.cpp
@@ -257,3 +257,32 @@ boost::python::list to_py(const Tango::AttributeConfigList_5 &attr_conf_list)
}
return py_attr_conf_list;
}
+
+object to_py(const Tango::PipeConfig &pipe_conf, object py_pipe_conf)
+{
+ if(py_pipe_conf.ptr() == Py_None)
+ {
+ PYTANGO_MOD
+ py_pipe_conf = pytango.attr("PipeConfig")();
+ }
+
+ py_pipe_conf.attr("name") = str(pipe_conf.name.in());
+ py_pipe_conf.attr("description") = str(pipe_conf.description.in());
+ py_pipe_conf.attr("label") = str(pipe_conf.label.in());
+ py_pipe_conf.attr("level") = pipe_conf.level;
+ py_pipe_conf.attr("writable") = pipe_conf.writable;
+ py_pipe_conf.attr("extensions") = CORBA_sequence_to_list<Tango::DevVarStringArray>::to_list(pipe_conf.extensions);
+ return py_pipe_conf;
+}
+
+boost::python::list to_py(const Tango::PipeConfigList &pipe_conf_list)
+{
+ boost::python::list py_pipe_conf_list;
+ boost::python::object none;
+ for(unsigned long index = 0; index < pipe_conf_list.length(); ++index)
+ {
+ const Tango::PipeConfig &pipe_conf = pipe_conf_list[index];
+ py_pipe_conf_list.append(to_py(pipe_conf, none));
+ }
+ return py_pipe_conf_list;
+}
diff --git a/src/boost/cpp/to_py.h b/src/boost/cpp/to_py.h
index 0fdd1cb..d04bb63 100644
--- a/src/boost/cpp/to_py.h
+++ b/src/boost/cpp/to_py.h
@@ -361,6 +361,12 @@ boost::python::list to_py(const Tango::AttributeConfigList_2 &);
boost::python::list to_py(const Tango::AttributeConfigList_3 &);
boost::python::list to_py(const Tango::AttributeConfigList_5 &);
+boost::python::object to_py(const Tango::PipeConfig &,
+ boost::python::object);
+
+boost::python::object to_py(const Tango::PipeConfigList &,
+ boost::python::object);
+
template<class T>
inline boost::python::object to_py_list(const T *seq)
{
diff --git a/src/boost/python/device_proxy.py b/src/boost/python/device_proxy.py
index 96b909d..47176d1 100644
--- a/src/boost/python/device_proxy.py
+++ b/src/boost/python/device_proxy.py
@@ -26,7 +26,7 @@ import collections
from ._PyTango import StdStringVector, DbData, DbDatum, AttributeInfo, \
AttributeInfoEx, AttributeInfoList, AttributeInfoListEx, DeviceProxy, \
__CallBackAutoDie, __CallBackPushEvent, EventType, DevFailed, Except, \
- ExtractAs, GreenMode
+ ExtractAs, GreenMode, constants
from .utils import is_pure_str, is_non_str_seq, is_integer
from .utils import seq_2_StdStringVector, StdStringVector_2_seq
@@ -732,6 +732,58 @@ def __DeviceProxy__get_command_config(self, value=(constants.AllCmd,)):
return self._get_command_config(v)
raise TypeError('value must be a string or a sequence<string>')
+
+def __DeviceProxy__get_pipe_config(self, value=None):
+ """
+ get_pipe_config( self) -> PipeInfoList
+
+ Return the pipe configuration for all pipes.
+
+ Return : (PipeInfoList) Object containing the pipes
+ information
+
+ Throws : ConnectionFailed, CommunicationFailed,
+ DevFailed from device
+
+ get_pipe_config( self, name) -> PipeInfo
+
+ Return the pipe configuration for a single pipe.
+
+ Parameters :
+ - name : (str) pipe name
+
+ Return : (PipeInfo) Object containing the pipe
+ information
+
+ Throws : ConnectionFailed, CommunicationFailed,
+ DevFailed from device
+
+ get_pipe_config( self, names) -> PipeInfoList
+
+ Return the pipe configuration for the list of specified pipes. To get all the
+ pipes pass a sequence containing the constant PyTango.constants.AllPipe
+
+ Parameters :
+ - names : (sequence<str>) pipe names
+
+ Return : (PipeInfoList) Object containing the pipes
+ information
+
+ Throws : ConnectionFailed, CommunicationFailed,
+ DevFailed from device
+
+ New in PyTango 9.0.0
+ """
+ if value is None:
+ value = [constants.AllPipe]
+ if isinstance(value, StdStringVector) or is_pure_str(value):
+ return self._get_pipe_config(value)
+ elif isinstance(value, collections.Sequence):
+ v = seq_2_StdStringVector(value)
+ return self._get_pipe_config(v)
+
+ raise TypeError('value must be a string or a sequence<string>')
+
def __DeviceProxy__set_attribute_config(self, value):
"""
set_attribute_config( self, attr_info) -> None
@@ -806,6 +858,51 @@ def __DeviceProxy__set_attribute_config(self, value):
return self._set_attribute_config(v)
+def __DeviceProxy__set_pipe_config(self, value):
+ """
+ set_pipe_config( self, pipe_info) -> None
+
+ Change the pipe configuration for the specified pipe
+
+ Parameters :
+ - pipe_info : (PipeInfo) pipe information
+ Return : None
+
+ Throws : ConnectionFailed, CommunicationFailed,
+ DevFailed from device
+
+ set_pipe_config( self, pipe_info) -> None
+
+ Change the pipes configuration for the specified pipes
+
+ Parameters :
+ - pipe_info : (sequence<PipeInfo>) pipes information
+ Return : None
+
+ Throws : ConnectionFailed, CommunicationFailed,
+ DevFailed from device
+ """
+ if isinstance(value, PipeInfo):
+ v = PipeInfoList()
+ v.append(value)
+ elif isinstance(value, PipeInfoList):
+ v = value
+ elif isinstance(value, collections.Sequence):
+ if not len(value):
+ return
+ if isinstance(value[0], PipeInfo):
+ v = PipeInfoList()
+ else:
+ raise TypeError('value must be a PipeInfo or a ' \
+ 'sequence<PipeInfo>')
+ for i in value:
+ v.append(i)
+ else:
+ raise TypeError('value must be a PipeInfo or a ' \
+ 'sequence<PipeInfo>')
+
+ return self._set_pipe_config(v)
+
def __DeviceProxy__get_event_map_lock(self):
"""
Internal helper method"""
@@ -1160,6 +1257,10 @@ def __init_DeviceProxy():
DeviceProxy.set_attribute_config = __DeviceProxy__set_attribute_config
DeviceProxy.get_command_config = __DeviceProxy__get_command_config
+
+ DeviceProxy.get_pipe_config = __DeviceProxy__get_pipe_config
+ DeviceProxy.set_pipe_config = __DeviceProxy__set_pipe_config
+
DeviceProxy.__get_event_map = __DeviceProxy__get_event_map
DeviceProxy.__get_event_map_lock = __DeviceProxy__get_event_map_lock
DeviceProxy.subscribe_event = green(__DeviceProxy__subscribe_event)
diff --git a/src/boost/python/device_server.py b/src/boost/python/device_server.py
index 9178231..4b46e83 100644
--- a/src/boost/python/device_server.py
+++ b/src/boost/python/device_server.py
@@ -177,6 +177,18 @@ class AttributeConfig_5(object):
self.event_prop = EventProperties()
self.sys_extensions = []
+class PipeConfig(object):
+ """
+ This class represents the python interface for the Tango IDL
+ object PipeConfig."""
+
+ def __init__(self):
+ self.name = ''
+ self.description = ''
+ self.label = ''
+ self.level = PipeWriteType.PIPE_READ
+ self.extensions = []
+
def __Attribute__get_properties(self, attr_cfg = None):
"""get_properties(self, attr_cfg = None) -> AttributeConfig
diff --git a/src/boost/python/pytango_pprint.py b/src/boost/python/pytango_pprint.py
index 1f048af..e3769a5 100644
--- a/src/boost/python/pytango_pprint.py
+++ b/src/boost/python/pytango_pprint.py
@@ -20,11 +20,11 @@ __docformat__ = "restructuredtext"
import operator
from ._PyTango import (StdStringVector, StdLongVector, CommandInfoList,
- AttributeInfoList, AttributeInfoListEx,
+ AttributeInfoList, AttributeInfoListEx, PipeInfoList,
DeviceDataHistoryList,
GroupReplyList, GroupAttrReplyList, GroupCmdReplyList,
DbData, DbDevInfos, DbDevExportInfos, DbDevImportInfos, DbHistoryList,
- LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo,
+ LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo, PipeInfo,
DeviceInfo, DeviceAttributeConfig, AttributeInfo, AttributeAlarmInfo,
ChangeEventInfo, PeriodicEventInfo, ArchiveEventInfo,
AttributeEventInfo, AttributeInfoEx,
@@ -87,7 +87,7 @@ def __registerSeqStr():
_SeqRepr = lambda self: (self and "[%s]" % (", ".join(map(repr,self)))) or "[]"
seqs = (StdStringVector, StdLongVector, CommandInfoList,
- AttributeInfoList, AttributeInfoListEx,
+ AttributeInfoList, AttributeInfoListEx, PipeInfoList,
DeviceDataHistoryList,
GroupReplyList, GroupAttrReplyList, GroupCmdReplyList,
DbData, DbDevInfos, DbDevExportInfos, DbDevImportInfos, DbHistoryList)
@@ -118,7 +118,7 @@ def __registerStructStr():
structs = (LockerInfo, DevCommandInfo, AttributeDimension, CommandInfo,
DeviceInfo, DeviceAttributeConfig, AttributeInfo, AttributeAlarmInfo,
ChangeEventInfo, PeriodicEventInfo, ArchiveEventInfo,
- AttributeEventInfo, AttributeInfoEx,
+ AttributeEventInfo, AttributeInfoEx, PipeInfo,
DeviceAttribute, DeviceAttributeHistory, DeviceData, DeviceDataHistory,
DbDatum, DbDevInfo, DbDevImportInfo, DbDevExportInfo, DbServerInfo,
GroupReply, GroupAttrReply, GroupCmdReply,
--
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