summaryrefslogtreecommitdiff
path: root/python/indexrecords.cc
diff options
context:
space:
mode:
Diffstat (limited to 'python/indexrecords.cc')
-rw-r--r--python/indexrecords.cc121
1 files changed, 121 insertions, 0 deletions
diff --git a/python/indexrecords.cc b/python/indexrecords.cc
new file mode 100644
index 00000000..e6099a69
--- /dev/null
+++ b/python/indexrecords.cc
@@ -0,0 +1,121 @@
+/*
+ * indexrecords.cc - Wrapper around indexRecords
+ *
+ * Copyright 2009 Julian Andres Klode <jak@debian.org>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+#include <Python.h>
+#include "apt_pkgmodule.h"
+#include "generic.h"
+#include <apt-pkg/indexrecords.h>
+
+static PyObject *IndexRecords_NEW(PyTypeObject *type,PyObject *Args,
+ PyObject *kwds)
+{
+ char * kwlist[] = {NULL};
+ if (PyArg_ParseTupleAndKeywords(Args, kwds, "", kwlist) == 0)
+ return 0;
+ indexRecords *records = new indexRecords();
+ CppPyObject<indexRecords*> *New = CppPyObject_NEW<indexRecords*>(type,
+ records);
+ return New;
+}
+
+static PyObject *IndexRecords_Load(PyObject *self,PyObject *args)
+{
+ const char *filename;
+ if (PyArg_ParseTuple(args, "s", &filename) == 0)
+ return 0;
+ indexRecords *records = GetCpp<indexRecords*>(self);
+ return HandleErrors(Py_BuildValue("i", records->Load(filename)));
+}
+
+static const char *IndexRecords_Lookup_doc = "lookup(metakey)\n\n"
+ "Lookup the filename given by metakey, return a tuple (size,hash).\n"
+ "The hash part is a HashString() object.";
+static PyObject *IndexRecords_Lookup(PyObject *self,PyObject *args)
+{
+ const char *keyname;
+ if (PyArg_ParseTuple(args, "s", &keyname) == 0)
+ return 0;
+ indexRecords *records = GetCpp<indexRecords*>(self);
+ const indexRecords::checkSum *result = records->Lookup(keyname);
+ return Py_BuildValue("(iO)",result->Size,
+ PyHashString_FromCpp((HashString*)&result->Hash));
+}
+
+static PyObject *IndexRecords_GetDist(PyObject *self)
+{
+ indexRecords *records = GetCpp<indexRecords*>(self);
+ return HandleErrors(PyString_FromString(records->GetDist().c_str()));
+}
+
+static PyMethodDef IndexRecords_Methods[] = {
+ {"load",IndexRecords_Load,METH_VARARGS,
+ "load(filename: str)\n\nLoad the file given by filename."},
+ {"get_dist",(PyCFunction)IndexRecords_GetDist,METH_NOARGS,
+ "get_dist() -> str\n\nReturn a distribution set in the release file."},
+ {"lookup",IndexRecords_Lookup,METH_VARARGS,IndexRecords_Lookup_doc},
+ {}
+};
+
+static char *IndexRecords_doc = "IndexRecords()\n\n"
+ "Representation of a release file.";
+PyTypeObject PyIndexRecords_Type = {
+ PyObject_HEAD_INIT(&PyType_Type)
+#if PY_MAJOR_VERSION < 3
+ 0, // ob_size
+#endif
+ "apt_pkg.IndexRecords", // tp_name
+ sizeof(CppPyObject<indexRecords*>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppDealloc<indexRecords*>, // tp_dealloc
+ 0, // tp_print
+ 0, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_compare
+ 0, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+ 0, // tp_call
+ 0, // tp_str
+ 0, // tp_getattro
+ 0, // tp_setattro
+ 0, // tp_as_buffer
+ Py_TPFLAGS_DEFAULT, // tp_flags
+ IndexRecords_doc, // tp_doc
+ 0, // tp_traverse
+ 0, // tp_clear
+ 0, // tp_richcompare
+ 0, // tp_weaklistoffset
+ 0, // tp_iter
+ 0, // tp_iternext
+ IndexRecords_Methods, // tp_methods
+ 0, // tp_members
+ 0, // tp_getset
+ 0, // tp_base
+ 0, // tp_dict
+ 0, // tp_descr_get
+ 0, // tp_descr_set
+ 0, // tp_dictoffset
+ 0, // tp_init
+ 0, // tp_alloc
+ IndexRecords_NEW, // tp_new
+};