]> git.ipfire.org Git - people/stevee/pakfire.git/commitdiff
_pakfire: Make File objects immutable
authorMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Mar 2023 10:40:26 +0000 (10:40 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Wed, 22 Mar 2023 10:40:26 +0000 (10:40 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/_pakfire/file.c

index 100a4e515b2ff79d9b3eca410dd2f87434eb6601..d2e4c2853e55f9352cfbf6b034fb695ff5777d66 100644 (file)
@@ -19,7 +19,6 @@
 #############################################################################*/
 
 #include <Python.h>
-#include <datetime.h>
 
 #include <pakfire/digest.h>
 #include <pakfire/file.h>
@@ -33,19 +32,12 @@ PyObject* new_file(struct pakfire_file* file) {
 
        FileObject* self = (FileObject *)type->tp_alloc(type, 0);
        if (self) {
-               if (file)
-                       self->file = pakfire_file_ref(file);
-               else
-                       self->file = NULL;
+               self->file = pakfire_file_ref(file);
        }
 
        return (PyObject *)self;
 }
 
-static PyObject* File_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
-       return new_file(NULL);
-}
-
 static void File_dealloc(FileObject* self) {
        if (self->file)
                pakfire_file_unref(self->file);
@@ -53,20 +45,6 @@ static void File_dealloc(FileObject* self) {
        Py_TYPE(self)->tp_free((PyObject *)self);
 }
 
-static int File_init(FileObject* self, PyObject* args, PyObject* kwds) {
-       PakfireObject* pakfire = NULL;
-
-       if (!PyArg_ParseTuple(args, "O!", &PakfireType, &pakfire))
-               return -1;
-
-       // Create a new File object
-       int r = pakfire_file_create(&self->file, pakfire->pakfire);
-       if (r)
-               return -1;
-
-       return 0;
-}
-
 static PyObject* File_repr(FileObject* self) {
        const char* path = pakfire_file_get_path(self->file);
 
@@ -81,30 +59,12 @@ static PyObject* File_get_path(FileObject* self) {
        return PyUnicode_FromString(path);
 }
 
-static int File_set_path(FileObject* self, PyObject* value) {
-       const char* path = PyUnicode_AsUTF8(value);
-       if (!path)
-               return -1;
-
-       pakfire_file_set_path(self->file, path);
-       return 0;
-}
-
 static PyObject* File_get_size(FileObject* self) {
        const size_t size = pakfire_file_get_size(self->file);
 
        return PyLong_FromSize_t(size);
 }
 
-static int File_set_size(FileObject* self, PyObject* value) {
-       long size = PyLong_AsLong(value);
-       if (size < 0)
-               return -1;
-
-       pakfire_file_set_size(self->file, size);
-       return 0;
-}
-
 static PyObject* File_get_type(FileObject* self) {
        int type = pakfire_file_get_type(self->file);
 
@@ -119,15 +79,6 @@ static PyObject* File_get_uname(FileObject* self) {
        return PyUnicode_FromString(uname);
 }
 
-static int File_set_uname(FileObject* self, PyObject* value) {
-       const char* uname = PyUnicode_AsUTF8(value);
-       if (!uname)
-               return -1;
-
-       pakfire_file_set_uname(self->file, uname);
-       return 0;
-}
-
 static PyObject* File_get_gname(FileObject* self) {
        const char* gname = pakfire_file_get_gname(self->file);
        if (!gname)
@@ -136,85 +87,24 @@ static PyObject* File_get_gname(FileObject* self) {
        return PyUnicode_FromString(gname);
 }
 
-static int File_set_gname(FileObject* self, PyObject* value) {
-       const char* gname = PyUnicode_AsUTF8(value);
-       if (!gname)
-               return -1;
-
-       pakfire_file_set_gname(self->file, gname);
-       return 0;
-}
-
 static PyObject* File_get_mode(FileObject* self) {
        const mode_t mode = pakfire_file_get_mode(self->file);
 
        return PyLong_FromLong(mode);
 }
 
-static int File_set_mode(FileObject* self, PyObject* value) {
-       const mode_t mode = PyLong_AsLong(value);
-
-       pakfire_file_set_mode(self->file, mode);
-       return 0;
-}
-
-static time_t PyDateTime_AsTime_t(PyObject* value) {
-       if (!PyDateTime_Check(value))
-               return -1;
-
-       PyDateTime_IMPORT;
-
-       // Convert from datetime to struct tm
-       struct tm tm = {
-               .tm_year  = PyDateTime_GET_YEAR(value) - 1900,
-               .tm_mon   = PyDateTime_GET_MONTH(value) - 1,
-               .tm_mday  = PyDateTime_GET_DAY(value),
-               .tm_hour  = PyDateTime_DATE_GET_HOUR(value),
-               .tm_min   = PyDateTime_DATE_GET_MINUTE(value),
-               .tm_sec   = PyDateTime_DATE_GET_SECOND(value),
-               .tm_isdst = 0,
-       };
-
-       // Convert into time_t
-       const time_t t = mktime(&tm);
-       if (t < 0) {
-               PyErr_SetFromErrno(PyExc_OSError);
-               return -1;
-       }
-
-       return t;
-}
-
 static PyObject* File_get_ctime(FileObject* self) {
        const time_t t = pakfire_file_get_ctime(self->file);
 
        return PyDateTime_FromTime_t(&t);
 }
 
-static int File_set_ctime(FileObject* self, PyObject* value) {
-       const time_t t = PyDateTime_AsTime_t(value);
-       if (t < 0)
-               return -1;
-
-       pakfire_file_set_ctime(self->file, t);
-       return 0;
-}
-
 static PyObject* File_get_mtime(FileObject* self) {
        const time_t t = pakfire_file_get_mtime(self->file);
 
        return PyDateTime_FromTime_t(&t);
 }
 
-static int File_set_mtime(FileObject* self, PyObject* value) {
-       const time_t t = PyDateTime_AsTime_t(value);
-       if (t < 0)
-               return -1;
-
-       pakfire_file_set_mtime(self->file, t);
-       return 0;
-}
-
 static PyObject* File_digest(FileObject* self, PyObject* args) {
        const char* name = NULL;
 
@@ -248,24 +138,6 @@ static PyObject* File_get_mimetype(FileObject* self) {
        return PyUnicode_FromString(mimetype);
 }
 
-static int File_set_mimetype(FileObject* self, PyObject* value) {
-       int r;
-
-       // Read the MIME type
-       const char* mimetype = PyUnicode_AsUTF8(value);
-       if (!mimetype)
-               return -1;
-
-       // Set the value
-       r = pakfire_file_set_mimetype(self->file, mimetype);
-       if (r) {
-               PyErr_SetFromErrno(PyExc_OSError);
-               return -1;
-       }
-
-       return 0;
-}
-
 static PyObject* File_get_capabilities(FileObject* self) {
        PyObject* result = NULL;
        char* caps = NULL;
@@ -312,49 +184,49 @@ static struct PyGetSetDef File_getsetters[] = {
        {
                "ctime",
                (getter)File_get_ctime,
-               (setter)File_set_ctime,
+               NULL,
                NULL,
                NULL,
        },
        {
                "gname",
                (getter)File_get_gname,
-               (setter)File_set_gname,
+               NULL,
                NULL,
                NULL,
        },
        {
                "mimetype",
                (getter)File_get_mimetype,
-               (setter)File_set_mimetype,
+               NULL,
                NULL,
                NULL,
        },
        {
                "mode",
                (getter)File_get_mode,
-               (setter)File_set_mode,
+               NULL,
                NULL,
                NULL,
        },
        {
                "mtime",
                (getter)File_get_mtime,
-               (setter)File_set_mtime,
+               NULL,
                NULL,
                NULL,
        },
        {
                "path",
                (getter)File_get_path,
-               (setter)File_set_path,
+               NULL,
                NULL,
                NULL,
        },
        {
                "size",
                (getter)File_get_size,
-               (setter)File_set_size,
+               NULL,
                NULL,
                NULL,
        },
@@ -368,7 +240,7 @@ static struct PyGetSetDef File_getsetters[] = {
        {
                "uname",
                (getter)File_get_uname,
-               (setter)File_set_uname,
+               NULL,
                NULL,
                NULL,
        },
@@ -380,9 +252,7 @@ PyTypeObject FileType = {
        tp_name:            "_pakfire.File",
        tp_basicsize:       sizeof(FileObject),
        tp_flags:           Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
-       tp_new:             File_new,
        tp_dealloc:         (destructor)File_dealloc,
-       tp_init:            (initproc)File_init,
        tp_doc:             "File object",
        tp_methods:         File_methods,
        tp_getset:          File_getsetters,