Merged revisions 63888 via svnmerge from

svn+ssh://pythondev@svn.python.org/python/trunk

........
  r63888 | martin.v.loewis | 2008-06-02 10:40:06 +0200 (Mo, 02 Jun 2008) | 2 lines

  Patch #2125: Add GetInteger and GetString methods for
  msilib.Record objects.
........
This commit is contained in:
Martin v. Löwis 2008-06-02 10:08:54 +00:00
parent 90cc5ab976
commit e95593e9b1
2 changed files with 60 additions and 0 deletions

View File

@ -262,6 +262,18 @@ Record Objects
:cfunc:`MsiRecordGetFieldCount`.
.. method:: Record.GetInteger(field)
Return the value of *field* as an integer where possible. *field* must
be an integer.
.. method:: Record.GetString(field)
Return the value of *field* as a string where possible. *field* must
be an integer.
.. method:: Record.SetString(field, value)
Set *field* to *value* through :cfunc:`MsiRecordSetString`. *field* must be an
@ -541,3 +553,4 @@ definitions. Currently, these definitions are based on MSI version 2.0.
This module contains definitions for the UIText and ActionText tables, for the
standard installer actions.

View File

@ -338,6 +338,49 @@ record_getfieldcount(msiobj* record, PyObject* args)
return PyLong_FromLong(MsiRecordGetFieldCount(record->h));
}
static PyObject*
record_getinteger(msiobj* record, PyObject* args)
{
unsigned int field;
int status;
if (!PyArg_ParseTuple(args, "I:GetInteger", &field))
return NULL;
status = MsiRecordGetInteger(record->h, field);
if (status == MSI_NULL_INTEGER){
PyErr_SetString(MSIError, "could not convert record field to integer");
return NULL;
}
return PyInt_FromLong((long) status);
}
static PyObject*
record_getstring(msiobj* record, PyObject* args)
{
unsigned int field;
unsigned int status;
char buf[2000];
char *res = buf;
DWORD size = sizeof(buf);
PyObject* string;
if (!PyArg_ParseTuple(args, "I:GetString", &field))
return NULL;
status = MsiRecordGetString(record->h, field, res, &size);
if (status == ERROR_MORE_DATA) {
res = (char*) malloc(size + 1);
if (res == NULL)
return PyErr_NoMemory();
status = MsiRecordGetString(record->h, field, res, &size);
}
if (status != ERROR_SUCCESS)
return msierror((int) status);
string = PyString_FromString(res);
if (buf != res)
free(res);
return string;
}
static PyObject*
record_cleardata(msiobj* record, PyObject *args)
{
@ -405,6 +448,10 @@ record_setinteger(msiobj* record, PyObject *args)
static PyMethodDef record_methods[] = {
{ "GetFieldCount", (PyCFunction)record_getfieldcount, METH_NOARGS,
PyDoc_STR("GetFieldCount() -> int\nWraps MsiRecordGetFieldCount")},
{ "GetInteger", (PyCFunction)record_getinteger, METH_VARARGS,
PyDoc_STR("GetInteger(field) -> int\nWraps MsiRecordGetInteger")},
{ "GetString", (PyCFunction)record_getstring, METH_VARARGS,
PyDoc_STR("GetString(field) -> string\nWraps MsiRecordGetString")},
{ "SetString", (PyCFunction)record_setstring, METH_VARARGS,
PyDoc_STR("SetString(field,str) -> None\nWraps MsiRecordSetString")},
{ "SetStream", (PyCFunction)record_setstream, METH_VARARGS,