diff options
author | Ted Ross <tross@apache.org> | 2011-01-11 17:58:04 +0000 |
---|---|---|
committer | Ted Ross <tross@apache.org> | 2011-01-11 17:58:04 +0000 |
commit | 180f6554ab2755973026dfe6f47d94be9286da41 (patch) | |
tree | 19d2e704c06eef0ac36625fe8cb1df300efdaff3 | |
parent | 411cf023d5e377886883e8b498b44f412d5d63ad (diff) | |
download | qpid-python-180f6554ab2755973026dfe6f47d94be9286da41.tar.gz |
Exposed asMap for DataAddr objects in Pyton and Ruby wrappers.
Enhanced the examples to show the passing of a DataAddr in an argument.
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1057774 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/bindings/qmf2/examples/cpp/agent.cpp | 22 | ||||
-rwxr-xr-x | qpid/cpp/bindings/qmf2/examples/python/agent.py | 20 | ||||
-rw-r--r-- | qpid/cpp/bindings/qmf2/python/qmf2.py | 5 | ||||
-rw-r--r-- | qpid/cpp/bindings/qmf2/ruby/qmf2.rb | 1 | ||||
-rw-r--r-- | qpid/cpp/bindings/swig_python_typemaps.i | 24 | ||||
-rw-r--r-- | qpid/cpp/bindings/swig_ruby_typemaps.i | 19 |
6 files changed, 89 insertions, 2 deletions
diff --git a/qpid/cpp/bindings/qmf2/examples/cpp/agent.cpp b/qpid/cpp/bindings/qmf2/examples/cpp/agent.cpp index 3ec42c8d86..51643e203a 100644 --- a/qpid/cpp/bindings/qmf2/examples/cpp/agent.cpp +++ b/qpid/cpp/bindings/qmf2/examples/cpp/agent.cpp @@ -48,6 +48,7 @@ private: AgentSession session; Schema sch_exception; Schema sch_control; + Schema sch_child; Data control; DataAddr controlAddr; @@ -120,11 +121,23 @@ void ExampleAgent::setupSchema() failMethod.addArgument(SchemaProperty("details", SCHEMA_DATA_MAP, "{dir:IN}")); sch_control.addMethod(failMethod); + SchemaMethod createMethod("create_child", "{desc:'Create Child Object'}"); + createMethod.addArgument(SchemaProperty("name", SCHEMA_DATA_STRING, "{dir:IN}")); + createMethod.addArgument(SchemaProperty("childAddr", SCHEMA_DATA_MAP, "{dir:OUT}")); + sch_control.addMethod(createMethod); + + // + // Declare the child class + // + sch_child = Schema(SCHEMA_TYPE_DATA, package, "child"); + sch_child.addProperty(SchemaProperty("name", SCHEMA_DATA_STRING)); + // // Register our schemata with the agent session. // session.registerSchema(sch_exception); session.registerSchema(sch_control); + session.registerSchema(sch_child); } void ExampleAgent::populateData() @@ -185,6 +198,15 @@ bool ExampleAgent::method(AgentEvent& event) session.raiseException(event, ex); } } + + if (name == "create_child") { + const string& name(event.getArguments()["name"]); + Data child(sch_child); + child.setProperty("name", name); + DataAddr addr(session.addData(child, name)); + event.addReturnArgument("childAddr", addr.asMap()); + session.methodSuccess(event); + } } return true; diff --git a/qpid/cpp/bindings/qmf2/examples/python/agent.py b/qpid/cpp/bindings/qmf2/examples/python/agent.py index 84d2fe4615..66b7dbdc58 100755 --- a/qpid/cpp/bindings/qmf2/examples/python/agent.py +++ b/qpid/cpp/bindings/qmf2/examples/python/agent.py @@ -88,6 +88,14 @@ class ExampleAgent(AgentHandler): ex.details = args['details'] self.session.raiseException(handle, ex) + elif methodName == "create_child": + name = args['name'] + child = Data(self.sch_child) + child.name = name + addr = self.session.addData(child, name) + handle.addReturnArgument("childAddr", addr.asMap()) + self.session.methodSuccess(handle) + def setupSchema(self): """ @@ -126,11 +134,23 @@ class ExampleAgent(AgentHandler): failMethod.addArgument(SchemaProperty("details", SCHEMA_DATA_MAP, direction=DIR_IN)) self.sch_control.addMethod(failMethod) + createMethod = SchemaMethod("create_child", desc="Create Child Object") + createMethod.addArgument(SchemaProperty("name", SCHEMA_DATA_STRING, direction=DIR_IN)) + createMethod.addArgument(SchemaProperty("childAddr", SCHEMA_DATA_MAP, direction=DIR_OUT)) + self.sch_control.addMethod(createMethod) + + ## + ## Declare a child object + ## + self.sch_child = Schema(SCHEMA_TYPE_DATA, package, "child") + self.sch_child.addProperty(SchemaProperty("name", SCHEMA_DATA_STRING)) + ## ## Register our schemata with the agent session. ## self.session.registerSchema(self.sch_exception) self.session.registerSchema(self.sch_control) + self.session.registerSchema(self.sch_child) def populateData(self): diff --git a/qpid/cpp/bindings/qmf2/python/qmf2.py b/qpid/cpp/bindings/qmf2/python/qmf2.py index 911b080dfd..37efb8708b 100644 --- a/qpid/cpp/bindings/qmf2/python/qmf2.py +++ b/qpid/cpp/bindings/qmf2/python/qmf2.py @@ -533,6 +533,11 @@ class DataAddr(object): self.getName() == other.getName() and \ self.getAgentEpoch() == other.getAgentEpoch() + def asMap(self): + """ + """ + return self._impl.asMap() + def getAgentName(self): """ """ diff --git a/qpid/cpp/bindings/qmf2/ruby/qmf2.rb b/qpid/cpp/bindings/qmf2/ruby/qmf2.rb index 65cc695c45..86ba72cc0b 100644 --- a/qpid/cpp/bindings/qmf2/ruby/qmf2.rb +++ b/qpid/cpp/bindings/qmf2/ruby/qmf2.rb @@ -404,6 +404,7 @@ module Qmf2 return @impl == other.impl end + def as_map() @impl.asMap end def agent_name() @impl.getAgentName end def name() @impl.getName end def agent_epoch() @impl.getAgentEpoch end diff --git a/qpid/cpp/bindings/swig_python_typemaps.i b/qpid/cpp/bindings/swig_python_typemaps.i index 57046d2944..a233641940 100644 --- a/qpid/cpp/bindings/swig_python_typemaps.i +++ b/qpid/cpp/bindings/swig_python_typemaps.i @@ -274,12 +274,24 @@ typedef int Py_ssize_t; /* * Variant types: C++ --> Python */ +%typemap(out) qpid::types::Variant::Map { + $result = MapToPy(&$1); + if ($result) + Py_INCREF($result); +} + %typemap(out) qpid::types::Variant::Map& { $result = MapToPy($1); if ($result) Py_INCREF($result); } +%typemap(out) qpid::types::Variant::List { + $result = ListToPy(&$1); + if ($result) + Py_INCREF($result); +} + %typemap(out) qpid::types::Variant::List& { $result = ListToPy($1); if ($result) @@ -344,6 +356,16 @@ typedef int Py_ssize_t; $1 = PyList_Check($input) ? 1 : 0; } +%typemap(typecheck) qpid::types::Variant& { + $1 = (PyFloat_Check($input) || + PyString_Check($input) || + PyInt_Check($input) || + PyLong_Check($input) || + PyDict_Check($input) || + PyList_Check($input) || + PyBool_Check($input)) ? 1 : 0; +} + %typemap(typecheck) const qpid::types::Variant::Map const & { $1 = PyDict_Check($input) ? 1 : 0; } @@ -352,7 +374,7 @@ typedef int Py_ssize_t; $1 = PyList_Check($input) ? 1 : 0; } -%typemap(typecheck) qpid::types::Variant& { +%typemap(typecheck) const qpid::types::Variant const & { $1 = (PyFloat_Check($input) || PyString_Check($input) || PyInt_Check($input) || diff --git a/qpid/cpp/bindings/swig_ruby_typemaps.i b/qpid/cpp/bindings/swig_ruby_typemaps.i index b91ca7dfb9..79e679663d 100644 --- a/qpid/cpp/bindings/swig_ruby_typemaps.i +++ b/qpid/cpp/bindings/swig_ruby_typemaps.i @@ -237,10 +237,18 @@ /* * Variant types: C++ --> Ruby */ +%typemap(out) qpid::types::Variant::Map { + $result = MapToRb(&$1); +} + %typemap(out) qpid::types::Variant::Map& { $result = MapToRb($1); } +%typemap(out) qpid::types::Variant::List { + $result = ListToRb(&$1); +} + %typemap(out) qpid::types::Variant::List& { $result = ListToRb($1); } @@ -301,6 +309,15 @@ $1 = (TYPE($input) == T_ARRAY) ? 1 : 0; } +%typemap(typecheck) qpid::types::Variant& { + $1 = (TYPE($input) == T_FLOAT || + TYPE($input) == T_STRING || + TYPE($input) == T_FIXNUM || + TYPE($input) == T_BIGNUM || + TYPE($input) == T_TRUE || + TYPE($input) == T_FALSE) ? 1 : 0; +} + %typemap(typecheck) qpid::types::Variant::Map const & { $1 = (TYPE($input) == T_HASH) ? 1 : 0; } @@ -309,7 +326,7 @@ $1 = (TYPE($input) == T_ARRAY) ? 1 : 0; } -%typemap(typecheck) qpid::types::Variant& { +%typemap(typecheck) const qpid::types::Variant const & { $1 = (TYPE($input) == T_FLOAT || TYPE($input) == T_STRING || TYPE($input) == T_FIXNUM || |