Kaydet (Commit) bfa89b21 authored tarafından Miss Islington (bot)'s avatar Miss Islington (bot) Kaydeden (comit) Berker Peksag

bpo-12382: Make OpenDatabase() raise better exception messages (GH-4528)

Previously, 'msilib.OpenDatabase()' function raised a
cryptical exception message when it couldn't open or
create an MSI file. For example:

    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    _msi.MSIError: unknown error 6e

(cherry picked from commit 4864a619)
üst 90abbee7
""" Test suite for the code in msilib """
import os.path
import unittest
from test.support import TESTFN, import_module, unlink
msilib = import_module('msilib')
......@@ -40,6 +41,17 @@ class MsiDatabaseTestCase(unittest.TestCase):
)
self.addCleanup(unlink, db_path)
def test_database_open_failed(self):
with self.assertRaises(msilib.MSIError) as cm:
msilib.OpenDatabase('non-existent.msi', msilib.MSIDBOPEN_READONLY)
self.assertEqual(str(cm.exception), 'open failed')
def test_database_create_failed(self):
db_path = os.path.join(TESTFN, 'test.msi')
with self.assertRaises(msilib.MSIError) as cm:
msilib.OpenDatabase(db_path, msilib.MSIDBOPEN_CREATE)
self.assertEqual(str(cm.exception), 'create failed')
class Test_make_id(unittest.TestCase):
#http://msdn.microsoft.com/en-us/library/aa369212(v=vs.85).aspx
......
:func:`msilib.OpenDatabase` now raises a better exception message when it
couldn't open or create an MSI file. Initial patch by William Tisäter.
......@@ -325,6 +325,12 @@ msierror(int status)
case ERROR_INVALID_PARAMETER:
PyErr_SetString(MSIError, "invalid parameter");
return NULL;
case ERROR_OPEN_FAILED:
PyErr_SetString(MSIError, "open failed");
return NULL;
case ERROR_CREATE_FAILED:
PyErr_SetString(MSIError, "create failed");
return NULL;
default:
PyErr_Format(MSIError, "unknown error %x", status);
return NULL;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment