py_lsup_rdf.c 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148
  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. #include "py_namespace.h"
  13. static PyModuleDef _lsup_rdf_pkg = {
  14. PyModuleDef_HEAD_INIT,
  15. .m_name = "_lsup_rdf",
  16. .m_doc = "Lakesuperior RDF package.",
  17. .m_size = -1,
  18. };
  19. PyMODINIT_FUNC
  20. PyInit__lsup_rdf (void)
  21. { return PyModule_Create (&_lsup_rdf_pkg); }
  22. static PyModuleDef term_mod = {
  23. PyModuleDef_HEAD_INIT,
  24. .m_name = "term",
  25. .m_doc = "RDF term module.",
  26. .m_size = -1,
  27. };
  28. PyMODINIT_FUNC
  29. PyInit_term()
  30. {
  31. if (PyType_Ready (&TermType) < 0) return NULL;
  32. PyObject *m = PyModule_Create(&term_mod);
  33. if (m == NULL) return NULL;
  34. if (
  35. PyModule_AddIntConstant (m, "TERM_UNDEFINED", LSUP_TERM_UNDEFINED) < 0
  36. || PyModule_AddIntConstant (m, "TERM_URI", LSUP_TERM_URI) < 0
  37. || PyModule_AddIntConstant (m, "TERM_BNODE", LSUP_TERM_BNODE) < 0
  38. || PyModule_AddIntConstant (m, "TERM_LITERAL", LSUP_TERM_LITERAL) < 0
  39. ) return NULL;
  40. Py_INCREF(&TermType);
  41. if (PyModule_AddObject(m, "Term", (PyObject *) &TermType) < 0) {
  42. Py_DECREF(&TermType);
  43. Py_DECREF(m);
  44. return NULL;
  45. }
  46. return m;
  47. }
  48. static PyModuleDef triple_mod = {
  49. PyModuleDef_HEAD_INIT,
  50. .m_name = "triple",
  51. .m_doc = "RDF triple module.",
  52. .m_size = -1,
  53. };
  54. PyMODINIT_FUNC
  55. PyInit_triple()
  56. {
  57. if (PyType_Ready (&TripleType) < 0) return NULL;
  58. PyObject *m = PyModule_Create(&triple_mod);
  59. if (m == NULL) return NULL;
  60. Py_INCREF(&TripleType);
  61. if (PyModule_AddObject(m, "Triple", (PyObject *) &TripleType) < 0) {
  62. Py_DECREF(&TripleType);
  63. Py_DECREF(m);
  64. return NULL;
  65. }
  66. return m;
  67. }
  68. static PyModuleDef namespace_mod = {
  69. PyModuleDef_HEAD_INIT,
  70. .m_name = "namespace",
  71. .m_doc = "RDF namespace module.",
  72. .m_size = -1,
  73. };
  74. PyMODINIT_FUNC
  75. PyInit_namespace()
  76. {
  77. if (PyType_Ready (&NSMapType) < 0) return NULL;
  78. PyObject *m = PyModule_Create(&namespace_mod);
  79. if (m == NULL) return NULL;
  80. Py_INCREF(&NSMapType);
  81. if (PyModule_AddObject(m, "NSMap", (PyObject *) &NSMapType) < 0) {
  82. Py_DECREF(&NSMapType);
  83. Py_DECREF(m);
  84. return NULL;
  85. }
  86. return m;
  87. }
  88. static PyModuleDef graph_mod = {
  89. PyModuleDef_HEAD_INIT,
  90. .m_name = "graph",
  91. .m_doc = "RDF graph module.",
  92. .m_size = -1,
  93. };
  94. PyMODINIT_FUNC
  95. PyInit_graph()
  96. {
  97. if (PyType_Ready (&GraphType) < 0) return NULL;
  98. PyObject *m = PyModule_Create(&graph_mod);
  99. if (!m) return NULL;
  100. #define ENTRY(a, b) \
  101. if (PyModule_AddIntConstant (m, "STORE_" #a, b) < 0) return NULL;
  102. BACKEND_TBL
  103. #undef ENTRY
  104. Py_INCREF(&GraphType);
  105. if (PyModule_AddObject(m, "Graph", (PyObject *) &GraphType) < 0) {
  106. Py_DECREF(&GraphType);
  107. Py_DECREF(m);
  108. return NULL;
  109. }
  110. return m;
  111. }