py_lsup_rdf.c 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. /** @file lsup_rdf_mod.c
  2. *
  3. * @brief LSUP_RDF package.
  4. *
  5. * This "package" module includes all RDF modules in a monolithic compiled
  6. * object, in order to resolve internal symbol dependencies. Individual modules
  7. * are extracted and exposed by the package __init__.py .
  8. */
  9. #define PY_SSIZE_T_CLEAN
  10. #include <Python.h>
  11. #include "py_graph.h"
  12. static PyModuleDef _lsup_rdf_pkg = {
  13. PyModuleDef_HEAD_INIT,
  14. .m_name = "_lsup_rdf",
  15. .m_doc = "Lakesuperior RDF package.",
  16. .m_size = -1,
  17. };
  18. PyMODINIT_FUNC
  19. PyInit__lsup_rdf (void)
  20. { return PyModule_Create (&_lsup_rdf_pkg); }
  21. static PyModuleDef term_mod = {
  22. PyModuleDef_HEAD_INIT,
  23. .m_name = "term",
  24. .m_doc = "RDF term module.",
  25. .m_size = -1,
  26. };
  27. PyMODINIT_FUNC
  28. PyInit_term()
  29. {
  30. if (PyType_Ready (&TermType) < 0) return NULL;
  31. PyObject *m = PyModule_Create(&term_mod);
  32. if (m == NULL) return NULL;
  33. if (
  34. PyModule_AddIntConstant (m, "TERM_UNDEFINED", LSUP_TERM_UNDEFINED) < 0
  35. || PyModule_AddIntConstant (m, "TERM_URI", LSUP_TERM_URI) < 0
  36. || PyModule_AddIntConstant (m, "TERM_BNODE", LSUP_TERM_BNODE) < 0
  37. || PyModule_AddIntConstant (m, "TERM_LITERAL", LSUP_TERM_LITERAL) < 0
  38. ) return NULL;
  39. Py_INCREF(&TermType);
  40. if (PyModule_AddObject(m, "Term", (PyObject *) &TermType) < 0) {
  41. Py_DECREF(&TermType);
  42. Py_DECREF(m);
  43. return NULL;
  44. }
  45. return m;
  46. }
  47. static PyModuleDef triple_mod = {
  48. PyModuleDef_HEAD_INIT,
  49. .m_name = "triple",
  50. .m_doc = "RDF triple module.",
  51. .m_size = -1,
  52. };
  53. PyMODINIT_FUNC
  54. PyInit_triple()
  55. {
  56. if (PyType_Ready (&TripleType) < 0) return NULL;
  57. PyObject *m = PyModule_Create(&triple_mod);
  58. if (m == NULL) return NULL;
  59. Py_INCREF(&TripleType);
  60. if (PyModule_AddObject(m, "Triple", (PyObject *) &TripleType) < 0) {
  61. Py_DECREF(&TripleType);
  62. Py_DECREF(m);
  63. return NULL;
  64. }
  65. return m;
  66. }
  67. static PyModuleDef graph_mod = {
  68. PyModuleDef_HEAD_INIT,
  69. .m_name = "graph",
  70. .m_doc = "RDF graph module.",
  71. .m_size = -1,
  72. };
  73. PyMODINIT_FUNC
  74. PyInit_graph()
  75. {
  76. if (PyType_Ready (&GraphType) < 0) return NULL;
  77. PyObject *m = PyModule_Create(&graph_mod);
  78. if (!m) return NULL;
  79. #define ENTRY(a, b) \
  80. if (PyModule_AddIntConstant (m, "STORE_" #a, b) < 0) return NULL;
  81. BACKEND_TBL
  82. #undef ENTRY
  83. Py_INCREF(&GraphType);
  84. if (PyModule_AddObject(m, "Graph", (PyObject *) &GraphType) < 0) {
  85. Py_DECREF(&GraphType);
  86. Py_DECREF(m);
  87. return NULL;
  88. }
  89. return m;
  90. }