From: Michael Tremer Date: Mon, 10 Jun 2019 22:52:47 +0000 (+0100) Subject: python: Implement getting a Package from Archive X-Git-Tag: 0.9.28~1285^2~950 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=51b59d8e1c2df01750981b971fa18dd5685f7874;p=pakfire.git python: Implement getting a Package from Archive Signed-off-by: Michael Tremer --- diff --git a/src/_pakfire/archive.c b/src/_pakfire/archive.c index 25b57b333..52bb3fdf6 100644 --- a/src/_pakfire/archive.c +++ b/src/_pakfire/archive.c @@ -21,10 +21,13 @@ #include #include +#include +#include #include #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, diff --git a/src/libpakfire/archive.c b/src/libpakfire/archive.c index be613d745..56c1a3725 100644 --- a/src/libpakfire/archive.c +++ b/src/libpakfire/archive.c @@ -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]; diff --git a/src/libpakfire/include/pakfire/archive.h b/src/libpakfire/include/pakfire/archive.h index 5d30467a0..4270732f6 100644 --- a/src/libpakfire/include/pakfire/archive.h +++ b/src/libpakfire/include/pakfire/archive.h @@ -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); diff --git a/src/libpakfire/libpakfire.sym b/src/libpakfire/libpakfire.sym index 32c2ec3f7..2e1bd7de5 100644 --- a/src/libpakfire/libpakfire.sym +++ b/src/libpakfire/libpakfire.sym @@ -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;