diff options
author | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:02:06 +0000 |
---|---|---|
committer | Frederic Peters <fpeters@entrouvert.com> | 2008-04-29 12:02:06 +0000 |
commit | 93ee9083730057521db9841c1b1e22ebf07a79bb (patch) | |
tree | fbe8e5dd79efa703f0869da0979ec2718cf2886a /bindings | |
parent | 90f4c1ee59c58b252a13d8b4f55e01df421c8fd5 (diff) | |
download | lasso-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.py | 26 | ||||
-rw-r--r-- | bindings/lang_python_wrapper_bottom.c | 5 | ||||
-rw-r--r-- | bindings/t.py | 8 |
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'): |