Config-UCL
view release on metacpan or search on metacpan
libucl-0.8.1/python/src/uclmodule.c view on Meta::CPAN
buf = (char *) ucl_object_emit (root, emitter);
ucl_object_unref (root);
#if PY_MAJOR_VERSION < 3
ret = PyString_FromString (buf);
#else
ret = PyUnicode_FromString (buf);
#endif
free(buf);
return ret;
}
return NULL;
}
static PyObject *
ucl_validate (PyObject *self, PyObject *args)
{
PyObject *dataobj, *schemaobj;
ucl_object_t *data, *schema;
bool r;
struct ucl_schema_error err;
if (!PyArg_ParseTuple (args, "OO", &schemaobj, &dataobj)) {
PyErr_SetString (PyExc_TypeError, "Unhandled object type");
return NULL;
}
schema = _iterate_python(schemaobj);
if (!schema)
return NULL;
data = _iterate_python(dataobj);
if (!data)
return NULL;
// validation
r = ucl_object_validate (schema, data, &err);
ucl_object_unref (schema);
ucl_object_unref (data);
if (!r) {
PyErr_SetString (SchemaError, err.msg);
return NULL;
}
Py_RETURN_TRUE;
}
static PyMethodDef uclMethods[] = {
{"load", ucl_load, METH_VARARGS, "Load UCL from stream"},
{"dump", ucl_dump, METH_VARARGS, "Dump UCL to stream"},
{"validate", ucl_validate, METH_VARARGS, "Validate ucl stream against schema"},
{NULL, NULL, 0, NULL}
};
static void
init_macros(PyObject *mod)
{
PyModule_AddIntMacro(mod, UCL_EMIT_JSON);
PyModule_AddIntMacro(mod, UCL_EMIT_JSON_COMPACT);
PyModule_AddIntMacro(mod, UCL_EMIT_CONFIG);
PyModule_AddIntMacro(mod, UCL_EMIT_YAML);
PyModule_AddIntMacro(mod, UCL_EMIT_MSGPACK);
SchemaError = PyErr_NewException("ucl.SchemaError", NULL, NULL);
Py_INCREF(SchemaError);
PyModule_AddObject(mod, "SchemaError", SchemaError);
}
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef uclmodule = {
PyModuleDef_HEAD_INIT,
"ucl",
NULL,
-1,
uclMethods
};
PyMODINIT_FUNC
PyInit_ucl (void)
{
PyObject *mod = PyModule_Create (&uclmodule);
init_macros (mod);
return mod;
}
#else
void initucl (void)
{
PyObject *mod = Py_InitModule ("ucl", uclMethods);
init_macros (mod);
}
#endif
( run in 2.238 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )