summaryrefslogtreecommitdiff
path: root/python/acquire.cc
diff options
context:
space:
mode:
Diffstat (limited to 'python/acquire.cc')
-rw-r--r--python/acquire.cc274
1 files changed, 274 insertions, 0 deletions
diff --git a/python/acquire.cc b/python/acquire.cc
new file mode 100644
index 00000000..65f8f2d7
--- /dev/null
+++ b/python/acquire.cc
@@ -0,0 +1,274 @@
+// Description /*{{{*/
+// $Id: acquire.cc,v 1.1 2003/06/03 03:03:23 mvo Exp $
+/* ######################################################################
+
+ Acquire - Wrapper for the acquire code
+
+ ##################################################################### */
+
+#include "generic.h"
+#include "apt_pkgmodule.h"
+#include "progress.h"
+
+#include <apt-pkg/acquire-item.h>
+
+// pkgAcquire::Item
+static PyObject *AcquireItemAttr(PyObject *Self,char *Name)
+{
+ pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self);
+
+ if (strcmp("ID",Name) == 0)
+ return Py_BuildValue("i",(*I)->ID);
+ else if (strcmp("Status",Name) == 0)
+ return Py_BuildValue("i",(*I)->Status);
+ else if (strcmp("Complete",Name) == 0)
+ return Py_BuildValue("i",(*I)->Complete);
+ else if (strcmp("Local",Name) == 0)
+ return Py_BuildValue("i",(*I)->Local);
+ else if (strcmp("IsTrusted",Name) == 0)
+ return Py_BuildValue("i",(*I)->IsTrusted());
+ else if (strcmp("FileSize",Name) == 0)
+ return Py_BuildValue("i",(*I)->FileSize);
+ else if (strcmp("ErrorText",Name) == 0)
+ return Safe_FromString((*I)->ErrorText.c_str());
+ else if (strcmp("DestFile",Name) == 0)
+ return Safe_FromString((*I)->DestFile.c_str());
+ else if (strcmp("DescURI",Name) == 0)
+ return Safe_FromString((*I)->DescURI().c_str());
+ // constants
+ else if (strcmp("StatIdle",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Item::StatIdle);
+ else if (strcmp("StatFetching",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Item::StatFetching);
+ else if (strcmp("StatDone",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Item::StatDone);
+ else if (strcmp("StatError",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Item::StatError);
+ else if (strcmp("StatAuthError",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Item::StatAuthError);
+
+
+ PyErr_SetString(PyExc_AttributeError,Name);
+ return 0;
+}
+
+
+static PyObject *AcquireItemRepr(PyObject *Self)
+{
+ pkgAcquire::ItemIterator &I = GetCpp<pkgAcquire::ItemIterator>(Self);
+
+ char S[300];
+ snprintf(S,sizeof(S),"<pkgAcquire::ItemIterator object: "
+ "Status: %i Complete: %i Local: %i IsTrusted: %i "
+ "FileSize: %i DestFile:'%s' "
+ "DescURI: '%s' ID:%i ErrorText: '%s'>",
+ (*I)->Status, (*I)->Complete, (*I)->Local, (*I)->IsTrusted(),
+ (*I)->FileSize, (*I)->DestFile.c_str(), (*I)->DescURI().c_str(),
+ (*I)->ID,(*I)->ErrorText.c_str());
+ return PyString_FromString(S);
+}
+
+
+PyTypeObject AcquireItemType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "pkgAcquire::ItemIterator", // tp_name
+ sizeof(CppOwnedPyObject<pkgAcquire::ItemIterator>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppOwnedDealloc<pkgAcquire::ItemIterator>, // tp_dealloc
+ 0, // tp_print
+ AcquireItemAttr, // tp_getattr
+ 0, // tp_setattr
+ 0, // tp_compare
+ AcquireItemRepr, // tp_repr
+ 0, // tp_as_number
+ 0, // tp_as_sequence
+ 0, // tp_as_mapping
+ 0, // tp_hash
+};
+
+
+static PyObject *PkgAcquireRun(PyObject *Self,PyObject *Args)
+{
+ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self);
+
+ int pulseInterval = 500000;
+ if (PyArg_ParseTuple(Args, "|i", &pulseInterval) == 0)
+ return 0;
+
+ pkgAcquire::RunResult run = fetcher->Run(pulseInterval);
+
+ return HandleErrors(Py_BuildValue("i",run));
+}
+
+static PyObject *PkgAcquireShutdown(PyObject *Self,PyObject *Args)
+{
+ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self);
+
+ if (PyArg_ParseTuple(Args, "") == 0)
+ return 0;
+
+ fetcher->Shutdown();
+
+ Py_INCREF(Py_None);
+ return HandleErrors(Py_None);
+}
+
+static PyMethodDef PkgAcquireMethods[] =
+{
+ {"Run",PkgAcquireRun,METH_VARARGS,"Run the fetcher"},
+ {"Shutdown",PkgAcquireShutdown, METH_VARARGS,"Shutdown the fetcher"},
+ {}
+};
+
+
+static PyObject *AcquireAttr(PyObject *Self,char *Name)
+{
+ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(Self);
+
+ if(strcmp("TotalNeeded",Name) == 0)
+ return Py_BuildValue("d", fetcher->TotalNeeded());
+ if(strcmp("FetchNeeded",Name) == 0)
+ return Py_BuildValue("d", fetcher->FetchNeeded());
+ if(strcmp("PartialPresent",Name) == 0)
+ return Py_BuildValue("d", fetcher->PartialPresent());
+ if(strcmp("Items",Name) == 0)
+ {
+ PyObject *List = PyList_New(0);
+ for (pkgAcquire::ItemIterator I = fetcher->ItemsBegin();
+ I != fetcher->ItemsEnd(); I++)
+ {
+ PyObject *Obj;
+ Obj = CppOwnedPyObject_NEW<pkgAcquire::ItemIterator>(Self,&AcquireItemType,I);
+ PyList_Append(List,Obj);
+ Py_DECREF(Obj);
+
+ }
+ return List;
+ }
+ // some constants
+ if(strcmp("ResultContinue",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Continue);
+ if(strcmp("ResultFailed",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Failed);
+ if(strcmp("ResultCancelled",Name) == 0)
+ return Py_BuildValue("i", pkgAcquire::Cancelled);
+
+ return Py_FindMethod(PkgAcquireMethods,Self,Name);
+}
+
+
+
+
+PyTypeObject PkgAcquireType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "Acquire", // tp_name
+ sizeof(CppPyObject<pkgAcquire*>), // tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppDealloc<pkgAcquire*>, // tp_dealloc
+ 0, // tp_print
+ AcquireAttr, // 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
+};
+
+PyObject *GetAcquire(PyObject *Self,PyObject *Args)
+{
+ pkgAcquire *fetcher;
+
+ PyObject *pyFetchProgressInst = NULL;
+ if (PyArg_ParseTuple(Args,"|O",&pyFetchProgressInst) == 0)
+ return 0;
+
+ if (pyFetchProgressInst != NULL) {
+ // FIXME: memleak?
+ PyFetchProgress *progress = new PyFetchProgress();
+ progress->setCallbackInst(pyFetchProgressInst);
+ fetcher = new pkgAcquire(progress);
+ } else {
+ fetcher = new pkgAcquire();
+ }
+
+ CppPyObject<pkgAcquire*> *FetcherObj =
+ CppPyObject_NEW<pkgAcquire*>(&PkgAcquireType, fetcher);
+
+ return FetcherObj;
+}
+
+
+
+
+
+// pkgAcquireFile
+
+static PyObject *AcquireFileAttr(PyObject *Self,char *Name)
+{
+ pkgAcqFile *acqFile = GetCpp<pkgAcqFile*>(Self);
+
+ PyErr_SetString(PyExc_AttributeError,Name);
+ return 0;
+}
+
+
+
+
+PyTypeObject PkgAcquireFileType =
+{
+ PyObject_HEAD_INIT(&PyType_Type)
+ 0, // ob_size
+ "pkgAcquireFile", // tp_name
+ sizeof(CppPyObject<pkgAcqFile*>),// tp_basicsize
+ 0, // tp_itemsize
+ // Methods
+ CppDealloc<pkgAcqFile*>, // tp_dealloc
+ 0, // tp_print
+ AcquireFileAttr, // 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
+};
+
+PyObject *GetPkgAcqFile(PyObject *Self, PyObject *Args, PyObject * kwds)
+{
+ PyObject *pyfetcher;
+ char *uri, *md5, *descr, *shortDescr, *destDir, *destFile;
+ int size = 0;
+ uri = md5 = descr = shortDescr = destDir = destFile = "";
+
+ char * kwlist[] = {"owner","uri", "md5", "size", "descr", "shortDescr",
+ NULL};
+
+ if (PyArg_ParseTupleAndKeywords(Args, kwds, "O!s|siss", kwlist,
+ &PkgAcquireType, &pyfetcher, &uri, &md5,
+ &size, &descr, &shortDescr) == 0)
+ return 0;
+
+ pkgAcquire *fetcher = GetCpp<pkgAcquire*>(pyfetcher);
+ pkgAcqFile *af = new pkgAcqFile(fetcher, // owner
+ uri, // uri
+ md5, // md5
+ size, // size
+ descr, // descr
+ shortDescr); // short-desc
+ CppPyObject<pkgAcqFile*> *AcqFileObj = CppPyObject_NEW<pkgAcqFile*>(&PkgAcquireFileType);
+ AcqFileObj->Object = af;
+
+ return AcqFileObj;
+}
+
+
+ /*}}}*/