Branch data Line data Source code
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_gc.h" // PyGC_Head
7 : : # include "pycore_runtime.h" // _Py_ID()
8 : : #endif
9 : :
10 : :
11 : : PyDoc_STRVAR(blob_close__doc__,
12 : : "close($self, /)\n"
13 : : "--\n"
14 : : "\n"
15 : : "Close the blob.");
16 : :
17 : : #define BLOB_CLOSE_METHODDEF \
18 : : {"close", (PyCFunction)blob_close, METH_NOARGS, blob_close__doc__},
19 : :
20 : : static PyObject *
21 : : blob_close_impl(pysqlite_Blob *self);
22 : :
23 : : static PyObject *
24 : 0 : blob_close(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
25 : : {
26 : 0 : return blob_close_impl(self);
27 : : }
28 : :
29 : : PyDoc_STRVAR(blob_read__doc__,
30 : : "read($self, length=-1, /)\n"
31 : : "--\n"
32 : : "\n"
33 : : "Read data at the current offset position.\n"
34 : : "\n"
35 : : " length\n"
36 : : " Read length in bytes.\n"
37 : : "\n"
38 : : "If the end of the blob is reached, the data up to end of file will be returned.\n"
39 : : "When length is not specified, or is negative, Blob.read() will read until the\n"
40 : : "end of the blob.");
41 : :
42 : : #define BLOB_READ_METHODDEF \
43 : : {"read", _PyCFunction_CAST(blob_read), METH_FASTCALL, blob_read__doc__},
44 : :
45 : : static PyObject *
46 : : blob_read_impl(pysqlite_Blob *self, int length);
47 : :
48 : : static PyObject *
49 : 0 : blob_read(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
50 : : {
51 : 0 : PyObject *return_value = NULL;
52 : 0 : int length = -1;
53 : :
54 [ # # # # : 0 : if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
# # ]
55 : 0 : goto exit;
56 : : }
57 [ # # ]: 0 : if (nargs < 1) {
58 : 0 : goto skip_optional;
59 : : }
60 : 0 : length = _PyLong_AsInt(args[0]);
61 [ # # # # ]: 0 : if (length == -1 && PyErr_Occurred()) {
62 : 0 : goto exit;
63 : : }
64 : 0 : skip_optional:
65 : 0 : return_value = blob_read_impl(self, length);
66 : :
67 : 0 : exit:
68 : 0 : return return_value;
69 : : }
70 : :
71 : : PyDoc_STRVAR(blob_write__doc__,
72 : : "write($self, data, /)\n"
73 : : "--\n"
74 : : "\n"
75 : : "Write data at the current offset.\n"
76 : : "\n"
77 : : "This function cannot change the blob length. Writing beyond the end of the\n"
78 : : "blob will result in an exception being raised.");
79 : :
80 : : #define BLOB_WRITE_METHODDEF \
81 : : {"write", (PyCFunction)blob_write, METH_O, blob_write__doc__},
82 : :
83 : : static PyObject *
84 : : blob_write_impl(pysqlite_Blob *self, Py_buffer *data);
85 : :
86 : : static PyObject *
87 : 0 : blob_write(pysqlite_Blob *self, PyObject *arg)
88 : : {
89 : 0 : PyObject *return_value = NULL;
90 : 0 : Py_buffer data = {NULL, NULL};
91 : :
92 [ # # ]: 0 : if (PyObject_GetBuffer(arg, &data, PyBUF_SIMPLE) != 0) {
93 : 0 : goto exit;
94 : : }
95 [ # # ]: 0 : if (!PyBuffer_IsContiguous(&data, 'C')) {
96 : 0 : _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
97 : 0 : goto exit;
98 : : }
99 : 0 : return_value = blob_write_impl(self, &data);
100 : :
101 : 0 : exit:
102 : : /* Cleanup for data */
103 [ # # ]: 0 : if (data.obj) {
104 : 0 : PyBuffer_Release(&data);
105 : : }
106 : :
107 : 0 : return return_value;
108 : : }
109 : :
110 : : PyDoc_STRVAR(blob_seek__doc__,
111 : : "seek($self, offset, origin=0, /)\n"
112 : : "--\n"
113 : : "\n"
114 : : "Set the current access position to offset.\n"
115 : : "\n"
116 : : "The origin argument defaults to os.SEEK_SET (absolute blob positioning).\n"
117 : : "Other values for origin are os.SEEK_CUR (seek relative to the current position)\n"
118 : : "and os.SEEK_END (seek relative to the blob\'s end).");
119 : :
120 : : #define BLOB_SEEK_METHODDEF \
121 : : {"seek", _PyCFunction_CAST(blob_seek), METH_FASTCALL, blob_seek__doc__},
122 : :
123 : : static PyObject *
124 : : blob_seek_impl(pysqlite_Blob *self, int offset, int origin);
125 : :
126 : : static PyObject *
127 : 0 : blob_seek(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
128 : : {
129 : 0 : PyObject *return_value = NULL;
130 : : int offset;
131 : 0 : int origin = 0;
132 : :
133 [ # # # # : 0 : if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
# # ]
134 : 0 : goto exit;
135 : : }
136 : 0 : offset = _PyLong_AsInt(args[0]);
137 [ # # # # ]: 0 : if (offset == -1 && PyErr_Occurred()) {
138 : 0 : goto exit;
139 : : }
140 [ # # ]: 0 : if (nargs < 2) {
141 : 0 : goto skip_optional;
142 : : }
143 : 0 : origin = _PyLong_AsInt(args[1]);
144 [ # # # # ]: 0 : if (origin == -1 && PyErr_Occurred()) {
145 : 0 : goto exit;
146 : : }
147 : 0 : skip_optional:
148 : 0 : return_value = blob_seek_impl(self, offset, origin);
149 : :
150 : 0 : exit:
151 : 0 : return return_value;
152 : : }
153 : :
154 : : PyDoc_STRVAR(blob_tell__doc__,
155 : : "tell($self, /)\n"
156 : : "--\n"
157 : : "\n"
158 : : "Return the current access position for the blob.");
159 : :
160 : : #define BLOB_TELL_METHODDEF \
161 : : {"tell", (PyCFunction)blob_tell, METH_NOARGS, blob_tell__doc__},
162 : :
163 : : static PyObject *
164 : : blob_tell_impl(pysqlite_Blob *self);
165 : :
166 : : static PyObject *
167 : 0 : blob_tell(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
168 : : {
169 : 0 : return blob_tell_impl(self);
170 : : }
171 : :
172 : : PyDoc_STRVAR(blob_enter__doc__,
173 : : "__enter__($self, /)\n"
174 : : "--\n"
175 : : "\n"
176 : : "Blob context manager enter.");
177 : :
178 : : #define BLOB_ENTER_METHODDEF \
179 : : {"__enter__", (PyCFunction)blob_enter, METH_NOARGS, blob_enter__doc__},
180 : :
181 : : static PyObject *
182 : : blob_enter_impl(pysqlite_Blob *self);
183 : :
184 : : static PyObject *
185 : 0 : blob_enter(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
186 : : {
187 : 0 : return blob_enter_impl(self);
188 : : }
189 : :
190 : : PyDoc_STRVAR(blob_exit__doc__,
191 : : "__exit__($self, type, val, tb, /)\n"
192 : : "--\n"
193 : : "\n"
194 : : "Blob context manager exit.");
195 : :
196 : : #define BLOB_EXIT_METHODDEF \
197 : : {"__exit__", _PyCFunction_CAST(blob_exit), METH_FASTCALL, blob_exit__doc__},
198 : :
199 : : static PyObject *
200 : : blob_exit_impl(pysqlite_Blob *self, PyObject *type, PyObject *val,
201 : : PyObject *tb);
202 : :
203 : : static PyObject *
204 : 0 : blob_exit(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
205 : : {
206 : 0 : PyObject *return_value = NULL;
207 : : PyObject *type;
208 : : PyObject *val;
209 : : PyObject *tb;
210 : :
211 [ # # # # : 0 : if (!_PyArg_CheckPositional("__exit__", nargs, 3, 3)) {
# # ]
212 : 0 : goto exit;
213 : : }
214 : 0 : type = args[0];
215 : 0 : val = args[1];
216 : 0 : tb = args[2];
217 : 0 : return_value = blob_exit_impl(self, type, val, tb);
218 : :
219 : 0 : exit:
220 : 0 : return return_value;
221 : : }
222 : : /*[clinic end generated code: output=ad6a402f70e85977 input=a9049054013a1b77]*/
|