[Python-checkins] python/dist/src/Lib/plat-mac gensuitemodule.py,1.2,1.3
jackjansen@users.sourceforge.net
jackjansen@users.sourceforge.net
Tue, 01 Apr 2003 05:32:20 -0800
Update of /cvsroot/python/python/dist/src/Lib/plat-mac
In directory sc8-pr-cvs1:/tmp/cvs-serv6654
Modified Files:
gensuitemodule.py
Log Message:
- All messages are now dependent on the --verbose option.
- Added a --dump option that doesn't generate the module but dumps
the pretty-printed aete resource(s) on stdout.
Index: gensuitemodule.py
===================================================================
RCS file: /cvsroot/python/python/dist/src/Lib/plat-mac/gensuitemodule.py,v
retrieving revision 1.2
retrieving revision 1.3
diff -C2 -d -r1.2 -r1.3
*** gensuitemodule.py 30 Mar 2003 22:39:39 -0000 1.2
--- gensuitemodule.py 1 Apr 2003 13:32:17 -0000 1.3
***************
*** 37,40 ****
--- 37,42 ----
--edit old=new Edit suite names, use empty new to skip a suite (-e)
--creator code Set creator code for package (-c)
+ --dump Dump aete resource to stdout in stead of creating module (-d)
+ --verbose Tell us what happens (-v)
""")
sys.exit(1)
***************
*** 42,47 ****
def main():
if len(sys.argv) > 1:
! SHORTOPTS = "rb:o:e:c:"
! LONGOPTS = ("resource", "base=", "output=", "edit=", "creator=")
try:
opts, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
--- 44,49 ----
def main():
if len(sys.argv) > 1:
! SHORTOPTS = "rb:o:e:c:dv"
! LONGOPTS = ("resource", "base=", "output=", "edit=", "creator=", "dump", "verbose")
try:
opts, args = getopt.getopt(sys.argv[1:], SHORTOPTS, LONGOPTS)
***************
*** 54,57 ****
--- 56,61 ----
edit_modnames = []
creatorsignature = None
+ dump = None
+ verbose = None
for o, a in opts:
***************
*** 72,75 ****
--- 76,83 ----
sys.exit(1)
creatorsignature = a
+ if o in ('-d', '--dump'):
+ dump = sys.stdout
+ if o in ('-v', '--verbose'):
+ verbose = sys.stderr
***************
*** 80,84 ****
for filename in args:
process_func(filename, output=output, basepkgname=basepkgname,
! edit_modnames=edit_modnames, creatorsignature=creatorsignature)
else:
main_interactive()
--- 88,93 ----
for filename in args:
process_func(filename, output=output, basepkgname=basepkgname,
! edit_modnames=edit_modnames, creatorsignature=creatorsignature,
! dump=dump, verbose=verbose)
else:
main_interactive()
***************
*** 104,113 ****
return
try:
! processfile(filename, edit_modnames=edit_modnames, basepkgname=basepkgname)
except MacOS.Error, arg:
print "Error getting terminology:", arg
print "Retry, manually parsing resources"
processfile_fromresource(filename, edit_modnames=edit_modnames,
! basepkgname=basepkgname)
def is_scriptable(application):
--- 113,123 ----
return
try:
! processfile(filename, edit_modnames=edit_modnames, basepkgname=basepkgname,
! verbose=sys.stderr)
except MacOS.Error, arg:
print "Error getting terminology:", arg
print "Retry, manually parsing resources"
processfile_fromresource(filename, edit_modnames=edit_modnames,
! basepkgname=basepkgname, verbose=sys.stderr)
def is_scriptable(application):
***************
*** 133,142 ****
def processfile_fromresource(fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None):
"""Process all resources in a single file"""
! if not is_scriptable(fullname):
! print "Warning: app does not seem scriptable: %s" % fullname
cur = CurResFile()
! print "Processing", fullname
rf = macresource.open_pathname(fullname)
try:
--- 143,153 ----
def processfile_fromresource(fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None, dump=None, verbose=None):
"""Process all resources in a single file"""
! if not is_scriptable(fullname) and verbose:
! print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
cur = CurResFile()
! if verbose:
! print >>verbose, "Processing", fullname
rf = macresource.open_pathname(fullname)
try:
***************
*** 149,158 ****
res = Get1IndResource('aeut', 1+i)
resources.append(res)
! print "\nLISTING aete+aeut RESOURCES IN", `fullname`
aetelist = []
for res in resources:
! print "decoding", res.GetResInfo(), "..."
data = res.data
! aete = decode(data)
aetelist.append((aete, res.GetResInfo()))
finally:
--- 160,171 ----
res = Get1IndResource('aeut', 1+i)
resources.append(res)
! if verbose:
! print >>verbose, "\nLISTING aete+aeut RESOURCES IN", `fullname`
aetelist = []
for res in resources:
! if verbose:
! print >>verbose, "decoding", res.GetResInfo(), "..."
data = res.data
! aete = decode(data, verbose)
aetelist.append((aete, res.GetResInfo()))
finally:
***************
*** 162,181 ****
# switch back (needed for dialogs in Python)
UseResFile(cur)
compileaetelist(aetelist, fullname, output=output,
basepkgname=basepkgname, edit_modnames=edit_modnames,
! creatorsignature=creatorsignature)
def processfile(fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None):
"""Ask an application for its terminology and process that"""
! if not is_scriptable(fullname):
! print "Warning: app does not seem scriptable: %s" % fullname
! print "\nASKING FOR aete DICTIONARY IN", `fullname`
try:
aedescobj, launched = OSATerminology.GetAppTerminology(fullname)
except MacOS.Error, arg:
if arg[0] in (-1701, -192): # errAEDescNotFound, resNotFound
! print "GetAppTerminology failed with errAEDescNotFound/resNotFound, trying manually"
! aedata, sig = getappterminology(fullname)
if not creatorsignature:
creatorsignature = sig
--- 175,199 ----
# switch back (needed for dialogs in Python)
UseResFile(cur)
+ if dump:
+ dumpaetelist(aetelist, dump)
compileaetelist(aetelist, fullname, output=output,
basepkgname=basepkgname, edit_modnames=edit_modnames,
! creatorsignature=creatorsignature, verbose=verbose)
def processfile(fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None, dump=None,
! verbose=None):
"""Ask an application for its terminology and process that"""
! if not is_scriptable(fullname) and verbose:
! print >>verbose, "Warning: app does not seem scriptable: %s" % fullname
! if verbose:
! print >>verbose, "\nASKING FOR aete DICTIONARY IN", `fullname`
try:
aedescobj, launched = OSATerminology.GetAppTerminology(fullname)
except MacOS.Error, arg:
if arg[0] in (-1701, -192): # errAEDescNotFound, resNotFound
! if verbose:
! print >>verbose, "GetAppTerminology failed with errAEDescNotFound/resNotFound, trying manually"
! aedata, sig = getappterminology(fullname, verbose=verbose)
if not creatorsignature:
creatorsignature = sig
***************
*** 184,201 ****
else:
if launched:
! print "Launched", fullname
raw = aetools.unpack(aedescobj)
if not raw:
! print 'Unpack returned empty value:', raw
return
! if not raw[0].data:
! print 'Unpack returned value without data:', raw
return
aedata = raw[0]
! aete = decode(aedata.data)
compileaete(aete, None, fullname, output=output, basepkgname=basepkgname,
! creatorsignature=creatorsignature, edit_modnames=edit_modnames)
! def getappterminology(fullname):
"""Get application terminology by sending an AppleEvent"""
# First check that we actually can send AppleEvents
--- 202,226 ----
else:
if launched:
! if verbose:
! print >>verbose, "Launched", fullname
raw = aetools.unpack(aedescobj)
if not raw:
! if verbose:
! print >>verbose, 'Unpack returned empty value:', raw
return
! if not raw[0].data:
! if verbose:
! print >>verbose, 'Unpack returned value without data:', raw
return
aedata = raw[0]
! aete = decode(aedata.data, verbose)
! if dump:
! dumpaetelist([aete], dump)
! return
compileaete(aete, None, fullname, output=output, basepkgname=basepkgname,
! creatorsignature=creatorsignature, edit_modnames=edit_modnames,
! verbose=verbose)
! def getappterminology(fullname, verbose=None):
"""Get application terminology by sending an AppleEvent"""
# First check that we actually can send AppleEvents
***************
*** 221,225 ****
talker._start()
except (MacOS.Error, aetools.Error), arg:
! print 'Warning: start() failed, continuing anyway:', arg
reply = talker.send("ascr", "gdte")
#reply2 = talker.send("ascr", "gdut")
--- 246,251 ----
talker._start()
except (MacOS.Error, aetools.Error), arg:
! if verbose:
! print >>verbose, 'Warning: start() failed, continuing anyway:', arg
reply = talker.send("ascr", "gdte")
#reply2 = talker.send("ascr", "gdut")
***************
*** 229,239 ****
def compileaetelist(aetelist, fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None):
for aete, resinfo in aetelist:
compileaete(aete, resinfo, fullname, output=output,
basepkgname=basepkgname, edit_modnames=edit_modnames,
! creatorsignature=creatorsignature)
!
! def decode(data):
"""Decode a resource into a python data structure"""
f = StringIO.StringIO(data)
--- 255,269 ----
def compileaetelist(aetelist, fullname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None, verbose=None):
for aete, resinfo in aetelist:
compileaete(aete, resinfo, fullname, output=output,
basepkgname=basepkgname, edit_modnames=edit_modnames,
! creatorsignature=creatorsignature, verbose=verbose)
!
! def dumpaetelist(aetelist, output):
! import pprint
! pprint.pprint(aetelist, output)
!
! def decode(data, verbose=None):
"""Decode a resource into a python data structure"""
f = StringIO.StringIO(data)
***************
*** 243,248 ****
unprocessed = len(f.read())
total = f.tell()
! if unprocessed:
! sys.stderr.write("%d processed + %d unprocessed = %d total\n" %
(processed, unprocessed, total))
return aete
--- 273,278 ----
unprocessed = len(f.read())
total = f.tell()
! if unprocessed and verbose:
! verbose.write("%d processed + %d unprocessed = %d total\n" %
(processed, unprocessed, total))
return aete
***************
*** 399,403 ****
def compileaete(aete, resinfo, fname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None):
"""Generate code for a full aete resource. fname passed for doc purposes"""
[version, language, script, suites] = aete
--- 429,433 ----
def compileaete(aete, resinfo, fname, output=None, basepkgname=None,
! edit_modnames=None, creatorsignature=None, verbose=None):
"""Generate code for a full aete resource. fname passed for doc purposes"""
[version, language, script, suites] = aete
***************
*** 439,443 ****
for suite in suites:
code, suite, pathname, modname, precompinfo = precompilesuite(suite, basepackage,
! output=output, edit_modnames=edit_modnames)
if not code:
continue
--- 469,473 ----
for suite in suites:
code, suite, pathname, modname, precompinfo = precompilesuite(suite, basepackage,
! output=output, edit_modnames=edit_modnames, verbose=verbose)
if not code:
continue
***************
*** 448,452 ****
for suiteinfo in allsuites:
compilesuite(suiteinfo, major, minor, language, script, fname, basepackage,
! allprecompinfo, interact=(edit_modnames is None))
initfilename = os.path.join(output, '__init__.py')
fp = open(initfilename, 'w')
--- 478,482 ----
for suiteinfo in allsuites:
compilesuite(suiteinfo, major, minor, language, script, fname, basepackage,
! allprecompinfo, interact=(edit_modnames is None), verbose=verbose)
initfilename = os.path.join(output, '__init__.py')
fp = open(initfilename, 'w')
***************
*** 512,516 ****
fp.close()
! def precompilesuite(suite, basepackage=None, edit_modnames=None, output=None):
"""Parse a single suite without generating the output. This step is needed
so we can resolve recursive references by suites to enums/comps/etc declared
--- 542,547 ----
fp.close()
! def precompilesuite(suite, basepackage=None, edit_modnames=None, output=None,
! verbose=None):
"""Parse a single suite without generating the output. This step is needed
so we can resolve recursive references by suites to enums/comps/etc declared
***************
*** 549,553 ****
findenumsinevent(event, enumsneeded)
! objc = ObjectCompiler(None, basemodule, interact=(edit_modnames is None))
for cls in classes:
objc.compileclass(cls)
--- 580,585 ----
findenumsinevent(event, enumsneeded)
! objc = ObjectCompiler(None, basemodule, interact=(edit_modnames is None),
! verbose=verbose)
for cls in classes:
objc.compileclass(cls)
***************
*** 569,573 ****
def compilesuite((suite, pathname, modname), major, minor, language, script,
! fname, basepackage, precompinfo, interact=1):
"""Generate code for a single suite"""
[name, desc, code, level, version, events, classes, comps, enums] = suite
--- 601,605 ----
def compilesuite((suite, pathname, modname), major, minor, language, script,
! fname, basepackage, precompinfo, interact=1, verbose=None):
"""Generate code for a single suite"""
[name, desc, code, level, version, events, classes, comps, enums] = suite
***************
*** 625,629 ****
fp.write("\tpass\n\n")
! objc = ObjectCompiler(fp, basemodule, precompinfo, interact=interact)
for cls in classes:
objc.compileclass(cls)
--- 657,662 ----
fp.write("\tpass\n\n")
! objc = ObjectCompiler(fp, basemodule, precompinfo, interact=interact,
! verbose=verbose)
for cls in classes:
objc.compileclass(cls)
***************
*** 779,783 ****
class CodeNameMapper:
! def __init__(self, interact=1):
self.code2name = {
"property" : {},
--- 812,816 ----
class CodeNameMapper:
! def __init__(self, interact=1, verbose=None):
self.code2name = {
"property" : {},
***************
*** 795,798 ****
--- 828,832 ----
self.star_imported = 0
self.can_interact = interact
+ self.verbose = verbose
def addnamecode(self, type, name, code):
***************
*** 838,846 ****
class ObjectCompiler:
! def __init__(self, fp, basesuite=None, othernamemappers=None, interact=1):
self.fp = fp
self.basesuite = basesuite
self.can_interact = interact
! self.namemappers = [CodeNameMapper(self.can_interact)]
if othernamemappers:
self.othernamemappers = othernamemappers[:]
--- 872,882 ----
class ObjectCompiler:
! def __init__(self, fp, basesuite=None, othernamemappers=None, interact=1,
! verbose=None):
self.fp = fp
+ self.verbose = verbose
self.basesuite = basesuite
self.can_interact = interact
! self.namemappers = [CodeNameMapper(self.can_interact, self.verbose)]
if othernamemappers:
self.othernamemappers = othernamemappers[:]
***************
*** 848,852 ****
self.othernamemappers = []
if basesuite:
! basemapper = CodeNameMapper(self.can_interact)
basemapper.addmodule(basesuite, '', 1)
self.namemappers.append(basemapper)
--- 884,888 ----
self.othernamemappers = []
if basesuite:
! basemapper = CodeNameMapper(self.can_interact, self.verbose)
basemapper.addmodule(basesuite, '', 1)
self.namemappers.append(basemapper)
***************
*** 882,886 ****
m = None
if not m: return None, None, None
! mapper = CodeNameMapper(self.can_interact)
mapper.addmodule(m, m.__name__, 0)
self.namemappers.append(mapper)
--- 918,922 ----
m = None
if not m: return None, None, None
! mapper = CodeNameMapper(self.can_interact, self.verbose)
mapper.addmodule(m, m.__name__, 0)
self.namemappers.append(mapper)
***************
*** 888,892 ****
def askdefinitionmodule(self, type, code):
if not self.can_interact:
! print "** No definition for %s '%s' found" % (type, code)
return None
path = EasyDialogs.AskFileForSave(message='Where is %s %s declared?'%(type, code))
--- 924,929 ----
def askdefinitionmodule(self, type, code):
if not self.can_interact:
! if self.verbose:
! print >>self.verbose, "** No definition for %s '%s' found" % (type, code)
return None
path = EasyDialogs.AskFileForSave(message='Where is %s %s declared?'%(type, code))
***************
*** 955,959 ****
if self.fp and (elements or len(properties) > 1 or (len(properties) == 1 and
properties[0][1] != 'c@#!')):
! print '** Skip multiple %s of %s (code %s)' % (cname, self.namemappers[0].findcodename('class', code)[0], `code`)
raise RuntimeError, "About to skip non-empty class"
return
--- 992,997 ----
if self.fp and (elements or len(properties) > 1 or (len(properties) == 1 and
properties[0][1] != 'c@#!')):
! if self.verbose:
! print >>self.verbose, '** Skip multiple %s of %s (code %s)' % (cname, self.namemappers[0].findcodename('class', code)[0], `code`)
raise RuntimeError, "About to skip non-empty class"
return