From 8b6465c330b8b98fbfe64bcba69c62dd0efce8aa Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Mon, 27 Jan 2025 16:45:42 +0000 Subject: [PATCH] python: Refactor fetching dependencies and re-use existing code Signed-off-by: Michael Tremer --- src/python/package.c | 83 ++++++++------------------------------------ 1 file changed, 15 insertions(+), 68 deletions(-) diff --git a/src/python/package.c b/src/python/package.c index 10144994..233abfcf 100644 --- a/src/python/package.c +++ b/src/python/package.c @@ -358,31 +358,14 @@ static PyObject* Package_get_path(PackageObject* self) { return PyUnicode_FromString(path); } -static PyObject* PyList_FromRelationList(char** deps) { - PyObject* list = PyList_New(0); - if (list == NULL) - return NULL; - - // Empty list? - if (!deps) - return list; +static PyObject* Package_get_deps(PackageObject* self, int what) { + char** deps = NULL; - for (char** dep = deps; *dep; dep++) { - PyObject* obj = PyUnicode_FromString(*dep); - if (!obj) - break; - - PyList_Append(list, obj); - Py_DECREF(obj); - } - - return list; -} - -static PyObject* Package_get_provides(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_PROVIDES); + // Fetch dependencies + deps = pakfire_package_get_deps(self->package, what); - PyObject* list = PyList_FromRelationList(deps); + // Convert it all into Python stuff + PyObject* list = PyUnicodeList_FromStringArray((const char**)deps); // Cleanup if (deps) @@ -391,64 +374,28 @@ static PyObject* Package_get_provides(PackageObject* self) { return list; } -static PyObject* Package_get_requires(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_REQUIRES); - - PyObject* list = PyList_FromRelationList(deps); - - // Cleanup - if (deps) - pakfire_strings_free(deps); +static PyObject* Package_get_provides(PackageObject* self) { + return Package_get_deps(self, PAKFIRE_PKG_PROVIDES); +} - return list; +static PyObject* Package_get_requires(PackageObject* self) { + return Package_get_deps(self, PAKFIRE_PKG_REQUIRES); } static PyObject* Package_get_obsoletes(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_OBSOLETES); - - PyObject* list = PyList_FromRelationList(deps); - - // Cleanup - if (deps) - pakfire_strings_free(deps); - - return list; + return Package_get_deps(self, PAKFIRE_PKG_OBSOLETES); } static PyObject* Package_get_conflicts(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_CONFLICTS); - - PyObject* list = PyList_FromRelationList(deps); - - // Cleanup - if (deps) - pakfire_strings_free(deps); - - return list; + return Package_get_deps(self, PAKFIRE_PKG_CONFLICTS); } static PyObject* Package_get_recommends(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_RECOMMENDS); - - PyObject* list = PyList_FromRelationList(deps); - - // Cleanup - if (deps) - pakfire_strings_free(deps); - - return list; + return Package_get_deps(self, PAKFIRE_PKG_RECOMMENDS); } static PyObject* Package_get_suggests(PackageObject* self) { - char** deps = pakfire_package_get_deps(self->package, PAKFIRE_PKG_SUGGESTS); - - PyObject* list = PyList_FromRelationList(deps); - - // Cleanup - if (deps) - pakfire_strings_free(deps); - - return list; + return Package_get_deps(self, PAKFIRE_PKG_SUGGESTS); } static PyObject* Package_get_reverse_requires(PackageObject* self) { -- 2.47.3