X-Git-Url: http://git.ipfire.org/?p=people%2Fms%2Flibloc.git;a=blobdiff_plain;f=src%2Fpython%2Fas.c;h=e3b716bc11fc71682ce4bf9980450e83f0b9f45d;hp=ca0af47ab1e6b6ac79662a26f97b66cc27f3e421;hb=d42e1dcddc70edba7586c06b0c26dd2ced1e07ff;hpb=63e2ce175069bac5a18cda79c59265fb0515338c diff --git a/src/python/as.c b/src/python/as.c index ca0af47..e3b716b 100644 --- a/src/python/as.c +++ b/src/python/as.c @@ -51,7 +51,7 @@ static int AS_init(ASObject* self, PyObject* args, PyObject* kwargs) { return -1; // Create the AS object - int r = loc_as_new(loc_ctx, NULL, &self->as, number); + int r = loc_as_new(loc_ctx, &self->as, number); if (r) return -1; @@ -68,6 +68,16 @@ static PyObject* AS_repr(ASObject* self) { return PyUnicode_FromFormat("", number); } +static PyObject* AS_str(ASObject* self) { + uint32_t number = loc_as_get_number(self->as); + const char* name = loc_as_get_name(self->as); + + if (name) + return PyUnicode_FromFormat("AS%d (%s)", number, name); + + return PyUnicode_FromFormat("AS%d", number); +} + static PyObject* AS_get_number(ASObject* self) { uint32_t number = loc_as_get_number(self->as); @@ -80,6 +90,18 @@ static PyObject* AS_get_name(ASObject* self) { return PyUnicode_FromString(name); } +static int AS_set_name(ASObject* self, PyObject* value) { + const char* name = PyUnicode_AsUTF8(value); + + int r = loc_as_set_name(self->as, name); + if (r) { + PyErr_Format(PyExc_ValueError, "Could not set name: %s", name); + return r; + } + + return 0; +} + static PyObject* AS_richcompare(ASObject* self, ASObject* other, int op) { int r = loc_as_cmp(self->as, other->as); @@ -107,7 +129,7 @@ static struct PyGetSetDef AS_getsetters[] = { { "name", (getter)AS_get_name, - NULL, + (setter)AS_set_name, NULL, NULL, }, @@ -123,14 +145,15 @@ static struct PyGetSetDef AS_getsetters[] = { PyTypeObject ASType = { PyVarObject_HEAD_INIT(NULL, 0) - tp_name: "location.AS", - tp_basicsize: sizeof(ASObject), - tp_flags: Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, - tp_new: AS_new, - tp_dealloc: (destructor)AS_dealloc, - tp_init: (initproc)AS_init, - tp_doc: "AS object", - tp_getset: AS_getsetters, - tp_repr: (reprfunc)AS_repr, - tp_richcompare: (richcmpfunc)AS_richcompare, + .tp_name = "location.AS", + .tp_basicsize = sizeof(ASObject), + .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE, + .tp_new = AS_new, + .tp_dealloc = (destructor)AS_dealloc, + .tp_init = (initproc)AS_init, + .tp_doc = "AS object", + .tp_getset = AS_getsetters, + .tp_repr = (reprfunc)AS_repr, + .tp_str = (reprfunc)AS_str, + .tp_richcompare = (richcmpfunc)AS_richcompare, };