]> git.ipfire.org Git - pakfire.git/commitdiff
python: Refactor fetching dependencies and re-use existing code
authorMichael Tremer <michael.tremer@ipfire.org>
Mon, 27 Jan 2025 16:45:42 +0000 (16:45 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Mon, 27 Jan 2025 16:45:42 +0000 (16:45 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/package.c

index 101449942182f897ad4fff8c2a351192064867d1..233abfcf573a10bb181cadb2b21eb0231f42ad94 100644 (file)
@@ -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) {