From 74dcd895ef9de6dce3516d7d31fbd48def402358 Mon Sep 17 00:00:00 2001 From: Michael Tremer Date: Wed, 22 Mar 2023 10:40:26 +0000 Subject: [PATCH] _pakfire: Make File objects immutable Signed-off-by: Michael Tremer --- src/_pakfire/file.c | 148 +++----------------------------------------- 1 file changed, 9 insertions(+), 139 deletions(-) diff --git a/src/_pakfire/file.c b/src/_pakfire/file.c index 100a4e515..d2e4c2853 100644 --- a/src/_pakfire/file.c +++ b/src/_pakfire/file.c @@ -19,7 +19,6 @@ #############################################################################*/ #include -#include #include #include @@ -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, -- 2.39.5