chiark / gitweb /
systemd-python: add _Reader.closed attribute
[elogind.git] / src / python-systemd / _reader.c
index 96634a19c35865bff1769e3b7536fe78df7edf88..67358e3061d536f2a6b68ceafd8b53b682be3860 100644 (file)
@@ -153,6 +153,35 @@ PyDoc_STRVAR(Reader_close__doc__,
              "See man:sd_journal_close(3).");
 static PyObject* Reader_close(Reader *self, PyObject *args)
 {
+    assert(self);
+    assert(!args);
+
+    sd_journal_close(self->j);
+    self->j = NULL;
+    Py_RETURN_NONE;
+}
+
+PyDoc_STRVAR(Reader___enter____doc__,
+             "__enter__() -> self\n\n"
+             "Part of the context manager protocol.\n"
+             "Returns self.\n");
+static PyObject* Reader___enter__(PyObject *self, PyObject *args)
+{
+    assert(self);
+    assert(!args);
+
+    Py_INCREF(self);
+    return self;
+}
+
+PyDoc_STRVAR(Reader___exit____doc__,
+             "__exit__(type, value, traceback) -> None\n\n"
+             "Part of the context manager protocol.\n"
+             "Closes the journal.\n");
+static PyObject* Reader___exit__(Reader *self, PyObject *args)
+{
+    assert(self);
+
     sd_journal_close(self->j);
     self->j = NULL;
     Py_RETURN_NONE;
@@ -637,12 +666,24 @@ static int Reader_set_data_threshold(Reader *self, PyObject *value, void *closur
     return set_error(r, NULL, NULL);
 }
 
-static PyGetSetDef Reader_getseters[] = {
+PyDoc_STRVAR(closed__doc__,
+             "True iff journal is closed");
+static PyObject* Reader_get_closed(Reader *self, void *closure)
+{
+    return PyBool_FromLong(self->j == NULL);
+}
+
+static PyGetSetDef Reader_getsetters[] = {
     {(char*) "data_threshold",
      (getter) Reader_get_data_threshold,
      (setter) Reader_set_data_threshold,
      (char*) data_threshold__doc__,
      NULL},
+    {(char*) "closed",
+     (getter) Reader_get_closed,
+     NULL,
+     (char*) closed__doc__,
+     NULL},
     {NULL}
 };
 
@@ -650,6 +691,9 @@ static PyMethodDef Reader_methods[] = {
     {"fileno",          (PyCFunction) Reader_fileno, METH_NOARGS, Reader_fileno__doc__},
     {"reliable_fd",     (PyCFunction) Reader_reliable_fd, METH_NOARGS, Reader_reliable_fd__doc__},
     {"close",           (PyCFunction) Reader_close, METH_NOARGS, Reader_close__doc__},
+    {"__enter__",       (PyCFunction) Reader___enter__, METH_NOARGS, Reader___enter____doc__},
+    {"__exit__",        (PyCFunction) Reader___exit__, METH_VARARGS, Reader___exit____doc__},
+    {"close",           (PyCFunction) Reader_close, METH_NOARGS, Reader_close__doc__},
     {"get_next",        (PyCFunction) Reader_get_next, METH_VARARGS, Reader_get_next__doc__},
     {"get_previous",    (PyCFunction) Reader_get_previous, METH_VARARGS, Reader_get_previous__doc__},
     {"add_match",       (PyCFunction) Reader_add_match, METH_VARARGS|METH_KEYWORDS, Reader_add_match__doc__},
@@ -695,7 +739,7 @@ static PyTypeObject ReaderType = {
     Reader_iternext,                          /* tp_iternext */
     Reader_methods,                           /* tp_methods */
     0,                                        /* tp_members */
-    Reader_getseters,                         /* tp_getset */
+    Reader_getsetters,                        /* tp_getset */
     0,                                        /* tp_base */
     0,                                        /* tp_dict */
     0,                                        /* tp_descr_get */