]> git.ipfire.org Git - pakfire.git/commitdiff
python: Implement getting a Package from Archive
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Jun 2019 22:52:47 +0000 (23:52 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 10 Jun 2019 22:52:47 +0000 (23:52 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/archive.c
src/libpakfire/archive.c
src/libpakfire/include/pakfire/archive.h
src/libpakfire/libpakfire.sym

index 25b57b3336208bc7baa0db6af6b28b549bffbb80..52bb3fdf675feaaa678d622ebbd6cdb3111b52e5 100644 (file)
 #include <Python.h>
 
 #include <pakfire/archive.h>
+#include <pakfire/package.h>
+#include <pakfire/repo.h>
 #include <pakfire/util.h>
 
 #include "archive.h"
 #include "errors.h"
+#include "package.h"
 
 static PyObject* Archive_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
        ArchiveObject* self = (ArchiveObject *)type->tp_alloc(type, 0);
@@ -148,6 +151,28 @@ static PyObject* Archive_extract(ArchiveObject* self, PyObject* args) {
        Py_RETURN_NONE;
 }
 
+static PyObject* Archive_get_package(ArchiveObject* self) {
+       Pakfire pakfire = pakfire_archive_get_pakfire(self->archive);
+
+       PakfireRepo repo = pakfire_repo_create(pakfire, "dummy");
+       if (!repo)
+               return NULL;
+
+       // Make the package
+       PakfirePackage pkg = pakfire_archive_make_package(self->archive, repo);
+
+       // Make the Python object
+       PyObject* ret = new_package(&PackageType, pkg);
+       printf("ret = %p\n", ret);
+
+       // Cleanup
+       pakfire_package_unref(pkg);
+       pakfire_repo_unref(repo);
+       pakfire_unref(pakfire);
+
+       return ret;
+}
+
 static struct PyMethodDef Archive_methods[] = {
        {
                "extract",
@@ -155,6 +180,12 @@ static struct PyMethodDef Archive_methods[] = {
                METH_VARARGS,
                NULL
        },
+       {
+               "get_package",
+               (PyCFunction)Archive_get_package,
+               METH_NOARGS,
+               NULL
+       },
        {
                "read",
                (PyCFunction)Archive_read,
index be613d745e51503a8abe857e70b60ef8d3fc6086..56c1a372501f99ff74324d7939d6d90a14eb29b1 100644 (file)
@@ -340,6 +340,10 @@ PAKFIRE_EXPORT PakfireArchive pakfire_archive_unref(PakfireArchive archive) {
        return NULL;
 }
 
+PAKFIRE_EXPORT Pakfire pakfire_archive_get_pakfire(PakfireArchive archive) {
+       return pakfire_ref(archive->pakfire);
+}
+
 static int pakfire_archive_parse_entry_format(PakfireArchive archive,
                struct archive* a, struct archive_entry* e) {
        char format[10];
index 5d30467a09f3361d09387ce6a7c5e2a6cd9d158e..4270732f6af17d3d59f66d0ddabed930556f8922 100644 (file)
@@ -43,6 +43,7 @@ typedef enum pakfire_archive_flags {
 PakfireArchive pakfire_archive_create(Pakfire pakfire);
 PakfireArchive pakfire_archive_ref(PakfireArchive archive);
 PakfireArchive pakfire_archive_unref(PakfireArchive archive);
+Pakfire pakfire_archive_get_pakfire(PakfireArchive archive);
 
 char* pakfire_archive_get(PakfireArchive archive, const char* key);
 
index 32c2ec3f7b63dc5a6886536687157d64ccd7c477..2e1bd7de5fecea3d89b7888cc6b2d1d7569399d1 100644 (file)
@@ -49,9 +49,11 @@ global:
        pakfire_archive_extraction_path;
        pakfire_archive_get_filelist;
        pakfire_archive_get_format;
+       pakfire_archive_get_pakfire;
        pakfire_archive_get_path;
        pakfire_archive_get_signatures;
        pakfire_archive_get_size;
+       pakfire_archive_make_package;
        pakfire_archive_open;
        pakfire_archive_read;
        pakfire_archive_ref;