]> git.ipfire.org Git - people/ms/libloc.git/blobdiff - src/python/database.c
python: Access ASes from database
[people/ms/libloc.git] / src / python / database.c
index 0e3ddea8c22b5059e4de74ec9bd6c28566e2448f..53b454c4f6dde3dd9f1fd28055fbdf64e70793d7 100644 (file)
 #include <loc/libloc.h>
 #include <loc/database.h>
 
+#include "locationmodule.h"
+#include "as.h"
 #include "database.h"
 
 static PyObject* Database_new(PyTypeObject* type, PyObject* args, PyObject* kwds) {
-       // Create libloc context
-       struct loc_ctx* ctx;
-       int r = loc_new(&ctx);
-       if (r)
-               return NULL;
-
        DatabaseObject* self = (DatabaseObject*)type->tp_alloc(type, 0);
        if (self) {
-               self->ctx = ctx;
+               self->ctx = loc_ref(loc_ctx);
        }
 
        return (PyObject*)self;
@@ -68,7 +64,80 @@ static int Database_init(DatabaseObject* self, PyObject* args, PyObject* kwargs)
        return 0;
 }
 
+static PyObject* Database_get_description(DatabaseObject* self) {
+       const char* description = loc_database_get_description(self->db);
+
+       return PyUnicode_FromString(description);
+}
+
+static PyObject* Database_get_vendor(DatabaseObject* self) {
+       const char* vendor = loc_database_get_vendor(self->db);
+
+       return PyUnicode_FromString(vendor);
+}
+
+static PyObject* Database_get_created_at(DatabaseObject* self) {
+       time_t created_at = loc_database_created_at(self->db);
+
+       return PyLong_FromLong(created_at);
+}
+
+static PyObject* Database_get_as(DatabaseObject* self, PyObject* args) {
+       struct loc_as* as = NULL;
+       uint32_t number = 0;
+
+       if (!PyArg_ParseTuple(args, "i", &number))
+               return NULL;
+
+       // Try to retrieve the AS
+       int r = loc_database_get_as(self->db, &as, number);
+       if (r)
+               return NULL;
+
+       // Create an AS object
+       if (as) {
+               PyObject* obj = new_as(&ASType, as);
+               loc_as_unref(as);
+
+               return obj;
+       }
+
+       // Nothing found
+       Py_RETURN_NONE;
+}
+
 static struct PyMethodDef Database_methods[] = {
+       {
+               "get_as",
+               (PyCFunction)Database_get_as,
+               METH_VARARGS,
+               NULL,
+       },
+       { NULL },
+};
+
+static struct PyGetSetDef Database_getsetters[] = {
+       {
+               "created_at",
+               (getter)Database_get_created_at,
+               NULL,
+               NULL,
+               NULL,
+       },
+       {
+               "description",
+               (getter)Database_get_description,
+               NULL,
+               NULL,
+               NULL,
+       },
+       {
+               "vendor",
+               (getter)Database_get_vendor,
+               NULL,
+               NULL,
+               NULL,
+       },
        { NULL },
 };
 
@@ -82,4 +151,5 @@ PyTypeObject DatabaseType = {
        tp_init:                (initproc)Database_init,
        tp_doc:                 "Database object",
        tp_methods:             Database_methods,
+       tp_getset:              Database_getsetters,
 };