]> git.ipfire.org Git - pakfire.git/commitdiff
python: parser: Extend and let it read from file
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Feb 2021 16:46:22 +0000 (16:46 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 13 Feb 2021 16:46:22 +0000 (16:46 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
Makefile.am
src/_pakfire/parser.c
tests/python/parser.py

index 0af8ae7967ba1d0a6a1e9c4ecc4218eddf75bc2b..80144ee188f3916b129e4c47537840fb114c71b6 100644 (file)
@@ -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)"
index e022e98c12c279fa9a52be946aac9ed00aa6a886..ddeb1e86226b3a6381b33ab4e1f4d6eb816bd856 100644 (file)
@@ -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 },
 };
 
index 51d42d5fcb2b8691f45b77323fbe81af993040be..d6bb452f87119e015f4113af0742aaf619456768 100755 (executable)
@@ -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()