#############################################################################*/
#include <Python.h>
-#include <datetime.h>
#include <pakfire/digest.h>
#include <pakfire/file.h>
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);
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);
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);
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)
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;
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;
{
"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,
},
{
"uname",
(getter)File_get_uname,
- (setter)File_set_uname,
+ NULL,
NULL,
NULL,
},
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,