]> git.ipfire.org Git - pakfire.git/commitdiff
python: Drop Pakfire reference from some objects
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 20 Jan 2018 14:09:52 +0000 (15:09 +0100)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 20 Jan 2018 14:09:52 +0000 (15:09 +0100)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/package.c
src/_pakfire/package.h
src/_pakfire/pakfire.c
src/_pakfire/relation.c
src/_pakfire/relation.h
src/_pakfire/selector.c
src/_pakfire/util.c
src/_pakfire/util.h
src/libpakfire/include/pakfire/package.h
src/libpakfire/libpakfire.sym
src/libpakfire/package.c

index c53a732d185ac7f721293e7d2d2b0ce7b5601919..a45e89440b6e722bbf54e080a8559b1c30a1a013 100644 (file)
@@ -43,7 +43,6 @@ PyObject* new_package(PyTypeObject* type, PakfirePackage pkg) {
 static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
        PackageObject* self = (PackageObject *)type->tp_alloc(type, 0);
        if (self) {
-               self->pakfire = NULL;
                self->package = NULL;
        }
 
@@ -52,7 +51,6 @@ static PyObject* Package_new(PyTypeObject* type, PyObject* args, PyObject* kwds)
 
 static void Package_dealloc(PackageObject* self) {
        pakfire_package_unref(self->package);
-       Py_XDECREF(self->pakfire);
 
        Py_TYPE(self)->tp_free((PyObject *)self);
 }
@@ -64,10 +62,7 @@ static int Package_init(PackageObject* self, PyObject* args, PyObject* kwds) {
        if (!PyArg_ParseTuple(args, "O!|i", &PakfireType, &pakfire, &id))
                return -1;
 
-       self->pakfire = pakfire;
-       Py_INCREF(self->pakfire);
-
-       self->package = pakfire_package_create(self->pakfire->pakfire, (Id)id);
+       self->package = pakfire_package_create(pakfire->pakfire, (Id)id);
 
        return 0;
 }
@@ -469,7 +464,7 @@ static PyObject* Package_get_location(PackageObject* self) {
        return str;
 }
 
-static PyObject* PyList_FromRelationList(PakfireObject* pakfire, PakfireRelationList relationlist) {
+static PyObject* PyList_FromRelationList(PakfireRelationList relationlist) {
        PyObject* list = PyList_New(0);
        if (list == NULL)
                return NULL;
@@ -478,7 +473,7 @@ static PyObject* PyList_FromRelationList(PakfireObject* pakfire, PakfireRelation
 
        for (int i = 0; i < count; i++) {
                PakfireRelation relation = pakfire_relationlist_get_clone(relationlist, i);
-               PyObject* relation_obj = new_relation(pakfire, pakfire_relation_get_id(relation));
+               PyObject* relation_obj = new_relation(&RelationType, relation);
 
                pakfire_relation_unref(relation);
                if (relation_obj == NULL)
@@ -498,14 +493,14 @@ fail:
        return NULL;
 }
 
-static PakfireRelationList PyList_AsRelationList(PakfireObject* pakfire, PyObject* value) {
+static PakfireRelationList PyList_AsRelationList(Pakfire pakfire, PyObject* value) {
        if (!PySequence_Check(value)) {
                PyErr_SetString(PyExc_AttributeError, "Expected a sequence.");
                return NULL;
        }
 
        const int length = PySequence_Length(value);
-       PakfireRelationList relationlist = pakfire_relationlist_create(pakfire->pakfire);
+       PakfireRelationList relationlist = pakfire_relationlist_create(pakfire);
 
        for (int i = 0; i < length; i++) {
                PyObject* item = PySequence_GetItem(value, i);
@@ -530,14 +525,17 @@ static PakfireRelationList PyList_AsRelationList(PakfireObject* pakfire, PyObjec
 static PyObject* Package_get_provides(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_provides(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_provides(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
@@ -561,14 +559,17 @@ static PyObject* Package_add_provides(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_requires(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_requires(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_requires(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
@@ -592,14 +593,17 @@ static PyObject* Package_add_requires(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_obsoletes(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_obsoletes(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_obsoletes(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
@@ -623,14 +627,17 @@ static PyObject* Package_add_obsoletes(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_conflicts(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_conflicts(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_conflicts(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
@@ -654,14 +661,17 @@ static PyObject* Package_add_conflicts(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_recommends(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_recommends(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_recommends(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
@@ -685,14 +695,17 @@ static PyObject* Package_add_recommends(PackageObject* self, PyObject* args) {
 static PyObject* Package_get_suggests(PackageObject* self) {
        PakfireRelationList relationlist = pakfire_package_get_suggests(self->package);
 
-       PyObject* list = PyList_FromRelationList(self->pakfire, relationlist);
+       PyObject* list = PyList_FromRelationList(relationlist);
        pakfire_relationlist_unref(relationlist);
 
        return list;
 }
 
 static int Package_set_suggests(PackageObject* self, PyObject* value) {
-       PakfireRelationList relationlist = PyList_AsRelationList(self->pakfire, value);
+       Pakfire pakfire = pakfire_package_get_pakfire(self->package);
+
+       PakfireRelationList relationlist = PyList_AsRelationList(pakfire, value);
+       pakfire_unref(pakfire);
        if (!relationlist)
                return -1;
 
index dc2933da74076bacf7e98d407ef5dbab6553a2dd..dd4aa40876d75e6c5b5de9839326d2e1185ce8ab 100644 (file)
@@ -30,7 +30,6 @@
 
 typedef struct {
        PyObject_HEAD
-       PakfireObject* pakfire;
        PakfirePackage package;
 } PackageObject;
 
index e12b5d809f92e78909bad00a143e5d9d52a3bb79..f4bdc2876539d6881a093becc4ae5dba9bdddb6b 100644 (file)
@@ -20,6 +20,7 @@
 
 #include <Python.h>
 
+#include <pakfire/packagelist.h>
 #include <pakfire/pakfire.h>
 #include <pakfire/key.h>
 #include <pakfire/repo.h>
@@ -229,7 +230,10 @@ static PyObject* Pakfire_whatprovides(PakfireObject* self, PyObject* args, PyObj
 
        PakfirePackageList list = pakfire_whatprovides(self->pakfire, provides, flags);
 
-       return PyList_FromPackageList(self, list);
+       PyObject* obj = PyList_FromPackageList(list);
+       pakfire_packagelist_unref(list);
+
+       return obj;
 }
 
 static PyObject* Pakfire_search(PakfireObject* self, PyObject* args) {
@@ -239,7 +243,11 @@ static PyObject* Pakfire_search(PakfireObject* self, PyObject* args) {
                return NULL;
 
        PakfirePackageList list = pakfire_search(self->pakfire, what, 0);
-       return PyList_FromPackageList(self, list);
+
+       PyObject* obj = PyList_FromPackageList(list);
+       pakfire_packagelist_unref(list);
+
+       return obj;
 }
 
 static PyObject* Pakfire_version_compare(PakfireObject* self, PyObject* args) {
index 8ec3603ca39686a6daf20f52851e304e00a47be2..5c6cfd4cac35444cbbe4f64acc6490f2404b31ef 100644 (file)
 #include <pakfire/package.h>
 #include <pakfire/packagelist.h>
 #include <pakfire/relation.h>
+#include <pakfire/types.h>
 #include <pakfire/util.h>
-#include <solv/pooltypes.h>
 
 #include "package.h"
 #include "relation.h"
 
-static RelationObject* Relation_new_core(PyTypeObject* type, PakfireObject* pakfire) {
+PyObject* new_relation(PyTypeObject* type, PakfireRelation relation) {
        RelationObject* self = (RelationObject *)type->tp_alloc(type, 0);
-       if (!self)
-               return NULL;
-
-       self->pakfire = pakfire;
-       if (self->pakfire)
-               Py_INCREF(self->pakfire);
-
-       self->relation = NULL;
-
-       return self;
-}
-
-PyObject* new_relation(PakfireObject* pakfire, Id id) {
-       RelationObject* relation = Relation_new_core(&RelationType, pakfire);
-       relation->relation = pakfire_relation_create_from_id(pakfire->pakfire, id);
+       if (self) {
+               self->relation = pakfire_relation_ref(relation);
+       }
 
-       return (PyObject *)relation;
+       return (PyObject*)self;
 }
 
 static PyObject* Relation_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
-       RelationObject* self = Relation_new_core(type, NULL);
+       RelationObject* self = (RelationObject *)type->tp_alloc(type, 0);
+       if (self) {
+               self->relation = NULL;
+       }
 
-       return (PyObject *)self;
+       return (PyObject*)self;
 }
 
 static void Relation_dealloc(RelationObject* self) {
        pakfire_relation_unref(self->relation);
 
-       Py_XDECREF(self->pakfire);
        Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
@@ -72,13 +62,8 @@ static int Relation_init(RelationObject* self, PyObject* args, PyObject* kwds) {
        if (!PyArg_ParseTuple(args, "O!s|is", &PakfireType, &pakfire, &name, &cmp_type, &evr))
                return -1;
 
-       self->pakfire = pakfire;
-       Py_INCREF(self->pakfire);
-
-       self->relation = pakfire_relation_create(self->pakfire->pakfire, name, cmp_type, evr);
+       self->relation = pakfire_relation_create(pakfire->pakfire, name, cmp_type, evr);
        if (!self->relation) {
-               Py_DECREF(self->pakfire);
-
                PyErr_Format(PyExc_ValueError, "No such relation: %s", name);
                return -1;
        }
index ee04992a9375fed2755433b71a6c248f072cfaf9..412b5b1beb99f8c7a19436dd5bafb62ac8ae9ddc 100644 (file)
 
 typedef struct {
     PyObject_HEAD
-    PakfireObject* pakfire;
     PakfireRelation relation;
 } RelationObject;
 
 extern PyTypeObject RelationType;
 
-PyObject* new_relation(PakfireObject* pakfire, Id id);
+PyObject* new_relation(PyTypeObject* type, PakfireRelation relation);
 
 #endif /* PYTHON_PAKFIRE_RELATION_H */
index 52ee9e72310daf9554c27510f16d86c86cc68599..af6d1f0b9d022fbc7846b65ac74191d66d103174 100644 (file)
@@ -84,7 +84,7 @@ static PyObject* Selector_get_providers(SelectorObject* self) {
        for (unsigned int i = 0; i < pakfire_packagelist_count(packagelist); i++) {
                PakfirePackage package = pakfire_packagelist_get(packagelist, i);
 
-               PyObject* obj = new_package(NULL, pakfire_package_id(package));
+               PyObject* obj = new_package(&PackageType, package);
                PyList_Append(list, obj);
 
                pakfire_package_unref(package);
index 383da37c22f4beb5df766e68bbd50a6d5440e5d0..222c6b87b8480aa49547c39dfe7a26d25ab4ae5b 100644 (file)
@@ -142,14 +142,14 @@ PyObject* performance_index(PyObject* self, PyObject* args) {
        return PyLong_FromUnsignedLong(iterations);
 }
 
-PyObject* PyList_FromPackageList(PakfireObject* pakfire, PakfirePackageList packagelist) {
+PyObject* PyList_FromPackageList(PakfirePackageList packagelist) {
        PyObject* list = PyList_New(0);
 
        int count = pakfire_packagelist_count(packagelist);
        for (int i = 0; i < count; i++) {
                PakfirePackage package = pakfire_packagelist_get(packagelist, i);
 
-               PyObject* item = new_package(pakfire, pakfire_package_id(package));
+               PyObject* item = new_package(&PackageType, package);
                PyList_Append(list, item);
 
                pakfire_package_unref(package);
index 22c51e689ebb014ecf5729f028623dcaa99ca073..bb7a814f33aba19497feef512cd38bfac1b41ac2 100644 (file)
@@ -34,6 +34,6 @@ extern PyObject *_unshare(PyObject *self, PyObject *args);
 extern PyObject *version_compare(PyObject *self, PyObject *args);
 extern PyObject* performance_index(PyObject* self, PyObject* args);
 
-PyObject* PyList_FromPackageList(PakfireObject* pakfire, PakfirePackageList packagelist);
+PyObject* PyList_FromPackageList(PakfirePackageList packagelist);
 
 #endif /* PYTHON_PAKFIRE_UTIL_H */
index f53657291a1d1c62e1dfacf198b3965189498b69..4fd6c22b7aa55b7f6d3a2033b108610e0765c60a 100644 (file)
@@ -32,6 +32,7 @@ PakfirePackage pakfire_package_create2(Pakfire pakfire, PakfireRepo repo, const
 
 PakfirePackage pakfire_package_ref(PakfirePackage pkg);
 PakfirePackage pakfire_package_unref(PakfirePackage pkg);
+Pakfire pakfire_package_get_pakfire(PakfirePackage pkg);
 
 int pakfire_package_identical(PakfirePackage pkg1, PakfirePackage pkg2);
 int pakfire_package_cmp(PakfirePackage pkg1, PakfirePackage pkg2);
index 0c158ce65056a1486dea8ba48feacbf74a1f4527..ae9371ebe07b2415ffd3f47facb84c2c412198eb 100644 (file)
@@ -154,6 +154,7 @@ global:
        pakfire_package_get_name;
        pakfire_package_get_nevra;
        pakfire_package_get_obsoletes;
+       pakfire_package_get_pakfire;
        pakfire_package_get_provides;
        pakfire_package_get_recommends;
        pakfire_package_get_release;
index 4721e77ce03ff9a5459f6c86c92f055181ecc73f..47b304673e115d510ebeddd4a589984f2698bed3 100644 (file)
@@ -115,6 +115,10 @@ PAKFIRE_EXPORT PakfirePackage pakfire_package_unref(PakfirePackage pkg) {
        return NULL;
 }
 
+PAKFIRE_EXPORT Pakfire pakfire_package_get_pakfire(PakfirePackage pkg) {
+       return pakfire_ref(pkg->pakfire);
+}
+
 static Solvable* get_solvable(PakfirePackage pkg) {
        Pool* pool = pakfire_package_get_solv_pool(pkg);