• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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