diff options
author | Andrew Tridgell <tridge@samba.org> | 2010-08-22 14:46:01 +1000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2010-08-22 14:57:34 +1000 |
commit | 5a025c82f566b378a125abf0f9e74fc076d394c0 (patch) | |
tree | 545f855a10a2efd8af1d7917ebc8e01f3325d339 /pidl/lib/Parse/Pidl | |
parent | 45ac8ffdb4181c31605ccda5035664a8019ffc49 (diff) | |
download | samba-5a025c82f566b378a125abf0f9e74fc076d394c0.tar.gz samba-5a025c82f566b378a125abf0f9e74fc076d394c0.tar.bz2 samba-5a025c82f566b378a125abf0f9e74fc076d394c0.zip |
pidl: added a __ndr_print__() method on python NDR objects
This allows you to print a returned NDR structure using
s.__ndr_print__() which gives an easy view of complex
structures, such as those from netlogon
Diffstat (limited to 'pidl/lib/Parse/Pidl')
-rw-r--r-- | pidl/lib/Parse/Pidl/Samba4/Python.pm | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/pidl/lib/Parse/Pidl/Samba4/Python.pm b/pidl/lib/Parse/Pidl/Samba4/Python.pm index 75aa0a8172..b7d70fafaf 100644 --- a/pidl/lib/Parse/Pidl/Samba4/Python.pm +++ b/pidl/lib/Parse/Pidl/Samba4/Python.pm @@ -288,11 +288,24 @@ sub PythonStruct($$$$$$) $self->deindent; $self->pidl("}"); $self->pidl(""); + + $self->pidl("static PyObject *py_$name\_ndr_print(PyObject *py_obj)"); + $self->pidl("{"); + $self->indent; + $self->pidl("$cname *object = ($cname *)py_talloc_get_ptr(py_obj);"); + $self->pidl("char *retstr;"); + $self->pidl("retstr = ndr_print_struct_string(py_talloc_get_mem_ctx(py_obj), (ndr_print_fn_t)ndr_print_$name, \"$name\", object);"); + $self->pidl("return PyString_FromString(retstr);"); + $self->deindent; + $self->pidl("}"); + $self->pidl(""); + $py_methods = "py_$name\_methods"; $self->pidl("static PyMethodDef $py_methods\[] = {"); $self->indent; $self->pidl("{ \"__ndr_pack__\", (PyCFunction)py_$name\_ndr_pack, METH_NOARGS, \"S.pack() -> blob\\nNDR pack\" },"); $self->pidl("{ \"__ndr_unpack__\", (PyCFunction)py_$name\_ndr_unpack, METH_VARARGS, \"S.unpack(blob) -> None\\nNDR unpack\" },"); + $self->pidl("{ \"__ndr_print__\", (PyCFunction)py_$name\_ndr_print, METH_VARARGS, \"S.print(blob) -> None\\nNDR print\" },"); $self->pidl("{ NULL, NULL, 0, NULL }"); $self->deindent; $self->pidl("};"); |