Skip to content

Commit 46fb270

Browse files
richiwareIkerLuengoJLBuenoLopezjsan-rt
authored
Add Qos API (#7)
* Refs #12820. Add base for testing Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::name Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add doxygen to DomainParticipantQos::name Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::allocation Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::entity_factory Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::flow_controllers Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::properties Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::transports Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::user_data Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DomainParticipantQos::wire_protocol Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add PublisherQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add SubscriberQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add TopicQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DataWriterQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Add DataReaderQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Fix memory leak Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Little change Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Improve test_qos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Add QoS related classes Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs 11914. Add missing classes and remove warnings Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs 11914. Several fixes and additions to classes Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs 11914. Testing types Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs 11914. PubSub implementation on Python Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs 11914. Types with const accessors Signed-off-by: Iker Luengo <ikerluengo@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12678: update types (generated with Fast DDS Gen 2.1.0) Signed-off-by: JLBuenoLopez-eProsima <joseluisbueno@eprosima.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #12820. Removed directory included in the rebase Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #13837. Fix flake8 warnings Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #13837. Apply suggestion about find_package Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * refs #13837. Apply suggestions about data_sharing Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Apply suggestion Co-authored-by: jsantiago-eProsima <90755661+jsantiago-eProsima@users.noreply.github.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #13837. Apply suggestion about max_blocking_time Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #13837. Apply suggestion about clean_up Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Apply suggestions from code review Co-authored-by: jsantiago-eProsima <90755661+jsantiago-eProsima@users.noreply.github.com> Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> * Refs #13837. Add DomainParticipantFactoryQos Signed-off-by: Ricardo González Moreno <ricardo@richiware.dev> Co-authored-by: Iker Luengo <ikerluengo@eprosima.com> Co-authored-by: JLBuenoLopez-eProsima <joseluisbueno@eprosima.com> Co-authored-by: jsantiago-eProsima <90755661+jsantiago-eProsima@users.noreply.github.com>
1 parent 2b282df commit 46fb270

32 files changed

Lines changed: 2337 additions & 367 deletions

fastdds_python/CMakeLists.txt

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414

15-
cmake_minimum_required(VERSION 3.13)
15+
cmake_minimum_required(VERSION 3.15)
1616

1717
# SWIG: use standard target name.
1818
if(POLICY CMP0078)
@@ -30,17 +30,23 @@ project(fastdds_python VERSION 0.2.0)
3030
# Dependencies
3131
###############################################################################
3232

33-
FIND_PACKAGE(SWIG REQUIRED)
34-
INCLUDE(${SWIG_USE_FILE})
35-
SET(CMAKE_SWIG_FLAGS "")
33+
find_package(SWIG REQUIRED)
34+
include(${SWIG_USE_FILE})
35+
set(CMAKE_SWIG_FLAGS "")
3636

37-
FIND_PACKAGE(PythonLibs REQUIRED)
38-
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
37+
find_package (Python3 COMPONENTS Interpreter Development REQUIRED)
3938

40-
FIND_PACKAGE(fastrtps REQUIRED)
39+
find_package(fastrtps REQUIRED)
4140

4241
###############################################################################
4342
# Project subdirectories
4443
###############################################################################
4544

4645
add_subdirectory(src/swig)
46+
47+
###############################################################################
48+
# Testing options
49+
###############################################################################
50+
enable_testing()
51+
include(CTest)
52+
add_subdirectory(test)

fastdds_python/src/swig/CMakeLists.txt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@
1818

1919
message(STATUS "Configuring FastDDS wrapper for Python...")
2020

21-
find_package (PythonInterp REQUIRED)
22-
2321
set(LIB_INSTALL_DIR lib/ CACHE PATH "Installation directory for libraries")
2422

2523
set(${PROJECT_NAME}_MODULE
@@ -36,26 +34,24 @@ SET_SOURCE_FILES_PROPERTIES(
3634
USE_TARGET_INCLUDE_DIRECTORIES TRUE
3735
)
3836

39-
INCLUDE_DIRECTORIES()
40-
4137
option(BUILD_DOCUMENTATION "Use doxygen to create product documentation" OFF)
4238
if (BUILD_DOCUMENTATION)
4339
set(CMAKE_SWIG_FLAGS "-doxygen")
4440
endif (BUILD_DOCUMENTATION)
4541

4642
SWIG_ADD_LIBRARY(${PROJECT_NAME}
4743
TYPE SHARED
48-
LANGUAGE python
44+
LANGUAGE python
4945
SOURCES ${${PROJECT_NAME}_FILES}
5046
)
5147

5248
SWIG_LINK_LIBRARIES(${PROJECT_NAME}
53-
${PYTHON_LIBRARIES}
49+
Python3::Module
5450
fastrtps
5551
)
5652

5753
# Find the installation path
58-
execute_process(COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}' ) )"
54+
execute_process(COMMAND ${Python3_EXECUTABLE} -c "from distutils import sysconfig; print(sysconfig.get_python_lib(plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}' ) )"
5955
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
6056
OUTPUT_STRIP_TRAILING_WHITESPACE
6157
)

fastdds_python/src/swig/fastdds.i

Lines changed: 68 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -14,18 +14,63 @@
1414

1515
%module(directors="1", threads="1") fastdds
1616

17+
// Handle exceptions on python callbacks and send them back to C++ so that they can be catched
18+
// Also, add some meaningful description of the error
19+
%feature("director:except") {
20+
if ($error != NULL) {
21+
PyObject *exc, *val, *tb;
22+
PyErr_Fetch(&exc, &val, &tb);
23+
PyErr_NormalizeException(&exc, &val, &tb);
24+
std::string err_msg("In method '$symname': ");
25+
26+
PyObject* exc_str = PyObject_GetAttrString(exc, "__name__");
27+
err_msg += PyUnicode_AsUTF8(exc_str);
28+
Py_XDECREF(exc_str);
29+
30+
if (val != NULL)
31+
{
32+
PyObject* val_str = PyObject_Str(val);
33+
err_msg += ": ";
34+
err_msg += PyUnicode_AsUTF8(val_str);
35+
Py_XDECREF(val_str);
36+
}
37+
38+
Py_XDECREF(exc);
39+
Py_XDECREF(val);
40+
Py_XDECREF(tb);
41+
42+
Swig::DirectorMethodException::raise(err_msg.c_str());
43+
}
44+
}
45+
46+
%exception {
47+
try { $action }
48+
catch (Swig::DirectorException &e) { SWIG_fail; }
49+
}
50+
1751
// SWIG helper modules
1852
%include "stdint.i"
53+
%include "std_list.i"
1954
%include "std_string.i"
20-
%include "typemaps.i"
2155
%include "std_shared_ptr.i"
2256
%include "std_vector.i"
57+
%include "typemaps.i"
2358

2459
// Some operators are ignored, as there is no such thing in Python.
2560
// Trying to export them issues a warning
2661
%ignore *::operator=;
2762
%ignore *::operator++;
2863
%ignore *::operator!;
64+
%ignore *::operator==;
65+
%ignore *::operator!=;
66+
%ignore *::operator<<;
67+
%ignore *::operator>>;
68+
69+
// This ensures that the returned string references can be used with the string API
70+
// Otherwise, they will be wrapped objects without API
71+
%typemap(out) std::string& {
72+
$result = SWIG_From_std_string(*$1);
73+
}
2974

3075
// Keywords that are not fully supported in SWIG
3176
// and make not difference in python anyways
@@ -34,7 +79,9 @@
3479
// Macro delcarations
3580
// Any macro used on the Fast DDS header files will give an error if it is not redefined here
3681
#define RTPS_DllAPI
82+
#define FASTRTPS_DEPRECATED(msg)
3783
#define FASTDDS_DEPRECATED_UNTIL(major, entity_name, msg)
84+
#define FASTDDS_TODO_BEFORE(major, minor, msg)
3885

3986
// Predeclaration of namespaces and/or classes not exported to the target language,
4087
// but that are part of the Fast DDS public API
@@ -60,37 +107,47 @@ namespace builtin {
60107

61108
%include "fastdds/rtps/common/VendorId_t.i"
62109
%include "fastdds/rtps/common/Types.i"
63-
%include "fastrtps/types/TypesBase.i"
64-
%include "fastdds/rtps/common/SerializedPayload.i"
65-
%include "fastdds/rtps/common/CDRMessage_t.i"
66110
%include "fastdds/rtps/common/Time_t.i"
111+
%include "fastdds/rtps/common/Locator.i"
112+
%include "fastdds/rtps/common/LocatorList.i"
113+
%include "fastdds/rtps/common/BinaryProperty.i"
114+
%include "fastdds/rtps/common/Property.i"
115+
%include "fastdds/rtps/common/EntityId_t.i"
116+
%include "fastdds/rtps/common/GuidPrefix_t.i"
117+
%include "fastdds/rtps/common/Guid.i"
118+
%include "fastdds/rtps/common/PortParameters.i"
119+
%include "fastrtps/types/TypesBase.i"
120+
%include "fastdds/rtps/resources/ResourceManagement.i"
67121
%include "fastrtps/utils/collections/ResourceLimitedContainerConfig.i"
68122
%include "fastrtps/utils/collections/ResourceLimitedVector.i"
123+
%include "fastdds/rtps/attributes/RTPSParticipantAllocationAttributes.i"
124+
%include "fastdds/rtps/flowcontrol/FlowControllerSchedulerPolicy.i"
125+
%include "fastdds/rtps/flowcontrol/FlowControllerDescriptor.i"
126+
%include "fastdds/rtps/attributes/PropertyPolicy.i"
127+
%include "fastdds/rtps/attributes/RTPSParticipantAttributes.i"
128+
%include "fastdds/rtps/attributes/ServerAttributes.i"
129+
%include "fastdds/rtps/attributes/ReaderAttributes.i"
130+
%include "fastdds/rtps/attributes/WriterAttributes.i"
69131

70132
/*
133+
%include "fastdds/rtps/common/SerializedPayload.i"
134+
%include "fastdds/rtps/common/CDRMessage_t.i"
71135
%include "fastdds/rtps/common/FragmentNumber.i"
72136
%include "fastdds/rtps/common/LocatorSelector.i"
73137
%include "fastdds/rtps/common/LocatorSelectorEntry.i"
74138
%include "fastdds/rtps/common/CacheChange.i"
75139
%include "fastdds/rtps/common/LocatorListComparisons.i"
76140
%include "fastdds/rtps/common/Token.i"
77141
%include "fastdds/rtps/common/MatchingInfo.i"
78-
%include "fastdds/rtps/common/LocatorList.i"
79142
%include "fastdds/rtps/common/ChangeKind_t.i"
80143
%include "fastdds/rtps/common/LocatorsIterator.i"
81-
%include "fastdds/rtps/common/PortParameters.i"
82144
%include "fastdds/rtps/common/SampleIdentity.i"
83-
%include "fastdds/rtps/common/Locator.i"
84145
%include "fastdds/rtps/common/SequenceNumber.i"
85146
%include "fastdds/rtps/common/RemoteLocators.i"
86147
%include "fastdds/rtps/common/WriteParams.i"
87148
88-
%include "fastrtps/rtps/common/SerializedPayload.i"
89-
%include "fastrtps/rtps/common/Time_t.i"
90149
%include "fastrtps/rtps/common/LocatorListComparisons.i"
91-
%include "fastrtps/rtps/common/CDRMessage_t.i"
92150
%include "fastrtps/rtps/common/PortParameters.i"
93-
%include "fastrtps/rtps/common/Types.i"
94151
95152
%include "fastrtps/utils/Semaphore.i"
96153
%include "fastrtps/utils/System.i"
@@ -128,11 +185,6 @@ namespace builtin {
128185
%include "fastdds/rtps/builtin/BuiltinProtocols.i"
129186
%include "fastdds/rtps/attributes/HistoryAttributes.i"
130187
%include "fastdds/rtps/attributes/EndpointAttributes.i"
131-
%include "fastdds/rtps/attributes/ReaderAttributes.i"
132-
%include "fastdds/rtps/attributes/RTPSParticipantAttributes.i"
133-
%include "fastdds/rtps/attributes/RTPSParticipantAllocationAttributes.i"
134-
%include "fastdds/rtps/attributes/WriterAttributes.i"
135-
%include "fastdds/rtps/attributes/ServerAttributes.i"
136188
%include "fastdds/rtps/reader/ReaderDiscoveryInfo.i"
137189
%include "fastdds/rtps/reader/StatelessReader.i"
138190
%include "fastdds/rtps/reader/StatefulReader.i"
@@ -209,12 +261,9 @@ namespace builtin {
209261
%include "fastdds/rtps/writer/WriterDiscoveryInfo.i"
210262
%include "fastdds/rtps/writer/StatelessPersistentWriter.i"
211263
%include "fastdds/rtps/writer/RTPSWriter.i"
212-
%include "fastdds/rtps/flowcontrol/FlowControllerSchedulerPolicy.i"
213264
%include "fastdds/rtps/flowcontrol/ThroughputControllerDescriptor.i"
214265
%include "fastdds/rtps/flowcontrol/FlowControllerConsts.i"
215-
%include "fastdds/rtps/flowcontrol/FlowControllerDescriptor.i"
216266
%include "fastdds/rtps/resources/ResourceEvent.i"
217-
%include "fastdds/rtps/resources/ResourceManagement.i"
218267
%include "fastdds/rtps/resources/TimedEvent.i"
219268
%include "fastdds/rtps/rtps_fwd.i"
220269
@@ -358,16 +407,6 @@ namespace builtin {
358407
%include "fastrtps/Domain.i"
359408
*/
360409

361-
%include "fastdds/rtps/common/EntityId_t.i"
362-
%include "fastdds/rtps/common/GuidPrefix_t.i"
363-
%include "fastdds/rtps/common/Guid.i"
364-
365-
/*
366-
%include "fastdds/rtps/common/BinaryProperty.i"
367-
%include "fastdds/rtps/common/Property.i"
368-
%include "fastdds/rtps/attributes/PropertyPolicy.i"
369-
*/
370-
371410
%include "fastdds/dds/core/status/StatusMask.i"
372411
%include "fastdds/dds/common/InstanceHandle.i"
373412
%include "fastdds/dds/core/policy/ParameterTypes.i"

fastdds_python/src/swig/fastdds/dds/core/policy/QosPolicies.i

Lines changed: 92 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,23 @@
1515
// This class contains a 'const char*' member that may leak on destruction
1616
// However, converting it to a 'char*' does not
1717
// SWIG is very special)
18-
%typemap(out) char const *flow_controller_name = char *;
19-
%typemap(memberin) char const *flow_controller_name = char *;
20-
2118
%{
2219
#include "fastdds/dds/core/policy/QosPolicies.hpp"
2320
%}
2421

25-
// Flatten nested classes
26-
%feature("flatnested", "1");
22+
%ignore eprosima::fastdds::dds::WireProtocolConfigQos::throughput_controller;
2723

24+
// TODO (richiware) review when api
2825
// SWIG does not support templates in the generated binding,
2926
// because not all output languages support them
3027
// We must explicitly declare the specializations of the templates
31-
%template(OctetResourceLimitedVector) eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>;
28+
%template(TransportDescriptorInterfaceShrPtr) std::shared_ptr<eprosima::fastdds::rtps::TransportDescriptorInterface>;
29+
%template(TransportDescriptorInterfaceVector) std::vector<std::shared_ptr<eprosima::fastdds::rtps::TransportDescriptorInterface>>;
30+
// The 'enum' here is very important, or SWIG will create a faulty wrapper
31+
// * Enums are mapped as integer constants
32+
// * The template expects a class type
33+
// * Trying to push a mapped enum value (integer) will result on an error because it is not the expected type
34+
%template(DataRepresentationIdVector) std::vector<enum eprosima::fastdds::dds::DataRepresentationId>;
3235

3336
// The class PartitionQosPolicy::const_iterator does not have default constructor
3437
// This tells SWIG it must wrap the constructors or the compilation will fail
@@ -46,11 +49,89 @@
4649
%ignore eprosima::fastdds::dds::TypeObjectV1::TypeObjectV1(TypeObjectV1 &&);
4750
%ignore eprosima::fastdds::dds::xtypes::TypeInformation::TypeInformation(TypeInformation &&);
4851

52+
namespace eprosima {
53+
namespace fastdds {
54+
namespace dds {
55+
struct ParticipantResourceLimitsQos : public fastrtps::rtps::RTPSParticipantAllocationAttributes {};
56+
struct PropertyPolicyQos : public fastrtps::rtps::PropertyPolicy {};
57+
}
58+
}
59+
}
60+
61+
%inline %{
62+
class OctetResourceLimitedVectorStopIterator {};
63+
class OctetResourceLimitedVectorIterator {
64+
public:
65+
OctetResourceLimitedVectorIterator(
66+
eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>::iterator _cur,
67+
eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>::iterator _end) : cur(_cur), end(_end) {}
68+
OctetResourceLimitedVectorIterator* __iter__()
69+
{
70+
return this;
71+
}
72+
eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>::iterator cur;
73+
eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>::iterator end;
74+
};
75+
%}
76+
77+
// SWIG does not support templates in the generated binding,
78+
// because not all output languages support them
79+
// We must explicitly declare the specializations of the templates
80+
%template(OctetResourceLimitedVector) eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet>;
81+
4982
%include "fastdds/dds/core/policy/QosPolicies.hpp"
5083

51-
// Deactivate class flattening
52-
%feature("flatnested", "0");
84+
%include "exception.i"
85+
%exception OctetResourceLimitedVectorIterator::__next__ {
86+
try
87+
{
88+
$action // calls %extend function __next__() below
89+
}
90+
catch (OctetResourceLimitedVectorStopIterator)
91+
{
92+
PyErr_SetString(PyExc_StopIteration, "End of iterator");
93+
return NULL;
94+
}
95+
}
96+
97+
%extend OctetResourceLimitedVectorIterator
98+
{
99+
eprosima::fastrtps::rtps::octet __next__()
100+
{
101+
if ($self->cur != $self->end)
102+
{
103+
// dereference the iterator and return reference to the object,
104+
// after that it increments the iterator
105+
return *$self->cur++;
106+
}
107+
throw OctetResourceLimitedVectorStopIterator();
108+
}
109+
}
110+
111+
%extend eprosima::fastrtps::ResourceLimitedVector<eprosima::fastrtps::rtps::octet> {
112+
OctetResourceLimitedVectorIterator __iter__()
113+
{
114+
// return a constructed Iterator object
115+
return OctetResourceLimitedVectorIterator($self->begin(), $self->end());
116+
}
117+
}
118+
119+
// TODO (richiware) missing exceptions
120+
%extend eprosima::fastdds::dds::PartitionQosPolicy
121+
{
122+
size_t __len__() const
123+
{
124+
return self->size();
125+
}
126+
127+
std::string __getitem__(int i)
128+
{
129+
auto it = self->begin();
130+
for (int count = 0; count < i; ++count)
131+
{
132+
it++;
133+
}
53134

54-
// Undo the mapping for future classes
55-
%typemap(out) char const *flow_controller_name;
56-
%typemap(memberin) char const *flow_controller_name;
135+
return std::string((*it).name());
136+
}
137+
};

0 commit comments

Comments
 (0)