#include "locationmodule.h"
#include "as.h"
+#include "network.h"
#include "writer.h"
static PyObject* Writer_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
return PyUnicode_FromString(vendor);
}
-static int Writer_set_vendor(WriterObject* self, PyObject* args) {
- const char* vendor = NULL;
-
- if (!PyArg_ParseTuple(args, "s", &vendor))
- return -1;
+static int Writer_set_vendor(WriterObject* self, PyObject* value) {
+ const char* vendor = PyUnicode_AsUTF8(value);
int r = loc_writer_set_vendor(self->writer, vendor);
if (r) {
return 0;
}
+static PyObject* Writer_get_description(WriterObject* self) {
+ const char* description = loc_writer_get_description(self->writer);
+
+ return PyUnicode_FromString(description);
+}
+
+static int Writer_set_description(WriterObject* self, PyObject* value) {
+ const char* description = PyUnicode_AsUTF8(value);
+
+ int r = loc_writer_set_description(self->writer, description);
+ if (r) {
+ PyErr_Format(PyExc_ValueError, "Could not set description: %s", description);
+ return r;
+ }
+
+ return 0;
+}
+
+static PyObject* Writer_get_license(WriterObject* self) {
+ const char* license = loc_writer_get_license(self->writer);
+
+ return PyUnicode_FromString(license);
+}
+
+static int Writer_set_license(WriterObject* self, PyObject* value) {
+ const char* license = PyUnicode_AsUTF8(value);
+
+ int r = loc_writer_set_license(self->writer, license);
+ if (r) {
+ PyErr_Format(PyExc_ValueError, "Could not set license: %s", license);
+ return r;
+ }
+
+ return 0;
+}
+
static PyObject* Writer_add_as(WriterObject* self, PyObject* args) {
struct loc_as* as;
uint32_t number = 0;
return obj;
}
+static PyObject* Writer_add_network(WriterObject* self, PyObject* args) {
+ struct loc_network* network;
+ const char* string = NULL;
+
+ if (!PyArg_ParseTuple(args, "s", &string))
+ return NULL;
+
+ // Create network object
+ int r = loc_writer_add_network(self->writer, &network, string);
+ if (r) {
+ switch (r) {
+ case -EINVAL:
+ PyErr_SetString(PyExc_ValueError, "Invalid network");
+ break;
+
+ case -EBUSY:
+ PyErr_SetString(PyExc_IndexError, "A network already exists here");
+ break;
+ }
+
+ return NULL;
+ }
+
+ PyObject* obj = new_network(&NetworkType, network);
+ loc_network_unref(network);
+
+ return obj;
+}
+
static PyObject* Writer_write(WriterObject* self, PyObject* args) {
const char* path = NULL;
METH_VARARGS,
NULL,
},
+ {
+ "add_network",
+ (PyCFunction)Writer_add_network,
+ METH_VARARGS,
+ NULL,
+ },
{
"write",
(PyCFunction)Writer_write,
};
static struct PyGetSetDef Writer_getsetters[] = {
+ {
+ "description",
+ (getter)Writer_get_description,
+ (setter)Writer_set_description,
+ NULL,
+ NULL,
+ },
+ {
+ "license",
+ (getter)Writer_get_license,
+ (setter)Writer_set_license,
+ NULL,
+ NULL,
+ },
{
"vendor",
(getter)Writer_get_vendor,
PyTypeObject WriterType = {
PyVarObject_HEAD_INIT(NULL, 0)
- tp_name: "location.Writer",
- tp_basicsize: sizeof(WriterObject),
- tp_flags: Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
- tp_new: Writer_new,
- tp_dealloc: (destructor)Writer_dealloc,
- tp_init: (initproc)Writer_init,
- tp_doc: "Writer object",
- tp_methods: Writer_methods,
- tp_getset: Writer_getsetters,
+ .tp_name = "location.Writer",
+ .tp_basicsize = sizeof(WriterObject),
+ .tp_flags = Py_TPFLAGS_DEFAULT|Py_TPFLAGS_BASETYPE,
+ .tp_new = Writer_new,
+ .tp_dealloc = (destructor)Writer_dealloc,
+ .tp_init = (initproc)Writer_init,
+ .tp_doc = "Writer object",
+ .tp_methods = Writer_methods,
+ .tp_getset = Writer_getsetters,
};