_dbmmodule.c.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. /*[clinic input]
  2. preserve
  3. [clinic start generated code]*/
  4. #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  5. # include "pycore_gc.h" // PyGC_Head
  6. # include "pycore_runtime.h" // _Py_ID()
  7. #endif
  8. PyDoc_STRVAR(_dbm_dbm_close__doc__,
  9. "close($self, /)\n"
  10. "--\n"
  11. "\n"
  12. "Close the database.");
  13. #define _DBM_DBM_CLOSE_METHODDEF \
  14. {"close", (PyCFunction)_dbm_dbm_close, METH_NOARGS, _dbm_dbm_close__doc__},
  15. static PyObject *
  16. _dbm_dbm_close_impl(dbmobject *self);
  17. static PyObject *
  18. _dbm_dbm_close(dbmobject *self, PyObject *Py_UNUSED(ignored))
  19. {
  20. return _dbm_dbm_close_impl(self);
  21. }
  22. PyDoc_STRVAR(_dbm_dbm_keys__doc__,
  23. "keys($self, /)\n"
  24. "--\n"
  25. "\n"
  26. "Return a list of all keys in the database.");
  27. #define _DBM_DBM_KEYS_METHODDEF \
  28. {"keys", _PyCFunction_CAST(_dbm_dbm_keys), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_keys__doc__},
  29. static PyObject *
  30. _dbm_dbm_keys_impl(dbmobject *self, PyTypeObject *cls);
  31. static PyObject *
  32. _dbm_dbm_keys(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
  33. {
  34. if (nargs || (kwnames && PyTuple_GET_SIZE(kwnames))) {
  35. PyErr_SetString(PyExc_TypeError, "keys() takes no arguments");
  36. return NULL;
  37. }
  38. return _dbm_dbm_keys_impl(self, cls);
  39. }
  40. PyDoc_STRVAR(_dbm_dbm_get__doc__,
  41. "get($self, key, default=None, /)\n"
  42. "--\n"
  43. "\n"
  44. "Return the value for key if present, otherwise default.");
  45. #define _DBM_DBM_GET_METHODDEF \
  46. {"get", _PyCFunction_CAST(_dbm_dbm_get), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_get__doc__},
  47. static PyObject *
  48. _dbm_dbm_get_impl(dbmobject *self, PyTypeObject *cls, const char *key,
  49. Py_ssize_t key_length, PyObject *default_value);
  50. static PyObject *
  51. _dbm_dbm_get(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
  52. {
  53. PyObject *return_value = NULL;
  54. #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  55. # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
  56. #else
  57. # define KWTUPLE NULL
  58. #endif
  59. static const char * const _keywords[] = {"", "", NULL};
  60. static _PyArg_Parser _parser = {
  61. .keywords = _keywords,
  62. .format = "s#|O:get",
  63. .kwtuple = KWTUPLE,
  64. };
  65. #undef KWTUPLE
  66. const char *key;
  67. Py_ssize_t key_length;
  68. PyObject *default_value = Py_None;
  69. if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
  70. &key, &key_length, &default_value)) {
  71. goto exit;
  72. }
  73. return_value = _dbm_dbm_get_impl(self, cls, key, key_length, default_value);
  74. exit:
  75. return return_value;
  76. }
  77. PyDoc_STRVAR(_dbm_dbm_setdefault__doc__,
  78. "setdefault($self, key, default=b\'\', /)\n"
  79. "--\n"
  80. "\n"
  81. "Return the value for key if present, otherwise default.\n"
  82. "\n"
  83. "If key is not in the database, it is inserted with default as the value.");
  84. #define _DBM_DBM_SETDEFAULT_METHODDEF \
  85. {"setdefault", _PyCFunction_CAST(_dbm_dbm_setdefault), METH_METHOD|METH_FASTCALL|METH_KEYWORDS, _dbm_dbm_setdefault__doc__},
  86. static PyObject *
  87. _dbm_dbm_setdefault_impl(dbmobject *self, PyTypeObject *cls, const char *key,
  88. Py_ssize_t key_length, PyObject *default_value);
  89. static PyObject *
  90. _dbm_dbm_setdefault(dbmobject *self, PyTypeObject *cls, PyObject *const *args, Py_ssize_t nargs, PyObject *kwnames)
  91. {
  92. PyObject *return_value = NULL;
  93. #if defined(Py_BUILD_CORE) && !defined(Py_BUILD_CORE_MODULE)
  94. # define KWTUPLE (PyObject *)&_Py_SINGLETON(tuple_empty)
  95. #else
  96. # define KWTUPLE NULL
  97. #endif
  98. static const char * const _keywords[] = {"", "", NULL};
  99. static _PyArg_Parser _parser = {
  100. .keywords = _keywords,
  101. .format = "s#|O:setdefault",
  102. .kwtuple = KWTUPLE,
  103. };
  104. #undef KWTUPLE
  105. const char *key;
  106. Py_ssize_t key_length;
  107. PyObject *default_value = NULL;
  108. if (!_PyArg_ParseStackAndKeywords(args, nargs, kwnames, &_parser,
  109. &key, &key_length, &default_value)) {
  110. goto exit;
  111. }
  112. return_value = _dbm_dbm_setdefault_impl(self, cls, key, key_length, default_value);
  113. exit:
  114. return return_value;
  115. }
  116. PyDoc_STRVAR(dbmopen__doc__,
  117. "open($module, filename, flags=\'r\', mode=0o666, /)\n"
  118. "--\n"
  119. "\n"
  120. "Return a database object.\n"
  121. "\n"
  122. " filename\n"
  123. " The filename to open.\n"
  124. " flags\n"
  125. " How to open the file. \"r\" for reading, \"w\" for writing, etc.\n"
  126. " mode\n"
  127. " If creating a new file, the mode bits for the new file\n"
  128. " (e.g. os.O_RDWR).");
  129. #define DBMOPEN_METHODDEF \
  130. {"open", _PyCFunction_CAST(dbmopen), METH_FASTCALL, dbmopen__doc__},
  131. static PyObject *
  132. dbmopen_impl(PyObject *module, PyObject *filename, const char *flags,
  133. int mode);
  134. static PyObject *
  135. dbmopen(PyObject *module, PyObject *const *args, Py_ssize_t nargs)
  136. {
  137. PyObject *return_value = NULL;
  138. PyObject *filename;
  139. const char *flags = "r";
  140. int mode = 438;
  141. if (!_PyArg_CheckPositional("open", nargs, 1, 3)) {
  142. goto exit;
  143. }
  144. filename = args[0];
  145. if (nargs < 2) {
  146. goto skip_optional;
  147. }
  148. if (!PyUnicode_Check(args[1])) {
  149. _PyArg_BadArgument("open", "argument 2", "str", args[1]);
  150. goto exit;
  151. }
  152. Py_ssize_t flags_length;
  153. flags = PyUnicode_AsUTF8AndSize(args[1], &flags_length);
  154. if (flags == NULL) {
  155. goto exit;
  156. }
  157. if (strlen(flags) != (size_t)flags_length) {
  158. PyErr_SetString(PyExc_ValueError, "embedded null character");
  159. goto exit;
  160. }
  161. if (nargs < 3) {
  162. goto skip_optional;
  163. }
  164. mode = _PyLong_AsInt(args[2]);
  165. if (mode == -1 && PyErr_Occurred()) {
  166. goto exit;
  167. }
  168. skip_optional:
  169. return_value = dbmopen_impl(module, filename, flags, mode);
  170. exit:
  171. return return_value;
  172. }
  173. /*[clinic end generated code: output=f924d467af2e2f4e input=a9049054013a1b77]*/