It's better to explictly check, instead of just documenting it.
The return value from init is changed from 1 to -1 on error.
Python seems to ignore 1 every second time. Looks like a bug
in Python, but the return value doesn't seem to be documented
anywhere, and -1 works as expected... so let's just use that.
errno = -r;
PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
}
errno = -r;
PyErr_SetFromErrnoWithFilename(PyExc_OSError, path);
}
}
#if PY_MAJOR_VERSION >= 3
}
#if PY_MAJOR_VERSION >= 3
}
PyDoc_STRVAR(Reader__doc__,
}
PyDoc_STRVAR(Reader__doc__,
- "Reader([flags][,path]) -> ...\n\n"
+ "Reader([flags | path]) -> ...\n\n"
"Reader allows filtering and retrieval of Journal entries.\n"
"Reader allows filtering and retrieval of Journal entries.\n"
+ "Note: this is a low-level interface, and probably not what you\n"
+ "want, use systemd.journal.Reader instead.\n\n"
"Argument `flags` sets open flags of the journal, which can be one\n"
"of, or ORed combination of constants: LOCAL_ONLY (default) opens\n"
"journal on local machine only; RUNTIME_ONLY opens only\n"
"volatile journal files; and SYSTEM_ONLY opens only\n"
"Argument `flags` sets open flags of the journal, which can be one\n"
"of, or ORed combination of constants: LOCAL_ONLY (default) opens\n"
"journal on local machine only; RUNTIME_ONLY opens only\n"
"volatile journal files; and SYSTEM_ONLY opens only\n"
- "journal files of system services and the kernel.\n"
+ "journal files of system services and the kernel.\n\n"
"Argument `path` is the directory of journal files. Note that\n"
"Argument `path` is the directory of journal files. Note that\n"
- "currently flags are ignored when `path` is present as they are\n"
- "not relevant.");
+ "`flags` and `path` are exclusive.\n");
static int Reader_init(Reader *self, PyObject *args, PyObject *keywds)
{
static int Reader_init(Reader *self, PyObject *args, PyObject *keywds)
{
- int flags = SD_JOURNAL_LOCAL_ONLY, r;
char *path = NULL;
static const char* const kwlist[] = {"flags", "path", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iz", (char**) kwlist,
&flags, &path))
char *path = NULL;
static const char* const kwlist[] = {"flags", "path", NULL};
if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iz", (char**) kwlist,
&flags, &path))
+ return -1;
+
+ if (!flags)
+ flags = SD_JOURNAL_LOCAL_ONLY;
+ else
+ if (path) {
+ PyErr_SetString(PyExc_ValueError, "cannot use both flags and path");
+ return -1;
+ }
Py_BEGIN_ALLOW_THREADS
if (path)
Py_BEGIN_ALLOW_THREADS
if (path)
See systemd.journal-fields(7) for more info on typical fields
found in the journal.
"""
See systemd.journal-fields(7) for more info on typical fields
found in the journal.
"""
- def __init__(self, flags=LOCAL_ONLY, path=None, converters=None):
+ def __init__(self, flags=0, path=None, converters=None):
"""Create an instance of Reader, which allows filtering and
return of journal entries.
"""Create an instance of Reader, which allows filtering and
return of journal entries.
journal files of system services and the kernel.
Argument `path` is the directory of journal files. Note that
journal files of system services and the kernel.
Argument `path` is the directory of journal files. Note that
- currently flags are ignored when `path` is present as they are
- currently not relevant.
+ `flags` and `path` are exclusive.
Argument `converters` is a dictionary which updates the
DEFAULT_CONVERTERS to convert journal field values. Field
Argument `converters` is a dictionary which updates the
DEFAULT_CONVERTERS to convert journal field values. Field