コード例 #1
0
			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;
				}
			}
コード例 #2
0
// ------------------------------------------
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_;
}
コード例 #3
0
// ------------------------------------------
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_;
}
コード例 #4
0
// ------------------------------------------
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_;
}
コード例 #5
0
// ------------------------------------------
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_;
}
コード例 #6
0
// ------------------------------------------
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_;
}