summaryrefslogtreecommitdiffstats
path: root/bindings
diff options
context:
space:
mode:
authorFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:02:06 +0000
committerFrederic Peters <fpeters@entrouvert.com>2008-04-29 12:02:06 +0000
commit93ee9083730057521db9841c1b1e22ebf07a79bb (patch)
treefbe8e5dd79efa703f0869da0979ec2718cf2886a /bindings
parent90f4c1ee59c58b252a13d8b4f55e01df421c8fd5 (diff)
downloadlasso-93ee9083730057521db9841c1b1e22ebf07a79bb.tar.gz
lasso-93ee9083730057521db9841c1b1e22ebf07a79bb.tar.xz
lasso-93ee9083730057521db9841c1b1e22ebf07a79bb.zip
[project @ fpeters@0d.be-20071005200614-dahkk1xuq6pbumbo]
wrap constants & enums; is now possible: login = lasso.Login(server) login.initAuthnRequest('https://idp1/metadata', lasso.HTTP_METHOD_REDIRECT) login.buildAuthnRequestMsg() Original author: Frederic Peters <fpeters@0d.be> Date: 2007-10-05 22:06:14.800000+02:00
Diffstat (limited to 'bindings')
-rw-r--r--bindings/lang_python.py26
-rw-r--r--bindings/lang_python_wrapper_bottom.c5
-rw-r--r--bindings/t.py8
3 files changed, 36 insertions, 3 deletions
diff --git a/bindings/lang_python.py b/bindings/lang_python.py
index dd5c81a2..835ded03 100644
--- a/bindings/lang_python.py
+++ b/bindings/lang_python.py
@@ -30,6 +30,7 @@ class PythonBinding:
def generate(self):
fd = open('python/lasso.py', 'w')
self.generate_header(fd)
+ self.generate_constants(fd)
for clss in self.binding_data.structs:
self.generate_class(clss, fd)
fd.close()
@@ -47,6 +48,12 @@ import _lasso
_lasso.init()
'''
+ def generate_constants(self, fd):
+ print >> fd, '### Constants (both enums and defines)'
+ for c in self.binding_data.constants:
+ print >> fd, '%s = _lasso.%s' % (c[1][6:], c[1][6:])
+ print >> fd, ''
+
def generate_class(self, clss, fd):
klassname = clss.name[5:] # remove Lasso from class name
if clss.parent == 'GObject':
@@ -196,6 +203,8 @@ _lasso.init()
print >> fd, '#include <%s>' % h
print >> fd, ''
+ self.generate_constants_wrapper(fd)
+
self.wrapper_list = []
for m in self.binding_data.functions:
self.generate_function_wrapper(m, fd)
@@ -206,6 +215,23 @@ _lasso.init()
self.generate_wrapper_list(fd)
print >> fd, open('lang_python_wrapper_bottom.c').read()
+ def generate_constants_wrapper(self, fd):
+ print >> fd, '''static void
+register_constants(PyObject *d)
+{
+ PyObject *obj;
+'''
+ for c in self.binding_data.constants:
+ if c[0] == 'i':
+ print >> fd, ' obj = PyInt_FromLong(%s);' % c[1]
+ elif c[0] == 's':
+ print >> fd, ' obj = PyString_FromString(%s);' % c[1]
+ print >> fd, ' PyDict_SetItemString(d, "%s", obj);' % c[1][6:]
+ print >> fd, ' Py_DECREF(obj);'
+ print >> fd, '}'
+ print >> fd, ''
+
+
def generate_member_wrapper(self, c, fd):
klassname = c.name
for m in c.members:
diff --git a/bindings/lang_python_wrapper_bottom.c b/bindings/lang_python_wrapper_bottom.c
index 5f1220c3..82e74ecc 100644
--- a/bindings/lang_python_wrapper_bottom.c
+++ b/bindings/lang_python_wrapper_bottom.c
@@ -1,12 +1,15 @@
PyMODINIT_FUNC
init_lasso(void)
{
- PyObject *m;
+ PyObject *m, *d;
if (PyType_Ready(&PyGObjectPtrType) < 0)
return;
m = Py_InitModule3("_lasso", lasso_methods, "_lasso wrapper module");
+ d = PyModule_GetDict(m);
+ register_constants(d);
+
lasso_init();
lasso_wrapper_key = g_quark_from_static_string("PyLasso::wrapper");
diff --git a/bindings/t.py b/bindings/t.py
index 2f93598f..17957d33 100644
--- a/bindings/t.py
+++ b/bindings/t.py
@@ -144,14 +144,18 @@ def parse_header(header_file):
else:
m = re.match('\s*([a-zA-Z0-9_]+)', line)
if m:
- binding.constants.append(m.group(1))
+ binding.constants.append(('i', m.group(1)))
elif line.startswith('#define'):
m = re.match(r'#define\s+([a-zA-Z0-9_]+)\s+[-\w"]', line)
if m:
constant = m.group(1)
if constant[0] != '_':
# ignore private constants
- binding.constants.append(constant)
+ if '"' in line:
+ constant_type = 's'
+ else:
+ constant_type = 'i'
+ binding.constants.append((constant_type, constant))
elif line.startswith('typedef enum {'):
in_enum = True
elif line.startswith('typedef struct'):