void genLinkDocs(fstream& fo) { LinkServicePtr ls = GET_SERVICE(LinkService); StringIteratorPtr ln = ls->getAllLinkNames(); fo << "\\chapter{Links}" << endl; while (!ln->end()) { const string& linkname = ln->next(); fo << "\\section*{" << linkname << "}" << endl; // for cross linking fo << "\\label{prop_" << linkname << "}" << endl; DocStrings::iterator it = mLinkDocs.find(linkname); if (it != mLinkDocs.end()) { fo << endl << "\\subsection*{Description}" << endl; // spit out the additional docs if present fo << it->second << endl; } fo << "\\end{tabular}" << endl; fo << endl; } }
// ------------------------------------------ PyObject *LinkServiceBinder::getOneLink(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; // Nearly the same as getAllLinks. Only that it returns PyObject for LinkPtr // directly LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; int flavor = 0, src, dst; PyObject *objflav; if (PyArg_ParseTuple(args, "Oii", &objflav, &src, &dst)) { if (!getFlavor(objflav, o, flavor)) return NULL; const Link *res = o->getOneLink(flavor, src, dst); if (res) return LinkBinder::create(*res); // not found? return none __PY_NONE_RET; } else { // Invalid parameters PyErr_SetString( PyExc_TypeError, "Expected three integer parameters: flavor, src and dst!"); return NULL; } __PYTHON_EXCEPTION_GUARD_END_; }
// ------------------------------------------ PyObject *LinkServiceBinder::flavorToName(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; PyObject *result = NULL; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; int id; if (PyArg_ParseTuple(args, "i", &id)) { const std::string &res = o->flavorToName(id); #ifdef IS_PY3K result = PyBytes_FromString(res.c_str()); #else result = PyString_FromString(res.c_str()); #endif return result; } else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected an integer argument!"); return NULL; } __PYTHON_EXCEPTION_GUARD_END_; }
// ------------------------------------------ PyObject *LinkServiceBinder::getAllLinkNames(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; // wrap the returned StringIterator into StringIteratorBinder, return StringIteratorPtr res = o->getAllLinkNames(); return StringIteratorBinder::create(res); __PYTHON_EXCEPTION_GUARD_END_; }
// ------------------------------------------ PyObject *LinkServiceBinder::getFieldsDesc(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; PyObject *objflav; int flavor = 0; if (PyArg_ParseTuple(args, "O", &objflav)) { if (!getFlavor(objflav, o, flavor)) return NULL; // wrap the returned StringIterator into StringIteratorBinder, return const DataFields& res = o->getFieldDesc(flavor); return DataFieldsBinder::create(res); } // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected a string or integer argument!"); return NULL; __PYTHON_EXCEPTION_GUARD_END_; }
// ------------------------------------------ PyObject *LinkServiceBinder::getRelation(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; PyObject *result = NULL; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; PyObject *object; if (!PyArg_ParseTuple(args, "O", &object)) { PyErr_SetString(PyExc_TypeError, "Expected an integer or string argument!"); return NULL; } // two possibilities here : name or flavor #ifdef IS_PY3K if (PyBytes_Check(object)) { char *str = PyBytes_AsString(object); #else if (PyString_Check(object)) { char *str = PyString_AsString(object); #endif RelationPtr rel = o->getRelation(str); if (!rel) { PyErr_Format(PyExc_ValueError, "Relation not found by name %s", str); } else result = RelationBinder::create(rel); return result; } else if (PyLong_Check(object)) { long id = PyLong_AsLong(object); RelationPtr rel = o->getRelation(static_cast<int>(id)); if (!rel) { PyErr_Format(PyExc_ValueError, "Relation not found by id %ld", id); } else result = RelationBinder::create(rel); return result; } else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected an integer or string argument!"); return NULL; } __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ PyObject *LinkServiceBinder::getAllLinks(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; int flavor = 0, src, dst; PyObject *objflav; // let the third parameter be either string or integer // if it's a string, we first have to parse the string to get flavor id if (PyArg_ParseTuple(args, "Oii", &objflav, &src, &dst)) { #ifdef IS_PY3K if (PyBytes_Check(objflav)) { char *str = PyBytes_AsString(objflav); #else if (PyString_Check(objflav)) { char *str = PyString_AsString(objflav); #endif flavor = o->nameToFlavor(str); } else if (PyLong_Check(objflav)) { flavor = PyLong_AsLong(objflav); } else { PyErr_SetString( PyExc_TypeError, "Invalid type given for flavor: expected string or integer"); return NULL; } LinkQueryResultPtr res = o->getAllLinks(flavor, src, dst); return LinkQueryResultBinder::create(res); } else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected three parameters: flavor, src and dst!"); return NULL; } __PYTHON_EXCEPTION_GUARD_END_; } // ------------------------------------------ bool LinkServiceBinder::getFlavor(PyObject *src, LinkServicePtr &obj, int &flavor) { __PYTHON_EXCEPTION_GUARD_BEGIN_; #ifdef IS_PY3K if (PyBytes_Check(src)) { char *str = PyBytes_AsString(src); #else if (PyString_Check(src)) { char *str = PyString_AsString(src); #endif flavor = obj->nameToFlavor(str); return true; } else if (PyLong_Check(src)) { flavor = PyLong_AsLong(src); return true; } else { PyErr_SetString( PyExc_TypeError, "Invalid type given for flavor: expected string or integer"); return false; } __PYTHON_EXCEPTION_GUARD_END_RVAL(false); } // ------------------------------------------ PyObject *LinkServiceBinder::getAllInherited(PyObject *self, PyObject *args) { __PYTHON_EXCEPTION_GUARD_BEGIN_; LinkServicePtr o; if (!python_cast<LinkServicePtr>(self, &msType, &o)) __PY_CONVERR_RET; int flavor = 0, src, dst; PyObject *objflav; // let the third parameter be either string or integer // if it's a string, we first have to parse the string to get flavor id if (PyArg_ParseTuple(args, "Oii", &objflav, &src, &dst)) { if (!getFlavor(objflav, o, flavor)) return NULL; LinkQueryResultPtr res = o->getAllInherited(flavor, src, dst); return LinkQueryResultBinder::create(res); } else { // Invalid parameters PyErr_SetString(PyExc_TypeError, "Expected three parameters: flavor, src and dst!"); return NULL; } __PYTHON_EXCEPTION_GUARD_END_; }