(root)/
Python-3.11.7/
Modules/
_sqlite/
clinic/
blob.c.h
       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  blob_close(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
      19  {
      20      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  blob_read(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
      44  {
      45      PyObject *return_value = NULL;
      46      int length = -1;
      47  
      48      if (!_PyArg_CheckPositional("read", nargs, 0, 1)) {
      49          goto exit;
      50      }
      51      if (nargs < 1) {
      52          goto skip_optional;
      53      }
      54      length = _PyLong_AsInt(args[0]);
      55      if (length == -1 && PyErr_Occurred()) {
      56          goto exit;
      57      }
      58  skip_optional:
      59      return_value = blob_read_impl(self, length);
      60  
      61  exit:
      62      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  blob_write(pysqlite_Blob *self, PyObject *arg)
      82  {
      83      PyObject *return_value = NULL;
      84      Py_buffer data = {NULL, NULL};
      85  
      86      if (PyObject_GetBuffer(arg, &data, PyBUF_SIMPLE) != 0) {
      87          goto exit;
      88      }
      89      if (!PyBuffer_IsContiguous(&data, 'C')) {
      90          _PyArg_BadArgument("write", "argument", "contiguous buffer", arg);
      91          goto exit;
      92      }
      93      return_value = blob_write_impl(self, &data);
      94  
      95  exit:
      96      /* Cleanup for data */
      97      if (data.obj) {
      98         PyBuffer_Release(&data);
      99      }
     100  
     101      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  blob_seek(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
     122  {
     123      PyObject *return_value = NULL;
     124      int offset;
     125      int origin = 0;
     126  
     127      if (!_PyArg_CheckPositional("seek", nargs, 1, 2)) {
     128          goto exit;
     129      }
     130      offset = _PyLong_AsInt(args[0]);
     131      if (offset == -1 && PyErr_Occurred()) {
     132          goto exit;
     133      }
     134      if (nargs < 2) {
     135          goto skip_optional;
     136      }
     137      origin = _PyLong_AsInt(args[1]);
     138      if (origin == -1 && PyErr_Occurred()) {
     139          goto exit;
     140      }
     141  skip_optional:
     142      return_value = blob_seek_impl(self, offset, origin);
     143  
     144  exit:
     145      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  blob_tell(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
     162  {
     163      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  blob_enter(pysqlite_Blob *self, PyObject *Py_UNUSED(ignored))
     180  {
     181      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  blob_exit(pysqlite_Blob *self, PyObject *const *args, Py_ssize_t nargs)
     199  {
     200      PyObject *return_value = NULL;
     201      PyObject *type;
     202      PyObject *val;
     203      PyObject *tb;
     204  
     205      if (!_PyArg_CheckPositional("__exit__", nargs, 3, 3)) {
     206          goto exit;
     207      }
     208      type = args[0];
     209      val = args[1];
     210      tb = args[2];
     211      return_value = blob_exit_impl(self, type, val, tb);
     212  
     213  exit:
     214      return return_value;
     215  }
     216  /*[clinic end generated code: output=382cbf0977bb158a input=a9049054013a1b77]*/