diff options
| author | Michael Vogt <michael.vogt@ubuntu.com> | 2010-03-23 14:18:44 +0100 |
|---|---|---|
| committer | Michael Vogt <michael.vogt@ubuntu.com> | 2010-03-23 14:18:44 +0100 |
| commit | 37650a078f5504dfbc6622d2c06f4435a3302dd4 (patch) | |
| tree | 35d7df75535420cbe0712a5f7b7b66d61f5e44d1 /python/indexrecords.cc | |
| parent | 2aa709e41d8896ef897863ea9181c409c4c87a8c (diff) | |
| parent | 3a08cfb10590d5cf5df1f45d94a424ef6a0f674b (diff) | |
| download | python-apt-37650a078f5504dfbc6622d2c06f4435a3302dd4.tar.gz | |
merged from lp:~mvo/python-apt/mvo
Diffstat (limited to 'python/indexrecords.cc')
| -rw-r--r-- | python/indexrecords.cc | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/python/indexrecords.cc b/python/indexrecords.cc new file mode 100644 index 00000000..80960160 --- /dev/null +++ b/python/indexrecords.cc @@ -0,0 +1,127 @@ +/* + * 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*>(NULL, 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 char *indexrecords_lookup_doc = "lookup(metakey)\n\n" + "Lookup the filename given by metakey, return a tuple (hash, size).\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); + if (result == 0) { + PyErr_SetString(PyExc_KeyError,keyname); + return 0; + } + // Copy the HashString(), to prevent crashes and to not require the + // indexRecords object to exist. + PyObject *py_hash = PyHashString_FromCpp(new HashString(result->Hash), true, NULL); + PyObject *value = Py_BuildValue("(Oi)",py_hash,result->Size); + Py_DECREF(py_hash); + return value; +} + +static PyObject *indexrecords_get_dist(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_get_dist,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 = { + PyVarObject_HEAD_INIT(&PyType_Type, 0) + "apt_pkg.IndexRecords", // tp_name + sizeof(CppPyObject<indexRecords*>), // tp_basicsize + 0, // tp_itemsize + // Methods + CppDeallocPtr<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 + Py_TPFLAGS_BASETYPE), + 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 +}; |
