[Python-checkins] bpo-20486: Implement Database.Close() method in msilib (GH-4141)

Berker Peksag webhook-mailer at python.org
Tue Nov 7 07:58:55 EST 2017


https://github.com/python/cpython/commit/a935654f0613640535fbf0ba190f81d02a63d35c
commit: a935654f0613640535fbf0ba190f81d02a63d35c
branch: master
author: Berker Peksag <berker.peksag at gmail.com>
committer: GitHub <noreply at github.com>
date: 2017-11-07T15:58:53+03:00
summary:

bpo-20486: Implement Database.Close() method in msilib (GH-4141)

files:
A Misc/NEWS.d/next/Windows/2017-10-26-23-02-57.bpo-20486.3IdsZ1.rst
M Doc/library/msilib.rst
M PC/_msi.c

diff --git a/Doc/library/msilib.rst b/Doc/library/msilib.rst
index 09d00a6edee..a66e52ca576 100644
--- a/Doc/library/msilib.rst
+++ b/Doc/library/msilib.rst
@@ -152,12 +152,18 @@ Database Objects
    :c:func:`MsiGetSummaryInformation`.  *count* is the maximum number of updated
    values.
 
+.. method:: Database.Close()
+
+   Close the database object, through :c:func:`MsiCloseHandle`.
+
+   .. versionadded:: 3.7
 
 .. seealso::
 
    `MSIDatabaseOpenView <https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msidatabaseopenview.asp>`_
    `MSIDatabaseCommit <https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msidatabasecommit.asp>`_
    `MSIGetSummaryInformation <https://msdn.microsoft.com/library?url=/library/en-us/msi/setup/msigetsummaryinformation.asp>`_
+   `MsiCloseHandle <https://msdn.microsoft.com/en-us/library/windows/desktop/aa370067(v=vs.85).aspx>`_
 
 .. _view-objects:
 
diff --git a/Misc/NEWS.d/next/Windows/2017-10-26-23-02-57.bpo-20486.3IdsZ1.rst b/Misc/NEWS.d/next/Windows/2017-10-26-23-02-57.bpo-20486.3IdsZ1.rst
new file mode 100644
index 00000000000..d65971ec65f
--- /dev/null
+++ b/Misc/NEWS.d/next/Windows/2017-10-26-23-02-57.bpo-20486.3IdsZ1.rst
@@ -0,0 +1,2 @@
+Implement the ``Database.Close()`` method to help closing MSI database
+objects.
diff --git a/PC/_msi.c b/PC/_msi.c
index a15f68450b3..df6c881b4ec 100644
--- a/PC/_msi.c
+++ b/PC/_msi.c
@@ -287,14 +287,6 @@ msiobj_dealloc(msiobj* msidb)
 }
 
 static PyObject*
-msiobj_close(msiobj* msidb, PyObject *args)
-{
-    MsiCloseHandle(msidb->h);
-    msidb->h = 0;
-    Py_RETURN_NONE;
-}
-
-static PyObject*
 msierror(int status)
 {
     int code;
@@ -342,6 +334,17 @@ msierror(int status)
     return NULL;
 }
 
+static PyObject*
+msidb_close(msiobj* msidb, PyObject *args)
+{
+    int status;
+    if ((status = MsiCloseHandle(msidb->h)) != ERROR_SUCCESS) {
+        return msierror(status);
+    }
+    msidb->h = 0;
+    Py_RETURN_NONE;
+}
+
 /*************************** Record objects **********************/
 
 static PyObject*
@@ -901,6 +904,8 @@ static PyMethodDef db_methods[] = {
         PyDoc_STR("Commit() -> None\nWraps MsiDatabaseCommit")},
     { "GetSummaryInformation", (PyCFunction)msidb_getsummaryinformation, METH_VARARGS,
         PyDoc_STR("GetSummaryInformation(updateCount) -> viewobj\nWraps MsiGetSummaryInformation")},
+    { "Close", (PyCFunction)msidb_close, METH_NOARGS,
+        PyDoc_STR("Close() -> None\nWraps MsiCloseHandle")},
     { NULL, NULL }
 };
 



More information about the Python-checkins mailing list