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