From: Zbigniew Jędrzejewski-Szmek Date: Thu, 7 Mar 2013 05:26:24 +0000 (-0500) Subject: systemd-python: split .seek() into .seek_head() and .seek_tail() X-Git-Tag: v198~45 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=5c1c14b3a021fbf91f31018256b0c241ea1fe3f0 systemd-python: split .seek() into .seek_head() and .seek_tail() This way python code follows the original interface more closely. Also, .seek(0, journal.SEEK_END) was just to much to type. --- diff --git a/src/python-systemd/_reader.c b/src/python-systemd/_reader.c index 7013fcfce..e5733f0bc 100644 --- a/src/python-systemd/_reader.c +++ b/src/python-systemd/_reader.c @@ -360,60 +360,34 @@ static PyObject* Reader_flush_matches(Reader *self, PyObject *args) Py_RETURN_NONE; } -PyDoc_STRVAR(Reader_seek__doc__, - "seek(offset[, whence]) -> None\n\n" - "Jump `offset` entries in the journal. Argument\n" - "`whence` defines what the offset is relative to:\n" - "os.SEEK_SET (default) from first match in journal;\n" - "os.SEEK_CUR from current position in journal;\n" - "and os.SEEK_END is from last match in journal."); -static PyObject* Reader_seek(Reader *self, PyObject *args, PyObject *keywds) +PyDoc_STRVAR(Reader_seek_head__doc__, + "seek_head() -> None\n\n" + "Jump to the beginning of the journal.\n" + "This method invokes sd_journal_seek_head().\n" + "See man:sd_journal_seek_head(3)."); +static PyObject* Reader_seek_head(Reader *self, PyObject *args) { - int64_t offset; - int whence = SEEK_SET; - PyObject *result = NULL; - - static const char* const kwlist[] = {"offset", "whence", NULL}; - if (!PyArg_ParseTupleAndKeywords(args, keywds, "L|i", (char**) kwlist, - &offset, &whence)) + int r; + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_head(self->j); + Py_END_ALLOW_THREADS + if (set_error(r, NULL, NULL)) return NULL; + Py_RETURN_NONE; +} - switch(whence) { - case SEEK_SET: { - int r; - Py_BEGIN_ALLOW_THREADS - r = sd_journal_seek_head(self->j); - Py_END_ALLOW_THREADS - if (set_error(r, NULL, NULL)) - return NULL; - - if (offset > 0LL) - result = PyObject_CallMethod((PyObject *)self, (char*) "get_next", - (char*) "L", offset); - break; - } - case SEEK_CUR: - result = PyObject_CallMethod((PyObject *)self, (char*) "get_next", - (char*) "L", offset); - break; - case SEEK_END: { - int r; - Py_BEGIN_ALLOW_THREADS - r = sd_journal_seek_tail(self->j); - Py_END_ALLOW_THREADS - if (set_error(r, NULL, NULL)) - return NULL; - - result = PyObject_CallMethod((PyObject *)self, (char*) "get_next", - (char*) "L", offset < 0LL ? offset : -1LL); - break; - } - default: - PyErr_SetString(PyExc_ValueError, "Invalid value for whence"); - } - - Py_XDECREF(result); - if (PyErr_Occurred()) +PyDoc_STRVAR(Reader_seek_tail__doc__, + "seek_tail() -> None\n\n" + "Jump to the beginning of the journal.\n" + "This method invokes sd_journal_seek_tail().\n" + "See man:sd_journal_seek_tail(3)."); +static PyObject* Reader_seek_tail(Reader *self, PyObject *args) +{ + int r; + Py_BEGIN_ALLOW_THREADS + r = sd_journal_seek_tail(self->j); + Py_END_ALLOW_THREADS + if (set_error(r, NULL, NULL)) return NULL; Py_RETURN_NONE; } @@ -644,7 +618,8 @@ static PyMethodDef Reader_methods[] = { {"add_match", (PyCFunction) Reader_add_match, METH_VARARGS|METH_KEYWORDS, Reader_add_match__doc__}, {"add_disjunction", (PyCFunction) Reader_add_disjunction, METH_NOARGS, Reader_add_disjunction__doc__}, {"flush_matches", (PyCFunction) Reader_flush_matches, METH_NOARGS, Reader_flush_matches__doc__}, - {"seek", (PyCFunction) Reader_seek, METH_VARARGS | METH_KEYWORDS, Reader_seek__doc__}, + {"seek_head", (PyCFunction) Reader_seek_head, METH_NOARGS, Reader_seek_head__doc__}, + {"seek_tail", (PyCFunction) Reader_seek_tail, METH_NOARGS, Reader_seek_tail__doc__}, {"seek_realtime", (PyCFunction) Reader_seek_realtime, METH_VARARGS, Reader_seek_realtime__doc__}, {"seek_monotonic", (PyCFunction) Reader_seek_monotonic, METH_VARARGS, Reader_seek_monotonic__doc__}, {"wait", (PyCFunction) Reader_wait, METH_VARARGS, Reader_wait__doc__}, diff --git a/src/python-systemd/docs/journal.rst b/src/python-systemd/docs/journal.rst index 78b831aff..faa270746 100644 --- a/src/python-systemd/docs/journal.rst +++ b/src/python-systemd/docs/journal.rst @@ -27,12 +27,7 @@ Accessing the Journal .. autoattribute:: systemd.journal.DEFAULT_CONVERTERS -Whence constants -~~~~~~~~~~~~~~~~ -.. autoattribute:: systemd.journal.SEEK_SET -.. autoattribute:: systemd.journal.SEEK_CUR -.. autoattribute:: systemd.journal.SEEK_END Journal access types ~~~~~~~~~~~~~~~~~~~~ diff --git a/src/python-systemd/journal.py b/src/python-systemd/journal.py index 80299e6b9..e9c09e874 100644 --- a/src/python-systemd/journal.py +++ b/src/python-systemd/journal.py @@ -27,7 +27,6 @@ import functools as _functools import uuid as _uuid import traceback as _traceback import os as _os -from os import SEEK_SET, SEEK_CUR, SEEK_END import logging as _logging if _sys.version_info >= (3,): from collections import ChainMap as _ChainMap