From: Michael Tremer Date: Mon, 27 Jan 2025 16:45:42 +0000 (+0000) Subject: python: Refactor fetching dependencies and re-use existing code X-Git-Tag: 0.9.30~341 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8b6465c330b8b98fbfe64bcba69c62dd0efce8aa;p=pakfire.git python: Refactor fetching dependencies and re-use existing code Signed-off-by: Michael Tremer --- 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) {