[Python-Dev] MSI: Remove dependency from win32com.client module (issue4080047)

techtonik at gmail.com techtonik at gmail.com
Mon Jan 31 19:19:44 CET 2011


Reviewers: ,



Please review this at http://codereview.appspot.com/4080047/

Affected files:
   M     Tools/msi/msi.py
   M     Tools/msi/msilib.py


Index: Tools/msi/msi.py
===================================================================
--- Tools/msi/msi.py	(revision 88279)
+++ Tools/msi/msi.py	(working copy)
@@ -4,7 +4,6 @@
  import msilib, schema, sequence, os, glob, time, re, shutil, zipfile
  from msilib import Feature, CAB, Directory, Dialog, Binary, add_data
  import uisample
-from win32com.client import constants
  from distutils.spawn import find_executable
  from uuids import product_codes
  import tempfile
@@ -1360,7 +1359,7 @@

      # Step 2: Add CAB files
      i = msilib.MakeInstaller()
-    db = i.OpenDatabase(msi, constants.msiOpenDatabaseModeTransact)
+    db = i.OpenDatabase(msi, msilib.msiOpenDatabaseModeTransact)

      v = db.OpenView("SELECT LastSequence FROM Media")
      v.Execute(None)
Index: Tools/msi/msilib.py
===================================================================
--- Tools/msi/msilib.py	(revision 88279)
+++ Tools/msi/msilib.py	(working copy)
@@ -4,7 +4,6 @@
  import win32com.client.gencache
  import win32com.client
  import pythoncom, pywintypes
-from win32com.client import constants
  import re, string, os, sets, glob, subprocess, sys, _winreg, struct

  try:
@@ -29,6 +28,18 @@
  knownbits = datasizemask | type_valid | type_localizable | \
              typemask | type_nullable | type_key

+# Constants from Windows Installer SDK
+msiOpenDatabaseModeReadOnly = 0
+msiOpenDatabaseModeTransact = 1
+msiOpenDatabaseModeDirect = 2
+msiOpenDatabaseModeCreate = 3
+msiColumnInfoNames = 0
+msiColumnInfoTypes = 1
+msiReadStreamInteger = 0
+msiReadStreamBytes = 1
+msiViewModifyInsert = 1
+msidbFileAttributesVital = 512
+
  # Summary Info Property IDs
  PID_CODEPAGE=1
  PID_TITLE=2
@@ -141,8 +152,7 @@

  def gen_schema(destpath, schemapath):
      d = MakeInstaller()
-    schema = d.OpenDatabase(schemapath,
-            win32com.client.constants.msiOpenDatabaseModeReadOnly)
+    schema = d.OpenDatabase(schemapath, msiOpenDatabaseModeReadOnly)

      # XXX ORBER BY
      v=schema.OpenView("SELECT * FROM _Columns")
@@ -196,8 +206,7 @@
  def gen_sequence(destpath, msipath):
      dir = os.path.dirname(destpath)
      d = MakeInstaller()
-    seqmsi = d.OpenDatabase(msipath,
-            win32com.client.constants.msiOpenDatabaseModeReadOnly)
+    seqmsi = d.OpenDatabase(msipath, msiOpenDatabaseModeReadOnly)

      v = seqmsi.OpenView("SELECT * FROM _Tables");
      v.Execute(None)
@@ -212,7 +221,7 @@
          f.write("%s = [\n" % table)
          v1 = seqmsi.OpenView("SELECT * FROM `%s`" % table)
          v1.Execute(None)
-        info = v1.ColumnInfo(constants.msiColumnInfoTypes)
+        info = v1.ColumnInfo(msiColumnInfoTypes)
          while 1:
              r = v1.Fetch()
              if not r:break
@@ -226,7 +235,7 @@
                      rec.append(r.StringData(i))
                  elif info.StringData(i)[0]=="v":
                      size = r.DataSize(i)
-                    bytes = r.ReadStream(i, size,  
constants.msiReadStreamBytes)
+                    bytes = r.ReadStream(i, size, msiReadStreamBytes)
                      bytes = bytes.encode("latin-1") # binary data  
represented "as-is"
                      if table == "Binary":
                          fname = rec[0]+".bin"
@@ -275,7 +284,7 @@
                  r.SetStream(i+1, field.name)
              else:
                  raise TypeError, "Unsupported type %s" %  
field.__class__.__name__
-        v.Modify(win32com.client.constants.msiViewModifyInsert, r)
+        v.Modify(msiViewModifyInsert, r)
          r.ClearData()
      v.Close()

@@ -298,8 +307,7 @@
      ProductCode = ProductCode.upper()
      d = MakeInstaller()
      # Create the database
-    db = d.OpenDatabase(name,
-         win32com.client.constants.msiOpenDatabaseModeCreate)
+    db = d.OpenDatabase(name, msiOpenDatabaseModeCreate)
      # Create the tables
      for t in schema.tables:
          t.create(db)
@@ -538,7 +546,7 @@
          short = self.make_short(file)
          full = "%s|%s" % (short, file)
          filesize = os.stat(absolute).st_size
-        # constants.msidbFileAttributesVital
+        # msidbFileAttributesVital
          # Compressed omitted, since it is the database default
          # could add r/o, system, hidden
          attributes = 512




More information about the Python-Dev mailing list