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