]> git.ipfire.org Git - location/libloc.git/commitdiff
python: Expose flags
authorMichael Tremer <michael.tremer@ipfire.org>
Sun, 13 Oct 2019 17:38:53 +0000 (17:38 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sun, 13 Oct 2019 17:38:53 +0000 (17:38 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/python/locationmodule.c
src/python/network.c

index a1e4d8284778c2defc3ac73b6f4625572c742324..f9863701a2ee00d8498e870facb1c58fd2228b42 100644 (file)
@@ -115,5 +115,15 @@ PyMODINIT_FUNC PyInit_location(void) {
        // Version
        PyDict_SetItemString(d, "__version__", PyUnicode_FromString(VERSION));
 
+       // Add flags
+       if (PyModule_AddIntConstant(m, "FLAG_ANONYMOUS_PROXY", LOC_NETWORK_FLAG_ANONYMOUS_PROXY))
+               return NULL;
+
+       if (PyModule_AddIntConstant(m, "FLAG_SATELLITE_PROVIDER", LOC_NETWORK_FLAG_SATELLITE_PROVIDER))
+               return NULL;
+
+       if (PyModule_AddIntConstant(m, "FLAG_ANYCAST", LOC_NETWORK_FLAG_ANYCAST))
+               return NULL;
+
        return m;
 }
index c74baaed5d9e3c213be5104e4c5b12746fc96d82..d1b0de8992dfb6a17d00240cc7ec8e9e10e0e6d0 100644 (file)
@@ -126,6 +126,50 @@ static int Network_set_asn(NetworkObject* self, PyObject* value) {
        return 0;
 }
 
+static PyObject* Network_has_flag(NetworkObject* self, PyObject* args) {
+       enum loc_network_flags flag = 0;
+
+       if (!PyArg_ParseTuple(args, "i", &flag))
+               return NULL;
+
+       if (loc_network_has_flag(self->network, flag))
+               Py_RETURN_TRUE;
+
+       Py_RETURN_FALSE;
+}
+
+static PyObject* Network_set_flag(NetworkObject* self, PyObject* args) {
+       enum loc_network_flags flag = 0;
+
+       if (!PyArg_ParseTuple(args, "i", &flag))
+               return NULL;
+
+       int r = loc_network_set_flag(self->network, flag);
+
+       if (r) {
+               // What exception to throw here?
+               return NULL;
+       }
+
+       Py_RETURN_NONE;
+}
+
+static struct PyMethodDef Network_methods[] = {
+       {
+               "has_flag",
+               (PyCFunction)Network_has_flag,
+               METH_VARARGS,
+               NULL,
+       },
+       {
+               "set_flag",
+               (PyCFunction)Network_set_flag,
+               METH_VARARGS,
+               NULL,
+       },
+       { NULL },
+};
+
 static struct PyGetSetDef Network_getsetters[] = {
        {
                "asn",
@@ -153,6 +197,7 @@ PyTypeObject NetworkType = {
        .tp_dealloc =            (destructor)Network_dealloc,
        .tp_init =               (initproc)Network_init,
        .tp_doc =                "Network object",
+       .tp_methods =            Network_methods,
        .tp_getset =             Network_getsetters,
        .tp_repr =               (reprfunc)Network_repr,
        .tp_str =                (reprfunc)Network_str,