########################################################################
# $Header: /var/local/cvsroot/4Suite/Ft/Lib/DistExt/ModuleFinder.py,v 1.1.2.1 2006/09/24 22:51:19 jkloth Exp $
"""
Utilities to help applications using modulefinder get all of the modules
and data files used throughout 4Suite.
Copyright 2006 Fourthought, Inc. (USA).
Detailed license and copyright information: http://4suite.org/COPYRIGHT
Project home, documentation, distributions: http://4suite.org/
"""
import os
from distutils.util import convert_path,subst_vars
from Ft import GetConfigVar
from Ft.Lib import ImportUtil
from Ft.Lib.DistExt import Dist,Install,InstallConfig
def AddHiddenModules(finder):
# save the original set of module found by modulefinder
default_modules = finder.modules.copy()
# add any modules that cannot be found directly by ModuleFinder
have_imported = True
while have_imported:
have_imported = False
for name in HIDDEN_IMPORTS:
if name in finder.modules:
for name in HIDDEN_IMPORTS[name]:
if name not in finder.modules:
finder.import_hook(name)
have_imported = True
# ensure that all the encodings are found/loaded
if 'encodings' in finder.modules:
finder.import_hook('encodings', None, ['*'])
# get the modules that are not found by the default search
modules = []
for name in finder.modules:
if name not in default_modules:
modules.append(name)
return modules
def GetModuleIncludes(modules):
use_resources = GetConfigVar('RESOURCEBUNDLE')
source_vars = {}
for config_name, var_name in InstallConfig.CONFIG_MAPPING.items():
source_vars[var_name] = GetConfigVar(config_name.upper())
target_vars = Install.GetBundleScheme()
includes = []
for module in DATA_FILES:
if module in modules:
for filespec in DATA_FILES[module]:
source = subst_vars(convert_path(filespec), source_vars)
if use_resources:
resource = ImportUtil.OsPathToResource(source)
source = ImportUtil.GetResourceFilename(module, resource)
target = subst_vars(convert_path(filespec), target_vars)[1:]
includes.append((source, target))
return includes
# This mapping lists a C-extension module's imports. Any updates to an
# extension module's imports should be reflected in this mapping as well.
# This mapping also is used for pure-Python modules that use __import__
# to dynamically load modules.
HIDDEN_IMPORTS = {
# add those from Python itself
'__main__' : ['warnings', 'codecs', 'zipimport', 'unicodedata'],
'codecs' : ['encodings'],
'cPickle' : ['copy_reg'],
'datetime' : ['time'],
'parser' : ['copy_reg'],
'time' : ['_strptime'],
'zipimport' : ['zlib'],
'Ft.Lib.DistExt.Dist' : [ 'Ft.Lib.DistExt.' + name
for name in Dist.Dist.command_mapping.values()
if name is not None
],
'Ft.Ods.Parsers.OqlParserc' : ['re'],
'Ft.Rdf.Parsers.Versa.VersaParserc' : ['cmd',
'Ft.Rdf.Parsers.Versa.ResourceExpressions',
'Ft.Rdf.Parsers.Versa.BooleanExpressions',
'Ft.Rdf.Parsers.Versa.Traversal',
'Ft.Rdf.Parsers.Versa.Literals',
'Ft.Rdf.Parsers.Versa.DataTypes',
'Ft.Rdf.Parsers.Versa.NamedExpressions',
'Ft.Lib.boolean',
],
'Ft.Xml.cDomlettec' : ['cStringIO',
'gc',
'xml.dom',
'Ft.Lib.Uri',
'Ft.Xml',
'Ft.Xml.cDomlette',
'Ft.Xml.XInclude',
'Ft.Xml.XPath.Util',
],
'Ft.Xml.Lib.cStringWriter' : ['cStringIO'],
'Ft.Xml.XPath.XPathParserc' : ['cmd',
'Ft.Xml.XPath.ParsedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedRelativeLocationPath',
'Ft.Xml.XPath.ParsedPredicateList',
'Ft.Xml.XPath.ParsedStep',
'Ft.Xml.XPath.ParsedAxisSpecifier',
'Ft.Xml.XPath.ParsedNodeTest',
'Ft.Xml.XPath.ParsedAbbreviatedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedAbbreviatedRelativeLocationPath',
'Ft.Xml.XPath.ParsedExpr',
],
'Ft.Xml.XPath._conversions' : ['Ft.Lib.boolean',
'Ft.Lib.number',
],
'Ft.Xml.XPointer.XPointerParserc' : ['cmd',
'Ft.Xml.XPointer.XPointer',
],
'Ft.Xml.XPointer.XPtrExprParserc' : ['cmd',
'Ft.Xml.XPath.ParsedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedRelativeLocationPath',
'Ft.Xml.XPath.ParsedPredicateList',
'Ft.Xml.XPath.ParsedStep',
'Ft.Xml.XPath.ParsedAxisSpecifier',
'Ft.Xml.XPath.ParsedNodeTest',
'Ft.Xml.XPath.ParsedAbbreviatedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedAbbreviatedRelativeLocationPath',
'Ft.Xml.XPath.ParsedExpr',
],
'Ft.Xml.Xslt.AvtParserc' : ['cmd',
'Ft.Xml.XPath.ParsedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedRelativeLocationPath',
'Ft.Xml.XPath.ParsedPredicateList',
'Ft.Xml.XPath.ParsedStep',
'Ft.Xml.XPath.ParsedAxisSpecifier',
'Ft.Xml.XPath.ParsedNodeTest',
'Ft.Xml.XPath.ParsedAbbreviatedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedAbbreviatedRelativeLocationPath',
'Ft.Xml.XPath.ParsedExpr',
],
'Ft.Xml.Xslt.StylesheetHandler' : ['Ft.Xml.Xslt.ApplyTemplatesElement',
'Ft.Xml.Xslt.ApplyImportsElement',
'Ft.Xml.Xslt.AttributeElement',
'Ft.Xml.Xslt.AttributeSetElement',
'Ft.Xml.Xslt.CallTemplateElement',
'Ft.Xml.Xslt.ChooseElement',
'Ft.Xml.Xslt.CopyElement',
'Ft.Xml.Xslt.CopyOfElement',
'Ft.Xml.Xslt.CommentElement',
'Ft.Xml.Xslt.ElementElement',
'Ft.Xml.Xslt.ForEachElement',
'Ft.Xml.Xslt.IfElement',
'Ft.Xml.Xslt.MessageElement',
'Ft.Xml.Xslt.NumberElement',
'Ft.Xml.Xslt.ParamElement',
'Ft.Xml.Xslt.ProcessingInstructionElement',
'Ft.Xml.Xslt.SortElement',
'Ft.Xml.Xslt.Stylesheet',
'Ft.Xml.Xslt.TemplateElement',
'Ft.Xml.Xslt.TextElement',
'Ft.Xml.Xslt.VariableElement',
'Ft.Xml.Xslt.ValueOfElement',
'Ft.Xml.Xslt.WithParamElement',
'Ft.Xml.Xslt.OtherXslElement',
'Ft.Xml.Xslt.WhitespaceElements',
],
'Ft.Xml.Xslt.XPatternParserc' : ['cmd',
'Ft.Xml.XPath.ParsedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedRelativeLocationPath',
'Ft.Xml.XPath.ParsedPredicateList',
'Ft.Xml.XPath.ParsedStep',
'Ft.Xml.XPath.ParsedAxisSpecifier',
'Ft.Xml.XPath.ParsedNodeTest',
'Ft.Xml.XPath.ParsedAbbreviatedAbsoluteLocationPath',
'Ft.Xml.XPath.ParsedAbbreviatedRelativeLocationPath',
'Ft.Xml.XPath.ParsedExpr',
'Ft.Xml.Xslt.XPatterns',
],
'Ft.Xml.ThirdParty.Xvif.iframe' : [#'Ft.Xml.ThirdParty.Xvif.iFrameXPath',
#'Ft.Xml.ThirdParty.Xvif.iFrameRegExp',
'Ft.Xml.ThirdParty.Xvif.iFrameRNG',
'Ft.Xml.ThirdParty.Xvif.iFrameXSLT',
'Ft.Xml.ThirdParty.Xvif.iFrameTypes',
'Ft.Xml.ThirdParty.Xvif.iFrameRegFrag',
],
'Ft.Xml.ThirdParty.Xvif.rng' : ['Ft.Xml.ThirdParty.Xvif.rngCoreTypeLib',
'Ft.Xml.ThirdParty.Xvif.wxsTypeLib',
],
}
DATA_FILES = {
'Ft.Lib.DistExt.BuildDocs' : ['$data/Data/Stylesheets/docbook_html.xslt',
'$data/Data/Stylesheets/docbook_html.css',
'$data/Data/Stylesheets/sdocbook_html.xslt',
'$data/Data/Stylesheets/sdocbook_html.css',
'$data/Data/Stylesheets/modules_html.xslt',
'$data/Data/Stylesheets/modules.css',
'$data/Data/Stylesheets/extensions_html.xslt',
'$data/Data/Stylesheets/extensions.xslt',
'$data/Data/Stylesheets/commandline_html.xslt',
'$data/Data/Stylesheets/commandline.xslt',
],
'Ft.Lib.DistExt.BuildScripts' : ['$lib/Ft/Lib/DistExt/stubmain.exe',
],
'Ft.Xml.Catalog' : ['$data/default.cat',
'$data/Schemata/catalog.dtd',
'$data/Schemata/sdocbook.dtd',
'$data/Schemata/xbel-1.0.dtd',
'$data/Schemata/xhtml1-strict.dtd',
'$data/Schemata/xhtml1-transitional.dtd',
'$data/Schemata/xhtml-lat1.ent',
'$data/Schemata/xhtml-special.ent',
'$data/Schemata/xhtml-symbol.ent',
'$data/Schemata/xsa.dtd',
],
}
|