From b793862a901626a03096a76fd17175466dd35005 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Sat, 13 Feb 2021 16:46:22 +0000 Subject: [PATCH] python: parser: Extend and let it read from file Signed-off-by: Michael Tremer --- Makefile.am | 1 + src/_pakfire/parser.c | 29 +++++++++++++++++++++++++++++ tests/python/parser.py | 12 ++++++++++++ 3 files changed, 42 insertions(+) diff --git a/Makefile.am b/Makefile.am index 0af8ae796..80144ee18 100644 --- a/Makefile.am +++ b/Makefile.am @@ -620,6 +620,7 @@ TESTSUITE_LDADD = \ tests/libtestsuite.la TESTS_ENVIRONMENT = \ + TEST_DATA_DIR="$(abs_top_srcdir)/tests/data" \ PAKFIRE_LOG=debug \ PYTHONPATH="$(top_srcdir)/.libs:$(top_srcdir)/src" \ topdir="$(shell pwd)" diff --git a/src/_pakfire/parser.c b/src/_pakfire/parser.c index e022e98c1..ddeb1e862 100644 --- a/src/_pakfire/parser.c +++ b/src/_pakfire/parser.c @@ -103,6 +103,29 @@ static PyObject* Parser_parse(ParserObject* self, PyObject* args) { Py_RETURN_NONE; } +static PyObject* Parser_read(ParserObject* self, PyObject* args) { + const char* filename = NULL; + + if (!PyArg_ParseTuple(args, "s", &filename)) + return NULL; + + FILE* f = fopen(filename, "r"); + if (!f) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + int r = pakfire_parser_read(self->parser, f); + fclose(f); + + if (r) { + PyErr_SetFromErrno(PyExc_OSError); + return NULL; + } + + Py_RETURN_NONE; +} + static PyObject* Parser_get(ParserObject* self, PyObject* args) { const char* key = NULL; @@ -134,6 +157,12 @@ static struct PyMethodDef Parser_methods[] = { METH_VARARGS, NULL, }, + { + "read", + (PyCFunction)Parser_read, + METH_VARARGS, + NULL, + }, { NULL }, }; diff --git a/tests/python/parser.py b/tests/python/parser.py index 51d42d5fc..d6bb452f8 100755 --- a/tests/python/parser.py +++ b/tests/python/parser.py @@ -1,5 +1,6 @@ #!/usr/bin/python3 +import os import pakfire import unittest @@ -40,5 +41,16 @@ class Test(unittest.TestCase): dump = "%s" % p + def test_read(self): + p = Parser(self.pakfire) + + fn = os.path.join(os.environ.get("TEST_DATA_DIR"), "kernel.nm") + + # Read something + p.read(fn) + + # Check if we could parse something useful + self.assertEqual(p.get("name"), "kernel") + if __name__ == "__main__": unittest.main() -- 2.47.2