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