Grant,

for your problems with the assertion there is a patch...

-
-----------------------------------------------------------------------------------------------

in Version 213 of pywin32 within

win32com\client\genpy.py

on line 814, within def do_gen_file_header(self): there is the assertion:

# You must provide a file correctly configured for writing unicode.
# We assert this is it may indicate somewhere in pywin32 that needs
# upgrading.
assert self.file.encoding, self.file


But using makepy.py via
makepy.py -v -o OLE_Excel11.py "Microsoft Excel 11.0 Object Library"

this assertion fails ... as self.file.encoding is None

The culprit is makepy.py itself:

starting at line 367ff there is:

    if outputName is not None:
        path = os.path.dirname(outputName)
        if path is not '' and not os.path.exists(path):
            os.makedirs(path)
        f = open(outputName, "w")
    else:
        f = None

and this "f" will have encoding=None

I patched this to:

if outputName is not None:
        path = os.path.dirname(outputName)
        if path is not '' and not os.path.exists(path):
            os.makedirs(path)
        #~ f = open(outputName, "w")
        import codecs
        f= codecs.open(outputName, mode="w",encoding="mbcs")
    else:
        f = None

use codecs to create a file with mbcs encoding. After this, I get a nice
create ole_excel11.py file, with the good line
# -*- coding: mbcs -*-

at the beginning.

I propose to put this fix into makepy.py for everybody; (any rights you need
are hereby granted)
-
-----------------------------------------------------------------------------------------------

(of which you could not know; I guess it got lost somewhere between Europe
and Australia, where Mark Hammond, the master of pywin32, was before)

Now I have put out this patch to the public, for others to enjoy untill it
may or may not be worked into makepy.py

best wishes,

Harald

On Thu, Aug 27, 2009 at 1:51 PM, Grant Paton-Simpson <gr...@p-s.co.nz>wrote:

> Hi Harald,
>
> I managed to make a file containing everything I needed.  NB the command
> is makepy.py not makepy.  There was, however, an issue with genpy.py
> asserting there had to be a self.file.encoding even though I couldn't
> see where that was set.  I temporarily commented that assert out.  File
> creation then worked.  I then took out the small portion of the script I
> needed - all the data type constants - and put those in my own module.
> Success!
>
> For the benefit of others, the reason you don't have to specify the
> library e.g. ActiveX 2.8, is that you will be prompted for it via a pop
> up GUI.
>
>
> All the best, Grant
>
>
> Massa, Harald Armin wrote:
> > Grant,
> >
> > that is possible. Just read the makepy.py script within
> > win32com.client, and you will find that someway down main() there is
> >
> > ---------
> > GenerateFromTypeLibSpec(arg, f, verboseLevel = verboseLevel,
> > bForDemand = bForDemand, bBuildHidden = hiddenSpec)
> > ---------
> >
> > which does this.
> >
> > BUT, for "static" usage of makepy-COM-Mappings I suggest to make
> > makepy output it's results in a named file
> >
> > makepy -o ADO28.py
> >
> > and furtheron import that ADO28 file to access the variables. That
> > does also work  with Excel and Word, and I am used to
> >
> > import ExcelXX as Excel
> > ec=Excel.constants
> >
> > and further on us ec.* for excel constants.
> >
> > Best wishes,
> >
> > HArald
> >
> > On Thu, Aug 27, 2009 at 2:51 AM, Grant Paton-Simpson <gr...@p-s.co.nz
> > <mailto:gr...@p-s.co.nz>> wrote:
> >
> >     Hi,
> >
> >     Basically I want to have an installation package automatically run
> the
> >     COM MakePy utility for the ADO 2.8 library. I believe I need to do
> >     this
> >     so that constants like win32com.client.constants.adTinyInt will be
> >     available when my application (http://www.sofastatistics.com)
> >     connects to
> >     MS Access and MS SQL Server databases.
> >
> >     Ideally I would have a line doing something like this:
> >
> >     win32com.runmakepy("Microsoft ActiveX Data Objects 2.8 Library
> (2.8)")
> >
> >     Is it possible to do this programmatically?
> >
> >
> >     All the best, Grant
> >     _______________________________________________
> >     python-win32 mailing list
> >     python-win32@python.org <mailto:python-win32@python.org>
> >     http://mail.python.org/mailman/listinfo/python-win32
> >
> >
> >
> >
> > --
> > GHUM Harald Massa
> > persuadere et programmare
> > Harald Armin Massa
> > Spielberger Straße 49
> > 70435 Stuttgart
> > 0173/9409607
> > no fx, no carrier pigeon
> > -
> > LASIK good, steroids bad?
>
>
> _______________________________________________
> python-win32 mailing list
> python-win32@python.org
> http://mail.python.org/mailman/listinfo/python-win32
>



-- 
GHUM Harald Massa
persuadere et programmare
Harald Armin Massa
Spielberger Straße 49
70435 Stuttgart
0173/9409607
no fx, no carrier pigeon
-
LASIK good, steroids bad?
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to