chiark / gitweb /
systemd-python: implement this_boot/this_machine in Python
authorSteven Hiscocks <steven@hiscocks.me.uk>
Fri, 15 Feb 2013 17:16:56 +0000 (17:16 +0000)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Fri, 22 Feb 2013 15:57:43 +0000 (16:57 +0100)
src/python-systemd/_reader.c
src/python-systemd/journal.py

index ce66317..06bdf16 100644 (file)
@@ -671,70 +671,6 @@ Journal_query_unique(Journal *self, PyObject *args)
 }
 #endif //def SD_JOURNAL_FOREACH_UNIQUE
 
-PyDoc_STRVAR(Journal_this_boot__doc__,
-"this_boot() -> None\n\n"
-"Sets match filter for the current _BOOT_ID.");
-static PyObject *
-Journal_this_boot(Journal *self, PyObject *args)
-{
-    sd_id128_t sd_id;
-    int r;
-    r = sd_id128_get_boot(&sd_id);
-    if (r == -EIO) {
-        PyErr_SetString(PyExc_IOError, "Error getting current boot ID");
-        return NULL;
-    } else if (r < 0) {
-        PyErr_SetString(PyExc_RuntimeError, "Error getting current boot ID");
-        return NULL;
-    }
-
-    char bootid[33];
-    sd_id128_to_string(sd_id, bootid);
-
-    PyObject *arg, *keywds;
-    arg = PyTuple_New(0);
-    keywds = Py_BuildValue("{s:s}", "_BOOT_ID", bootid);
-    Journal_add_match(self, arg, keywds);
-    Py_DECREF(arg);
-    Py_DECREF(keywds);
-    if (PyErr_Occurred())
-        return NULL;
-
-    Py_RETURN_NONE;
-}
-
-PyDoc_STRVAR(Journal_this_machine__doc__,
-"this_machine() -> None\n\n"
-"Sets match filter for the current _MACHINE_ID.");
-static PyObject *
-Journal_this_machine(Journal *self, PyObject *args)
-{
-    sd_id128_t sd_id;
-    int r;
-    r = sd_id128_get_machine(&sd_id);
-    if (r == -EIO) {
-        PyErr_SetString(PyExc_IOError, "Error getting current boot ID");
-        return NULL;
-    } else if (r < 0) {
-        PyErr_SetString(PyExc_RuntimeError, "Error getting current boot ID");
-        return NULL;
-    }
-
-    char machineid[33];
-    sd_id128_to_string(sd_id, machineid);
-
-    PyObject *arg, *keywds;
-    arg = PyTuple_New(0);
-    keywds = Py_BuildValue("{s:s}", "_MACHINE_ID", machineid);
-    Journal_add_match(self, arg, keywds);
-    Py_DECREF(arg);
-    Py_DECREF(keywds);
-    if (PyErr_Occurred())
-        return NULL;
-
-    Py_RETURN_NONE;
-}
-
 static PyObject *
 Journal_get_data_threshold(Journal *self, void *closure)
 {
@@ -818,10 +754,6 @@ static PyMethodDef Journal_methods[] = {
     {"query_unique", (PyCFunction)Journal_query_unique, METH_VARARGS,
     Journal_query_unique__doc__},
 #endif
-    {"this_boot", (PyCFunction)Journal_this_boot, METH_NOARGS,
-    Journal_this_boot__doc__},
-    {"this_machine", (PyCFunction)Journal_this_machine, METH_NOARGS,
-    Journal_this_machine__doc__},
     {NULL}  /* Sentinel */
 };
 
index 40e40c3..533a875 100644 (file)
@@ -31,6 +31,7 @@ from syslog import (LOG_EMERG, LOG_ALERT, LOG_CRIT, LOG_ERR,
 from ._journal import sendv, stream_fd
 from ._reader import (_Journal, NOP, APPEND, INVALIDATE,
                       LOCAL_ONLY, RUNTIME_ONLY, SYSTEM_ONLY)
+from . import id128 as _id128
 
 _MONOTONIC_CONVERTER = lambda x: datetime.timedelta(microseconds=float(x))
 _REALTIME_CONVERTER = lambda x: datetime.datetime.fromtimestamp(float(x)/1E6)
@@ -123,6 +124,14 @@ class Journal(_Journal):
         else:
             raise ValueError("Log level must be 0 <= level <= 7")
 
+    def this_boot(self):
+        """Add match for _BOOT_ID equal to current boot ID."""
+        self.add_match(_BOOT_ID=_id128.get_boot().hex)
+
+    def this_machine(self):
+        """Add match for _MACHINE_ID equal to the ID of this machine."""
+        self.add_match(_MACHINE_ID=_id128.get_machine().hex)
+
 def _make_line(field, value):
         if isinstance(value, bytes):
                 return field.encode('utf-8') + b'=' + value