summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.travis.yml37
-rw-r--r--ANNOUNCE.rst52
-rw-r--r--Cheetah/CacheRegion.py12
-rw-r--r--Cheetah/CacheStore.py13
-rw-r--r--Cheetah/CheetahWrapper.py181
-rw-r--r--Cheetah/Compiler.py763
-rwxr-xr-xCheetah/DirectiveAnalyzer.py19
-rw-r--r--Cheetah/Django.py1
-rw-r--r--Cheetah/DummyTransaction.py25
-rw-r--r--Cheetah/ErrorCatchers.py14
-rw-r--r--Cheetah/FileUtils.py47
-rw-r--r--Cheetah/Filters.py54
-rw-r--r--[-rwxr-xr-x]Cheetah/ImportHooks.py57
-rw-r--r--Cheetah/ImportManager.py86
-rw-r--r--Cheetah/Macros/I18n.py22
-rwxr-xr-xCheetah/NameMapper.py188
-rw-r--r--Cheetah/Parser.py749
-rwxr-xr-x[-rw-r--r--]Cheetah/Servlet.py6
-rw-r--r--Cheetah/SettingsManager.py85
-rw-r--r--Cheetah/SourceReader.py71
-rw-r--r--Cheetah/Template.py635
-rw-r--r--Cheetah/TemplateCmdLineIface.py12
-rwxr-xr-xCheetah/Templates/SkeletonPage.py2
-rw-r--r--Cheetah/Templates/_SkeletonPage.py114
-rw-r--r--Cheetah/Templates/__init__.py1
-rw-r--r--Cheetah/Tests/Analyzer.py1
-rw-r--r--Cheetah/Tests/Boinker.py4
-rwxr-xr-xCheetah/Tests/CheetahWrapper.py79
-rwxr-xr-xCheetah/Tests/Cheps.py4
-rwxr-xr-xCheetah/Tests/Filters.py12
-rwxr-xr-x[-rw-r--r--]Cheetah/Tests/Misc.py10
-rwxr-xr-xCheetah/Tests/NameMapper.py99
-rwxr-xr-xCheetah/Tests/NameMapper_pure.py16
-rwxr-xr-xCheetah/Tests/Parser.py26
-rwxr-xr-xCheetah/Tests/Performance.py60
-rw-r--r--Cheetah/Tests/Pinger.py4
-rwxr-xr-xCheetah/Tests/Regressions.py66
-rwxr-xr-xCheetah/Tests/SyntaxAndOutput.py566
-rwxr-xr-xCheetah/Tests/Template.py212
-rwxr-xr-xCheetah/Tests/Test.py12
-rwxr-xr-xCheetah/Tests/Unicode.py54
-rw-r--r--Cheetah/Tests/xmlrunner.py71
-rw-r--r--Cheetah/Tools/CGITemplate.py6
-rw-r--r--Cheetah/Tools/MondoReport.py138
-rw-r--r--Cheetah/Tools/RecursiveNull.py8
-rw-r--r--Cheetah/Tools/SiteHierarchy.py57
-rw-r--r--Cheetah/Tools/turbocheetah/cheetahsupport.py11
-rw-r--r--Cheetah/Tools/turbocheetah/tests/test_template.py5
-rw-r--r--Cheetah/Unspecified.py1
-rw-r--r--Cheetah/Utils/Indenter.py30
-rw-r--r--Cheetah/Utils/Misc.py6
-rw-r--r--Cheetah/Utils/WebInputMixin.py11
-rw-r--r--Cheetah/Utils/htmlDecode.py1
-rw-r--r--Cheetah/Utils/htmlEncode.py1
-rw-r--r--Cheetah/Utils/statprof.py78
-rw-r--r--Cheetah/Version.py15
-rw-r--r--Cheetah/__init__.py7
-rw-r--r--Cheetah/convertTmplPathToModuleName.py12
-rw-r--r--Cheetah3.egg-info/PKG-INFO14
-rw-r--r--Cheetah3.egg-info/SOURCES.txt775
-rw-r--r--MANIFEST.in6
-rw-r--r--PKG-INFO14
-rw-r--r--README.rst2
-rw-r--r--SetupConfig.py52
-rw-r--r--SetupTools.py59
-rw-r--r--TODO256
-rw-r--r--docs/Makefile (renamed from www/Makefile)0
-rw-r--r--docs/api/Cheetah.CacheRegion.rst (renamed from www/api/Cheetah.CacheRegion.rst)4
-rw-r--r--docs/api/Cheetah.CacheStore.rst (renamed from www/api/Cheetah.CacheStore.rst)4
-rw-r--r--docs/api/Cheetah.CheetahWrapper.rst (renamed from www/api/Cheetah.CheetahWrapper.rst)4
-rw-r--r--docs/api/Cheetah.Compiler.rst (renamed from www/api/Cheetah.Compiler.rst)4
-rw-r--r--docs/api/Cheetah.DirectiveAnalyzer.rst (renamed from www/api/Cheetah.DirectiveAnalyzer.rst)4
-rw-r--r--docs/api/Cheetah.Django.rst (renamed from www/api/Cheetah.Django.rst)4
-rw-r--r--docs/api/Cheetah.DummyTransaction.rst (renamed from www/api/Cheetah.DummyTransaction.rst)4
-rw-r--r--docs/api/Cheetah.ErrorCatchers.rst (renamed from www/api/Cheetah.ErrorCatchers.rst)4
-rw-r--r--docs/api/Cheetah.FileUtils.rst (renamed from www/api/Cheetah.FileUtils.rst)4
-rw-r--r--docs/api/Cheetah.Filters.rst (renamed from www/api/Cheetah.Filters.rst)4
-rw-r--r--docs/api/Cheetah.ImportHooks.rst (renamed from www/api/Cheetah.ImportHooks.rst)4
-rw-r--r--docs/api/Cheetah.ImportManager.rst (renamed from www/api/Cheetah.ImportManager.rst)4
-rw-r--r--docs/api/Cheetah.Macros.I18n.rst (renamed from www/api/Cheetah.Macros.I18n.rst)4
-rw-r--r--docs/api/Cheetah.Macros.rst (renamed from www/api/Cheetah.Macros.rst)4
-rw-r--r--docs/api/Cheetah.NameMapper.rst (renamed from www/api/Cheetah.NameMapper.rst)4
-rw-r--r--docs/api/Cheetah.Parser.rst (renamed from www/api/Cheetah.Parser.rst)4
-rw-r--r--docs/api/Cheetah.Servlet.rst (renamed from www/api/Cheetah.Servlet.rst)4
-rw-r--r--docs/api/Cheetah.SettingsManager.rst (renamed from www/api/Cheetah.SettingsManager.rst)4
-rw-r--r--docs/api/Cheetah.SourceReader.rst (renamed from www/api/Cheetah.SourceReader.rst)4
-rw-r--r--docs/api/Cheetah.Template.rst (renamed from www/api/Cheetah.Template.rst)4
-rw-r--r--docs/api/Cheetah.TemplateCmdLineIface.rst (renamed from www/api/Cheetah.TemplateCmdLineIface.rst)4
-rw-r--r--docs/api/Cheetah.Templates.SkeletonPage.rst (renamed from www/api/Cheetah.Templates.SkeletonPage.rst)4
-rw-r--r--docs/api/Cheetah.Templates.rst (renamed from www/api/Cheetah.Templates.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Analyzer.rst (renamed from www/api/Cheetah.Tests.Analyzer.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Boinker.rst (renamed from www/api/Cheetah.Tests.Boinker.rst)4
-rw-r--r--docs/api/Cheetah.Tests.CheetahWrapper.rst (renamed from www/api/Cheetah.Tests.CheetahWrapper.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Cheps.rst (renamed from www/api/Cheetah.Tests.Cheps.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Filters.rst (renamed from www/api/Cheetah.Tests.Filters.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Misc.rst (renamed from www/api/Cheetah.Tests.Misc.rst)4
-rw-r--r--docs/api/Cheetah.Tests.NameMapper.rst (renamed from www/api/Cheetah.Tests.NameMapper.rst)4
-rw-r--r--docs/api/Cheetah.Tests.NameMapper_pure.rst7
-rw-r--r--docs/api/Cheetah.Tests.Parser.rst (renamed from www/api/Cheetah.Tests.Parser.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Performance.rst (renamed from www/api/Cheetah.Tests.Performance.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Pinger.rst (renamed from www/api/Cheetah.Tests.Pinger.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Regressions.rst (renamed from www/api/Cheetah.Tests.Regressions.rst)4
-rw-r--r--docs/api/Cheetah.Tests.SyntaxAndOutput.rst (renamed from www/api/Cheetah.Tests.SyntaxAndOutput.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Template.rst (renamed from www/api/Cheetah.Tests.Template.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Test.rst (renamed from www/api/Cheetah.Tests.Test.rst)4
-rw-r--r--docs/api/Cheetah.Tests.Unicode.rst (renamed from www/api/Cheetah.Tests.Unicode.rst)4
-rw-r--r--docs/api/Cheetah.Tests.rst (renamed from www/api/Cheetah.Tests.rst)5
-rw-r--r--docs/api/Cheetah.Tests.xmlrunner.rst (renamed from www/api/Cheetah.Tests.xmlrunner.rst)4
-rw-r--r--docs/api/Cheetah.Tools.CGITemplate.rst (renamed from www/api/Cheetah.Tools.CGITemplate.rst)4
-rw-r--r--docs/api/Cheetah.Tools.MondoReport.rst (renamed from www/api/Cheetah.Tools.MondoReport.rst)4
-rw-r--r--docs/api/Cheetah.Tools.RecursiveNull.rst (renamed from www/api/Cheetah.Tools.RecursiveNull.rst)4
-rw-r--r--docs/api/Cheetah.Tools.SiteHierarchy.rst (renamed from www/api/Cheetah.Tools.SiteHierarchy.rst)4
-rw-r--r--docs/api/Cheetah.Tools.rst (renamed from www/api/Cheetah.Tools.rst)4
-rw-r--r--docs/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst (renamed from www/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst)4
-rw-r--r--docs/api/Cheetah.Tools.turbocheetah.rst (renamed from www/api/Cheetah.Tools.turbocheetah.rst)4
-rw-r--r--docs/api/Cheetah.Tools.turbocheetah.tests.rst (renamed from www/api/Cheetah.Tools.turbocheetah.tests.rst)4
-rw-r--r--docs/api/Cheetah.Tools.turbocheetah.tests.test_template.rst (renamed from www/api/Cheetah.Tools.turbocheetah.tests.test_template.rst)4
-rw-r--r--docs/api/Cheetah.Unspecified.rst (renamed from www/api/Cheetah.Unspecified.rst)4
-rw-r--r--docs/api/Cheetah.Utils.Indenter.rst (renamed from www/api/Cheetah.Utils.Indenter.rst)4
-rw-r--r--docs/api/Cheetah.Utils.Misc.rst (renamed from www/api/Cheetah.Utils.Misc.rst)4
-rw-r--r--docs/api/Cheetah.Utils.WebInputMixin.rst (renamed from www/api/Cheetah.Utils.WebInputMixin.rst)4
-rw-r--r--docs/api/Cheetah.Utils.htmlDecode.rst (renamed from www/api/Cheetah.Utils.htmlDecode.rst)4
-rw-r--r--docs/api/Cheetah.Utils.htmlEncode.rst (renamed from www/api/Cheetah.Utils.htmlEncode.rst)4
-rw-r--r--docs/api/Cheetah.Utils.rst (renamed from www/api/Cheetah.Utils.rst)4
-rw-r--r--docs/api/Cheetah.Utils.statprof.rst (renamed from www/api/Cheetah.Utils.statprof.rst)4
-rw-r--r--docs/api/Cheetah.Version.rst (renamed from www/api/Cheetah.Version.rst)4
-rw-r--r--docs/api/Cheetah.compat.rst (renamed from www/api/Cheetah.compat.rst)4
-rw-r--r--docs/api/Cheetah.convertTmplPathToModuleName.rst (renamed from www/api/Cheetah.convertTmplPathToModuleName.rst)4
-rw-r--r--docs/api/Cheetah.rst (renamed from www/api/Cheetah.rst)0
-rw-r--r--docs/api/modules.rst (renamed from www/api/modules.rst)0
-rw-r--r--docs/authors.rst (renamed from www/authors.rst)1
-rw-r--r--docs/chep.rst (renamed from www/chep.rst)0
-rw-r--r--docs/cheps/1_chep.rst (renamed from www/cheps/1_chep.rst)0
-rw-r--r--docs/cheps/2_import.rst (renamed from www/cheps/2_import.rst)0
-rw-r--r--docs/cheps/3_super.rst (renamed from www/cheps/3_super.rst)0
-rw-r--r--docs/conf.py (renamed from www/conf.py)78
-rw-r--r--docs/dev_guide/bnf.rst (renamed from www/dev_guide/bnf.rst)0
-rw-r--r--docs/dev_guide/cache.rst (renamed from www/dev_guide/cache.rst)0
-rw-r--r--docs/dev_guide/comments.rst (renamed from www/dev_guide/comments.rst)0
-rw-r--r--docs/dev_guide/compiler.rst (renamed from www/dev_guide/compiler.rst)0
-rw-r--r--docs/dev_guide/design.rst (renamed from www/dev_guide/design.rst)0
-rw-r--r--docs/dev_guide/errorHandling.rst (renamed from www/dev_guide/errorHandling.rst)0
-rw-r--r--docs/dev_guide/files.rst (renamed from www/dev_guide/files.rst)0
-rw-r--r--docs/dev_guide/flowControl.rst (renamed from www/dev_guide/flowControl.rst)0
-rw-r--r--docs/dev_guide/history.rst (renamed from www/dev_guide/history.rst)0
-rw-r--r--docs/dev_guide/index.rst (renamed from www/dev_guide/index.rst)0
-rw-r--r--docs/dev_guide/inheritanceEtc.rst (renamed from www/dev_guide/inheritanceEtc.rst)0
-rw-r--r--docs/dev_guide/introduction.rst (renamed from www/dev_guide/introduction.rst)0
-rw-r--r--docs/dev_guide/output.rst (renamed from www/dev_guide/output.rst)0
-rw-r--r--docs/dev_guide/parser.rst (renamed from www/dev_guide/parser.rst)0
-rw-r--r--docs/dev_guide/parserInstructions.rst (renamed from www/dev_guide/parserInstructions.rst)0
-rw-r--r--docs/dev_guide/patching.rst (renamed from www/dev_guide/patching.rst)2
-rw-r--r--docs/dev_guide/placeholders.rst (renamed from www/dev_guide/placeholders.rst)0
-rw-r--r--docs/dev_guide/pyModules.rst (renamed from www/dev_guide/pyModules.rst)0
-rw-r--r--docs/dev_guide/safeDelegation.rst (renamed from www/dev_guide/safeDelegation.rst)0
-rw-r--r--docs/dev_guide/template.rst (renamed from www/dev_guide/template.rst)0
-rw-r--r--docs/developers.rst (renamed from www/developers.rst)0
-rw-r--r--docs/documentation.rst (renamed from www/documentation.rst)0
-rw-r--r--docs/download.rst (renamed from www/download.rst)0
-rwxr-xr-xdocs/genapidocs (renamed from www/genapidocs)2
-rw-r--r--docs/html/_sources/api/Cheetah.CacheRegion.rst.txt (renamed from www/html/_sources/api/Cheetah.CacheRegion.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.CacheStore.rst.txt (renamed from www/html/_sources/api/Cheetah.CacheStore.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt (renamed from www/html/_sources/api/Cheetah.CheetahWrapper.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Compiler.rst.txt (renamed from www/html/_sources/api/Cheetah.Compiler.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt (renamed from www/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Django.rst.txt (renamed from www/html/_sources/api/Cheetah.Django.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt (renamed from www/html/_sources/api/Cheetah.DummyTransaction.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt (renamed from www/html/_sources/api/Cheetah.ErrorCatchers.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.FileUtils.rst.txt (renamed from www/html/_sources/api/Cheetah.FileUtils.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Filters.rst.txt (renamed from www/html/_sources/api/Cheetah.Filters.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.ImportHooks.rst.txt (renamed from www/html/_sources/api/Cheetah.ImportHooks.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.ImportManager.rst.txt (renamed from www/html/_sources/api/Cheetah.ImportManager.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt (renamed from www/html/_sources/api/Cheetah.Macros.I18n.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Macros.rst.txt (renamed from www/html/_sources/api/Cheetah.Macros.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.NameMapper.rst.txt (renamed from www/html/_sources/api/Cheetah.NameMapper.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Parser.rst.txt (renamed from www/html/_sources/api/Cheetah.Parser.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Servlet.rst.txt (renamed from www/html/_sources/api/Cheetah.Servlet.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.SettingsManager.rst.txt (renamed from www/html/_sources/api/Cheetah.SettingsManager.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.SourceReader.rst.txt (renamed from www/html/_sources/api/Cheetah.SourceReader.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Template.rst.txt (renamed from www/html/_sources/api/Cheetah.Template.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt (renamed from www/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt (renamed from www/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Templates.rst.txt (renamed from www/html/_sources/api/Cheetah.Templates.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Boinker.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Cheps.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Filters.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Misc.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt7
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Parser.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Performance.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Pinger.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Regressions.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Template.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Template.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Test.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Test.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.Unicode.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.rst.txt)5
-rw-r--r--docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt (renamed from www/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt (renamed from www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Unspecified.rst.txt (renamed from www/html/_sources/api/Cheetah.Unspecified.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.Indenter.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.Misc.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt (renamed from www/html/_sources/api/Cheetah.Utils.statprof.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.Version.rst.txt (renamed from www/html/_sources/api/Cheetah.Version.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.compat.rst.txt (renamed from www/html/_sources/api/Cheetah.compat.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt (renamed from www/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt)4
-rw-r--r--docs/html/_sources/api/Cheetah.rst.txt (renamed from www/html/_sources/api/Cheetah.rst.txt)0
-rw-r--r--docs/html/_sources/api/modules.rst.txt (renamed from www/html/_sources/api/modules.rst.txt)0
-rw-r--r--docs/html/_sources/authors.rst.txt (renamed from www/html/_sources/authors.rst.txt)1
-rw-r--r--docs/html/_sources/chep.rst.txt (renamed from www/html/_sources/chep.rst.txt)0
-rw-r--r--docs/html/_sources/cheps/1_chep.rst.txt (renamed from www/html/_sources/cheps/1_chep.rst.txt)0
-rw-r--r--docs/html/_sources/cheps/2_import.rst.txt (renamed from www/html/_sources/cheps/2_import.rst.txt)0
-rw-r--r--docs/html/_sources/cheps/3_super.rst.txt (renamed from www/html/_sources/cheps/3_super.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/bnf.rst.txt (renamed from www/html/_sources/dev_guide/bnf.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/cache.rst.txt (renamed from www/html/_sources/dev_guide/cache.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/comments.rst.txt (renamed from www/html/_sources/dev_guide/comments.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/compiler.rst.txt (renamed from www/html/_sources/dev_guide/compiler.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/design.rst.txt (renamed from www/html/_sources/dev_guide/design.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/errorHandling.rst.txt (renamed from www/html/_sources/dev_guide/errorHandling.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/files.rst.txt (renamed from www/html/_sources/dev_guide/files.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/flowControl.rst.txt (renamed from www/html/_sources/dev_guide/flowControl.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/history.rst.txt (renamed from www/html/_sources/dev_guide/history.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/index.rst.txt (renamed from www/html/_sources/dev_guide/index.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/inheritanceEtc.rst.txt (renamed from www/html/_sources/dev_guide/inheritanceEtc.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/introduction.rst.txt (renamed from www/html/_sources/dev_guide/introduction.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/output.rst.txt (renamed from www/html/_sources/dev_guide/output.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/parser.rst.txt (renamed from www/html/_sources/dev_guide/parser.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/parserInstructions.rst.txt (renamed from www/html/_sources/dev_guide/parserInstructions.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/patching.rst.txt (renamed from www/html/_sources/dev_guide/patching.rst.txt)2
-rw-r--r--docs/html/_sources/dev_guide/placeholders.rst.txt (renamed from www/html/_sources/dev_guide/placeholders.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/pyModules.rst.txt (renamed from www/html/_sources/dev_guide/pyModules.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/safeDelegation.rst.txt (renamed from www/html/_sources/dev_guide/safeDelegation.rst.txt)0
-rw-r--r--docs/html/_sources/dev_guide/template.rst.txt (renamed from www/html/_sources/dev_guide/template.rst.txt)0
-rw-r--r--docs/html/_sources/developers.rst.txt (renamed from www/html/_sources/developers.rst.txt)0
-rw-r--r--docs/html/_sources/documentation.rst.txt (renamed from www/html/_sources/documentation.rst.txt)0
-rw-r--r--docs/html/_sources/download.rst.txt (renamed from www/html/_sources/download.rst.txt)0
-rw-r--r--docs/html/_sources/index.rst.txt (renamed from www/html/_sources/index.rst.txt)0
-rw-r--r--docs/html/_sources/news.rst.txt (renamed from www/html/_sources/news.rst.txt)28
-rw-r--r--docs/html/_sources/news2.rst.txt (renamed from www/html/_sources/news2.rst.txt)0
-rw-r--r--docs/html/_sources/recipes/inheritance.rst.txt (renamed from www/html/_sources/recipes/inheritance.rst.txt)0
-rw-r--r--docs/html/_sources/recipes/precompiled.rst.txt (renamed from www/html/_sources/recipes/precompiled.rst.txt)0
-rw-r--r--docs/html/_sources/recipes/staticmethod.rst.txt (renamed from www/html/_sources/recipes/staticmethod.rst.txt)0
-rw-r--r--docs/html/_sources/recipes/writing_a_recipe.rst.txt (renamed from www/html/_sources/recipes/writing_a_recipe.rst.txt)0
-rw-r--r--docs/html/_sources/roadmap.rst.txt (renamed from www/html/_sources/roadmap.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/comments.rst.txt (renamed from www/html/_sources/users_guide/comments.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/comparisons.rst.txt (renamed from www/html/_sources/users_guide/comparisons.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/editors.rst.txt (renamed from www/html/_sources/users_guide/editors.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/errorHandling.rst.txt (renamed from www/html/_sources/users_guide/errorHandling.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/examples.rst.txt (renamed from www/html/_sources/users_guide/examples.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/flowControl.rst.txt (renamed from www/html/_sources/users_guide/flowControl.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/gettingStarted.rst.txt (renamed from www/html/_sources/users_guide/gettingStarted.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/glossary.rst.txt (renamed from www/html/_sources/users_guide/glossary.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/index.rst.txt (renamed from www/html/_sources/users_guide/index.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/inheritanceEtc.rst.txt (renamed from www/html/_sources/users_guide/inheritanceEtc.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/intro.rst.txt (renamed from www/html/_sources/users_guide/intro.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/language.rst.txt (renamed from www/html/_sources/users_guide/language.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/libraries.rst.txt (renamed from www/html/_sources/users_guide/libraries.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/links.rst.txt (renamed from www/html/_sources/users_guide/links.rst.txt)3
-rw-r--r--docs/html/_sources/users_guide/nonHtml.rst.txt (renamed from www/html/_sources/users_guide/nonHtml.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/otherHtml.rst.txt (renamed from www/html/_sources/users_guide/otherHtml.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/output.rst.txt (renamed from www/html/_sources/users_guide/output.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/parserInstructions.rst.txt (renamed from www/html/_sources/users_guide/parserInstructions.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/tipsAndTricks.rst.txt (renamed from www/html/_sources/users_guide/tipsAndTricks.rst.txt)0
-rw-r--r--docs/html/_sources/users_guide/webware.rst.txt (renamed from www/html/_sources/users_guide/webware.rst.txt)0
-rw-r--r--docs/html/_static/ajax-loader.gif (renamed from www/html/_static/ajax-loader.gif)bin673 -> 673 bytes
-rw-r--r--docs/html/_static/basic.css (renamed from www/html/_static/basic.css)0
-rw-r--r--docs/html/_static/comment-bright.png (renamed from www/html/_static/comment-bright.png)bin756 -> 756 bytes
-rw-r--r--docs/html/_static/comment-close.png (renamed from www/html/_static/comment-close.png)bin829 -> 829 bytes
-rw-r--r--docs/html/_static/comment.png (renamed from www/html/_static/comment.png)bin641 -> 641 bytes
-rw-r--r--docs/html/_static/contents.png (renamed from www/html/_static/contents.png)bin107 -> 107 bytes
-rw-r--r--docs/html/_static/doctools.js (renamed from www/html/_static/doctools.js)0
-rw-r--r--docs/html/_static/down-pressed.png (renamed from www/html/_static/down-pressed.png)bin222 -> 222 bytes
-rw-r--r--docs/html/_static/down.png (renamed from www/html/_static/down.png)bin202 -> 202 bytes
-rw-r--r--docs/html/_static/file.png (renamed from www/html/_static/file.png)bin286 -> 286 bytes
-rw-r--r--docs/html/_static/jquery-3.1.0.js (renamed from www/html/_static/jquery-3.1.0.js)0
-rw-r--r--docs/html/_static/jquery.js (renamed from www/html/_static/jquery.js)0
-rw-r--r--docs/html/_static/minus.png (renamed from www/html/_static/minus.png)bin90 -> 90 bytes
-rw-r--r--docs/html/_static/navigation.png (renamed from www/html/_static/navigation.png)bin120 -> 120 bytes
-rw-r--r--docs/html/_static/plus.png (renamed from www/html/_static/plus.png)bin90 -> 90 bytes
-rw-r--r--docs/html/_static/pygments.css (renamed from www/html/_static/pygments.css)0
-rw-r--r--docs/html/_static/searchtools.js (renamed from www/html/_static/searchtools.js)0
-rw-r--r--docs/html/_static/sphinxdoc.css (renamed from www/html/_static/sphinxdoc.css)0
-rw-r--r--docs/html/_static/underscore-1.3.1.js (renamed from www/html/_static/underscore-1.3.1.js)0
-rw-r--r--docs/html/_static/underscore.js (renamed from www/html/_static/underscore.js)0
-rw-r--r--docs/html/_static/up-pressed.png (renamed from www/html/_static/up-pressed.png)bin214 -> 214 bytes
-rw-r--r--docs/html/_static/up.png (renamed from www/html/_static/up.png)bin203 -> 203 bytes
-rw-r--r--docs/html/_static/websupport.js (renamed from www/html/_static/websupport.js)0
-rw-r--r--docs/html/api/Cheetah.CacheRegion.html (renamed from www/html/api/Cheetah.CacheRegion.html)10
-rw-r--r--docs/html/api/Cheetah.CacheStore.html (renamed from www/html/api/Cheetah.CacheStore.html)4
-rw-r--r--docs/html/api/Cheetah.CheetahWrapper.html (renamed from www/html/api/Cheetah.CheetahWrapper.html)4
-rw-r--r--docs/html/api/Cheetah.Compiler.html (renamed from www/html/api/Cheetah.Compiler.html)10
-rw-r--r--docs/html/api/Cheetah.DirectiveAnalyzer.html (renamed from www/html/api/Cheetah.DirectiveAnalyzer.html)4
-rw-r--r--docs/html/api/Cheetah.Django.html (renamed from www/html/api/Cheetah.Django.html)4
-rw-r--r--docs/html/api/Cheetah.DummyTransaction.html (renamed from www/html/api/Cheetah.DummyTransaction.html)4
-rw-r--r--docs/html/api/Cheetah.ErrorCatchers.html (renamed from www/html/api/Cheetah.ErrorCatchers.html)4
-rw-r--r--docs/html/api/Cheetah.FileUtils.html (renamed from www/html/api/Cheetah.FileUtils.html)6
-rw-r--r--docs/html/api/Cheetah.Filters.html (renamed from www/html/api/Cheetah.Filters.html)32
-rw-r--r--docs/html/api/Cheetah.ImportHooks.html (renamed from www/html/api/Cheetah.ImportHooks.html)4
-rw-r--r--docs/html/api/Cheetah.ImportManager.html (renamed from www/html/api/Cheetah.ImportManager.html)20
-rw-r--r--docs/html/api/Cheetah.Macros.I18n.html (renamed from www/html/api/Cheetah.Macros.I18n.html)4
-rw-r--r--docs/html/api/Cheetah.Macros.html (renamed from www/html/api/Cheetah.Macros.html)4
-rw-r--r--docs/html/api/Cheetah.NameMapper.html (renamed from www/html/api/Cheetah.NameMapper.html)29
-rw-r--r--docs/html/api/Cheetah.Parser.html (renamed from www/html/api/Cheetah.Parser.html)4
-rw-r--r--docs/html/api/Cheetah.Servlet.html (renamed from www/html/api/Cheetah.Servlet.html)4
-rw-r--r--docs/html/api/Cheetah.SettingsManager.html (renamed from www/html/api/Cheetah.SettingsManager.html)8
-rw-r--r--docs/html/api/Cheetah.SourceReader.html (renamed from www/html/api/Cheetah.SourceReader.html)4
-rw-r--r--docs/html/api/Cheetah.Template.html (renamed from www/html/api/Cheetah.Template.html)195
-rw-r--r--docs/html/api/Cheetah.TemplateCmdLineIface.html (renamed from www/html/api/Cheetah.TemplateCmdLineIface.html)4
-rw-r--r--docs/html/api/Cheetah.Templates.SkeletonPage.html (renamed from www/html/api/Cheetah.Templates.SkeletonPage.html)4
-rw-r--r--docs/html/api/Cheetah.Templates.html (renamed from www/html/api/Cheetah.Templates.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Analyzer.html (renamed from www/html/api/Cheetah.Tests.Analyzer.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Boinker.html (renamed from www/html/api/Cheetah.Tests.Boinker.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.CheetahWrapper.html (renamed from www/html/api/Cheetah.Tests.CheetahWrapper.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Cheps.html (renamed from www/html/api/Cheetah.Tests.Cheps.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Filters.html (renamed from www/html/api/Cheetah.Tests.Filters.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Misc.html (renamed from www/html/api/Cheetah.Tests.Misc.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.NameMapper.html (renamed from www/html/api/Cheetah.Tests.NameMapper.html)30
-rw-r--r--docs/html/api/Cheetah.Tests.NameMapper_pure.html116
-rw-r--r--docs/html/api/Cheetah.Tests.Parser.html (renamed from www/html/api/Cheetah.Tests.Parser.html)13
-rw-r--r--docs/html/api/Cheetah.Tests.Performance.html (renamed from www/html/api/Cheetah.Tests.Performance.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Pinger.html (renamed from www/html/api/Cheetah.Tests.Pinger.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Regressions.html (renamed from www/html/api/Cheetah.Tests.Regressions.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.SyntaxAndOutput.html (renamed from www/html/api/Cheetah.Tests.SyntaxAndOutput.html)92
-rw-r--r--docs/html/api/Cheetah.Tests.Template.html (renamed from www/html/api/Cheetah.Tests.Template.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.Test.html (renamed from www/html/api/Cheetah.Tests.Test.html)7
-rw-r--r--docs/html/api/Cheetah.Tests.Unicode.html (renamed from www/html/api/Cheetah.Tests.Unicode.html)4
-rw-r--r--docs/html/api/Cheetah.Tests.html (renamed from www/html/api/Cheetah.Tests.html)5
-rw-r--r--docs/html/api/Cheetah.Tests.xmlrunner.html (renamed from www/html/api/Cheetah.Tests.xmlrunner.html)9
-rw-r--r--docs/html/api/Cheetah.Tools.CGITemplate.html (renamed from www/html/api/Cheetah.Tools.CGITemplate.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.MondoReport.html (renamed from www/html/api/Cheetah.Tools.MondoReport.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.RecursiveNull.html (renamed from www/html/api/Cheetah.Tools.RecursiveNull.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.SiteHierarchy.html (renamed from www/html/api/Cheetah.Tools.SiteHierarchy.html)8
-rw-r--r--docs/html/api/Cheetah.Tools.html (renamed from www/html/api/Cheetah.Tools.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html (renamed from www/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.html (renamed from www/html/api/Cheetah.Tools.turbocheetah.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.tests.html (renamed from www/html/api/Cheetah.Tools.turbocheetah.tests.html)4
-rw-r--r--docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html (renamed from www/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html)4
-rw-r--r--docs/html/api/Cheetah.Unspecified.html (renamed from www/html/api/Cheetah.Unspecified.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.Indenter.html (renamed from www/html/api/Cheetah.Utils.Indenter.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.Misc.html (renamed from www/html/api/Cheetah.Utils.Misc.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.WebInputMixin.html (renamed from www/html/api/Cheetah.Utils.WebInputMixin.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.html (renamed from www/html/api/Cheetah.Utils.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.htmlDecode.html (renamed from www/html/api/Cheetah.Utils.htmlDecode.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.htmlEncode.html (renamed from www/html/api/Cheetah.Utils.htmlEncode.html)4
-rw-r--r--docs/html/api/Cheetah.Utils.statprof.html (renamed from www/html/api/Cheetah.Utils.statprof.html)4
-rw-r--r--docs/html/api/Cheetah.Version.html (renamed from www/html/api/Cheetah.Version.html)4
-rw-r--r--docs/html/api/Cheetah.compat.html (renamed from www/html/api/Cheetah.compat.html)4
-rw-r--r--docs/html/api/Cheetah.convertTmplPathToModuleName.html (renamed from www/html/api/Cheetah.convertTmplPathToModuleName.html)4
-rw-r--r--docs/html/api/Cheetah.html (renamed from www/html/api/Cheetah.html)10
-rw-r--r--docs/html/api/modules.html (renamed from www/html/api/modules.html)4
-rw-r--r--docs/html/authors.html (renamed from www/html/authors.html)5
-rw-r--r--docs/html/chep.html (renamed from www/html/chep.html)4
-rw-r--r--docs/html/cheps/1_chep.html (renamed from www/html/cheps/1_chep.html)4
-rw-r--r--docs/html/cheps/2_import.html (renamed from www/html/cheps/2_import.html)4
-rw-r--r--docs/html/cheps/3_super.html (renamed from www/html/cheps/3_super.html)4
-rw-r--r--docs/html/dev_guide/bnf.html (renamed from www/html/dev_guide/bnf.html)4
-rw-r--r--docs/html/dev_guide/cache.html (renamed from www/html/dev_guide/cache.html)4
-rw-r--r--docs/html/dev_guide/comments.html (renamed from www/html/dev_guide/comments.html)4
-rw-r--r--docs/html/dev_guide/compiler.html (renamed from www/html/dev_guide/compiler.html)4
-rw-r--r--docs/html/dev_guide/design.html (renamed from www/html/dev_guide/design.html)4
-rw-r--r--docs/html/dev_guide/errorHandling.html (renamed from www/html/dev_guide/errorHandling.html)4
-rw-r--r--docs/html/dev_guide/files.html (renamed from www/html/dev_guide/files.html)4
-rw-r--r--docs/html/dev_guide/flowControl.html (renamed from www/html/dev_guide/flowControl.html)4
-rw-r--r--docs/html/dev_guide/history.html (renamed from www/html/dev_guide/history.html)4
-rw-r--r--docs/html/dev_guide/index.html (renamed from www/html/dev_guide/index.html)4
-rw-r--r--docs/html/dev_guide/inheritanceEtc.html (renamed from www/html/dev_guide/inheritanceEtc.html)4
-rw-r--r--docs/html/dev_guide/introduction.html (renamed from www/html/dev_guide/introduction.html)4
-rw-r--r--docs/html/dev_guide/output.html (renamed from www/html/dev_guide/output.html)4
-rw-r--r--docs/html/dev_guide/parser.html (renamed from www/html/dev_guide/parser.html)4
-rw-r--r--docs/html/dev_guide/parserInstructions.html (renamed from www/html/dev_guide/parserInstructions.html)4
-rw-r--r--docs/html/dev_guide/patching.html (renamed from www/html/dev_guide/patching.html)6
-rw-r--r--docs/html/dev_guide/placeholders.html (renamed from www/html/dev_guide/placeholders.html)4
-rw-r--r--docs/html/dev_guide/pyModules.html (renamed from www/html/dev_guide/pyModules.html)4
-rw-r--r--docs/html/dev_guide/safeDelegation.html (renamed from www/html/dev_guide/safeDelegation.html)4
-rw-r--r--docs/html/dev_guide/template.html (renamed from www/html/dev_guide/template.html)4
-rw-r--r--docs/html/developers.html (renamed from www/html/developers.html)4
-rw-r--r--docs/html/documentation.html (renamed from www/html/documentation.html)4
-rw-r--r--docs/html/download.html (renamed from www/html/download.html)4
-rw-r--r--docs/html/genindex.html (renamed from www/html/genindex.html)36
-rw-r--r--docs/html/index.html (renamed from www/html/index.html)12
-rw-r--r--docs/html/news.html (renamed from www/html/news.html)55
-rw-r--r--docs/html/news2.html (renamed from www/html/news2.html)4
-rw-r--r--docs/html/py-modindex.html (renamed from www/html/py-modindex.html)9
-rw-r--r--docs/html/recipes/inheritance.html (renamed from www/html/recipes/inheritance.html)4
-rw-r--r--docs/html/recipes/precompiled.html (renamed from www/html/recipes/precompiled.html)4
-rw-r--r--docs/html/recipes/staticmethod.html (renamed from www/html/recipes/staticmethod.html)4
-rw-r--r--docs/html/recipes/writing_a_recipe.html (renamed from www/html/recipes/writing_a_recipe.html)4
-rw-r--r--docs/html/roadmap.html (renamed from www/html/roadmap.html)4
-rw-r--r--docs/html/search.html (renamed from www/html/search.html)4
-rw-r--r--docs/html/searchindex.js1
-rw-r--r--docs/html/users_guide/comments.html (renamed from www/html/users_guide/comments.html)4
-rw-r--r--docs/html/users_guide/comparisons.html (renamed from www/html/users_guide/comparisons.html)4
-rw-r--r--docs/html/users_guide/editors.html (renamed from www/html/users_guide/editors.html)4
-rw-r--r--docs/html/users_guide/errorHandling.html (renamed from www/html/users_guide/errorHandling.html)4
-rw-r--r--docs/html/users_guide/examples.html (renamed from www/html/users_guide/examples.html)4
-rw-r--r--docs/html/users_guide/flowControl.html (renamed from www/html/users_guide/flowControl.html)4
-rw-r--r--docs/html/users_guide/gettingStarted.html (renamed from www/html/users_guide/gettingStarted.html)4
-rw-r--r--docs/html/users_guide/glossary.html (renamed from www/html/users_guide/glossary.html)4
-rw-r--r--docs/html/users_guide/index.html (renamed from www/html/users_guide/index.html)4
-rw-r--r--docs/html/users_guide/inheritanceEtc.html (renamed from www/html/users_guide/inheritanceEtc.html)4
-rw-r--r--docs/html/users_guide/intro.html (renamed from www/html/users_guide/intro.html)4
-rw-r--r--docs/html/users_guide/language.html (renamed from www/html/users_guide/language.html)4
-rw-r--r--docs/html/users_guide/libraries.html (renamed from www/html/users_guide/libraries.html)4
-rw-r--r--docs/html/users_guide/links.html (renamed from www/html/users_guide/links.html)5
-rw-r--r--docs/html/users_guide/nonHtml.html (renamed from www/html/users_guide/nonHtml.html)4
-rw-r--r--docs/html/users_guide/otherHtml.html (renamed from www/html/users_guide/otherHtml.html)4
-rw-r--r--docs/html/users_guide/output.html (renamed from www/html/users_guide/output.html)4
-rw-r--r--docs/html/users_guide/parserInstructions.html (renamed from www/html/users_guide/parserInstructions.html)4
-rw-r--r--docs/html/users_guide/tipsAndTricks.html (renamed from www/html/users_guide/tipsAndTricks.html)4
-rw-r--r--docs/html/users_guide/webware.html (renamed from www/html/users_guide/webware.html)4
-rw-r--r--docs/index.rst (renamed from www/index.rst)0
-rw-r--r--docs/make.bat (renamed from www/make.bat)0
-rw-r--r--docs/news.rst (renamed from www/news.rst)28
-rw-r--r--docs/news2.rst (renamed from www/news2.rst)0
-rwxr-xr-xdocs/rebuild (renamed from www/rebuild)0
-rw-r--r--docs/recipes/inheritance.rst (renamed from www/recipes/inheritance.rst)0
-rw-r--r--docs/recipes/precompiled.rst (renamed from www/recipes/precompiled.rst)0
-rw-r--r--docs/recipes/staticmethod.rst (renamed from www/recipes/staticmethod.rst)0
-rw-r--r--docs/recipes/writing_a_recipe.rst (renamed from www/recipes/writing_a_recipe.rst)0
-rw-r--r--docs/roadmap.rst (renamed from www/roadmap.rst)0
-rw-r--r--docs/users_guide/comments.rst (renamed from www/users_guide/comments.rst)0
-rw-r--r--docs/users_guide/comparisons.rst (renamed from www/users_guide/comparisons.rst)0
-rw-r--r--docs/users_guide/editors.rst (renamed from www/users_guide/editors.rst)0
-rw-r--r--docs/users_guide/errorHandling.rst (renamed from www/users_guide/errorHandling.rst)0
-rw-r--r--docs/users_guide/examples.rst (renamed from www/users_guide/examples.rst)0
-rw-r--r--docs/users_guide/flowControl.rst (renamed from www/users_guide/flowControl.rst)0
-rw-r--r--docs/users_guide/gettingStarted.rst (renamed from www/users_guide/gettingStarted.rst)0
-rw-r--r--docs/users_guide/glossary.rst (renamed from www/users_guide/glossary.rst)0
-rw-r--r--docs/users_guide/index.rst (renamed from www/users_guide/index.rst)0
-rw-r--r--docs/users_guide/inheritanceEtc.rst (renamed from www/users_guide/inheritanceEtc.rst)0
-rw-r--r--docs/users_guide/intro.rst (renamed from www/users_guide/intro.rst)0
-rw-r--r--docs/users_guide/language.rst (renamed from www/users_guide/language.rst)0
-rw-r--r--docs/users_guide/libraries.rst (renamed from www/users_guide/libraries.rst)0
-rw-r--r--docs/users_guide/links.rst (renamed from www/users_guide/links.rst)3
-rw-r--r--docs/users_guide/nonHtml.rst (renamed from www/users_guide/nonHtml.rst)0
-rw-r--r--docs/users_guide/otherHtml.rst (renamed from www/users_guide/otherHtml.rst)0
-rw-r--r--docs/users_guide/output.rst (renamed from www/users_guide/output.rst)0
-rw-r--r--docs/users_guide/parserInstructions.rst (renamed from www/users_guide/parserInstructions.rst)0
-rw-r--r--docs/users_guide/tipsAndTricks.rst (renamed from www/users_guide/tipsAndTricks.rst)0
-rw-r--r--docs/users_guide/webware.rst (renamed from www/users_guide/webware.rst)0
-rw-r--r--setup.cfg6
-rwxr-xr-xsetup.py10
-rw-r--r--tox.ini47
-rw-r--r--www/html/searchindex.js1
459 files changed, 4427 insertions, 3509 deletions
diff --git a/.travis.yml b/.travis.yml
index 74a3fac..64d6b43 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,7 @@ branches:
only:
- maint
- master
+ - next
# Prefer docker containers
sudo: required
@@ -13,24 +14,36 @@ sudo: required
language: python
python:
- - "3.6"
+ - "2.7"
cache: pip
-env:
- - TOXENV=py27
- - TOXENV=py33
- - TOXENV=py34
- - TOXENV=py35
- - TOXENV=py36
- - TOXENV=pypy
-
matrix:
- allow_failures:
- - env: TOXENV=pypy
+ include:
+ - python: "2.7"
+ env: TOXENV=py27
+ - python: "3.3"
+ env: TOXENV=py33
+ - python: "3.4"
+ env: TOXENV=py34
+ - python: "3.5"
+ env: TOXENV=py35
+ - python: "3.6"
+ env: TOXENV=py36
+ - python: "2.7"
+ env: TOXENV=py27-flake8
+ - python: "3.4"
+ env: TOXENV=py34-flake8
+ - python: "pypy"
+ env: TOXENV=pypy
+
+ fast_finish: true
install:
- - travis_retry pip install tox
+ - travis_retry pip install --upgrade pip setuptools tox ppu
script:
- tox
+
+before_cache:
+ - remove-old-files.py -o 180 ~/.cache/pip
diff --git a/ANNOUNCE.rst b/ANNOUNCE.rst
index 31e84aa..889c00d 100644
--- a/ANNOUNCE.rst
+++ b/ANNOUNCE.rst
@@ -1,15 +1,31 @@
Hello!
-I'm pleased to announce version 3.0.1, the first bugfix release of branch
-3.0 of CheetahTemplate3.
+I'm pleased to announce version 3.1.0, the first stable release of branch
+3.1 of CheetahTemplate3.
What's new in CheetahTemplate3
==============================
-Bug fixes:
+Contributors for this release is Mathias Stearn.
- - Fix a minor bug in Compiler.
+Features:
+
+ - Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.
+
+Minor features:
+
+ - Code cleanup: fix code style to satisfy flake8 linter.
+
+Documentation:
+
+ - Rename www directory to docs.
+
+Tests:
+
+ - Run pypy tests at AppVeyor.
+ - Use remove-old-files.py from ppu to cleanup pip cache
+ at Travis and AppVeyor.
What is CheetahTemplate3
@@ -31,7 +47,33 @@ Development:
https://github.com/CheetahTemplate3
Download:
-https://pypi.python.org/pypi/Cheetah3/3.0.1
+https://pypi.python.org/pypi/Cheetah3/3.1.0
News and changes:
http://cheetahtemplate.org/news.html
+
+StackOverflow:
+https://stackoverflow.com/questions/tagged/cheetah
+
+
+Example
+=======
+
+Below is a simple example of some Cheetah code, as you can see it's practically
+Python. You can import, inherit and define methods just like in a regular Python
+module, since that's what your Cheetah templates are compiled to :) ::
+
+ #from Cheetah.Template import Template
+ #extends Template
+
+ #set $people = [{'name' : 'Tom', 'mood' : 'Happy'}, {'name' : 'Dick',
+ 'mood' : 'Sad'}, {'name' : 'Harry', 'mood' : 'Hairy'}]
+
+ <strong>How are you feeling?</strong>
+ <ul>
+ #for $person in $people
+ <li>
+ $person['name'] is $person['mood']
+ </li>
+ #end for
+ </ul>
diff --git a/Cheetah/CacheRegion.py b/Cheetah/CacheRegion.py
index 555eeaf..130fa50 100644
--- a/Cheetah/CacheRegion.py
+++ b/Cheetah/CacheRegion.py
@@ -27,6 +27,7 @@ except ImportError:
import time
import Cheetah.CacheStore
+
class CacheItem(object):
'''
A CacheItem is a container storing:
@@ -70,6 +71,7 @@ class CacheItem(object):
self._cacheStore.delete(self._cacheItemID)
self._refreshTime = None
+
class _CacheDataStoreWrapper(object):
def __init__(self, dataStore, keyPrefix):
self._dataStore = dataStore
@@ -84,14 +86,15 @@ class _CacheDataStoreWrapper(object):
def set(self, key, val, time=0):
self._dataStore.set(self._keyPrefix+key, val, time=time)
+
class CacheRegion(object):
'''
A `CacheRegion` stores some `CacheItem` instances.
This implementation stores the data in the memory of the current process.
- If you need a more advanced data store, create a cacheStore class that works
- with Cheetah's CacheStore protocol and provide it as the cacheStore argument
- to __init__. For example you could use
+ If you need a more advanced data store, create a cacheStore class that
+ works with Cheetah's CacheStore protocol and provide it as the cacheStore
+ argument to __init__. For example you could use
Cheetah.CacheStore.MemcachedCacheStore, a wrapper around the Python
memcached API (http://www.danga.com/memcached).
'''
@@ -130,7 +133,8 @@ class CacheRegion(object):
if cacheItemID not in self._cacheItems:
cacheItem = self._cacheItemClass(
- cacheItemID=cacheItemID, cacheStore=self._wrappedCacheDataStore)
+ cacheItemID=cacheItemID,
+ cacheStore=self._wrappedCacheDataStore)
self._cacheItems[cacheItemID] = cacheItem
self._isNew = False
return self._cacheItems[cacheItemID]
diff --git a/Cheetah/CacheStore.py b/Cheetah/CacheStore.py
index af5c952..00b77ec 100644
--- a/Cheetah/CacheStore.py
+++ b/Cheetah/CacheStore.py
@@ -16,9 +16,11 @@ delete(key)
'''
import time
+
class Error(Exception):
pass
+
class AbstractCacheStore(object):
def set(self, key, val, time=None):
@@ -36,6 +38,7 @@ class AbstractCacheStore(object):
def get(self, key):
raise NotImplementedError
+
class MemoryCacheStore(AbstractCacheStore):
def __init__(self):
self._data = {}
@@ -45,12 +48,12 @@ class MemoryCacheStore(AbstractCacheStore):
def add(self, key, val, time=0):
if key in self._data:
- raise Error('a value for key %r is already in the cache'%key)
+ raise Error('a value for key %r is already in the cache' % key)
self._data[key] = (val, time)
def replace(self, key, val, time=0):
if key in self._data:
- raise Error('a value for key %r is already in the cache'%key)
+ raise Error('a value for key %r is already in the cache' % key)
self._data[key] = (val, time)
def delete(self, key):
@@ -67,8 +70,10 @@ class MemoryCacheStore(AbstractCacheStore):
def clear(self):
self._data.clear()
+
class MemcachedCacheStore(AbstractCacheStore):
servers = ('127.0.0.1:11211')
+
def __init__(self, servers=None, debug=False):
if servers is None:
servers = self.servers
@@ -81,13 +86,13 @@ class MemcachedCacheStore(AbstractCacheStore):
def add(self, key, val, time=0):
res = self._client.add(key, val, time)
if not res:
- raise Error('a value for key %r is already in the cache'%key)
+ raise Error('a value for key %r is already in the cache' % key)
self._data[key] = (val, time)
def replace(self, key, val, time=0):
res = self._client.replace(key, val, time)
if not res:
- raise Error('a value for key %r is already in the cache'%key)
+ raise Error('a value for key %r is already in the cache' % key)
self._data[key] = (val, time)
def delete(self, key):
diff --git a/Cheetah/CheetahWrapper.py b/Cheetah/CheetahWrapper.py
index f16548d..fcfa7a5 100644
--- a/Cheetah/CheetahWrapper.py
+++ b/Cheetah/CheetahWrapper.py
@@ -1,6 +1,5 @@
import codecs
-import getopt
import glob
import os
import pprint
@@ -13,13 +12,15 @@ except ImportError: # PY3
import pickle as pickle
from optparse import OptionParser
-from Cheetah.Version import Version
-from Cheetah.Template import Template, DEFAULT_COMPILER_SETTINGS
+from Cheetah.Compiler import DEFAULT_COMPILER_SETTINGS
+from Cheetah.Template import Template
from Cheetah.Utils.Misc import mkdirsWithPyInitFiles
+from Cheetah.Version import Version
from Cheetah.compat import PY2
-optionDashesRE = re.compile( R"^-{1,2}" )
-moduleNameRE = re.compile( R"^[a-zA-Z_][a-zA-Z_0-9]*$" )
+optionDashesRE = re.compile(R"^-{1,2}")
+moduleNameRE = re.compile(R"^[a-zA-Z_][a-zA-Z_0-9]*$")
+
def fprintfMessage(stream, format, *args):
if format[-1:] == '^':
@@ -32,6 +33,7 @@ def fprintfMessage(stream, format, *args):
message = format
stream.write(message)
+
class Error(Exception):
pass
@@ -48,7 +50,7 @@ class Bundle:
##################################################
-## USAGE FUNCTION & MESSAGES
+# USAGE FUNCTION & MESSAGES
def usage(usageMessage, errorMessage="", out=sys.stderr):
"""Write help text, an optional error message, and abort the program.
@@ -91,7 +93,8 @@ Run "cheetah options" for the list of valid options.
"""
##################################################
-## CheetahWrapper CLASS
+# CheetahWrapper CLASS
+
class CheetahWrapper(object):
MAKE_BACKUPS = True
@@ -109,7 +112,7 @@ class CheetahWrapper(object):
self.parser = None
##################################################
- ## MAIN ROUTINE
+ # MAIN ROUTINE
def main(self, argv=None):
"""The main program controller."""
@@ -119,7 +122,7 @@ class CheetahWrapper(object):
# Step 1: Determine the command and arguments.
try:
- self.progName = progName = os.path.basename(argv[0])
+ self.progName = os.path.basename(argv[0])
self.command = command = optionDashesRE.sub("", argv[1])
if command == 'test':
self.testOpts = argv[2:]
@@ -130,7 +133,7 @@ class CheetahWrapper(object):
# Step 2: Call the command
meths = (self.compile, self.fill, self.help, self.options,
- self.test, self.version)
+ self.test, self.version)
for meth in meths:
methName = meth.__name__
# Or meth.__func__.__name__
@@ -146,29 +149,57 @@ class CheetahWrapper(object):
usage(HELP_PAGE1, "unknown command '%s'" % command)
def parseOpts(self, args):
- C, D, W = self.chatter, self.debug, self.warn
+ D = self.debug
self.isCompile = isCompile = self.command[0] == 'c'
defaultOext = isCompile and ".py" or ".html"
self.parser = OptionParser()
pao = self.parser.add_option
- pao("--idir", action="store", dest="idir", default='', help='Input directory (defaults to current directory)')
- pao("--odir", action="store", dest="odir", default="", help='Output directory (defaults to current directory)')
- pao("--iext", action="store", dest="iext", default=".tmpl", help='File input extension (defaults: compile: .tmpl, fill: .tmpl)')
- pao("--oext", action="store", dest="oext", default=defaultOext, help='File output extension (defaults: compile: .py, fill: .html)')
- pao("-R", action="store_true", dest="recurse", default=False, help='Recurse through subdirectories looking for input files')
- pao("--stdout", "-p", action="store_true", dest="stdout", default=False, help='Send output to stdout instead of writing to a file')
- pao("--quiet", action="store_false", dest="verbose", default=True, help='Do not print informational messages to stdout')
- pao("--debug", action="store_true", dest="debug", default=False, help='Print diagnostic/debug information to stderr')
- pao("--env", action="store_true", dest="env", default=False, help='Pass the environment into the search list')
- pao("--pickle", action="store", dest="pickle", default="", help='Unpickle FILE and pass it through in the search list')
- pao("--flat", action="store_true", dest="flat", default=False, help='Do not build destination subdirectories')
- pao("--nobackup", action="store_true", dest="nobackup", default=False, help='Do not make backup files when generating new ones')
- pao("--settings", action="store", dest="compilerSettingsString", default=None, help='String of compiler settings to pass through, e.g. --settings="useNameMapper=False,useFilters=False"')
- pao('--print-settings', action='store_true', dest='print_settings', help='Print out the list of available compiler settings')
- pao("--templateAPIClass", action="store", dest="templateClassName", default=None, help='Name of a subclass of Cheetah.Template.Template to use for compilation, e.g. MyTemplateClass')
- pao("--parallel", action="store", type="int", dest="parallel", default=1, help='Compile/fill templates in parallel, e.g. --parallel=4')
- pao('--shbang', dest='shbang', default='#!/usr/bin/env python', help='Specify the shbang to place at the top of compiled templates, e.g. --shbang="#!/usr/bin/python2.6"')
- pao('--encoding', dest='encoding', default=None, help='Specify the encoding of source files (e.g. \'utf-8\' to force input files to be interpreted as UTF-8)')
+ pao("--idir", action="store", dest="idir", default='',
+ help='Input directory (defaults to current directory)')
+ pao("--odir", action="store", dest="odir", default="",
+ help='Output directory (defaults to current directory)')
+ pao("--iext", action="store", dest="iext", default=".tmpl",
+ help='File input extension '
+ '(defaults: compile: .tmpl, fill: .tmpl)')
+ pao("--oext", action="store", dest="oext", default=defaultOext,
+ help='File output extension (defaults: compile: .py, fill: .html)')
+ pao("-R", action="store_true", dest="recurse", default=False,
+ help='Recurse through subdirectories looking for input files')
+ pao("--stdout", "-p", action="store_true", dest="stdout",
+ default=False,
+ help='Send output to stdout instead of writing to a file')
+ pao("--quiet", action="store_false", dest="verbose", default=True,
+ help='Do not print informational messages to stdout')
+ pao("--debug", action="store_true", dest="debug", default=False,
+ help='Print diagnostic/debug information to stderr')
+ pao("--env", action="store_true", dest="env", default=False,
+ help='Pass the environment into the search list')
+ pao("--pickle", action="store", dest="pickle", default="",
+ help='Unpickle FILE and pass it through in the search list')
+ pao("--flat", action="store_true", dest="flat", default=False,
+ help='Do not build destination subdirectories')
+ pao("--nobackup", action="store_true", dest="nobackup", default=False,
+ help='Do not make backup files when generating new ones')
+ pao("--settings", action="store", dest="compilerSettingsString",
+ default=None,
+ help='String of compiler settings to pass through, '
+ 'e.g. --settings="useNameMapper=False,useFilters=False"')
+ pao('--print-settings', action='store_true', dest='print_settings',
+ help='Print out the list of available compiler settings')
+ pao("--templateAPIClass", action="store", dest="templateClassName",
+ default=None,
+ help='Name of a subclass of Cheetah.Template.Template '
+ 'to use for compilation, e.g. MyTemplateClass')
+ pao("--parallel", action="store", type="int", dest="parallel",
+ default=1,
+ help='Compile/fill templates in parallel, e.g. --parallel=4')
+ pao('--shbang', dest='shbang', default='#!/usr/bin/env python',
+ help='Specify the shbang to place at the top '
+ 'of compiled templates, e.g. --shbang="#!/usr/bin/python2.6"')
+ pao('--encoding', dest='encoding', default=None,
+ help='Specify the encoding of source files '
+ '(e.g. "utf-8" to force input files to be interpreted '
+ 'as UTF-8)')
opts, files = self.parser.parse_args(args)
self.opts = opts
@@ -189,7 +220,6 @@ Options are
%s
Files are %s""", args, pprint.pformat(vars(opts)), files)
-
if opts.print_settings:
print()
print('>> Available Cheetah compiler settings:')
@@ -201,7 +231,7 @@ Files are %s""", args, pprint.pformat(vars(opts)), files)
print('\t%s (default: "%s")\t%s' % l)
sys.exit(0)
- #cleanup trailing path separators
+ # cleanup trailing path separators
seps = [sep for sep in [os.sep, os.altsep] if sep]
for attr in ['idir', 'odir']:
for sep in seps:
@@ -221,7 +251,7 @@ Files are %s""", args, pprint.pformat(vars(opts)), files)
self.searchList.insert(0, unpickled)
##################################################
- ## COMMAND METHODS
+ # COMMAND METHODS
def compile(self):
self._compileOrFill()
@@ -242,7 +272,7 @@ Files are %s""", args, pprint.pformat(vars(opts)), files)
TEST_WRITE_FILENAME = 'cheetah_test_file_creation_ability.tmp'
try:
f = open(TEST_WRITE_FILENAME, 'w')
- except:
+ except Exception:
sys.exit("""\
Cannot run the tests because you don't have write permission in the current
directory. The tests need to create temporary files. Change to a directory
@@ -268,7 +298,7 @@ you do have write permission to and re-run the tests.""")
# If you add a command, also add it to the 'meths' variable in main().
##################################################
- ## LOGGING METHODS
+ # LOGGING METHODS
def chatter(self, format, *args):
"""Print a verbose message to stdout. But don't if .opts.stdout is
@@ -278,7 +308,6 @@ you do have write permission to and re-run the tests.""")
return
fprintfMessage(sys.stdout, format, *args)
-
def debug(self, format, *args):
"""Print a debugging message to stderr, but don't if .debug is
false.
@@ -298,8 +327,7 @@ you do have write permission to and re-run the tests.""")
sys.exit(1)
##################################################
- ## HELPER METHODS
-
+ # HELPER METHODS
def _fixExts(self):
assert self.opts.oext, "oext is empty!"
@@ -309,10 +337,8 @@ you do have write permission to and re-run the tests.""")
if oext and not oext.startswith("."):
self.opts.oext = "." + oext
-
-
def _compileOrFill(self):
- C, D, W = self.chatter, self.debug, self.warn
+ C, D = self.chatter, self.debug
opts, files = self.opts, self.pathArgs
if files == ["-"]:
self._compileOrFillStdin()
@@ -375,7 +401,8 @@ you do have write permission to and re-run the tests.""")
bad_child_exit = child_exit
if bad_child_exit:
- sys.exit("Child process failed, exited with code %d" % bad_child_exit)
+ sys.exit("Child process failed, exited with code %d"
+ % bad_child_exit)
else:
for b in bundles:
@@ -385,7 +412,7 @@ you do have write permission to and re-run the tests.""")
"""Check for multiple source paths writing to the same destination
path.
"""
- C, D, W = self.chatter, self.debug, self.warn
+ W = self.warn
isError = False
dstSources = {}
for b in bundles:
@@ -399,18 +426,18 @@ you do have write permission to and re-run the tests.""")
if len(sources) > 1:
isError = True
sources.sort()
- fmt = "Collision: multiple source files %s map to one destination file %s"
+ fmt = "Collision: multiple source files %s " \
+ "map to one destination file %s"
W(fmt, sources, dst)
if isError:
what = self.isCompile and "Compilation" or "Filling"
sys.exit("%s aborted due to collisions" % what)
-
def _expandSourceFiles(self, files, recurse, addIextIfMissing):
"""Calculate source paths from 'files' by applying the
command-line options.
"""
- C, D, W = self.chatter, self.debug, self.warn
+ D, W = self.debug, self.warn
idir = self.opts.idir
iext = self.opts.iext
files = []
@@ -418,7 +445,7 @@ you do have write permission to and re-run the tests.""")
oldFilesLen = len(files)
D("Expanding %s", f)
path = os.path.join(idir, f)
- pathWithExt = path + iext # May or may not be valid.
+ pathWithExt = path + iext # May or may not be valid.
if os.path.isdir(path):
if recurse:
for root, dirs, _files in os.walk(path):
@@ -442,12 +469,10 @@ you do have write permission to and re-run the tests.""")
D(" ... found %s", files[oldFilesLen:])
return files
-
def _getBundles(self, sourceFiles):
flat = self.opts.flat
idir = self.opts.idir
iext = self.opts.iext
- nobackup = self.opts.nobackup
odir = self.opts.odir
oext = self.opts.oext
idirSlash = idir + os.sep
@@ -484,9 +509,8 @@ you do have write permission to and re-run the tests.""")
bundles.append(b)
return bundles
-
def _getTemplateClass(self):
- C, D, W = self.chatter, self.debug, self.warn
+ C = self.chatter
modname = None
if self._templateClass:
return self._templateClass
@@ -503,10 +527,12 @@ you do have write permission to and re-run the tests.""")
modname, classname = modname.split(':')
- C('using --templateAPIClass=%s:%s'%(modname, classname))
+ C('using --templateAPIClass=%s:%s' % (modname, classname))
if p >= 0:
- mod = getattr(__import__(modname[:p], {}, {}, [modname[p+1:]]), modname[p+1:])
+ mod = getattr(
+ __import__(modname[:p], {}, {}, [modname[p+1:]]),
+ modname[p+1:])
else:
mod = __import__(modname, {}, {}, [])
@@ -515,10 +541,10 @@ you do have write permission to and re-run the tests.""")
self._templateClass = klass
return klass
else:
- self.error('**Template class specified in option --templateAPIClass not found\n'
+ self.error('**Template class specified '
+ 'in option --templateAPIClass not found\n'
'**Falling back on Cheetah.Template:Template')
-
def _getCompilerSettings(self):
if self._compilerSettings:
return self._compilerSettings
@@ -527,18 +553,23 @@ you do have write permission to and re-run the tests.""")
return kws
if self.opts.compilerSettingsString:
try:
- settings = eval('getkws(%s)'%self.opts.compilerSettingsString)
- except:
+ settings = eval('getkws(%s)'
+ % self.opts.compilerSettingsString)
+ except Exception:
self.error("There's an error in your --settings option."
- "It must be valid Python syntax.\n"
- +" --settings='%s'\n"%self.opts.compilerSettingsString
- +" %s: %s"%sys.exc_info()[:2]
- )
+ "It must be valid Python syntax.\n"
+ + " --settings='%s'\n"
+ % self.opts.compilerSettingsString
+ + " %s: %s" % sys.exc_info()[:2]
+ )
validKeys = set(DEFAULT_COMPILER_SETTINGS.keys())
- if [k for k in settings if k not in validKeys]:
- self.error(
- 'The --setting "%s" is not a valid compiler setting name.'%k)
+ for k in settings:
+ if k not in validKeys:
+ self.error(
+ 'The --setting "%s" '
+ 'is not a valid compiler setting name.'
+ % k)
self._compilerSettings = settings
return settings
@@ -554,23 +585,23 @@ you do have write permission to and re-run the tests.""")
returnAClass=False)
output = pysrc
else:
- output = str(TemplateClass(file=sys.stdin, compilerSettings=compilerSettings))
+ output = str(TemplateClass(file=sys.stdin,
+ compilerSettings=compilerSettings))
sys.stdout.write(output)
def _compileOrFillBundle(self, b):
- C, D, W = self.chatter, self.debug, self.warn
+ C = self.chatter
TemplateClass = self._getTemplateClass()
compilerSettings = self._getCompilerSettings()
src = b.src
dst = b.dst
- base = b.base
basename = b.basename
dstDir = os.path.dirname(dst)
what = self.isCompile and "Compiling" or "Filling"
- C("%s %s -> %s^", what, src, dst) # No trailing newline.
+ C("%s %s -> %s^", what, src, dst) # No trailing newline.
if os.path.exists(dst) and not self.opts.nobackup:
bak = b.bak
- C(" (backup %s)", bak) # On same line as previous message.
+ C(" (backup %s)", bak) # On same line as previous message.
else:
bak = None
C("")
@@ -587,8 +618,9 @@ be named according to the same rules as Python modules.""" % tup)
compilerSettings=compilerSettings)
output = pysrc
else:
- #output = str(TemplateClass(file=src, searchList=self.searchList))
- tclass = TemplateClass.compile(file=src, compilerSettings=compilerSettings)
+ # output = str(TemplateClass(file=src, searchList=self.searchList))
+ tclass = TemplateClass.compile(file=src,
+ compilerSettings=compilerSettings)
output = str(tclass(searchList=self.searchList))
if bak:
@@ -623,13 +655,14 @@ def _cheetah():
CheetahWrapper().main()
# Called when invoked as `cheetah-compile`
+
+
def _cheetah_compile():
sys.argv.insert(1, "compile")
CheetahWrapper().main()
##################################################
-## if run from the command line
-if __name__ == '__main__': CheetahWrapper().main()
-
-# vim: shiftwidth=4 tabstop=4 expandtab
+# if run from the command line
+if __name__ == '__main__':
+ CheetahWrapper().main()
diff --git a/Cheetah/Compiler.py b/Cheetah/Compiler.py
index f2a8df8..3160764 100644
--- a/Cheetah/Compiler.py
+++ b/Cheetah/Compiler.py
@@ -11,9 +11,8 @@
import sys
import os
import os.path
-from os.path import getmtime, exists
+from os.path import getmtime
import re
-import types
import time
import random
import warnings
@@ -22,45 +21,65 @@ import codecs
from Cheetah.Version import Version, VersionTuple
from Cheetah.SettingsManager import SettingsManager
-from Cheetah.Utils.Indenter import indentize # an undocumented preprocessor
-from Cheetah import ErrorCatchers
+from Cheetah.Utils.Indenter import indentize # an undocumented preprocessor
from Cheetah import NameMapper
from Cheetah.Parser import Parser, ParseError, specialVarRE, \
- STATIC_CACHE, REFRESH_CACHE, SET_LOCAL, SET_GLOBAL, SET_MODULE, \
+ STATIC_CACHE, REFRESH_CACHE, SET_GLOBAL, SET_MODULE, \
unicodeDirectiveRE, encodingDirectiveRE, escapedNewlineRE
from Cheetah.compat import string_type, unicode
-from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList
-VFFSL=valueFromFrameOrSearchList
-VFSL=valueFromSearchList
-VFN=valueForName
-currentTime=time.time
+from Cheetah.NameMapper import valueForName, valueFromSearchList, \
+ valueFromFrameOrSearchList
+VFFSL = valueFromFrameOrSearchList
+VFSL = valueFromSearchList
+VFN = valueForName
+currentTime = time.time
+
+
+class Error(Exception):
+ pass
-class Error(Exception): pass
# Settings format: (key, default, docstring)
_DEFAULT_COMPILER_SETTINGS = [
- ('useNameMapper', True, 'Enable NameMapper for dotted notation and searchList support'),
- ('useSearchList', True, 'Enable the searchList, requires useNameMapper=True, if disabled, first portion of the $variable is a global, builtin, or local variable that doesn\'t need looking up in the searchList'),
+ ('useNameMapper', True,
+ 'Enable NameMapper for dotted notation and searchList support'),
+ ('useSearchList', True,
+ "Enable the searchList, requires useNameMapper=True, "
+ "if disabled, first portion of the $variable is a global, builtin, "
+ "or local variable that doesn't need looking up in the searchList"),
('allowSearchListAsMethArg', True, ''),
- ('useAutocalling', True, 'Detect and call callable objects in searchList, requires useNameMapper=True'),
- ('useStackFrames', True, 'Used for NameMapper.valueFromFrameOrSearchList rather than NameMapper.valueFromSearchList'),
- ('useErrorCatcher', False, 'Turn on the #errorCatcher directive for catching NameMapper errors, etc'),
+ ('useAutocalling', True,
+ 'Detect and call callable objects in searchList, '
+ 'requires useNameMapper=True'),
+ ('useStackFrames', True,
+ 'Used for NameMapper.valueFromFrameOrSearchList '
+ 'rather than NameMapper.valueFromSearchList'),
+ ('useErrorCatcher', False,
+ 'Turn on the #errorCatcher directive '
+ 'for catching NameMapper errors, etc'),
('alwaysFilterNone', True, 'Filter out None prior to calling the #filter'),
('useFilters', True, 'If False, pass output through str()'),
('includeRawExprInFilterArgs', True, ''),
- ('useLegacyImportMode', True, 'All #import statements are relocated to the top of the generated Python module'),
- ('prioritizeSearchListOverSelf', False, 'When iterating the searchList, look into the searchList passed into the initializer instead of Template members first'),
+ ('useLegacyImportMode', True,
+ 'All #import statements are relocated to the top '
+ 'of the generated Python module'),
+ ('prioritizeSearchListOverSelf', False,
+ "When iterating the searchList, "
+ "look into the searchList passed into the initializer "
+ "instead of Template members first"),
('autoAssignDummyTransactionToSelf', False, ''),
('useKWsDictArgForPassingTrans', True, ''),
('commentOffset', 1, ''),
('outputRowColComments', True, ''),
- ('includeBlockMarkers', False, 'Wrap #block\'s in a comment in the template\'s output'),
+ ('includeBlockMarkers', False,
+ 'Wrap #block\'s in a comment in the template\'s output'),
('blockMarkerStart', ('\n<!-- START BLOCK: ', ' -->\n'), ''),
('blockMarkerEnd', ('\n<!-- END BLOCK: ', ' -->\n'), ''),
- ('defDocStrMsg', 'Autogenerated by Cheetah: The Python-Powered Template Engine', ''),
+ ('defDocStrMsg',
+ 'Autogenerated by Cheetah: The Python-Powered Template Engine', ''),
('setup__str__method', False, ''),
('mainMethodName', 'respond', ''),
('mainMethodNameForSubclasses', 'writeBody', ''),
@@ -70,19 +89,26 @@ _DEFAULT_COMPILER_SETTINGS = [
('outputMethodsBeforeAttributes', True, ''),
('addTimestampsToCompilerOutput', True, ''),
- ## Customizing the #extends directive
+ # Customizing the #extends directive
('autoImportForExtendsDirective', True, ''),
('handlerForExtendsDirective', None, ''),
- ('disabledDirectives', [], 'List of directive keys to disable (without starting "#")'),
- ('enabledDirectives', [], 'List of directive keys to enable (without starting "#")'),
+ ('disabledDirectives', [],
+ 'List of directive keys to disable (without starting "#")'),
+ ('enabledDirectives', [],
+ 'List of directive keys to enable (without starting "#")'),
('disabledDirectiveHooks', [], 'callable(parser, directiveKey)'),
('preparseDirectiveHooks', [], 'callable(parser, directiveKey)'),
('postparseDirectiveHooks', [], 'callable(parser, directiveKey)'),
('preparsePlaceholderHooks', [], 'callable(parser)'),
('postparsePlaceholderHooks', [], 'callable(parser)'),
- ('expressionFilterHooks', [], '''callable(parser, expr, exprType, rawExpr=None, startPos=None), exprType is the name of the directive, "psp" or "placeholder" The filters *must* return the expr or raise an expression, they can modify the expr if needed'''),
- ('templateMetaclass', None, 'Strictly optional, only will work with new-style basecalsses as well'),
+ ('expressionFilterHooks', [],
+ 'callable(parser, expr, exprType, rawExpr=None, startPos=None), '
+ 'exprType is the name of the directive, "psp" or "placeholder" '
+ 'The filters *must* return the expr or raise an expression, '
+ 'they can modify the expr if needed'),
+ ('templateMetaclass', None,
+ 'Strictly optional, only will work with new-style basecalsses as well'),
('i18NFunctionName', 'self.i18n', ''),
('cheetahVarStartToken', '$', ''),
@@ -101,11 +127,12 @@ _DEFAULT_COMPILER_SETTINGS = [
('allowEmptySingleLineMethods', False, ''),
('allowNestedDefScopes', True, ''),
('allowPlaceholderFilterArgs', True, ''),
- ('encoding', None, 'The encoding to read input files as (or None for ASCII)'),
+ ('encoding', None,
+ 'The encoding to read input files as (or None for ASCII)'),
]
-DEFAULT_COMPILER_SETTINGS = dict([(v[0], v[1]) for v in _DEFAULT_COMPILER_SETTINGS])
-
+DEFAULT_COMPILER_SETTINGS = \
+ dict([(v[0], v[1]) for v in _DEFAULT_COMPILER_SETTINGS])
class GenUtils(object):
@@ -116,7 +143,7 @@ class GenUtils(object):
"""
def genTimeInterval(self, timeString):
- ##@@ TR: need to add some error handling here
+ # #@@ TR: need to add some error handling here
if timeString[-1] == 's':
interval = float(timeString[:-1])
elif timeString[-1] == 'm':
@@ -137,13 +164,14 @@ class GenUtils(object):
cacheInfo = {}
if cacheTokenParts['REFRESH_CACHE']:
cacheInfo['type'] = REFRESH_CACHE
- cacheInfo['interval'] = self.genTimeInterval(cacheTokenParts['interval'])
+ cacheInfo['interval'] = \
+ self.genTimeInterval(cacheTokenParts['interval'])
elif cacheTokenParts['STATIC_CACHE']:
cacheInfo['type'] = STATIC_CACHE
return cacheInfo # is empty if no cache
def genCacheInfoFromArgList(self, argList):
- cacheInfo = {'type':REFRESH_CACHE}
+ cacheInfo = {'type': REFRESH_CACHE}
for key, val in argList:
if val[0] in '"\'':
val = val[1:-1]
@@ -229,7 +257,8 @@ class GenUtils(object):
VFN = NameMapper.valueForName
VFFSL = NameMapper.valueFromFrameOrSearchList
- VFSL = NameMapper.valueFromSearchList # optionally used instead of VFFSL
+ # optionally used instead of VFFSL
+ VFSL = NameMapper.valueFromSearchList
SL = self.searchList()
useAC = self.setting('useAutocalling') # True in this example
@@ -248,7 +277,8 @@ class GenUtils(object):
Note, if the compiler setting useStackFrames=False (default is true)
then::
- A` = VFSL([locals()]+SL+[globals(), builtin], name=A[0], executeCallables=(useAC and A[1]))A[2]
+ A` = VFSL([locals()] + SL + [globals(), builtin],
+ name=A[0], executeCallables=(useAC and A[1]))A[2]
This option allows Cheetah to be used with Psyco, which doesn't support
stack frame introspection.
@@ -262,7 +292,8 @@ class GenUtils(object):
if not useSearchList:
firstDotIdx = name.find('.')
if firstDotIdx != -1 and firstDotIdx < len(name):
- beforeFirstDot, afterDot = name[:firstDotIdx], name[firstDotIdx+1:]
+ beforeFirstDot = name[:firstDotIdx]
+ afterDot = name[firstDotIdx+1:]
pythonCode = ('VFN(' + beforeFirstDot +
',"' + afterDot +
'",' + repr(defaultUseAC and useAC) + ')'
@@ -271,12 +302,12 @@ class GenUtils(object):
pythonCode = name+remainder
elif self.setting('useStackFrames'):
pythonCode = ('VFFSL(SL,'
- '"'+ name + '",'
+ '"' + name + '",'
+ repr(defaultUseAC and useAC) + ')'
+ remainder)
else:
pythonCode = ('VFSL([locals()]+SL+[globals(), builtin],'
- '"'+ name + '",'
+ '"' + name + '",'
+ repr(defaultUseAC and useAC) + ')'
+ remainder)
##
@@ -289,7 +320,8 @@ class GenUtils(object):
return pythonCode
##################################################
-## METHOD COMPILERS
+# METHOD COMPILERS
+
class MethodCompiler(GenUtils):
def __init__(self, methodName, classCompiler,
@@ -325,7 +357,6 @@ class MethodCompiler(GenUtils):
self._hasReturnStatement = False
self._isGenerator = False
-
def cleanupState(self):
"""Called by the containing class compiler instance
"""
@@ -337,21 +368,21 @@ class MethodCompiler(GenUtils):
def setMethodName(self, name):
self._methodName = name
- ## methods for managing indentation
+ # methods for managing indentation
def indentation(self):
return self._indent * self._indentLev
def indent(self):
- self._indentLev +=1
+ self._indentLev += 1
def dedent(self):
if self._indentLev:
- self._indentLev -=1
+ self._indentLev -= 1
else:
raise Error('Attempt to dedent when the indentLev is 0')
- ## methods for final code wrapping
+ # methods for final code wrapping
def methodDef(self):
if self._methodDef:
@@ -368,7 +399,7 @@ class MethodCompiler(GenUtils):
self.methodSignature(),
'\n',
self.docString(),
- self.methodBody() )
+ self.methodBody())
methodDef = ''.join(methodDefChunks)
self._methodDef = methodDef
return methodDef
@@ -380,7 +411,7 @@ class MethodCompiler(GenUtils):
self._methodSignature = signature
def methodBody(self):
- return ''.join( self._methodBodyChunks )
+ return ''.join(self._methodBodyChunks)
def docString(self):
if not self._docStringLines:
@@ -388,11 +419,13 @@ class MethodCompiler(GenUtils):
ind = self._indent*2
docStr = (ind + '"""\n' + ind +
- ('\n' + ind).join([ln.replace('"""', "'''") for ln in self._docStringLines]) +
- '\n' + ind + '"""\n')
- return docStr
+ ('\n' + ind).join(
+ [ln.replace('"""', "'''")
+ for ln in self._docStringLines])
+ + '\n' + ind + '"""\n')
+ return docStr
- ## methods for adding code
+ # methods for adding code
def addMethDocString(self, line):
self._docStringLines.append(line.replace('%', '%%'))
@@ -407,29 +440,32 @@ class MethodCompiler(GenUtils):
def addWriteChunk(self, chunk):
self.addChunk('write(' + chunk + ')')
- def addFilteredChunk(self, chunk, filterArgs=None, rawExpr=None, lineCol=None):
+ def addFilteredChunk(self, chunk, filterArgs=None,
+ rawExpr=None, lineCol=None):
if filterArgs is None:
filterArgs = ''
if self.setting('includeRawExprInFilterArgs') and rawExpr:
- filterArgs += ', rawExpr=%s'%repr(rawExpr)
+ filterArgs += ', rawExpr=%s' % repr(rawExpr)
if self.setting('alwaysFilterNone'):
- if rawExpr and rawExpr.find('\n')==-1 and rawExpr.find('\r')==-1:
- self.addChunk("_v = %s # %r"%(chunk, rawExpr))
+ if rawExpr and rawExpr.find('\n') == -1 and \
+ rawExpr.find('\r') == -1:
+ self.addChunk("_v = %s # %r" % (chunk, rawExpr))
if lineCol:
- self.appendToPrevChunk(' on line %s, col %s'%lineCol)
+ self.appendToPrevChunk(' on line %s, col %s' % lineCol)
else:
- self.addChunk("_v = %s"%chunk)
+ self.addChunk("_v = %s" % chunk)
if self.setting('useFilters'):
- self.addChunk("if _v is not None: write(_filter(_v%s))"%filterArgs)
+ self.addChunk("if _v is not None: write(_filter(_v%s))"
+ % filterArgs)
else:
self.addChunk("if _v is not None: write(str(_v))")
else:
if self.setting('useFilters'):
- self.addChunk("write(_filter(%s%s))"%(chunk, filterArgs))
+ self.addChunk("write(_filter(%s%s))" % (chunk, filterArgs))
else:
- self.addChunk("write(str(%s))"%chunk)
+ self.addChunk("write(str(%s))" % chunk)
def _appendToPrevStrConst(self, strConst):
if self._pendingStrConstChunks:
@@ -457,7 +493,7 @@ class MethodCompiler(GenUtils):
out = ['u']
body = escapedNewlineRE.sub('\\1\n', reprstr[i+1:-1])
- if reprstr[i]=="'":
+ if reprstr[i] == "'":
out.append("'''")
out.append(body)
out.append("'''")
@@ -476,8 +512,6 @@ class MethodCompiler(GenUtils):
if BOL < len(src):
self._pendingStrConstChunks[-1] = src[:BOL]
-
-
def isErrorCatcherOn(self):
return self._isErrorCatcherOn
@@ -504,7 +538,8 @@ class MethodCompiler(GenUtils):
cacheInfo = self.genCacheInfo(cacheTokenParts)
if cacheInfo:
cacheInfo['ID'] = repr(rawPlaceholder)[1:-1]
- self.startCacheRegion(cacheInfo, lineCol, rawPlaceholder=rawPlaceholder)
+ self.startCacheRegion(cacheInfo, lineCol,
+ rawPlaceholder=rawPlaceholder)
if self.isErrorCatcherOn():
methodName = self._classCompiler.addErrorCatcherCall(
@@ -514,11 +549,13 @@ class MethodCompiler(GenUtils):
if silentMode:
self.addChunk('try:')
self.indent()
- self.addFilteredChunk(expr, filterArgs, rawPlaceholder, lineCol=lineCol)
+ self.addFilteredChunk(expr, filterArgs, rawPlaceholder,
+ lineCol=lineCol)
self.dedent()
self.addChunk('except NotFound: pass')
else:
- self.addFilteredChunk(expr, filterArgs, rawPlaceholder, lineCol=lineCol)
+ self.addFilteredChunk(expr, filterArgs, rawPlaceholder,
+ lineCol=lineCol)
if self.setting('outputRowColComments'):
self.appendToPrevChunk(' # from line %s, col %s' % lineCol + '.')
@@ -526,7 +563,7 @@ class MethodCompiler(GenUtils):
self.endCacheRegion()
def addSilent(self, expr):
- self.addChunk( expr )
+ self.addChunk(expr)
def addEcho(self, expr, rawExpr=None):
self.addFilteredChunk(expr, rawExpr=rawExpr)
@@ -539,20 +576,21 @@ class MethodCompiler(GenUtils):
# we need to split the LVALUE to deal with globalSetVars
splitPos1 = LVALUE.find('.')
splitPos2 = LVALUE.find('[')
- if splitPos1 > 0 and splitPos2==-1:
+ if splitPos1 > 0 and splitPos2 == -1:
splitPos = splitPos1
elif splitPos1 > 0 and splitPos1 < max(splitPos2, 0):
splitPos = splitPos1
else:
splitPos = splitPos2
- if splitPos >0:
+ if splitPos > 0:
primary = LVALUE[:splitPos]
secondary = LVALUE[splitPos:]
else:
primary = LVALUE
secondary = ''
- LVALUE = 'self._CHEETAH__globalSetVars["' + primary + '"]' + secondary
+ LVALUE = \
+ 'self._CHEETAH__globalSetVars["' + primary + '"]' + secondary
expr = LVALUE + ' ' + OP + ' ' + RVALUE.strip()
if setStyle is SET_MODULE:
@@ -562,9 +600,9 @@ class MethodCompiler(GenUtils):
def addInclude(self, sourceExpr, includeFrom, isRaw):
self.addChunk('self._handleCheetahInclude(' + sourceExpr +
- ', trans=trans, ' +
- 'includeFrom="' + includeFrom + '", raw=' +
- repr(isRaw) + ')')
+ ', trans=trans, ' +
+ 'includeFrom="' + includeFrom + '", raw=' +
+ repr(isRaw) + ')')
def addWhile(self, expr, lineCol=None):
self.addIndentingDirective(expr, lineCol=lineCol)
@@ -573,16 +611,19 @@ class MethodCompiler(GenUtils):
self.addIndentingDirective(expr, lineCol=lineCol)
def addRepeat(self, expr, lineCol=None):
- #the _repeatCount stuff here allows nesting of #repeat directives
+ # the _repeatCount stuff here allows nesting of #repeat directives
self._repeatCount = getattr(self, "_repeatCount", -1) + 1
- self.addFor('for __i%s in range(%s)' % (self._repeatCount, expr), lineCol=lineCol)
+ self.addFor('for __i%s in range(%s)'
+ % (self._repeatCount, expr),
+ lineCol=lineCol)
def addIndentingDirective(self, expr, lineCol=None):
if expr and not expr[-1] == ':':
- expr = expr + ':'
- self.addChunk( expr )
+ expr = expr + ':'
+ self.addChunk(expr)
if lineCol:
- self.appendToPrevChunk(' # generated from line %s, col %s'%lineCol )
+ self.appendToPrevChunk(' # generated from line %s, col %s'
+ % lineCol)
self.indent()
def addReIndentingDirective(self, expr, dedent=True, lineCol=None):
@@ -590,11 +631,12 @@ class MethodCompiler(GenUtils):
if dedent:
self.dedent()
if not expr[-1] == ':':
- expr = expr + ':'
+ expr = expr + ':'
- self.addChunk( expr )
+ self.addChunk(expr)
if lineCol:
- self.appendToPrevChunk(' # generated from line %s, col %s'%lineCol )
+ self.appendToPrevChunk(' # generated from line %s, col %s'
+ % lineCol)
self.indent()
def addIf(self, expr, lineCol=None):
@@ -632,10 +674,11 @@ class MethodCompiler(GenUtils):
argStringChunks = []
for arg in argsList:
chunk = arg[0]
- if not arg[1] == None:
+ if arg[1] is not None:
chunk += '=' + arg[1]
argStringChunks.append(chunk)
- signature = "def " + functionName + "(" + ','.join(argStringChunks) + "):"
+ signature = \
+ "def " + functionName + "(" + ','.join(argStringChunks) + "):"
self.addIndentingDirective(signature)
self.addChunk('#'+parserComment)
@@ -667,11 +710,10 @@ class MethodCompiler(GenUtils):
self.dedent()
self.addChunk('else:')
self.indent()
- self.addChunk(
- 'raise TypeError("This method cannot be called with a trans arg")')
+ self.addChunk('raise TypeError('
+ '"This method cannot be called with a trans arg")')
self.dedent()
-
def addPass(self, expr):
self.addChunk(expr)
@@ -729,47 +771,51 @@ class MethodCompiler(GenUtils):
if customID:
ID = customID
varyBy = cacheInfo.get('varyBy', repr(ID))
- self._cacheRegionsStack.append(ID) # attrib of current methodCompiler
+ self._cacheRegionsStack.append(ID) # attrib of current methodCompiler
# @@TR: add this to a special class var as well
self.addChunk('')
- self.addChunk('## START CACHE REGION: ID='+ID+
- '. line %s, col %s'%lineCol + ' in the source.')
+ self.addChunk('## START CACHE REGION: ID=' + ID
+ + '. line %s, col %s' % lineCol + ' in the source.')
- self.addChunk('_RECACHE_%(ID)s = False'%locals())
- self.addChunk('_cacheRegion_%(ID)s = self.getCacheRegion(regionID='%locals()
+ self.addChunk('_RECACHE_%(ID)s = False' % locals())
+ self.addChunk('_cacheRegion_%(ID)s = self.getCacheRegion(regionID='
+ % locals()
+ repr(ID)
- + ', cacheInfo=%r'%cacheInfo
+ + ', cacheInfo=%r' % cacheInfo
+ ')')
- self.addChunk('if _cacheRegion_%(ID)s.isNew():'%locals())
+ self.addChunk('if _cacheRegion_%(ID)s.isNew():' % locals())
self.indent()
- self.addChunk('_RECACHE_%(ID)s = True'%locals())
+ self.addChunk('_RECACHE_%(ID)s = True' % locals())
self.dedent()
- self.addChunk('_cacheItem_%(ID)s = _cacheRegion_%(ID)s.getCacheItem('%locals()
- +varyBy+')')
+ self.addChunk('_cacheItem_%(ID)s = _cacheRegion_%(ID)s.getCacheItem('
+ % locals()
+ + varyBy + ')')
- self.addChunk('if _cacheItem_%(ID)s.hasExpired():'%locals())
+ self.addChunk('if _cacheItem_%(ID)s.hasExpired():' % locals())
self.indent()
- self.addChunk('_RECACHE_%(ID)s = True'%locals())
+ self.addChunk('_RECACHE_%(ID)s = True' % locals())
self.dedent()
if test:
self.addChunk('if ' + test + ':')
self.indent()
- self.addChunk('_RECACHE_%(ID)s = True'%locals())
+ self.addChunk('_RECACHE_%(ID)s = True' % locals())
self.dedent()
- self.addChunk('if (not _RECACHE_%(ID)s) and _cacheItem_%(ID)s.getRefreshTime():'%locals())
+ self.addChunk(
+ 'if (not _RECACHE_%(ID)s) and _cacheItem_%(ID)s.getRefreshTime():'
+ % locals())
self.indent()
self.addChunk('try:')
self.indent()
- self.addChunk('_output = _cacheItem_%(ID)s.renderOutput()'%locals())
+ self.addChunk('_output = _cacheItem_%(ID)s.renderOutput()' % locals())
self.dedent()
self.addChunk('except KeyError:')
self.indent()
- self.addChunk('_RECACHE_%(ID)s = True'%locals())
+ self.addChunk('_RECACHE_%(ID)s = True' % locals())
self.dedent()
self.addChunk('else:')
self.indent()
@@ -779,25 +825,32 @@ class MethodCompiler(GenUtils):
self.dedent()
- self.addChunk('if _RECACHE_%(ID)s or not _cacheItem_%(ID)s.getRefreshTime():'%locals())
+ self.addChunk(
+ 'if _RECACHE_%(ID)s or not _cacheItem_%(ID)s.getRefreshTime():'
+ % locals())
self.indent()
- self.addChunk('_orig_trans%(ID)s = trans'%locals())
- self.addChunk('trans = _cacheCollector_%(ID)s = DummyTransaction()'%locals())
- self.addChunk('write = _cacheCollector_%(ID)s.response().write'%locals())
+ self.addChunk('_orig_trans%(ID)s = trans' % locals())
+ self.addChunk('trans = _cacheCollector_%(ID)s = DummyTransaction()'
+ % locals())
+ self.addChunk('write = _cacheCollector_%(ID)s.response().write'
+ % locals())
if interval:
- self.addChunk(("_cacheItem_%(ID)s.setExpiryTime(currentTime() +"%locals())
+ self.addChunk(("_cacheItem_%(ID)s.setExpiryTime(currentTime() +"
+ % locals())
+ str(interval) + ")")
def endCacheRegion(self):
ID = self._cacheRegionsStack.pop()
- self.addChunk('trans = _orig_trans%(ID)s'%locals())
+ self.addChunk('trans = _orig_trans%(ID)s' % locals())
self.addChunk('write = trans.response().write')
- self.addChunk('_cacheData = _cacheCollector_%(ID)s.response().getvalue()'%locals())
- self.addChunk('_cacheItem_%(ID)s.setData(_cacheData)'%locals())
+ self.addChunk(
+ '_cacheData = _cacheCollector_%(ID)s.response().getvalue()'
+ % locals())
+ self.addChunk('_cacheItem_%(ID)s.setData(_cacheData)' % locals())
self.addWriteChunk('_cacheData')
self.addChunk('del _cacheData')
- self.addChunk('del _cacheCollector_%(ID)s'%locals())
- self.addChunk('del _orig_trans%(ID)s'%locals())
+ self.addChunk('del _cacheCollector_%(ID)s' % locals())
+ self.addChunk('del _orig_trans%(ID)s' % locals())
self.dedent()
self.addChunk('## END CACHE REGION: '+ID)
self.addChunk('')
@@ -814,17 +867,20 @@ class MethodCompiler(GenUtils):
callDetails.args = args
callDetails.lineCol = lineCol
callDetails.usesKeywordArgs = False
- self._callRegionsStack.append((ID, callDetails)) # attrib of current methodCompiler
-
- self.addChunk('## START %(regionTitle)s REGION: '%locals()
- +ID
- +' of '+functionName
- +' at line %s, col %s'%lineCol + ' in the source.')
- self.addChunk('_orig_trans%(ID)s = trans'%locals())
- self.addChunk('_wasBuffering%(ID)s = self._CHEETAH__isBuffering'%locals())
+ # attrib of current methodCompiler
+ self._callRegionsStack.append((ID, callDetails))
+
+ self.addChunk('## START %(regionTitle)s REGION: ' % locals() + ID
+ + ' of ' + functionName
+ + ' at line %s, col %s' % lineCol + ' in the source.')
+ self.addChunk('_orig_trans%(ID)s = trans' % locals())
+ self.addChunk('_wasBuffering%(ID)s = self._CHEETAH__isBuffering'
+ % locals())
self.addChunk('self._CHEETAH__isBuffering = True')
- self.addChunk('trans = _callCollector%(ID)s = DummyTransaction()'%locals())
- self.addChunk('write = _callCollector%(ID)s.response().write'%locals())
+ self.addChunk('trans = _callCollector%(ID)s = DummyTransaction()'
+ % locals())
+ self.addChunk('write = _callCollector%(ID)s.response().write'
+ % locals())
def setCallArg(self, argName, lineCol):
ID, callDetails = self._callRegionsStack[-1]
@@ -833,18 +889,21 @@ class MethodCompiler(GenUtils):
self._endCallArg()
else:
callDetails.usesKeywordArgs = True
- self.addChunk('_callKws%(ID)s = {}'%locals())
- self.addChunk('_currentCallArgname%(ID)s = %(argName)r'%locals())
+ self.addChunk('_callKws%(ID)s = {}' % locals())
+ self.addChunk('_currentCallArgname%(ID)s = %(argName)r' % locals())
callDetails.currentArgname = argName
def _endCallArg(self):
ID, callDetails = self._callRegionsStack[-1]
currCallArg = callDetails.currentArgname
- self.addChunk(('_callKws%(ID)s[%(currCallArg)r] ='
- ' _callCollector%(ID)s.response().getvalue()')%locals())
- self.addChunk('del _callCollector%(ID)s'%locals())
- self.addChunk('trans = _callCollector%(ID)s = DummyTransaction()'%locals())
- self.addChunk('write = _callCollector%(ID)s.response().write'%locals())
+ self.addChunk('_callKws%(ID)s[%(currCallArg)r] ='
+ ' _callCollector%(ID)s.response().getvalue()'
+ % locals())
+ self.addChunk('del _callCollector%(ID)s' % locals())
+ self.addChunk('trans = _callCollector%(ID)s = DummyTransaction()'
+ % locals())
+ self.addChunk('write = _callCollector%(ID)s.response().write'
+ % locals())
def endCallRegion(self, regionTitle='CALL'):
ID, callDetails = self._callRegionsStack[-1]
@@ -852,79 +911,95 @@ class MethodCompiler(GenUtils):
callDetails.functionName, callDetails.args, callDetails.lineCol)
def reset(ID=ID):
- self.addChunk('trans = _orig_trans%(ID)s'%locals())
+ self.addChunk('trans = _orig_trans%(ID)s' % locals())
self.addChunk('write = trans.response().write')
- self.addChunk('self._CHEETAH__isBuffering = _wasBuffering%(ID)s '%locals())
- self.addChunk('del _wasBuffering%(ID)s'%locals())
- self.addChunk('del _orig_trans%(ID)s'%locals())
+ self.addChunk('self._CHEETAH__isBuffering = _wasBuffering%(ID)s '
+ % locals())
+ self.addChunk('del _wasBuffering%(ID)s' % locals())
+ self.addChunk('del _orig_trans%(ID)s' % locals())
if not callDetails.usesKeywordArgs:
reset()
- self.addChunk('_callArgVal%(ID)s = _callCollector%(ID)s.response().getvalue()'%locals())
- self.addChunk('del _callCollector%(ID)s'%locals())
+ self.addChunk(
+ '_callArgVal%(ID)s = '
+ '_callCollector%(ID)s.response().getvalue()' % locals())
+ self.addChunk('del _callCollector%(ID)s' % locals())
if initialKwArgs:
initialKwArgs = ', '+initialKwArgs
- self.addFilteredChunk('%(functionName)s(_callArgVal%(ID)s%(initialKwArgs)s)'%locals())
- self.addChunk('del _callArgVal%(ID)s'%locals())
+ self.addFilteredChunk(
+ '%(functionName)s(_callArgVal%(ID)s%(initialKwArgs)s)'
+ % locals())
+ self.addChunk('del _callArgVal%(ID)s' % locals())
else:
if initialKwArgs:
initialKwArgs = initialKwArgs+', '
self._endCallArg()
reset()
- self.addFilteredChunk('%(functionName)s(%(initialKwArgs)s**_callKws%(ID)s)'%locals())
- self.addChunk('del _callKws%(ID)s'%locals())
- self.addChunk('## END %(regionTitle)s REGION: '%locals()
- +ID
- +' of '+functionName
- +' at line %s, col %s'%lineCol + ' in the source.')
+ self.addFilteredChunk(
+ '%(functionName)s(%(initialKwArgs)s**_callKws%(ID)s)'
+ % locals())
+ self.addChunk('del _callKws%(ID)s' % locals())
+ self.addChunk('## END %(regionTitle)s REGION: ' % locals() + ID
+ + ' of ' + functionName
+ + ' at line %s, col %s' % lineCol + ' in the source.')
self.addChunk('')
- self._callRegionsStack.pop() # attrib of current methodCompiler
+ self._callRegionsStack.pop() # attrib of current methodCompiler
def nextCaptureRegionID(self):
return self.nextCacheID()
def startCaptureRegion(self, assignTo, lineCol):
- class CaptureDetails: pass
+ class CaptureDetails:
+ pass
captureDetails = CaptureDetails()
captureDetails.ID = ID = self.nextCaptureRegionID()
captureDetails.assignTo = assignTo
captureDetails.lineCol = lineCol
- self._captureRegionsStack.append((ID, captureDetails)) # attrib of current methodCompiler
- self.addChunk('## START CAPTURE REGION: '+ID
- +' '+assignTo
- +' at line %s, col %s'%lineCol + ' in the source.')
- self.addChunk('_orig_trans%(ID)s = trans'%locals())
- self.addChunk('_wasBuffering%(ID)s = self._CHEETAH__isBuffering'%locals())
+ # attrib of current methodCompiler
+ self._captureRegionsStack.append((ID, captureDetails))
+ self.addChunk('## START CAPTURE REGION: ' + ID + ' ' + assignTo
+ + ' at line %s, col %s' % lineCol + ' in the source.')
+ self.addChunk('_orig_trans%(ID)s = trans' % locals())
+ self.addChunk(
+ '_wasBuffering%(ID)s = self._CHEETAH__isBuffering' % locals())
self.addChunk('self._CHEETAH__isBuffering = True')
- self.addChunk('trans = _captureCollector%(ID)s = DummyTransaction()'%locals())
- self.addChunk('write = _captureCollector%(ID)s.response().write'%locals())
+ self.addChunk(
+ 'trans = _captureCollector%(ID)s = DummyTransaction()' % locals())
+ self.addChunk(
+ 'write = _captureCollector%(ID)s.response().write' % locals())
def endCaptureRegion(self):
ID, captureDetails = self._captureRegionsStack.pop()
assignTo, lineCol = (captureDetails.assignTo, captureDetails.lineCol)
- self.addChunk('trans = _orig_trans%(ID)s'%locals())
+ self.addChunk('trans = _orig_trans%(ID)s' % locals())
self.addChunk('write = trans.response().write')
- self.addChunk('self._CHEETAH__isBuffering = _wasBuffering%(ID)s '%locals())
- self.addChunk('%(assignTo)s = _captureCollector%(ID)s.response().getvalue()'%locals())
- self.addChunk('del _orig_trans%(ID)s'%locals())
- self.addChunk('del _captureCollector%(ID)s'%locals())
- self.addChunk('del _wasBuffering%(ID)s'%locals())
+ self.addChunk(
+ 'self._CHEETAH__isBuffering = _wasBuffering%(ID)s ' % locals())
+ self.addChunk(
+ '%(assignTo)s = _captureCollector%(ID)s.response().getvalue()'
+ % locals())
+ self.addChunk('del _orig_trans%(ID)s' % locals())
+ self.addChunk('del _captureCollector%(ID)s' % locals())
+ self.addChunk('del _wasBuffering%(ID)s' % locals())
def setErrorCatcher(self, errorCatcherName):
self.turnErrorCatcherOn()
- self.addChunk('if "' + errorCatcherName + '" in self._CHEETAH__errorCatchers:')
+ self.addChunk(
+ 'if "' + errorCatcherName + '" in self._CHEETAH__errorCatchers:')
self.indent()
- self.addChunk('self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["' +
+ self.addChunk(
+ 'self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["' +
errorCatcherName + '"]')
self.dedent()
self.addChunk('else:')
self.indent()
- self.addChunk('self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["'
- + errorCatcherName + '"] = ErrorCatchers.'
- + errorCatcherName + '(self)'
- )
+ self.addChunk(
+ 'self._CHEETAH__errorCatcher = self._CHEETAH__errorCatchers["'
+ + errorCatcherName + '"] = ErrorCatchers.'
+ + errorCatcherName + '(self)'
+ )
self.dedent()
def nextFilterRegionID(self):
@@ -943,48 +1018,59 @@ class MethodCompiler(GenUtils):
filterDetails.ID = ID = self.nextFilterRegionID()
filterDetails.theFilter = theFilter
filterDetails.isKlass = isKlass
- self._filterRegionsStack.append((ID, filterDetails)) # attrib of current methodCompiler
+ # attrib of current methodCompiler
+ self._filterRegionsStack.append((ID, filterDetails))
- self.addChunk('_orig_filter%(ID)s = _filter'%locals())
+ self.addChunk('_orig_filter%(ID)s = _filter' % locals())
if isKlass:
- self.addChunk('_filter = self._CHEETAH__currentFilter = ' + theFilter.strip() +
- '(self).filter')
+ self.addChunk(
+ '_filter = self._CHEETAH__currentFilter = '
+ + theFilter.strip() + '(self).filter')
else:
if theFilter.lower() == 'none':
self.addChunk('_filter = self._CHEETAH__initialFilter')
else:
# is string representing the name of a builtin filter
self.addChunk('filterName = ' + repr(theFilter))
- self.addChunk('if "' + theFilter + '" in self._CHEETAH__filters:')
+ self.addChunk(
+ 'if "' + theFilter + '" in self._CHEETAH__filters:')
self.indent()
- self.addChunk('_filter = self._CHEETAH__currentFilter = self._CHEETAH__filters[filterName]')
+ self.addChunk(
+ '_filter = self._CHEETAH__currentFilter = '
+ 'self._CHEETAH__filters[filterName]')
self.dedent()
self.addChunk('else:')
self.indent()
- self.addChunk('_filter = self._CHEETAH__currentFilter'
- +' = \\\n\t\t\tself._CHEETAH__filters[filterName] = '
- + 'getattr(self._CHEETAH__filtersLib, filterName)(self).filter')
+ self.addChunk(
+ '_filter = self._CHEETAH__currentFilter'
+ + ' = \\\n\t\t\tself._CHEETAH__filters[filterName] = '
+ + 'getattr(self._CHEETAH__filtersLib, filterName)'
+ + '(self).filter')
self.dedent()
def closeFilterBlock(self):
ID, filterDetails = self._filterRegionsStack.pop()
- #self.addChunk('_filter = self._CHEETAH__initialFilter')
- #self.addChunk('_filter = _orig_filter%(ID)s'%locals())
- self.addChunk('_filter = self._CHEETAH__currentFilter = _orig_filter%(ID)s'%locals())
+ # self.addChunk('_filter = self._CHEETAH__initialFilter')
+ # self.addChunk('_filter = _orig_filter%(ID)s'%locals())
+ self.addChunk(
+ '_filter = self._CHEETAH__currentFilter = _orig_filter%(ID)s'
+ % locals())
+
class AutoMethodCompiler(MethodCompiler):
def _setupState(self):
MethodCompiler._setupState(self)
- self._argStringList = [ ("self", None) ]
+ self._argStringList = [("self", None)]
self._streamingEnabled = True
self._isClassMethod = None
self._isStaticMethod = None
def _useKWsDictArgForPassingTrans(self):
- alreadyHasTransArg = [argname for argname, defval in self._argStringList
- if argname=='trans']
- return (self.methodName()!='respond'
+ alreadyHasTransArg = [
+ argname for argname, defval in self._argStringList
+ if argname == 'trans']
+ return (self.methodName() != 'respond'
and not alreadyHasTransArg
and self.setting('useKWsDictArgForPassingTrans'))
@@ -1038,9 +1124,10 @@ class AutoMethodCompiler(MethodCompiler):
if self._initialMethodComment:
self.addChunk(self._initialMethodComment)
- if self._streamingEnabled and not self.isClassMethod() and not self.isStaticMethod():
+ if self._streamingEnabled and \
+ not self.isClassMethod() and not self.isStaticMethod():
if self._useKWsDictArgForPassingTrans() and self._kwargsName:
- self.addChunk('trans = %s.get("trans")'%self._kwargsName)
+ self.addChunk('trans = %s.get("trans")' % self._kwargsName)
self.addChunk('if (not trans and not self._CHEETAH__isBuffering'
' and not callable(self.transaction)):')
self.indent()
@@ -1076,13 +1163,13 @@ class AutoMethodCompiler(MethodCompiler):
else:
self.addChunk('_filter = self._CHEETAH__currentFilter')
self.addChunk('')
- self.addChunk("#" *40)
+ self.addChunk("#"*40)
self.addChunk('## START - generated method body')
self.addChunk('')
def _addAutoCleanupCode(self):
self.addChunk('')
- self.addChunk("#" *40)
+ self.addChunk("#"*40)
self.addChunk('## END - generated method body')
self.addChunk('')
@@ -1091,10 +1178,11 @@ class AutoMethodCompiler(MethodCompiler):
self.addChunk('')
def addStop(self, expr=None):
- self.addChunk('return _dummyTrans and trans.response().getvalue() or ""')
+ self.addChunk(
+ 'return _dummyTrans and trans.response().getvalue() or ""')
def addMethArg(self, name, defVal=None):
- self._argStringList.append( (name, defVal) )
+ self._argStringList.append((name, defVal))
def methodSignature(self):
argStringChunks = []
@@ -1105,7 +1193,7 @@ class AutoMethodCompiler(MethodCompiler):
if chunk == 'self' and self.isStaticMethod():
# Skip the "self" method for @staticmethod decorators
continue
- if not arg[1] == None:
+ if arg[1] is not None:
chunk += '=' + arg[1]
argStringChunks.append(chunk)
argString = (', ').join(argStringChunks)
@@ -1121,7 +1209,7 @@ class AutoMethodCompiler(MethodCompiler):
##################################################
-## CLASS COMPILERS
+# CLASS COMPILERS
_initMethod_initCheetah = """\
if not self._CHEETAH__instanceInitialized:
@@ -1132,6 +1220,7 @@ if not self._CHEETAH__instanceInitialized:
self._initCheetahInstance(**cheetahKWArgs)
""".replace('\n', '\n'+' '*8)
+
class ClassCompiler(GenUtils):
methodCompilerClass = AutoMethodCompiler
methodCompilerClassForInit = MethodCompiler
@@ -1149,7 +1238,8 @@ class ClassCompiler(GenUtils):
self._setupState()
methodCompiler = self._spawnMethodCompiler(
mainMethodName,
- initialMethodComment='## CHEETAH: main method generated for this template')
+ initialMethodComment='## CHEETAH: main method '
+ 'generated for this template')
self._setActiveMethodCompiler(methodCompiler)
if fileName and self.setting('monitorSrcFile'):
@@ -1164,14 +1254,15 @@ class ClassCompiler(GenUtils):
WARNING: Use .setMethods to assign the attributes of the MethodCompiler
- from the methods of this class!!! or you will be assigning to attributes
- of this object instead."""
-
+ from the methods of this class!!! or you will be assigning to
+ attributes of this object instead.
+ """
if name in self.__dict__:
return self.__dict__[name]
elif hasattr(self.__class__, name):
return getattr(self.__class__, name)
- elif self._activeMethodsList and hasattr(self._activeMethodsList[-1], name):
+ elif self._activeMethodsList and \
+ hasattr(self._activeMethodsList[-1], name):
return getattr(self._activeMethodsList[-1], name)
else:
raise AttributeError(name)
@@ -1191,15 +1282,18 @@ class ClassCompiler(GenUtils):
'_CHEETAH_versionTuple = __CHEETAH_versionTuple__')
if self.setting('addTimestampsToCompilerOutput'):
- self._generatedAttribs.append('_CHEETAH_genTime = __CHEETAH_genTime__')
- self._generatedAttribs.append('_CHEETAH_genTimestamp = __CHEETAH_genTimestamp__')
+ self._generatedAttribs.append(
+ '_CHEETAH_genTime = __CHEETAH_genTime__')
+ self._generatedAttribs.append(
+ '_CHEETAH_genTimestamp = __CHEETAH_genTimestamp__')
self._generatedAttribs.append('_CHEETAH_src = __CHEETAH_src__')
self._generatedAttribs.append(
'_CHEETAH_srcLastModified = __CHEETAH_srcLastModified__')
if self.setting('templateMetaclass'):
- self._generatedAttribs.append('__metaclass__ = '+self.setting('templateMetaclass'))
+ self._generatedAttribs.append(
+ '__metaclass__ = '+self.setting('templateMetaclass'))
self._initMethChunks = []
self._blockMetaData = {}
self._errorCatcherCount = 0
@@ -1212,16 +1306,19 @@ class ClassCompiler(GenUtils):
self._setupInitMethod()
if self._mainMethodName == 'respond':
if self.setting('setup__str__method'):
- self._generatedAttribs.append('def __str__(self): return self.respond()')
+ self._generatedAttribs.append(
+ 'def __str__(self): return self.respond()')
self.addAttribute('_mainCheetahMethod_for_' + self._className +
- '= ' + repr(self._mainMethodName) )
+ ' = ' + repr(self._mainMethodName))
def _setupInitMethod(self):
- __init__ = self._spawnMethodCompiler('__init__',
- klass=self.methodCompilerClassForInit)
+ __init__ = self._spawnMethodCompiler(
+ '__init__', klass=self.methodCompilerClassForInit)
__init__.setMethodSignature("def __init__(self, *args, **KWs)")
- __init__.addChunk('super(%s, self).__init__(*args, **KWs)' % self._className)
- __init__.addChunk(_initMethod_initCheetah % {'className' : self._className})
+ __init__.addChunk(
+ 'super(%s, self).__init__(*args, **KWs)' % self._className)
+ __init__.addChunk(
+ _initMethod_initCheetah % {'className': self._className})
for chunk in self._initMethChunks:
__init__.addChunk(chunk)
__init__.cleanupState()
@@ -1231,16 +1328,19 @@ class ClassCompiler(GenUtils):
# @@TR: this stuff needs auditing for Cheetah 2.0
# the first bit is added to init
self.addChunkToInit('self._filePath = ' + repr(fileName))
- self.addChunkToInit('self._fileMtime = ' + str(getmtime(fileName)) )
+ self.addChunkToInit('self._fileMtime = ' + str(getmtime(fileName)))
- # the rest is added to the main output method of the class ('mainMethod')
+ # the rest is added to the main output method of the class
+ # ('mainMethod')
self.addChunk('if exists(self._filePath) and ' +
'getmtime(self._filePath) > self._fileMtime:')
self.indent()
- self.addChunk('self._compile(file=self._filePath, moduleName='+self._className + ')')
self.addChunk(
- 'write(getattr(self, self._mainCheetahMethod_for_' + self._className +
- ')(trans=trans))')
+ 'self._compile(file=self._filePath, moduleName='
+ + self._className + ')')
+ self.addChunk(
+ 'write(getattr(self, self._mainCheetahMethod_for_'
+ + self._className + ')(trans=trans))')
self.addStop()
self.dedent()
@@ -1256,19 +1356,20 @@ class ClassCompiler(GenUtils):
def setMainMethodName(self, methodName):
if methodName == self._mainMethodName:
return
- ## change the name in the methodCompiler and add new reference
+ # change the name in the methodCompiler and add new reference
mainMethod = self._methodsIndex[self._mainMethodName]
mainMethod.setMethodName(methodName)
self._methodsIndex[methodName] = mainMethod
- ## make sure that fileUpdate code still works properly:
- chunkToChange = ('write(self.' + self._mainMethodName + '(trans=trans))')
+ # make sure that fileUpdate code still works properly:
+ chunkToChange = (
+ 'write(self.' + self._mainMethodName + '(trans=trans))')
chunks = mainMethod._methodBodyChunks
if chunkToChange in chunks:
for i in range(len(chunks)):
if chunks[i] == chunkToChange:
chunks[i] = ('write(self.' + methodName + '(trans=trans))')
- ## get rid of the old reference and update self._mainMethodName
+ # get rid of the old reference and update self._mainMethodName
del self._methodsIndex[self._mainMethodName]
self._mainMethodName = methodName
@@ -1277,7 +1378,6 @@ class ClassCompiler(GenUtils):
for argName, defVal in argsList:
mainMethodCompiler.addMethArg(argName, defVal)
-
def _spawnMethodCompiler(self, methodName, klass=None,
initialMethodComment=None):
if klass is None:
@@ -1302,8 +1402,8 @@ class ClassCompiler(GenUtils):
def _swallowMethodCompiler(self, methodCompiler, pos=None):
methodCompiler.cleanupState()
- if pos==None:
- self._finishedMethodsList.append( methodCompiler )
+ if pos is None:
+ self._finishedMethodsList.append(methodCompiler)
else:
self._finishedMethodsList.insert(pos, methodCompiler)
return methodCompiler
@@ -1327,42 +1427,44 @@ class ClassCompiler(GenUtils):
self._decoratorsForNextMethod.append(decoratorExpr)
def addClassDocString(self, line):
- self._classDocStringLines.append( line.replace('%', '%%'))
+ self._classDocStringLines.append(line.replace('%', '%%'))
def addChunkToInit(self, chunk):
self._initMethChunks.append(chunk)
def addAttribute(self, attribExpr):
- ## first test to make sure that the user hasn't used any fancy Cheetah syntax
- # (placeholders, directives, etc.) inside the expression
+ # First test to make sure that the user hasn't used
+ # any fancy Cheetah syntax (placeholders, directives, etc.)
+ # inside the expression
if attribExpr.find('VFN(') != -1 or attribExpr.find('VFFSL(') != -1:
raise ParseError(self,
'Invalid #attr directive.' +
' It should only contain simple Python literals.')
- ## now add the attribute
+ # now add the attribute
self._generatedAttribs.append(attribExpr)
def addSuper(self, argsList, parserComment=None):
- className = self._className #self._baseClass
+ className = self._className # self._baseClass
methodName = self._getActiveMethodCompiler().methodName()
argStringChunks = []
for arg in argsList:
chunk = arg[0]
- if not arg[1] == None:
+ if arg[1] is not None:
chunk += '=' + arg[1]
argStringChunks.append(chunk)
argString = ','.join(argStringChunks)
self.addFilteredChunk(
- 'super(%(className)s, self).%(methodName)s(%(argString)s)'%locals())
+ 'super(%(className)s, self).%(methodName)s(%(argString)s)'
+ % locals())
def addErrorCatcherCall(self, codeChunk, rawCode='', lineCol=''):
if rawCode in self._placeholderToErrorCatcherMap:
methodName = self._placeholderToErrorCatcherMap[rawCode]
if not self.setting('outputRowColComments'):
self._methodsIndex[methodName].addMethDocString(
- 'plus at line %s, col %s'%lineCol)
+ 'plus at line %s, col %s' % lineCol)
return methodName
self._errorCatcherCount += 1
@@ -1373,21 +1475,23 @@ class ClassCompiler(GenUtils):
methodName,
klass=MethodCompiler,
initialMethodComment=('## CHEETAH: Generated from ' + rawCode +
- ' at line %s, col %s'%lineCol + '.')
+ ' at line %s, col %s' % lineCol + '.')
)
- catcherMeth.setMethodSignature('def ' + methodName +
- '(self, localsDict={})')
- # is this use of localsDict right?
+ catcherMeth.setMethodSignature(
+ 'def ' + methodName +
+ '(self, localsDict={})') # is this use of localsDict right?
catcherMeth.addChunk('try:')
catcherMeth.indent()
catcherMeth.addChunk("return eval('''" + codeChunk +
"''', globals(), localsDict)")
catcherMeth.dedent()
- catcherMeth.addChunk('except self._CHEETAH__errorCatcher.exceptions() as e:')
+ catcherMeth.addChunk(
+ 'except self._CHEETAH__errorCatcher.exceptions() as e:')
catcherMeth.indent()
- catcherMeth.addChunk("return self._CHEETAH__errorCatcher.warn(exc_val=e, code= " +
- repr(codeChunk) + " , rawCode= " +
- repr(rawCode) + " , lineCol=" + str(lineCol) +")")
+ catcherMeth.addChunk(
+ "return self._CHEETAH__errorCatcher.warn(exc_val=e, code= " +
+ repr(codeChunk) + " , rawCode= " +
+ repr(rawCode) + " , lineCol=" + str(lineCol) + ")")
catcherMeth.cleanupState()
@@ -1408,20 +1512,19 @@ class ClassCompiler(GenUtils):
methCompiler.addStrConst(endMarker[0] + methodName + endMarker[1])
self._swallowMethodCompiler(methCompiler)
- #metaData = self._blockMetaData[methodName]
- #rawDirective = metaData['raw']
- #lineCol = metaData['lineCol']
+ # metaData = self._blockMetaData[methodName]
+ # rawDirective = metaData['raw']
+ # lineCol = metaData['lineCol']
- ## insert the code to call the block, caching if #cache directive is on
+ # insert the code to call the block, caching if #cache directive is on
codeChunk = 'self.' + methodName + '(trans=trans)'
self.addChunk(codeChunk)
- #self.appendToPrevChunk(' # generated from ' + repr(rawDirective) )
- #if self.setting('outputRowColComments'):
+ # self.appendToPrevChunk(' # generated from ' + repr(rawDirective) )
+ # if self.setting('outputRowColComments'):
# self.appendToPrevChunk(' at line %s, col %s' % lineCol + '.')
-
- ## code wrapping methods
+ # code wrapping methods
def classDef(self):
if self._classDef:
@@ -1437,6 +1540,7 @@ class ClassCompiler(GenUtils):
classDefChunks = [self.classSignature(),
self.classDocstring(),
]
+
def addMethods():
classDefChunks.extend([
ind + '#'*50,
@@ -1444,6 +1548,7 @@ class ClassCompiler(GenUtils):
'\n',
self.methodDefs(),
])
+
def addAttributes():
classDefChunks.extend([
ind + '#'*50,
@@ -1462,7 +1567,6 @@ class ClassCompiler(GenUtils):
self._classDef = classDef
return classDef
-
def classSignature(self):
return "class %s(%s):" % (self.className(), self._baseClass)
@@ -1473,27 +1577,30 @@ class ClassCompiler(GenUtils):
docStr = ('%(ind)s"""\n%(ind)s' +
'\n%(ind)s'.join(self._classDocStringLines) +
'\n%(ind)s"""\n'
- ) % {'ind':ind}
- return docStr
+ ) % {'ind': ind}
+ return docStr
def methodDefs(self):
- methodDefs = [methGen.methodDef() for methGen in self._finishedMethods()]
+ methodDefs = [
+ methGen.methodDef() for methGen in self._finishedMethods()]
return '\n\n'.join(methodDefs)
def attributes(self):
try:
attribs = [self.setting('indentationStep') + str(attrib)
- for attrib in self._generatedAttribs ]
+ for attrib in self._generatedAttribs]
except UnicodeEncodeError:
attribs = [self.setting('indentationStep') + unicode(attrib)
- for attrib in self._generatedAttribs ]
+ for attrib in self._generatedAttribs]
return '\n\n'.join(attribs)
+
class AutoClassCompiler(ClassCompiler):
pass
##################################################
-## MODULE COMPILERS
+# MODULE COMPILERS
+
class ModuleCompiler(SettingsManager, GenUtils):
@@ -1502,11 +1609,11 @@ class ModuleCompiler(SettingsManager, GenUtils):
def __init__(self, source=None, file=None,
moduleName='DynamicallyCompiledCheetahTemplate',
- mainClassName=None, # string
- mainMethodName=None, # string
- baseclassName=None, # string
- extraImportStatements=None, # list of strings
- settings=None # dict
+ mainClassName=None, # string
+ mainMethodName=None, # string
+ baseclassName=None, # string
+ extraImportStatements=None, # list of strings
+ settings=None # dict
):
super(ModuleCompiler, self).__init__()
if settings:
@@ -1520,8 +1627,8 @@ class ModuleCompiler(SettingsManager, GenUtils):
"\nYou don't have the C version of NameMapper installed! "
"I'm disabling Cheetah's useStackFrames option as it is "
"painfully slow with the Python version of NameMapper. "
- "You should get a copy of Cheetah with the compiled C version of NameMapper."
- )
+ "You should get a copy of Cheetah "
+ "with compiled C version of NameMapper.")
self.setSetting('useStackFrames', False)
self._compiled = False
@@ -1540,31 +1647,35 @@ class ModuleCompiler(SettingsManager, GenUtils):
if source and file:
raise TypeError("Cannot compile from a source string AND file.")
- elif isinstance(file, string_type): # it's a filename.
+ elif isinstance(file, string_type): # it's a filename.
encoding = self.settings().get('encoding')
if encoding:
f = codecs.open(file, 'r', encoding=encoding)
else:
- f = open(file, 'r') # if no encoding is specified, use the
- # builtin open function, which will
- # effectively read data as a bytestream
+ # if no encoding is specified, use the builtin open function
+ f = open(file, 'r')
source = f.read()
f.close()
self._filePath = file
self._fileMtime = os.path.getmtime(file)
elif hasattr(file, 'read'):
- source = file.read() # Can't set filename or mtime--they're not accessible.
+ # Can't set filename or mtime -- they're not accessible
+ source = file.read()
elif file:
- raise TypeError("'file' argument must be a filename string or file-like object")
+ raise TypeError(
+ "'file' argument must be a filename string or file-like object"
+ )
if self._filePath:
- self._fileDirName, self._fileBaseName = os.path.split(self._filePath)
- self._fileBaseNameRoot, self._fileBaseNameExt = os.path.splitext(self._fileBaseName)
+ self._fileDirName, self._fileBaseName = \
+ os.path.split(self._filePath)
+ self._fileBaseNameRoot, self._fileBaseNameExt = \
+ os.path.splitext(self._fileBaseName)
if not isinstance(source, string_type):
+ # By converting to unicode here we allow objects
+ # such as other Templates to be passed in
source = unicode(source)
- # by converting to string here we allow objects such as other Templates
- # to be passed in
# Handle the #indent directive by converting it to other directives.
# (Over the long term we'll make it a real directive.)
@@ -1590,14 +1701,17 @@ class ModuleCompiler(SettingsManager, GenUtils):
if isinstance(source, bytes):
source = source.decode(encoding)
else:
- source = eval(repr(source).encode("ascii","backslashreplace").decode(encoding))
+ source = eval(
+ repr(source).encode("ascii", "backslashreplace")
+ .decode(encoding))
else:
source = unicode(source)
- if source.find('#indent') != -1: #@@TR: undocumented hack
+ if source.find('#indent') != -1: # @@TR: undocumented hack
source = indentize(source)
- self._parser = self.parserClass(source, filename=self._filePath, compiler=self)
+ self._parser = self.parserClass(source, filename=self._filePath,
+ compiler=self)
self._setupCompilerState()
def __getattr__(self, name):
@@ -1605,14 +1719,15 @@ class ModuleCompiler(SettingsManager, GenUtils):
ClassCompiler, and thereby the MethodCompilers as well.
WARNING: Use .setMethods to assign the attributes of the ClassCompiler
- from the methods of this class!!! or you will be assigning to attributes
- of this object instead.
+ from the methods of this class!!! Or you will be assigning to
+ attributes of this object instead.
"""
if name in self.__dict__:
return self.__dict__[name]
elif hasattr(self.__class__, name):
return getattr(self.__class__, name)
- elif self._activeClassesList and hasattr(self._activeClassesList[-1], name):
+ elif self._activeClassesList and \
+ hasattr(self._activeClassesList[-1], name):
return getattr(self._activeClassesList[-1], name)
else:
raise AttributeError(name)
@@ -1642,11 +1757,14 @@ class ModuleCompiler(SettingsManager, GenUtils):
"from os.path import getmtime, exists",
"import time",
"import types",
- "from Cheetah.Version import MinCompatibleVersion as RequiredCheetahVersion",
- "from Cheetah.Version import MinCompatibleVersionTuple as RequiredCheetahVersionTuple",
+ "from Cheetah.Version import MinCompatibleVersion as "
+ "RequiredCheetahVersion",
+ "from Cheetah.Version import MinCompatibleVersionTuple "
+ "as RequiredCheetahVersionTuple",
"from Cheetah.Template import Template",
"from Cheetah.DummyTransaction import *",
- "from Cheetah.NameMapper import NotFound, valueForName, valueFromSearchList, valueFromFrameOrSearchList",
+ "from Cheetah.NameMapper import NotFound, "
+ "valueForName, valueFromSearchList, valueFromFrameOrSearchList",
"from Cheetah.CacheRegion import CacheRegion",
"import Cheetah.Filters as Filters",
"import Cheetah.ErrorCatchers as ErrorCatchers",
@@ -1705,7 +1823,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
def _swallowClassCompiler(self, classCompiler):
classCompiler.cleanupState()
- self._finishedClassesList.append( classCompiler )
+ self._finishedClassesList.append(classCompiler)
self._finishedClassIndex[classCompiler.className()] = classCompiler
return classCompiler
@@ -1725,7 +1843,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
else:
self._importedVarNames.extend(varNames)
- ## methods for adding stuff to the module and class definitions
+ # methods for adding stuff to the module and class definitions
def setBaseClass(self, baseClassName):
if self._mainMethodNameArg:
@@ -1738,29 +1856,33 @@ class ModuleCompiler(SettingsManager, GenUtils):
baseClassName = handler(compiler=self, baseClassName=baseClassName)
self._getActiveClassCompiler().setBaseClass(baseClassName)
elif (not self.setting('autoImportForExtendsDirective')
- or baseClassName=='object' or baseClassName in self.importedVarNames()):
+ or baseClassName == 'object'
+ or baseClassName in self.importedVarNames()):
self._getActiveClassCompiler().setBaseClass(baseClassName)
# no need to import
else:
##################################################
- ## If the #extends directive contains a classname or modulename that isn't
- # in self.importedVarNames() already, we assume that we need to add
- # an implied 'from ModName import ClassName' where ModName == ClassName.
- # - This is the case in WebKit servlet modules.
- # - We also assume that the final . separates the classname from the
- # module name. This might break if people do something really fancy
- # with their dots and namespaces.
+ # If the #extends directive contains a classname or modulename
+ # that isn't in self.importedVarNames() already,
+ # we assume that we need to add an implied
+ # 'from ModName import ClassName' where ModName == ClassName.
+ # - This is the case in WebKit servlet modules.
+ # - We also assume that the final . separates the classname
+ # from the module name.
+ # This might break if people do something really fancy
+ # with their dots and namespaces.
baseclasses = []
for klass in baseClassName.split(','):
klass = klass.strip()
chunks = klass.split('.')
- if len(chunks)==1:
+ if len(chunks) == 1:
baseclasses.append(klass)
if klass not in self.importedVarNames():
modName = klass
# we assume the class name to be the module name
# and that it's not a builtin:
- importStatement = "from %s import %s" % (modName, klass)
+ importStatement = "from %s import %s" % (
+ modName, klass)
self.addImportStatement(importStatement)
self.addImportedVarNames((klass,))
else:
@@ -1775,27 +1897,26 @@ class ModuleCompiler(SettingsManager, GenUtils):
else:
modName += '.'+chunk
if needToAddImport:
- modName, finalClassName = '.'.join(chunks[:-1]), chunks[-1]
- #if finalClassName != chunks[:-1][-1]:
+ modName, finalClassName = (
+ '.'.join(chunks[:-1]), chunks[-1])
+ # if finalClassName != chunks[:-1][-1]:
if finalClassName != chunks[-2]:
# we assume the class name to be the module name
modName = '.'.join(chunks)
baseclasses.append(finalClassName)
- importStatement = "from %s import %s" % (modName, finalClassName)
+ importStatement = "from %s import %s" % (
+ modName, finalClassName)
self.addImportStatement(importStatement)
- self.addImportedVarNames( [finalClassName,] )
+ self.addImportedVarNames([finalClassName])
self._getActiveClassCompiler().setBaseClass(', '.join(baseclasses))
def setCompilerSetting(self, key, valueExpr):
- self.setSetting(key, eval(valueExpr) )
+ self.setSetting(key, eval(valueExpr))
self._parser.configureParser()
def setCompilerSettings(self, keywords, settingsStr):
KWs = keywords
- merge = True
- if 'nomerge' in KWs:
- merge = False
if 'reset' in KWs:
# @@TR: this is actually caught by the parser at the moment.
@@ -1847,15 +1968,20 @@ class ModuleCompiler(SettingsManager, GenUtils):
def addImportStatement(self, impStatement):
settings = self.settings()
if not self._methodBodyChunks or settings.get('useLegacyImportMode'):
- # In the case where we are importing inline in the middle of a source block
- # we don't want to inadvertantly import the module at the top of the file either
+ # In the case where we are importing inline
+ # in the middle of a source block
+ # we don't want to inadvertantly import the module
+ # at the top of the file either
self._importStatements.append(impStatement)
- #@@TR 2005-01-01: there's almost certainly a cleaner way to do this!
- importVarNames = impStatement[impStatement.find('import') + len('import'):].split(',')
- importVarNames = [var.split()[-1] for var in importVarNames] # handles aliases
+ # @@TR 2005-01-01: there's almost certainly a cleaner way to do this!
+ importVarNames = impStatement[
+ impStatement.find('import') + len('import'):].split(',')
+ # handle aliases
+ importVarNames = [var.split()[-1] for var in importVarNames]
importVarNames = [var for var in importVarNames if not var == '*']
- self.addImportedVarNames(importVarNames, raw_statement=impStatement) #used by #extend for auto-imports
+ # used by #extend for auto-imports
+ self.addImportedVarNames(importVarNames, raw_statement=impStatement)
def addAttribute(self, attribName, expr):
self._getActiveClassCompiler().addAttribute(attribName + ' =' + expr)
@@ -1891,7 +2017,7 @@ class ModuleCompiler(SettingsManager, GenUtils):
for line in comm.splitlines():
addLine(line)
- ## methods for module code wrapping
+ # methods for module code wrapping
def getModuleCode(self):
if not self._compiled:
@@ -1905,15 +2031,17 @@ class ModuleCompiler(SettingsManager, GenUtils):
def wrapModuleDef(self):
self.addSpecialVar('CHEETAH_docstring', self.setting('defDocStrMsg'))
- self.addModuleGlobal('__CHEETAH_version__ = %r'%Version)
- self.addModuleGlobal('__CHEETAH_versionTuple__ = %r'%(VersionTuple,))
+ self.addModuleGlobal('__CHEETAH_version__ = %r' % Version)
+ self.addModuleGlobal('__CHEETAH_versionTuple__ = %r' % (VersionTuple,))
if self.setting('addTimestampsToCompilerOutput'):
- self.addModuleGlobal('__CHEETAH_genTime__ = %r'%time.time())
- self.addModuleGlobal('__CHEETAH_genTimestamp__ = %r'%self.timestamp())
+ self.addModuleGlobal('__CHEETAH_genTime__ = %r' % time.time())
+ self.addModuleGlobal(
+ '__CHEETAH_genTimestamp__ = %r' % self.timestamp())
if self._filePath:
timestamp = self.timestamp(self._fileMtime)
- self.addModuleGlobal('__CHEETAH_src__ = %r'%self._filePath)
- self.addModuleGlobal('__CHEETAH_srcLastModified__ = %r'%timestamp)
+ self.addModuleGlobal('__CHEETAH_src__ = %r' % self._filePath)
+ self.addModuleGlobal(
+ '__CHEETAH_srcLastModified__ = %r' % timestamp)
else:
self.addModuleGlobal('__CHEETAH_src__ = None')
self.addModuleGlobal('__CHEETAH_srcLastModified__ = None')
@@ -1944,19 +2072,22 @@ if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
## END CLASS DEFINITION
if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
- templateAPIClass = getattr(%(mainClassName)s, '_CHEETAH_templateClass', Template)
+ templateAPIClass = getattr(%(mainClassName)s,
+ '_CHEETAH_templateClass',
+ Template)
templateAPIClass._addCheetahPlumbingCodeToClass(%(mainClassName)s)
%(footer)s
-""" % {'header': self.moduleHeader(),
- 'docstring': self.moduleDocstring(),
- 'specialVars': self.specialVars(),
- 'imports': self.importStatements(),
- 'constants': self.moduleConstants(),
- 'classes': self.classDefs(),
- 'footer': self.moduleFooter(),
- 'mainClassName': self._mainClassName,
- }
+""" % {
+ 'header': self.moduleHeader(),
+ 'docstring': self.moduleDocstring(),
+ 'specialVars': self.specialVars(),
+ 'imports': self.importStatements(),
+ 'constants': self.moduleConstants(),
+ 'classes': self.classDefs(),
+ 'footer': self.moduleFooter(),
+ 'mainClassName': self._mainClassName,
+ }
self._moduleDef = moduleDef
return moduleDef
@@ -1974,7 +2105,7 @@ if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
header += (
'#' + ' '*offSet +
- ('\n#'+ ' '*offSet).join(self._moduleHeaderLines) + '\n')
+ ('\n#' + ' '*offSet).join(self._moduleHeaderLines) + '\n')
return header
@@ -1991,7 +2122,7 @@ if not hasattr(%(mainClassName)s, '_initCheetahAttributes'):
theVars = self._specialVars
keys = sorted(theVars.keys())
for key in keys:
- chunks.append(key + ' = ' + repr(theVars[key]) )
+ chunks.append(key + ' = ' + repr(theVars[key]))
return '\n'.join(chunks)
def importStatements(self):
@@ -2016,10 +2147,10 @@ if __name__ == '__main__':
from Cheetah.TemplateCmdLineIface import CmdLineIface
CmdLineIface(templateObj=%(className)s()).run()
-""" % {'className':self._mainClassName}
+""" % {'className': self._mainClassName}
##################################################
-## Make Compiler an alias for ModuleCompiler
+# Make Compiler an alias for ModuleCompiler
Compiler = ModuleCompiler
diff --git a/Cheetah/DirectiveAnalyzer.py b/Cheetah/DirectiveAnalyzer.py
index 2009336..da513a2 100755
--- a/Cheetah/DirectiveAnalyzer.py
+++ b/Cheetah/DirectiveAnalyzer.py
@@ -3,16 +3,11 @@
import os
import pprint
-try:
- from functools import reduce
-except ImportError:
- # Assume we have reduce
- pass
-
from Cheetah import Parser
from Cheetah import Compiler
from Cheetah import Template
+
class Analyzer(Parser.Parser):
def __init__(self, *args, **kwargs):
self.calls = {}
@@ -26,6 +21,7 @@ class Analyzer(Parser.Parser):
self.calls[directive] = 1
super(Analyzer, self).eatDirective()
+
class AnalysisCompiler(Compiler.ModuleCompiler):
parserClass = Analyzer
@@ -34,6 +30,7 @@ def analyze(source):
klass = Template.Template.compile(source, compilerClass=AnalysisCompiler)
return klass._CHEETAH_compilerInstance._parser.calls
+
def main_file(f):
fd = open(f, 'r')
try:
@@ -51,10 +48,12 @@ def _find_templates(directory, suffix):
continue
yield root + os.path.sep + f
+
def _analyze_templates(iterable):
for template in iterable:
yield main_file(template)
+
def main_dir(opts):
results = _analyze_templates(_find_templates(opts.dir, opts.suffix))
totals = {}
@@ -73,11 +72,12 @@ def main():
from optparse import OptionParser
op = OptionParser()
op.add_option('-f', '--file', dest='file', default=None,
- help='Specify a single file to analyze')
+ help='Specify a single file to analyze')
op.add_option('-d', '--dir', dest='dir', default=None,
- help='Specify a directory of templates to analyze')
+ help='Specify a directory of templates to analyze')
op.add_option('--suffix', default='tmpl', dest='suffix',
- help='Specify a custom template file suffix for the -d option (default: "tmpl")')
+ help='Specify a custom template file suffix '
+ 'for the -d option (default: "tmpl")')
opts, args = op.parse_args()
if not opts.file and not opts.dir:
@@ -95,4 +95,3 @@ def main():
if __name__ == '__main__':
main()
-
diff --git a/Cheetah/Django.py b/Cheetah/Django.py
index ad19241..f7b2826 100644
--- a/Cheetah/Django.py
+++ b/Cheetah/Django.py
@@ -1,5 +1,6 @@
import Cheetah.Template
+
def render(template_file, **kwargs):
'''
Cheetah.Django.render() takes the template filename
diff --git a/Cheetah/DummyTransaction.py b/Cheetah/DummyTransaction.py
index c0a8e96..e6c8d1e 100644
--- a/Cheetah/DummyTransaction.py
+++ b/Cheetah/DummyTransaction.py
@@ -9,17 +9,18 @@ specific DummyTransaction or DummyResponse behavior
'''
import logging
-import types
from Cheetah.compat import unicode
+
class DummyResponseFailure(Exception):
pass
+
class DummyResponse(object):
'''
- A dummy Response class is used by Cheetah in place of real Webware
- Response objects when the Template obj is not used directly as a Webware
- servlet
+ A dummy Response class is used by Cheetah in place of real Webware
+ Response objects when the Template obj is not used directly as a Webware
+ servlet
'''
def __init__(self):
self._outputChunks = []
@@ -49,20 +50,22 @@ class DummyResponse(object):
self._outputChunks.append(value)
def writeln(self, txt):
- write(txt)
- write('\n')
+ self.write(txt)
+ self.write('\n')
def getvalue(self, outputChunks=None):
chunks = outputChunks or self._outputChunks
try:
return u''.join(chunks)
- except UnicodeDecodeError as ex:
- logging.debug('Trying to work around a UnicodeDecodeError in getvalue()')
- logging.debug('...perhaps you could fix "%s" while you\'re debugging')
+ except UnicodeDecodeError:
+ logging.debug(
+ 'Trying to work around a UnicodeDecodeError in getvalue()')
+ logging.debug(
+ '...perhaps you could fix "%s" while you\'re debugging')
return ''.join((self.safeConvert(c) for c in chunks))
def writelines(self, *lines):
- ## not used
+ # not used
[self.writeln(ln) for ln in lines]
@@ -102,8 +105,8 @@ class TransformerResponse(DummyResponse):
class TransformerTransaction(object):
def __init__(self, *args, **kwargs):
self._response = None
+
def response(self):
if self._response:
return self._response
return TransformerResponse()
-
diff --git a/Cheetah/ErrorCatchers.py b/Cheetah/ErrorCatchers.py
index df44e76..835683f 100644
--- a/Cheetah/ErrorCatchers.py
+++ b/Cheetah/ErrorCatchers.py
@@ -2,9 +2,11 @@
import time
from Cheetah.NameMapper import NotFound
+
class Error(Exception):
pass
+
class ErrorCatcher:
_exceptionsToCatch = (NotFound,)
@@ -16,16 +18,22 @@ class ErrorCatcher:
def warn(self, exc_val, code, rawCode, lineCol):
return rawCode
-## make an alias
+
+
+# make an alias
Echo = ErrorCatcher
+
class BigEcho(ErrorCatcher):
def warn(self, exc_val, code, rawCode, lineCol):
return "="*15 + "&lt;" + rawCode + " could not be found&gt;" + "="*15
+
class KeyError(ErrorCatcher):
def warn(self, exc_val, code, rawCode, lineCol):
- raise KeyError("no '%s' in this Template Object's Search List" % rawCode)
+ raise KeyError(
+ "no '%s' in this Template Object's Search List" % rawCode)
+
class ListErrors(ErrorCatcher):
"""Accumulate a list of errors."""
@@ -46,5 +54,3 @@ class ListErrors(ErrorCatcher):
def listErrors(self):
"""Return the list of errors."""
return self._errors
-
-
diff --git a/Cheetah/FileUtils.py b/Cheetah/FileUtils.py
index 70b7f19..c0f2afb 100644
--- a/Cheetah/FileUtils.py
+++ b/Cheetah/FileUtils.py
@@ -1,16 +1,17 @@
from glob import glob
import os
-from os import listdir
import os.path
import re
from tempfile import mktemp
from Cheetah.compat import string_type
-def _escapeRegexChars(txt,
- escapeRE=re.compile(r'([\$\^\*\+\.\?\{\}\[\]\(\)\|\\])')):
+
+def _escapeRegexChars(
+ txt, escapeRE=re.compile(r'([\$\^\*\+\.\?\{\}\[\]\(\)\|\\])')):
return escapeRE.sub(r'\\\1', txt)
+
def findFiles(*args, **kw):
"""Recursively find all the files matching a glob pattern.
@@ -19,6 +20,7 @@ def findFiles(*args, **kw):
return FileFinder(*args, **kw).files()
+
def replaceStrInFiles(files, theStr, repl):
"""Replace all instances of 'theStr' with 'repl' for each file in the 'files'
@@ -32,6 +34,7 @@ def replaceStrInFiles(files, theStr, repl):
pattern = _escapeRegexChars(theStr)
return FindAndReplace(files, pattern, repl).results()
+
def replaceRegexInFiles(files, pattern, repl):
"""Replace all instances of regex 'pattern' with 'repl' for each file in the
@@ -46,7 +49,7 @@ def replaceRegexInFiles(files, pattern, repl):
##################################################
-## CLASSES
+# CLASSES
class FileFinder:
@@ -74,7 +77,7 @@ class FileFinder:
join=os.path.join,
):
- """Recursively walk through a directory tree and find matching files."""
+ """Recursively walk through a directory tree and find matching files"""
processDir = self.processDir
filterDir = self.filterDir
@@ -84,15 +87,15 @@ class FileFinder:
while pendingDirs:
dir = getDir()
- ## process this dir
+ # process this dir
processDir(dir)
- ## and add sub-dirs
+ # and add sub-dirs
for baseName in listdir(dir):
fullPath = join(dir, baseName)
if isdir(fullPath):
if filterDir(baseName, fullPath):
- addDir( fullPath )
+ addDir(fullPath)
def filterDir(self, baseName, fullPath):
@@ -104,11 +107,12 @@ class FileFinder:
def processDir(self, dir, glob=glob):
extend = self._files.extend
for pattern in self._globPatterns:
- extend( glob(os.path.join(dir, pattern)) )
+ extend(glob(os.path.join(dir, pattern)))
def files(self):
return self._files
+
class _GenSubberFunc:
"""Converts a 'sub' string in the form that one feeds to re.sub (backrefs,
@@ -140,7 +144,7 @@ class _GenSubberFunc:
self._pos += offset
def readTo(self, to, start=None):
- if start == None:
+ if start is None:
start = self._pos
self._pos = to
if self.atEnd():
@@ -148,7 +152,7 @@ class _GenSubberFunc:
else:
return self._src[start:to]
- ## match and get methods
+ # match and get methods
def matchBackref(self):
return self.backrefRE.match(self.src(), self.pos())
@@ -166,7 +170,7 @@ class _GenSubberFunc:
self.setPos(m.end())
return m.group(1)
- ## main parse loop and the eat methods
+ # main parse loop and the eat methods
def parse(self):
while not self.atEnd():
@@ -188,15 +192,15 @@ class _GenSubberFunc:
self.addChunk(repr(strConst))
def eatBackref(self):
- self.addChunk( 'm.group(' + self.getBackref() + ')' )
+ self.addChunk('m.group(' + self.getBackref() + ')')
def eatGroup(self):
- self.addChunk( 'm.group("' + self.getGroup() + '")' )
+ self.addChunk('m.group("' + self.getGroup() + '")')
def addChunk(self, chunk):
self._codeChunks.append(chunk)
- ## code wrapping methods
+ # code wrapping methods
def codeBody(self):
return ', '.join(self._codeChunks)
@@ -206,7 +210,7 @@ class _GenSubberFunc:
def subberFunc(self):
exec(self.code())
- return subber
+ return subber # noqa: F821 undefined name 'subber'
class FindAndReplace:
@@ -222,7 +226,6 @@ class FindAndReplace:
def __init__(self, files, patternOrRE, replacement,
recordResults=True):
-
if isinstance(patternOrRE, string_type):
self._regex = re.compile(patternOrRE)
else:
@@ -237,10 +240,10 @@ class FindAndReplace:
self._results = {}
self._recordResults = recordResults
- ## see if we should use pgrep to do the file matching
+ # see if we should use pgrep to do the file matching
self._usePgrep = False
if (os.popen3('pgrep')[2].read()).startswith('Usage:'):
- ## now check to make sure pgrep understands the pattern
+ # now check to make sure pgrep understands the pattern
tmpFile = mktemp()
open(tmpFile, 'w').write('#')
if not (os.popen3('pgrep "' + pattern + '" ' + tmpFile)[2].read()):
@@ -260,14 +263,14 @@ class FindAndReplace:
pattern = self._pattern
for file in self._files:
if not os.path.isfile(file):
- continue # skip dirs etc.
+ continue # skip dirs etc.
self._currFile = file
found = False
if 'orig' in locals():
del orig
if self._usePgrep:
- if os.popen('pgrep "' + pattern + '" ' + file ).read():
+ if os.popen('pgrep "' + pattern + '" ' + file).read():
found = True
else:
orig = open(file).read()
@@ -292,7 +295,7 @@ class FindAndReplace:
'start': match.start(),
'end': match.end(),
}
- )
+ )
return self._subber(match)
diff --git a/Cheetah/Filters.py b/Cheetah/Filters.py
index 265be42..a0e59a2 100644
--- a/Cheetah/Filters.py
+++ b/Cheetah/Filters.py
@@ -4,13 +4,13 @@
#filter results in output filters Cheetah's $placeholders .
#transform results in a filter on the entirety of the output
'''
-import sys
from Cheetah.compat import unicode
# Additional entities WebSafe knows how to transform. No need to include
# '<', '>' or '&' since those will have been done already.
webSafeEntities = {' ': '&nbsp;', '"': '&quot;'}
+
class Filter(object):
"""A baseclass for the Cheetah Filters."""
@@ -25,7 +25,8 @@ class Filter(object):
def filter(self, val, encoding=None, str=str, **kw):
'''
- Pass Unicode strings through unmolested, unless an encoding is specified.
+ Pass Unicode strings through unmolested,
+ unless an encoding is specified.
'''
if val is None:
return u''
@@ -40,10 +41,12 @@ class Filter(object):
# on and let DummyTransaction worry about it
return str(val)
+
RawOrEncodedUnicode = Filter
EncodeUnicode = Filter
+
class Markdown(EncodeUnicode):
'''
Markdown will change regular strings to `Markdown
@@ -65,29 +68,33 @@ class Markdown(EncodeUnicode):
best
'''
def filter(self, value, **kwargs):
- # This is a bit of a hack to allow outright embedding of the markdown module
+ # This is a bit of a hack to allow outright embedding
+ # of the markdown module.
import markdown
encoded = super(Markdown, self).filter(value, **kwargs)
return markdown.markdown(encoded)
+
class CodeHighlighter(EncodeUnicode):
'''
- The CodeHighlighter filter depends on the "pygments" module which you can
- download and install from: http://pygments.org
+ The CodeHighlighter filter depends on the "pygments" module
+ which you can download and install from: http://pygments.org/
- What the CodeHighlighter assumes the string that it's receiving is source
- code and uses pygments.lexers.guess_lexer() to try to guess which parser
- to use when highlighting it.
+ What the CodeHighlighter assumes the string that it's receiving
+ is source code and uses pygments.lexers.guess_lexer() to try to guess
+ which parser to use when highlighting it.
- CodeHighlighter will return the HTML and CSS to render the code block, syntax
- highlighted, in a browser
+ CodeHighlighter will return the HTML and CSS to render the code block,
+ syntax highlighted, in a browser
- NOTE: I had an issue installing pygments on Linux/amd64/Python 2.6 dealing with
- importing of pygments.lexers, I was able to correct the failure by adding::
+ NOTE: I had an issue installing pygments on Linux/amd64/Python 2.6
+ dealing with importing of pygments.lexers. I was able to correct the
+ failure by adding::
- raise ImportError
+ raise ImportError
- to line 39 of pygments/plugin.py (since importing pkg_resources was causing issues)
+ to line 39 of pygments/plugin.py (since importing pkg_resources was
+ causing issues).
'''
def filter(self, source, **kwargs):
encoded = super(CodeHighlighter, self).filter(source, **kwargs)
@@ -96,7 +103,8 @@ class CodeHighlighter(EncodeUnicode):
from pygments import lexers
from pygments import formatters
except ImportError as ex:
- print('<%s> - Failed to import pygments! (%s)' % (self.__class__.__name__, ex))
+ print('<%s> - Failed to import pygments! (%s)'
+ % (self.__class__.__name__, ex))
print('-- You may need to install it from: http://pygments.org')
return encoded
@@ -111,8 +119,7 @@ class CodeHighlighter(EncodeUnicode):
css = formatter.get_style_defs('.code_highlighter')
return '''<style type="text/css"><!--
%(css)s
- --></style>%(source)s''' % {'css' : css, 'source' : encoded}
-
+ --></style>%(source)s''' % {'css': css, 'source': encoded}
class MaxLen(Filter):
@@ -124,13 +131,14 @@ class MaxLen(Filter):
return output[:kw['maxlen']]
return output
+
class WebSafe(Filter):
"""Escape HTML entities in $placeholders.
"""
def filter(self, val, **kw):
s = super(WebSafe, self).filter(val, **kw)
# These substitutions are copied from cgi.escape().
- s = s.replace("&", "&amp;") # Must be done first!
+ s = s.replace("&", "&amp;") # Must be done first!
s = s.replace("<", "&lt;")
s = s.replace(">", "&gt;")
# Process the additional transformations if any.
@@ -151,7 +159,8 @@ class Strip(Filter):
This filter goes through the value line by line, removing leading and
trailing whitespace on each line. It does not strip newlines, so every
- input line corresponds to one output line, with its trailing newline intact.
+ input line corresponds to one output line, with its trailing newline
+ intact.
We do not use val.split('\\n') because that would squeeze out consecutive
blank lines. Instead, we search for each newline individually. This
@@ -165,7 +174,7 @@ class Strip(Filter):
s = super(Strip, self).filter(val, **kw)
result = []
start = 0 # The current line will be s[start:end].
- while True: # Loop through each line.
+ while True: # Loop through each line.
end = s.find('\n', start) # Find next newline.
if end == -1: # If no more newlines.
break
@@ -178,6 +187,7 @@ class Strip(Filter):
result.append(chunk)
return "".join(result)
+
class StripSqueeze(Filter):
"""Canonicalizes every chunk of whitespace to a single space.
@@ -190,7 +200,8 @@ class StripSqueeze(Filter):
return " ".join(s)
##################################################
-## MAIN ROUTINE -- testing
+# MAIN ROUTINE -- testing
+
def test():
s1 = "abc <=> &"
@@ -205,6 +216,7 @@ def test():
print("Unicode:", repr(EncodeUnicode().filter(u'aoeu12345\u1234')))
+
if __name__ == "__main__":
test()
diff --git a/Cheetah/ImportHooks.py b/Cheetah/ImportHooks.py
index ffc07f2..e2a26e9 100755..100644
--- a/Cheetah/ImportHooks.py
+++ b/Cheetah/ImportHooks.py
@@ -1,5 +1,3 @@
-#!/usr/bin/env python
-
"""
Provides some import hooks to allow Cheetah's .tmpl files to be imported
directly like Python .py modules.
@@ -16,11 +14,8 @@ try:
import builtins as builtin
except ImportError: # PY2
import __builtin__ as builtin
-import imp
from threading import RLock
-import string
import traceback
-import types
from Cheetah import ImportManager
from Cheetah.ImportManager import DirOwner
@@ -30,15 +25,18 @@ from Cheetah.convertTmplPathToModuleName import convertTmplPathToModuleName
_installed = False
##################################################
-## HELPER FUNCS
+# HELPER FUNCS
_cacheDir = []
+
+
def setCacheDir(cacheDir):
global _cacheDir
_cacheDir.append(cacheDir)
##################################################
-## CLASSES
+# CLASSES
+
class CheetahDirOwner(DirOwner):
_lock = RLock()
@@ -55,34 +53,35 @@ class CheetahDirOwner(DirOwner):
return mod
for ext in self.templateFileExtensions:
- tmplPath = os.path.join(self.path, name + ext)
+ tmplPath = os.path.join(self.path, name + ext)
if os.path.exists(tmplPath):
try:
return self._compile(name, tmplPath)
- except:
+ except Exception:
# @@TR: log the error
exc_txt = traceback.format_exc()
- exc_txt =' '+(' \n'.join(exc_txt.splitlines()))
+ exc_txt = ' ' + (' \n'.join(exc_txt.splitlines()))
raise ImportError(
- 'Error while compiling Cheetah module'
- ' %(name)s, original traceback follows:\n%(exc_txt)s'%locals())
- ##
+ 'Error while compiling Cheetah module '
+ '%(name)s, original traceback follows:\n'
+ '%(exc_txt)s' % locals())
return None
finally:
self._releaseLock()
def _compile(self, name, tmplPath):
- ## @@ consider adding an ImportError raiser here
+ # @@ consider adding an ImportError raiser here
code = str(Compiler(file=tmplPath, moduleName=name,
mainClassName=name))
if _cacheDir:
__file__ = os.path.join(_cacheDir[0],
- convertTmplPathToModuleName(tmplPath)) + '.py'
+ convertTmplPathToModuleName(tmplPath)) \
+ + '.py'
try:
open(__file__, 'w').write(code)
except OSError:
- ## @@ TR: need to add some error code here
+ # @@ TR: need to add some error code here
traceback.print_exc(file=sys.stderr)
__file__ = tmplPath
else:
@@ -92,14 +91,14 @@ class CheetahDirOwner(DirOwner):
mod = types.ModuleType(name)
mod.__file__ = co.co_filename
if _cacheDir:
- mod.__orig_file__ = tmplPath # @@TR: this is used in the WebKit
- # filemonitoring code
+ # @@TR: this is used in the WebKit filemonitoring code
+ mod.__orig_file__ = tmplPath
mod.__co__ = co
return mod
##################################################
-## FUNCTIONS
+# FUNCTIONS
def install(templateFileExtensions=('.tmpl',)):
"""Install the Cheetah Import Hooks"""
@@ -107,32 +106,24 @@ def install(templateFileExtensions=('.tmpl',)):
global _installed
if not _installed:
CheetahDirOwner.templateFileExtensions = templateFileExtensions
- try:
- import builtins as builtin
- except ImportError: # PY2
- import __builtin__ as builtin
if isinstance(builtin.__import__, types.BuiltinFunctionType):
global __oldimport__
__oldimport__ = builtin.__import__
ImportManager._globalOwnerTypes.insert(0, CheetahDirOwner)
- #ImportManager._globalOwnerTypes.append(CheetahDirOwner)
+ # ImportManager._globalOwnerTypes.append(CheetahDirOwner)
global _manager
- _manager=ImportManager.ImportManager()
+ _manager = ImportManager.ImportManager()
_manager.setThreaded()
_manager.install()
+ _installed = True
+
def uninstall():
"""Uninstall the Cheetah Import Hooks"""
global _installed
- if not _installed:
- try:
- import builtins as builtin
- except ImportError: # PY2
- import __builtin__ as builtin
+ if _installed:
if isinstance(builtin.__import__, types.MethodType):
builtin.__import__ = __oldimport__
global _manager
del _manager
-
-if __name__ == '__main__':
- install()
+ _installed = False
diff --git a/Cheetah/ImportManager.py b/Cheetah/ImportManager.py
index 950f078f..dbb2c96 100644
--- a/Cheetah/ImportManager.py
+++ b/Cheetah/ImportManager.py
@@ -1,11 +1,10 @@
"""
Provides an emulator/replacement for Python's standard import system.
-@@TR: Be warned that Import Hooks are in the deepest, darkest corner of Python's
-jungle. If you need to start hacking with this, be prepared to get lost for a
-while. Also note, this module predates the newstyle import hooks in Python 2.3
-http://www.python.org/peps/pep-0302.html.
-
+@@TR: Be warned that Import Hooks are in the deepest, darkest corner of
+Python's jungle. If you need to start hacking with this, be prepared to get
+lost for a while. Also note, this module predates the newstyle import hooks in
+Python 2.3 http://www.python.org/peps/pep-0302.html.
This is a hacked/documented version of Gordon McMillan's iu.py. I have:
@@ -16,7 +15,6 @@ This is a hacked/documented version of Gordon McMillan's iu.py. I have:
- standardized the variable naming scheme
- reorganized the code layout to enhance readability
-
"""
import sys
@@ -31,10 +29,13 @@ _installed = False
_os_stat = _os_path_join = _os_getcwd = _os_path_dirname = None
##################################################
-## FUNCTIONS
+# FUNCTIONS
+
def _os_bootstrap():
- """Set up 'os' module replacement functions for use during import bootstrap."""
+ """
+ Set up 'os' module replacement functions for use during import bootstrap
+ """
names = sys.builtin_module_names
@@ -53,6 +54,7 @@ def _os_bootstrap():
from os2 import stat, getcwd
elif 'mac' in names:
from mac import stat, getcwd
+
def join(a, b):
if a == '':
return b
@@ -93,8 +95,10 @@ def _os_bootstrap():
global _os_getcwd
_os_getcwd = getcwd
+
_os_bootstrap()
+
def packageName(s):
for i in range(len(s)-1, -1, -1):
if s[i] == '.':
@@ -103,6 +107,7 @@ def packageName(s):
return ''
return s[:i]
+
def nameSplit(s):
rslt = []
i = j = 0
@@ -114,12 +119,14 @@ def nameSplit(s):
rslt.append(s[i:])
return rslt
+
def getPathExt(fnm):
for i in range(len(fnm)-1, -1, -1):
if fnm[i] == '.':
return fnm[i:]
return ''
+
def pathIsDir(pathname):
"Local replacement for os.path.isdir()."
try:
@@ -128,6 +135,7 @@ def pathIsDir(pathname):
return None
return (s[0] & 0o170000) == 0o040000
+
def getDescr(fnm):
ext = getPathExt(fnm)
for (suffix, mode, typ) in imp.get_suffixes():
@@ -135,7 +143,8 @@ def getDescr(fnm):
return (suffix, mode, typ)
##################################################
-## CLASSES
+# CLASSES
+
class Owner:
@@ -143,7 +152,8 @@ class Owner:
an Owner for each thing on sys.path There are owners for directories and
.pyz files. There could be owners for zip files, or even URLs. A
shadowpath (a dictionary mapping the names in sys.path to their owners) is
- used so that sys.path (or a package's __path__) is still a bunch of strings,
+ used so that sys.path (or a package's __path__) is still a bunch of
+ strings.
"""
def __init__(self, path):
@@ -155,6 +165,7 @@ class Owner:
def getmod(self, nm):
return None
+
class DirOwner(Owner):
def __init__(self, path):
@@ -164,10 +175,10 @@ class DirOwner(Owner):
raise ValueError("%s is not a directory" % path)
Owner.__init__(self, path)
- def getmod(self, nm,
- getsuffixes=imp.get_suffixes, loadco=marshal.loads, newmod=imp.new_module):
+ def getmod(self, nm, getsuffixes=imp.get_suffixes,
+ loadco=marshal.loads, newmod=imp.new_module):
- pth = _os_path_join(self.path, nm)
+ pth = _os_path_join(self.path, nm)
possibles = [(pth, 0, None)]
if pathIsDir(pth):
@@ -178,12 +189,13 @@ class DirOwner(Owner):
attempt = pth+ext
try:
st = _os_stat(attempt)
- except:
+ except Exception:
pass
else:
if typ == imp.C_EXTENSION:
fp = open(attempt, 'rb')
- mod = imp.load_module(nm, fp, attempt, (ext, mode, typ))
+ mod = imp.load_module(
+ nm, fp, attempt, (ext, mode, typ))
mod.__file__ = attempt
return mod
elif typ == imp.PY_SOURCE:
@@ -230,6 +242,7 @@ class ImportDirector(Owner):
pass
+
class BuiltinImportDirector(ImportDirector):
"""Directs imports of builtin modules"""
def __init__(self):
@@ -241,6 +254,7 @@ class BuiltinImportDirector(ImportDirector):
return mod
return None
+
class FrozenImportDirector(ImportDirector):
"""Directs imports of frozen modules"""
@@ -252,7 +266,9 @@ class FrozenImportDirector(ImportDirector):
if isFrozen(nm):
mod = loadMod(nm, None, nm, ('', '', imp.PY_FROZEN))
if hasattr(mod, '__path__'):
- mod.__importsub__ = lambda name, pname=nm, owner=self: owner.getmod(pname+'.'+name)
+ mod.__importsub__ = \
+ lambda name, pname=nm, owner=self: \
+ owner.getmod(pname+'.'+name)
return mod
return None
@@ -265,7 +281,7 @@ class RegistryImportDirector(ImportDirector):
self.map = {}
try:
import win32api
- ## import win32con
+ # import win32con
except ImportError:
pass
else:
@@ -275,14 +291,17 @@ class RegistryImportDirector(ImportDirector):
subkey = r"Software\Python\PythonCore\%s\Modules" % sys.winver
for root in (HKEY_CURRENT_USER, HKEY_LOCAL_MACHINE):
try:
- hkey = win32api.RegOpenKeyEx(root, subkey, 0, KEY_ALL_ACCESS)
- except:
+ hkey = win32api.RegOpenKeyEx(root, subkey,
+ 0, KEY_ALL_ACCESS)
+ except Exception:
pass
else:
- numsubkeys, numvalues, lastmodified = win32api.RegQueryInfoKey(hkey)
+ numsubkeys, numvalues, lastmodified = \
+ win32api.RegQueryInfoKey(hkey)
for i in range(numsubkeys):
subkeyname = win32api.RegEnumKey(hkey, i)
- hskey = win32api.RegOpenKeyEx(hkey, subkeyname, 0, KEY_ALL_ACCESS)
+ hskey = win32api.RegOpenKeyEx(hkey, subkeyname,
+ 0, KEY_ALL_ACCESS)
val = win32api.RegQueryValueEx(hskey, '')
desc = getDescr(val[0])
self.map[subkeyname] = (val[0], desc)
@@ -300,6 +319,7 @@ class RegistryImportDirector(ImportDirector):
return mod
return None
+
class PathImportDirector(ImportDirector):
"""Directs imports of modules stored on the filesystem."""
@@ -308,7 +328,7 @@ class PathImportDirector(ImportDirector):
self.path = sys.path
else:
self.path = pathlist
- if ownertypes == None:
+ if ownertypes is None:
self._ownertypes = _globalOwnerTypes
else:
self._ownertypes = ownertypes
@@ -344,19 +364,21 @@ class PathImportDirector(ImportDirector):
# this may cause an import, which may cause recursion
# hence the protection
owner = klass(path)
- except:
+ except Exception:
pass
else:
break
del self._building[path]
return owner
-#=================ImportManager============================#
+# =================ImportManager============================#
# The one-and-only ImportManager
# ie, the builtin import
+
UNTRIED = -1
+
class ImportManager:
# really the equivalent of builtin import
def __init__(self):
@@ -386,11 +408,13 @@ class ImportManager:
builtin.__import__ = self.importHook
builtin.reload = self.reloadHook
- def importHook(self, name, globals=None, locals=None, fromlist=None, level=-1):
+ def importHook(self, name, globals=None, locals=None,
+ fromlist=None, level=-1):
'''
- NOTE: Currently importHook will accept the keyword-argument "level"
- but it will *NOT* use it (currently). Details about the "level" keyword
- argument can be found here: http://www.python.org/doc/2.5.2/lib/built-in-funcs.html
+ NOTE: Currently importHook will accept the keyword-argument "level"
+ but it will *NOT* use it. Details about the "level" keyword
+ argument can be found here:
+ https://docs.python.org/2/library/functions.html#__import__
'''
# first see if we could be importing a relative name
_sys_modules_get = sys.modules.get
@@ -435,7 +459,7 @@ class ImportManager:
if i:
break
- if i<len(nmparts):
+ if i < len(nmparts):
if ctx and hasattr(sys.modules[ctx], nmparts[i]):
return sys.modules[nmparts[0]]
del sys.modules[fqname]
@@ -505,7 +529,7 @@ class ImportManager:
parentnm = packageName(fqnm)
newmod = self.doimport(nm, parentnm, fqnm)
mod.__dict__.update(newmod.__dict__)
-## return newmod
+# return newmod
def _acquire(self):
if self.rlock.locked():
@@ -524,7 +548,7 @@ class ImportManager:
##################################################
-## MORE CONSTANTS & GLOBALS
+# MORE CONSTANTS & GLOBALS
_globalOwnerTypes = [
DirOwner,
diff --git a/Cheetah/Macros/I18n.py b/Cheetah/Macros/I18n.py
index 187e680..02a815b 100644
--- a/Cheetah/Macros/I18n.py
+++ b/Cheetah/Macros/I18n.py
@@ -1,14 +1,17 @@
import gettext
_ = gettext.gettext
+
+
class I18n(object):
def __init__(self, parser):
pass
def __call__(self,
- src, # aka message,
+ src, # aka message,
plural=None,
- n=None, # should be a string representing the name of the
- # '$var' rather than $var itself
+ # should be a string representing the name of the '$var'
+ # rather than $var itself
+ n=None,
id=None,
domain=None,
source=None,
@@ -23,7 +26,7 @@ class I18n(object):
EOLCharsInShortForm=None,
startPos=None,
endPos=None,
- ):
+ ):
"""This is just a stub at this time.
plural = the plural form of the message
@@ -39,16 +42,13 @@ class I18n(object):
http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport
Other notes:
- - There is no need to replicate the i18n:name attribute from plone / PTL,
- as cheetah placeholders serve the same purpose
-
-
+ - There is no need to replicate the i18n:name attribute
+ from plone/PTL, as cheetah placeholders serve the same purpose.
"""
- #print macros['i18n']
+ # print macros['i18n']
src = _(src)
- if isShortForm and endPos<len(parser):
+ if isShortForm and endPos < len(parser):
return src+EOLCharsInShortForm
else:
return src
-
diff --git a/Cheetah/NameMapper.py b/Cheetah/NameMapper.py
index 223b4b2..68ded17 100755
--- a/Cheetah/NameMapper.py
+++ b/Cheetah/NameMapper.py
@@ -22,9 +22,9 @@ use information from your system on the client's website --AND-- they want to
understand the display code and so they can maintian it themselves.
You write a UI class with a 'customers' method that returns a dictionary of all
-the customer objects. Each customer object has an 'address' method that returns
-the a dictionary with information about the customer's address. The designers
-want to be able to access that information.
+the customer objects. Each customer object has an 'address' method
+that returns the a dictionary with information about the customer's address.
+The designers want to be able to access that information.
Using PSP, the display code for the website would look something like the
following, assuming your servlet subclasses the class you created for managing
@@ -52,8 +52,9 @@ programming experience? The last form is 15 characters shorter than the PSP
and, conceptually, is far more accessible. With PHP or ASP, the code would be
even messier than the PSP
-This is a rather extreme example and, of course, you could also just implement
-'$getCustomer($ID).city' and obey the Law of Demeter (search Google for more on that).
+This is a rather extreme example and, of course,
+you could also just implement '$getCustomer($ID).city'
+and obey the Law of Demeter (search Google for more on that).
But good object orientated design isn't the point here.
Details
@@ -63,9 +64,9 @@ The parenthesized letters below correspond to the aims in the second paragraph.
DICTIONARY ACCESS (a)
---------------------
-NameMapper allows access to items in a dictionary using the same dotted notation
-used to access object attributes in Python. This aspect of NameMapper is known
-as 'Unified Dotted Notation'.
+NameMapper allows access to items in a dictionary
+using the same dotted notation used to access object attributes in Python.
+This aspect of NameMapper is known as 'Unified Dotted Notation'.
For example, with Cheetah it is possible to write::
@@ -81,8 +82,8 @@ This only works with dictionary keys that are also valid python identifiers::
AUTOCALLING (b,d)
-----------------
-NameMapper automatically detects functions and methods in Cheetah $vars and calls
-them if the parentheses have been left off.
+NameMapper automatically detects functions and methods in Cheetah $vars
+and calls them if the parentheses have been left off.
For example if 'a' is an object, 'b' is a method::
@@ -104,8 +105,8 @@ Further notes:
autocalling can only be used with functions or methods that either have no
arguments or have default values for all arguments.
-* NameMapper only autocalls functions and methods. Classes and callable object instances
- will not be autocalled.
+* NameMapper only autocalls functions and methods.
+ Classes and callable object instances will not be autocalled.
* Autocalling can be disabled using Cheetah's 'useAutocalling' setting.
@@ -160,32 +161,32 @@ if PY2 and not hasattr(inspect.imp, 'get_suffixes'):
# Google App Engine
setattr(inspect.imp, 'get_suffixes', lambda: [('.py', 'U', 1)])
-## N.B. An attempt is made at the end of this module to import C versions of
-## these functions. If _namemapper.c has been compiled succesfully and the
-## import goes smoothly, the Python versions defined here will be replaced with
-## the C versions.
+# N.B. An attempt is made at the end of this module to import C versions of
+# these functions. If _namemapper.c has been compiled succesfully and the
+# import goes smoothly, the Python versions defined here will be replaced with
+# the C versions.
-class NotFound(LookupError):
- pass
def _raiseNotFoundException(key, namespace):
- excString = "cannot find '%s'"%key
+ excString = "cannot find '%s'" % key
if _INCLUDE_NAMESPACE_REPR_IN_NOTFOUND_EXCEPTIONS:
- excString += ' in the namespace %s'%pformat(namespace)
+ excString += ' in the namespace %s' % pformat(namespace)
raise NotFound(excString)
+
def _wrapNotFoundException(exc, fullName, namespace):
if not _ALLOW_WRAPPING_OF_NOTFOUND_EXCEPTIONS:
raise
else:
excStr = exc.args[0]
- if excStr.find('while searching')==-1: # only wrap once!
- excStr +=" while searching for '%s'"%fullName
+ if excStr.find('while searching') == -1: # only wrap once!
+ excStr += " while searching for '%s'" % fullName
if _INCLUDE_NAMESPACE_REPR_IN_NOTFOUND_EXCEPTIONS:
- excStr += ' in the namespace %s'%pformat(namespace)
+ excStr += ' in the namespace %s' % pformat(namespace)
exc.args = (excStr,)
raise
+
def _isInstanceOrClass(obj):
if isinstance(obj, type):
# oldstyle
@@ -196,7 +197,8 @@ def _isInstanceOrClass(obj):
if hasattr(obj, 'mro'):
# type/class
return True
- elif (hasattr(obj, '__func__') or hasattr(obj, '__code__') or hasattr(obj, '__self__')):
+ elif (hasattr(obj, '__func__') or hasattr(obj, '__code__') or
+ hasattr(obj, '__self__')):
# method, func, or builtin func
return False
elif hasattr(obj, '__init__'):
@@ -204,6 +206,7 @@ def _isInstanceOrClass(obj):
return True
return False
+
def hasKey(obj, key):
"""Determine if 'obj' has 'key' """
if isinstance(obj, Mapping) and key in obj:
@@ -213,13 +216,6 @@ def hasKey(obj, key):
else:
return False
-def valueForKey(obj, key):
- if isinstance(obj, Mapping) and key in obj:
- return obj[key]
- elif hasattr(obj, key):
- return getattr(obj, key)
- else:
- _raiseNotFoundException(key, obj)
def _valueForName(obj, name, executeCallables=False):
nameChunks = name.split('.')
@@ -232,25 +228,13 @@ def _valueForName(obj, name, executeCallables=False):
except AttributeError:
_raiseNotFoundException(key, obj)
- if executeCallables and hasattr(nextObj, '__call__') and not _isInstanceOrClass(nextObj):
+ if executeCallables and hasattr(nextObj, '__call__') and \
+ not _isInstanceOrClass(nextObj):
obj = nextObj()
else:
obj = nextObj
return obj
-def valueForName(obj, name, executeCallables=False):
- try:
- return _valueForName(obj, name, executeCallables)
- except NotFound as e:
- _wrapNotFoundException(e, fullName=name, namespace=obj)
-
-def valueFromSearchList(searchList, name, executeCallables=False):
- key = name.split('.')[0]
- for namespace in searchList:
- if hasKey(namespace, key):
- return _valueForName(namespace, name,
- executeCallables=executeCallables)
- _raiseNotFoundException(key, searchList)
def _namespaces(callerFrame, searchList=None):
yield callerFrame.f_locals
@@ -260,40 +244,9 @@ def _namespaces(callerFrame, searchList=None):
yield callerFrame.f_globals
yield __builtins__
-def valueFromFrameOrSearchList(searchList, name, executeCallables=False,
- frame=None):
- def __valueForName():
- try:
- return _valueForName(namespace, name, executeCallables=executeCallables)
- except NotFound as e:
- _wrapNotFoundException(e, fullName=name, namespace=searchList)
- try:
- if not frame:
- frame = inspect.stack()[1][0]
- key = name.split('.')[0]
- for namespace in _namespaces(frame, searchList):
- if hasKey(namespace, key):
- return __valueForName()
- _raiseNotFoundException(key, searchList)
- finally:
- del frame
-
-def valueFromFrame(name, executeCallables=False, frame=None):
- # @@TR consider implementing the C version the same way
- # at the moment it provides a seperate but mirror implementation
- # to valueFromFrameOrSearchList
- try:
- if not frame:
- frame = inspect.stack()[1][0]
- return valueFromFrameOrSearchList(searchList=None,
- name=name,
- executeCallables=executeCallables,
- frame=frame)
- finally:
- del frame
def hasName(obj, name):
- #Not in the C version
+ # Not in the C version
"""Determine if 'obj' has the 'name' """
key = name.split('.')[0]
if not hasKey(obj, key):
@@ -304,16 +257,77 @@ def hasName(obj, name):
except NotFound:
return False
+
try:
from Cheetah._namemapper import NotFound, valueForKey, valueForName, \
valueFromSearchList, valueFromFrameOrSearchList, valueFromFrame
- # it is possible with Jython or Windows, for example, that _namemapper.c hasn't been compiled
C_VERSION = True
-except:
+except Exception:
+ class NotFound(LookupError):
+ pass
+
+ def valueForKey(obj, key):
+ if isinstance(obj, Mapping) and key in obj:
+ return obj[key]
+ elif hasattr(obj, key):
+ return getattr(obj, key)
+ else:
+ _raiseNotFoundException(key, obj)
+
+ def valueForName(obj, name, executeCallables=False):
+ try:
+ return _valueForName(obj, name, executeCallables)
+ except NotFound as e:
+ _wrapNotFoundException(e, fullName=name, namespace=obj)
+
+ def valueFromSearchList(searchList, name, executeCallables=False):
+ key = name.split('.')[0]
+ for namespace in searchList:
+ if hasKey(namespace, key):
+ return _valueForName(namespace, name,
+ executeCallables=executeCallables)
+ _raiseNotFoundException(key, searchList)
+
+ def valueFromFrame(name, executeCallables=False, frame=None):
+ # @@TR consider implementing the C version the same way
+ # at the moment it provides a seperate but mirror implementation
+ # to valueFromFrameOrSearchList
+ try:
+ if not frame:
+ frame = inspect.stack()[1][0]
+ return valueFromFrameOrSearchList(
+ searchList=None, name=name,
+ executeCallables=executeCallables, frame=frame)
+ finally:
+ del frame
+
+ def valueFromFrameOrSearchList(searchList, name, executeCallables=False,
+ frame=None):
+ def __valueForName():
+ try:
+ return _valueForName(namespace, name,
+ executeCallables=executeCallables)
+ except NotFound as e:
+ _wrapNotFoundException(e, fullName=name, namespace=searchList)
+ try:
+ if not frame:
+ frame = inspect.stack()[1][0]
+ key = name.split('.')[0]
+ for namespace in _namespaces(frame, searchList):
+ if hasKey(namespace, key):
+ return __valueForName()
+ _raiseNotFoundException(key, searchList)
+ finally:
+ del frame
+
+ # It is possible with PyPy, Jython or Windows, for example,
+ # that _namemapper.c hasn't been compiled.
C_VERSION = False
+
##################################################
-## CLASSES
+# CLASSES
+
class Mixin:
"""@@ document me"""
@@ -324,16 +338,18 @@ class Mixin:
return valueForKey(self, key)
##################################################
-## if run from the command line ##
+# if run from the command line ##
+
def example():
class A(Mixin):
classVar = 'classVar val'
- def method(self,arg='method 1 default arg'):
+
+ def method(self, arg='method 1 default arg'):
return arg
def method2(self, arg='meth 2 default arg'):
- return {'item1':arg}
+ return {'item1': arg}
def method3(self, arg='meth 3 default'):
return arg
@@ -343,6 +359,7 @@ def example():
a = A()
a.one = 'valueForOne'
+
def function(whichOne='default'):
values = {
'default': 'default output',
@@ -355,9 +372,9 @@ def example():
'func': function,
'method': a.method3,
'item': 'itemval',
- 'subDict': {'nestedMethod':a.method3}
+ 'subDict': {'nestedMethod': a.method3}
}
- b = 'this is local b'
+ # b = 'this is local b'
print(valueForKey(a.dic, 'subDict'))
print(valueForName(a, 'dic.item'))
@@ -367,5 +384,6 @@ def example():
print(valueForName(vars(), 'a.dic.func', executeCallables=True))
print(valueForName(vars(), 'a.method2.item1', executeCallables=True))
+
if __name__ == '__main__':
example()
diff --git a/Cheetah/Parser.py b/Cheetah/Parser.py
index bf084ce..0b7f508 100644
--- a/Cheetah/Parser.py
+++ b/Cheetah/Parser.py
@@ -8,18 +8,12 @@ Classes:
Parser === _HighLevelParser (an alias)
"""
-import os
import sys
import re
-from re import DOTALL, MULTILINE
import types
-import time
import inspect
-import traceback
from Cheetah.SourceReader import SourceReader
-from Cheetah import Filters
-from Cheetah import ErrorCatchers
from Cheetah.Unspecified import Unspecified
from Cheetah.Macros.I18n import I18n
from Cheetah.compat import PY2, string_type, unicode
@@ -32,11 +26,14 @@ else:
# re tools
_regexCache = {}
+
+
def cachedRegex(pattern):
if pattern not in _regexCache:
_regexCache[pattern] = re.compile(pattern)
return _regexCache[pattern]
+
def escapeRegexChars(txt,
escapeRE=re.compile(r'([\$\^\*\+\.\?\{\}\[\]\(\)\|\\])')):
@@ -44,14 +41,25 @@ def escapeRegexChars(txt,
return escapeRE.sub(r'\\\1', txt)
+
def group(*choices): return '(' + '|'.join(choices) + ')'
+
+
def nongroup(*choices): return '(?:' + '|'.join(choices) + ')'
-def namedGroup(name, *choices): return '(P:<' + name +'>' + '|'.join(choices) + ')'
+
+
+def namedGroup(name, *choices):
+ return '(P:<' + name + '>' + '|'.join(choices) + ')'
+
+
def any(*choices): return group(*choices) + '*'
+
+
def maybe(*choices): return group(*choices) + '?'
##################################################
-## CONSTANTS & GLOBALS ##
+# CONSTANTS & GLOBALS ##
+
NO_CACHE = 0
STATIC_CACHE = 1
@@ -62,14 +70,14 @@ SET_GLOBAL = 1
SET_MODULE = 2
##################################################
-## Tokens for the parser ##
+# Tokens for the parser ##
-#generic
+# generic
identchars = "abcdefghijklmnopqrstuvwxyz" \
"ABCDEFGHIJKLMNOPQRSTUVWXYZ_"
namechars = identchars + "0123456789"
-#operators
+# operators
powerOp = '**'
unaryArithOps = ('+', '-', '~')
binaryArithOps = ('+', '-', '/', '//', '%')
@@ -77,7 +85,7 @@ shiftOps = ('>>', '<<')
bitwiseOps = ('&', '|', '^')
assignOp = '='
augAssignOps = ('+=', '-=', '/=', '*=', '**=', '^=', '%=',
- '>>=', '<<=', '&=', '|=', )
+ '>>=', '<<=', '&=', '|=', )
assignmentOps = (assignOp,) + augAssignOps
compOps = ('<', '>', '==', '!=', '<=', '>=', '<>', 'is', 'in',)
@@ -101,11 +109,11 @@ keywords = ('and', 'del', 'for', 'is', 'raise',
single3 = "'''"
double3 = '"""'
-tripleQuotedStringStarts = ("'''", '"""',
- "r'''", 'r"""', "R'''", 'R"""',
- "u'''", 'u"""', "U'''", 'U"""',
- "ur'''", 'ur"""', "Ur'''", 'Ur"""',
- "uR'''", 'uR"""', "UR'''", 'UR"""')
+tripleQuotedStringStarts = ("'''", '"""',
+ "r'''", 'r"""', "R'''", 'R"""',
+ "u'''", 'u"""', "U'''", 'U"""',
+ "ur'''", 'ur"""', "Ur'''", 'Ur"""',
+ "uR'''", 'uR"""', "UR'''", 'UR"""')
tripleQuotedStringPairs = {"'''": single3, '"""': double3,
"r'''": single3, 'r"""': double3,
@@ -118,17 +126,21 @@ tripleQuotedStringPairs = {"'''": single3, '"""': double3,
"UR'''": single3, 'UR"""': double3,
}
-closurePairs= {')':'(',']':'[','}':'{'}
-closurePairsRev= {'(':')','[':']','{':'}'}
+closurePairs = {')': '(', ']': '[', '}': '{'}
+closurePairsRev = {'(': ')', '[': ']', '{': '}'}
##################################################
-## Regex chunks for the parser ##
+# Regex chunks for the parser ##
tripleQuotedStringREs = {}
+
+
def makeTripleQuoteRe(start, end):
start = escapeRegexChars(start)
end = escapeRegexChars(end)
- return re.compile(r'(?:' + start + r').*?' + r'(?:' + end + r')', re.DOTALL)
+ return re.compile(r'(?:' + start + r').*?' + r'(?:' + end + r')',
+ re.DOTALL)
+
for start, end in tripleQuotedStringPairs.items():
tripleQuotedStringREs[start] = makeTripleQuoteRe(start, end)
@@ -138,16 +150,18 @@ EOL = r'\r\n|\n|\r'
EOLZ = EOL + r'|\Z'
escCharLookBehind = nongroup(r'(?<=\A)', r'(?<!\\)')
nameCharLookAhead = r'(?=[A-Za-z_])'
-identRE=re.compile(r'[a-zA-Z_][a-zA-Z_0-9]*')
-EOLre=re.compile(r'(?:\r\n|\r|\n)')
+identRE = re.compile(r'[a-zA-Z_][a-zA-Z_0-9]*')
+EOLre = re.compile(r'(?:\r\n|\r|\n)')
-specialVarRE=re.compile(r'([a-zA-z_]+)@') # for matching specialVar comments
+specialVarRE = re.compile(r'([a-zA-z_]+)@') # for matching specialVar comments
# e.g. ##author@ Tavis Rudd
unicodeDirectiveRE = re.compile(
- r'(?:^|\r\n|\r|\n)\s*#\s{0,5}unicode[:\s]*([-\w.]*)\s*(?:\r\n|\r|\n)', re.MULTILINE)
+ r'(?:^|\r\n|\r|\n)\s*#\s{0,5}unicode[:\s]*([-\w.]*)\s*(?:\r\n|\r|\n)',
+ re.MULTILINE)
encodingDirectiveRE = re.compile(
- r'(?:^|\r\n|\r|\n)\s*#\s{0,5}encoding[:\s]*([-\w.]*)\s*(?:\r\n|\r|\n)', re.MULTILINE)
+ r'(?:^|\r\n|\r|\n)\s*#\s{0,5}encoding[:\s]*([-\w.]*)\s*(?:\r\n|\r|\n)',
+ re.MULTILINE)
escapedNewlineRE = re.compile(r'(?<!\\)((\\\\)*)\\(n|012)')
@@ -241,15 +255,18 @@ endDirectiveNamesAndHandlers = {
}
##################################################
-## CLASSES ##
+# CLASSES ##
# @@TR: SyntaxError doesn't call exception.__str__ for some reason!
-#class ParseError(SyntaxError):
+# class ParseError(SyntaxError):
+
+
class ParseError(ValueError):
- def __init__(self, stream, msg='Invalid Syntax', extMsg='', lineno=None, col=None):
+ def __init__(self, stream, msg='Invalid Syntax', extMsg='',
+ lineno=None, col=None):
self.stream = stream
if stream.pos() >= len(stream):
- stream.setPos(len(stream) -1)
+ stream.setPos(len(stream) - 1)
self.msg = msg
self.extMsg = extMsg
self.lineno = lineno
@@ -272,48 +289,57 @@ class ParseError(ValueError):
else:
row, col, line = self.stream.getRowColLine()
- ## get the surrounding lines
+ # get the surrounding lines
lines = stream.splitlines()
prevLines = [] # (rowNum, content)
for i in range(1, 4):
- if row-1-i <=0:
+ if row - 1 - i <= 0:
break
- prevLines.append( (row-i, lines[row-1-i]) )
+ prevLines.append((row-i, lines[row-1-i]))
nextLines = [] # (rowNum, content)
for i in range(1, 4):
if not row-1+i < len(lines):
break
- nextLines.append( (row+i, lines[row-1+i]) )
+ nextLines.append((row+i, lines[row-1+i]))
nextLines.reverse()
- ## print the main message
- report += "\n\n%s\n" %self.msg
+ # print the main message
+ report += "\n\n%s\n" % self.msg
report += "Line %i, column %i%s\n\n" % (row, col, f)
report += 'Line|Cheetah Code\n'
- report += '----|-------------------------------------------------------------\n'
+ report += '----|-----------------------------' \
+ '--------------------------------\n'
while prevLines:
lineInfo = prevLines.pop()
- report += "%(row)-4d|%(line)s\n"% {'row':lineInfo[0], 'line':lineInfo[1]}
- report += "%(row)-4d|%(line)s\n"% {'row':row, 'line':line}
- report += ' '*5 +' '*(col-1) + "^\n"
+ report += "%(row)-4d|%(line)s\n" \
+ % {'row': lineInfo[0], 'line': lineInfo[1]}
+ report += "%(row)-4d|%(line)s\n" % {'row': row, 'line': line}
+ report += ' '*5 + ' '*(col-1) + "^\n"
while nextLines:
lineInfo = nextLines.pop()
- report += "%(row)-4d|%(line)s\n"% {'row':lineInfo[0], 'line':lineInfo[1]}
- ## add the extra msg
+ report += "%(row)-4d|%(line)s\n" \
+ % {'row': lineInfo[0], 'line': lineInfo[1]}
+ # add the extra msg
if self.extMsg:
report += self.extMsg + '\n'
return report
+
class ForbiddenSyntax(ParseError):
pass
+
+
class ForbiddenExpression(ForbiddenSyntax):
pass
+
+
class ForbiddenDirective(ForbiddenSyntax):
pass
+
class CheetahVariable(object):
def __init__(self, nameChunks, useNameMapper=True, cacheToken=None,
rawSource=None):
@@ -322,9 +348,11 @@ class CheetahVariable(object):
self.cacheToken = cacheToken
self.rawSource = rawSource
+
class Placeholder(CheetahVariable):
pass
+
class ArgList(object):
"""Used by _LowLevelParser.getArgList()"""
@@ -347,7 +375,8 @@ class ArgList(object):
self.defaults[count] += token
def merge(self):
- defaults = (isinstance(d, string_type) and d.strip() or None for d in self.defaults)
+ defaults = (isinstance(d, string_type) and d.strip() or None
+ for d in self.defaults)
arguments = (a.strip() for a in self.arguments)
if PY2:
return list(map(None, arguments, defaults))
@@ -358,6 +387,7 @@ class ArgList(object):
def __str__(self):
return str(self.merge())
+
class _LowLevelParser(SourceReader):
"""This class implements the methods to match or extract ('get*') the basic
elements of Cheetah's grammar. It does NOT handle any code generation or
@@ -411,24 +441,24 @@ class _LowLevelParser(SourceReader):
self.matchEOLSlurpToken,
]
- ## regex setup ##
+ # regex setup ##
def _makeCheetahVarREs(self):
"""Setup the regexs for Cheetah $var parsing."""
num = r'[0-9\.]+'
- interval = (r'(?P<interval>' +
- num + r's|' +
- num + r'm|' +
- num + r'h|' +
- num + r'd|' +
- num + r'w|' +
- num + ')'
- )
+ interval = (r'(?P<interval>' +
+ num + r's|' +
+ num + r'm|' +
+ num + r'h|' +
+ num + r'd|' +
+ num + r'w|' +
+ num + ')'
+ )
cacheToken = (r'(?:' +
- r'(?P<REFRESH_CACHE>\*' + interval + '\*)'+
+ r'(?P<REFRESH_CACHE>\*' + interval + '\*)' +
'|' +
r'(?P<STATIC_CACHE>\*)' +
'|' +
@@ -437,40 +467,38 @@ class _LowLevelParser(SourceReader):
self.cacheTokenRE = cachedRegex(cacheToken)
silentPlaceholderToken = (r'(?:' +
- r'(?P<SILENT>' +escapeRegexChars('!')+')'+
+ r'(?P<SILENT>' + escapeRegexChars('!')+')' +
'|' +
r'(?P<NOT_SILENT>)' +
')')
self.silentPlaceholderTokenRE = cachedRegex(silentPlaceholderToken)
self.cheetahVarStartRE = cachedRegex(
- escCharLookBehind +
- r'(?P<startToken>'+escapeRegexChars(self.setting('cheetahVarStartToken'))+')'+
- r'(?P<silenceToken>'+silentPlaceholderToken+')'+
- r'(?P<cacheToken>'+cacheToken+')'+
- r'(?P<enclosure>|(?:(?:\{|\(|\[)[ \t\f]*))' + # allow WS after enclosure
- r'(?=[A-Za-z_])')
+ escCharLookBehind + r'(?P<startToken>' +
+ escapeRegexChars(self.setting('cheetahVarStartToken')) + ')' +
+ r'(?P<silenceToken>' + silentPlaceholderToken+')' +
+ r'(?P<cacheToken>' + cacheToken + ')' +
+ # allow WS after enclosure
+ r'(?P<enclosure>|(?:(?:\{|\(|\[)[ \t\f]*))' + r'(?=[A-Za-z_])')
validCharsLookAhead = r'(?=[A-Za-z_\*!\{\(\[])'
self.cheetahVarStartToken = self.setting('cheetahVarStartToken')
self.cheetahVarStartTokenRE = cachedRegex(
escCharLookBehind +
escapeRegexChars(self.setting('cheetahVarStartToken'))
- +validCharsLookAhead
+ + validCharsLookAhead
)
self.cheetahVarInExpressionStartTokenRE = cachedRegex(
escapeRegexChars(self.setting('cheetahVarStartToken'))
- +r'(?=[A-Za-z_])'
+ + r'(?=[A-Za-z_])'
)
self.expressionPlaceholderStartRE = cachedRegex(
- escCharLookBehind +
- r'(?P<startToken>' + escapeRegexChars(self.setting('cheetahVarStartToken')) + ')' +
+ escCharLookBehind + r'(?P<startToken>' +
+ escapeRegexChars(self.setting('cheetahVarStartToken')) + ')' +
r'(?P<cacheToken>' + cacheToken + ')' +
- #r'\[[ \t\f]*'
- r'(?:\{|\(|\[)[ \t\f]*'
- + r'(?=[^\)\}\]])'
- )
+ # r'\[[ \t\f]*'
+ r'(?:\{|\(|\[)[ \t\f]*' + r'(?=[^\)\}\]])')
if self.setting('EOLSlurpToken'):
self.EOLSlurpRE = cachedRegex(
@@ -481,11 +509,11 @@ class _LowLevelParser(SourceReader):
else:
self.EOLSlurpRE = None
-
def _makeCommentREs(self):
"""Construct the regex bits that are used in comment parsing."""
startTokenEsc = escapeRegexChars(self.setting('commentStartToken'))
- self.commentStartTokenRE = cachedRegex(escCharLookBehind + startTokenEsc)
+ self.commentStartTokenRE = cachedRegex(
+ escCharLookBehind + startTokenEsc)
del startTokenEsc
startTokenEsc = escapeRegexChars(
@@ -493,9 +521,9 @@ class _LowLevelParser(SourceReader):
endTokenEsc = escapeRegexChars(
self.setting('multiLineCommentEndToken'))
self.multiLineCommentTokenStartRE = cachedRegex(escCharLookBehind +
- startTokenEsc)
+ startTokenEsc)
self.multiLineCommentEndTokenRE = cachedRegex(escCharLookBehind +
- endTokenEsc)
+ endTokenEsc)
def _makeDirectiveREs(self):
"""Construct the regexs that are used in directive parsing."""
@@ -561,7 +589,8 @@ class _LowLevelParser(SourceReader):
match = pseudoprog.match(self.src(), self.pos())
if match and match.group() in tripleQuotedStringStarts:
- TQSmatch = tripleQuotedStringREs[match.group()].match(self.src(), self.pos())
+ TQSmatch = tripleQuotedStringREs[match.group()].match(self.src(),
+ self.pos())
if TQSmatch:
return TQSmatch
return match
@@ -590,7 +619,8 @@ class _LowLevelParser(SourceReader):
def getCommentStartToken(self):
match = self.matchCommentStartToken()
if not match:
- raise ParseError(self, msg='Invalid single-line comment start token')
+ raise ParseError(self,
+ msg='Invalid single-line comment start token')
return self.readTo(match.end())
def matchMultiLineCommentStartToken(self):
@@ -599,7 +629,8 @@ class _LowLevelParser(SourceReader):
def getMultiLineCommentStartToken(self):
match = self.matchMultiLineCommentStartToken()
if not match:
- raise ParseError(self, msg='Invalid multi-line comment start token')
+ raise ParseError(self,
+ msg='Invalid multi-line comment start token')
return self.readTo(match.end())
def matchMultiLineCommentEndToken(self):
@@ -629,7 +660,7 @@ class _LowLevelParser(SourceReader):
nameChunk = self.getIdentifier()
nameChunks.append(nameChunk)
elif c == '.':
- if self.pos()+1 <srcLen and self.peek(1) in identchars:
+ if self.pos() + 1 < srcLen and self.peek(1) in identchars:
nameChunks.append(self.getc())
else:
break
@@ -660,7 +691,7 @@ class _LowLevelParser(SourceReader):
nameChunk = self.getIdentifier()
nameChunks.append(nameChunk)
elif c == '.':
- if self.pos()+1 <srcLen and self.peek(1) in identchars:
+ if self.pos() + 1 < srcLen and self.peek(1) in identchars:
nameChunks.append(self.getc())
else:
break
@@ -688,7 +719,7 @@ class _LowLevelParser(SourceReader):
match = self.matchOperator()
if not match:
raise ParseError(self, msg='Expected operator')
- return self.readTo( match.end() )
+ return self.readTo(match.end())
def matchAssignmentOperator(self):
match = self.matchPyToken()
@@ -700,7 +731,7 @@ class _LowLevelParser(SourceReader):
match = self.matchAssignmentOperator()
if not match:
raise ParseError(self, msg='Expected assignment operator')
- return self.readTo( match.end() )
+ return self.readTo(match.end())
def matchDirective(self):
"""Returns False or the name of the directive matched.
@@ -721,17 +752,19 @@ class _LowLevelParser(SourceReader):
while not self.atEnd():
c = self.getc()
- if not c in directiveNameChars:
+ if c not in directiveNameChars:
break
name += c
if name == '@':
if not self.atEnd() and self.peek() in identchars:
match = '@'
break
- possibleMatches = [dn for dn in possibleMatches if dn.startswith(name)]
+ possibleMatches = [dn for dn in possibleMatches
+ if dn.startswith(name)]
if not possibleMatches:
break
- elif (name in possibleMatches and (self.atEnd() or self.peek() not in directiveNameChars)):
+ elif (name in possibleMatches and (
+ self.atEnd() or self.peek() not in directiveNameChars)):
match = name
break
@@ -756,16 +789,15 @@ class _LowLevelParser(SourceReader):
raise ParseError(self, msg='Invalid directive end token')
return self.readTo(match.end())
-
def matchColonForSingleLineShortFormDirective(self):
- if not self.atEnd() and self.peek()==':':
+ if not self.atEnd() and self.peek() == ':':
restOfLine = self[self.pos()+1:self.findEOL()]
restOfLine = restOfLine.strip()
if not restOfLine:
return False
elif self.commentStartTokenRE.match(restOfLine):
return False
- else: # non-whitespace, non-commment chars found
+ else: # non-whitespace, non-commment chars found
return True
return False
@@ -797,7 +829,8 @@ class _LowLevelParser(SourceReader):
def matchCheetahVarInExpressionStartToken(self):
"""no enclosures or cache tokens allowed"""
- return self.cheetahVarInExpressionStartTokenRE.match(self.src(), self.pos())
+ return self.cheetahVarInExpressionStartTokenRE.match(self.src(),
+ self.pos())
def matchVariablePlaceholderStart(self):
"""includes the enclosure and cache token"""
@@ -812,27 +845,24 @@ class _LowLevelParser(SourceReader):
match = self.matchCheetahVarStartToken()
if not match:
raise ParseError(self, msg='Expected Cheetah $var start token')
- return self.readTo( match.end() )
-
+ return self.readTo(match.end())
def getCacheToken(self):
try:
token = self.cacheTokenRE.match(self.src(), self.pos())
- self.setPos( token.end() )
+ self.setPos(token.end())
return token.group()
- except:
+ except Exception:
raise ParseError(self, msg='Expected cache token')
def getSilentPlaceholderToken(self):
try:
token = self.silentPlaceholderTokenRE.match(self.src(), self.pos())
- self.setPos( token.end() )
+ self.setPos(token.end())
return token.group()
- except:
+ except Exception:
raise ParseError(self, msg='Expected silent placeholder token')
-
-
def getTargetVarsList(self):
varnames = []
while not self.atEnd():
@@ -844,14 +874,14 @@ class _LowLevelParser(SourceReader):
self.advance()
elif self.startswith('in ') or self.startswith('in\t'):
break
- #elif self.matchCheetahVarStart():
+ # elif self.matchCheetahVarStart():
elif self.matchCheetahVarInExpressionStartToken():
self.getCheetahVarStartToken()
self.getSilentPlaceholderToken()
self.getCacheToken()
- varnames.append( self.getDottedName() )
+ varnames.append(self.getDottedName())
elif self.matchIdentifier():
- varnames.append( self.getDottedName() )
+ varnames.append(self.getDottedName())
else:
break
return varnames
@@ -868,7 +898,8 @@ class _LowLevelParser(SourceReader):
def getCheetahVarBody(self, plain=False):
# @@TR: this should be in the compiler
- return self._compiler.genCheetahVar(self.getCheetahVarNameChunks(), plain=plain)
+ return self._compiler.genCheetahVar(self.getCheetahVarNameChunks(),
+ plain=plain)
def getCheetahVarNameChunks(self):
@@ -907,7 +938,8 @@ class _LowLevelParser(SourceReader):
elif self.peek() == '.':
if self.pos()+1 < len(self) and self.peek(1) in identchars:
- self.advance() # discard the period as it isn't needed with NameMapper
+ # discard the period as it isn't needed with NameMapper
+ self.advance()
else:
break
@@ -920,17 +952,17 @@ class _LowLevelParser(SourceReader):
period = max(dottedName.rfind('.'), 0)
if period:
- chunks.append( (dottedName[:period], autoCall, '') )
+ chunks.append((dottedName[:period], autoCall, ''))
dottedName = dottedName[period+1:]
- if rest and rest[0]=='(':
+ if rest and rest[0] == '(':
autoCall = False
- chunks.append( (dottedName, autoCall, rest) )
+ chunks.append((dottedName, autoCall, rest))
return chunks
-
def getCallArgString(self,
- enclosures=[], # list of tuples (char, pos), where char is ({ or [
+ # list of tuples (char, pos), where char is ( { or [
+ enclosures=[],
useNameMapper=Unspecified):
""" Get a method/function call argument string.
@@ -966,7 +998,7 @@ class _LowLevelParser(SourceReader):
"' was found for the '" + open + "'")
c = self.peek()
- if c in ")}]": # get the ending enclosure and break
+ if c in ")}]": # get the ending enclosure and break
if not enclosures:
raise ParseError(self)
c = self.getc()
@@ -991,10 +1023,10 @@ class _LowLevelParser(SourceReader):
codeFor1stToken = self.getCheetahVar(plain=True)
self.setPos(endPos)
- ## finally
- addBit( codeFor1stToken + WS + nextToken )
+ # finally
+ addBit(codeFor1stToken + WS + nextToken)
else:
- addBit( codeFor1stToken + WS)
+ addBit(codeFor1stToken + WS)
elif self.matchCheetahVarStart():
# it has syntax that is only valid at the top level
self._raiseErrorAboutInvalidCheetahVarSyntaxInExpr()
@@ -1008,28 +1040,29 @@ class _LowLevelParser(SourceReader):
addBit(token)
if useNameMapper is not Unspecified:
- self.setSetting('useNameMapper', useNameMapper_orig) # @@TR: see comment above
+ # @@TR: see comment above
+ self.setSetting('useNameMapper', useNameMapper_orig)
return ''.join(argStringBits)
def getDefArgList(self, exitPos=None, useNameMapper=False):
- """ Get an argument list. Can be used for method/function definition
+ """Get an argument list. Can be used for method/function definition
argument lists or for #directive argument lists. Returns a list of
tuples in the form (argName, defVal=None) with one tuple for each arg
name.
- These defVals are always strings, so (argName, defVal=None) is safe even
- with a case like (arg1, arg2=None, arg3=1234*2), which would be returned as
+ These defVals are always strings, so (argName, defVal=None) is safe
+ even with a case like (arg1, arg2=None, arg3=1234*2),
+ which would be returned as
+
[('arg1', None),
('arg2', 'None'),
('arg3', '1234*2'),
]
- This method understands *arg, and **kw
-
+ This method understands *arg, and **kw.
"""
-
if self.peek() == '(':
self.advance()
else:
@@ -1044,8 +1077,8 @@ class _LowLevelParser(SourceReader):
while True:
if self.atEnd():
raise ParseError(
- self, msg="EOF was reached before a matching ')'"+
- " was found for the '('")
+ self, msg="EOF was reached before a matching ')'"
+ + " was found for the '('")
if self.pos() == exitPos:
break
@@ -1069,7 +1102,7 @@ class _LowLevelParser(SourceReader):
elif self.startswith(self.cheetahVarStartToken) and not onDefVal:
self.advance(len(self.cheetahVarStartToken))
elif self.matchIdentifier() and not onDefVal:
- argList.add_argument( self.getIdentifier() )
+ argList.add_argument(self.getIdentifier())
elif onDefVal:
if self.matchCheetahVarInExpressionStartToken():
token = self.getCheetahVar()
@@ -1095,14 +1128,16 @@ class _LowLevelParser(SourceReader):
else:
raise ParseError(self)
-
- self.setSetting('useNameMapper', useNameMapper_orig) # @@TR: see comment above
+ # @@TR: see comment above
+ self.setSetting('useNameMapper', useNameMapper_orig)
return argList.merge()
def getExpressionParts(self,
enclosed=False,
- enclosures=None, # list of tuples (char, pos), where char is ({ or [
- pyTokensToBreakAt=None, # only works if not enclosed
+ # list of tuples (char, pos), where char is ( { or [
+ enclosures=None,
+ # only works if not enclosed
+ pyTokensToBreakAt=None,
useNameMapper=Unspecified,
):
@@ -1127,7 +1162,8 @@ class _LowLevelParser(SourceReader):
close = closurePairsRev[open]
self.setPos(enclosures[-1][1])
raise ParseError(
- self, msg="EOF was reached before a matching '" + close +
+ self,
+ msg="EOF was reached before a matching '" + close +
"' was found for the '" + open + "'")
else:
break
@@ -1135,7 +1171,7 @@ class _LowLevelParser(SourceReader):
c = self.peek()
if c in "{([":
exprBits.append(c)
- enclosures.append( (c, self.pos()) )
+ enclosures.append((c, self.pos()))
self.advance()
elif enclosed and not enclosures:
break
@@ -1152,7 +1188,8 @@ class _LowLevelParser(SourceReader):
row, col = self.getRowCol()
self.setPos(enclosures[-1][1])
raise ParseError(
- self, msg= "A '" + c + "' was found at line " + str(row) +
+ self,
+ msg="A '" + c + "' was found at line " + str(row) +
", col " + str(col) +
" before a matching '" + close +
"' was found\nfor the '" + open + "'")
@@ -1167,7 +1204,7 @@ class _LowLevelParser(SourceReader):
if not eolMatch:
self.advance()
raise ParseError(self, msg='Line ending expected')
- self.setPos( eolMatch.end() )
+ self.setPos(eolMatch.end())
elif c in '\r\n':
if enclosures:
self.advance()
@@ -1182,10 +1219,8 @@ class _LowLevelParser(SourceReader):
else:
beforeTokenPos = self.pos()
token = self.getPyToken()
- if (not enclosures
- and pyTokensToBreakAt
- and token in pyTokensToBreakAt):
-
+ if (not enclosures and pyTokensToBreakAt
+ and token in pyTokensToBreakAt):
self.setPos(beforeTokenPos)
break
@@ -1194,7 +1229,8 @@ class _LowLevelParser(SourceReader):
exprBits.append(token)
if identRE.match(token):
if token == 'for':
- expr = self.getExpression(useNameMapper=False, pyTokensToBreakAt=['in'])
+ expr = self.getExpression(
+ useNameMapper=False, pyTokensToBreakAt=['in'])
exprBits.append(expr)
else:
exprBits.append(self.getWhiteSpace())
@@ -1202,12 +1238,14 @@ class _LowLevelParser(SourceReader):
exprBits.append(self.getCallArgString())
##
if useNameMapper is not Unspecified:
- self.setSetting('useNameMapper', useNameMapper_orig) # @@TR: see comment above
+ # @@TR: see comment above
+ self.setSetting('useNameMapper', useNameMapper_orig)
return exprBits
def getExpression(self,
enclosed=False,
- enclosures=None, # list of tuples (char, pos), where # char is ({ or [
+ # list of tuples (char, pos), where # char is ( { or [
+ enclosures=None,
pyTokensToBreakAt=None,
useNameMapper=Unspecified,
):
@@ -1219,14 +1257,13 @@ class _LowLevelParser(SourceReader):
pyTokensToBreakAt=pyTokensToBreakAt,
useNameMapper=useNameMapper))
-
def transformToken(self, token, beforeTokenPos):
"""Takes a token from the expression being parsed and performs and
special transformations required by Cheetah.
At the moment only Cheetah's c'$placeholder strings' are transformed.
"""
- if token=='c' and not self.atEnd() and self.peek() in '\'"':
+ if token == 'c' and not self.atEnd() and self.peek() in '\'"':
nextToken = self.getPyToken()
token = nextToken.upper()
theStr = eval(token)
@@ -1242,7 +1279,8 @@ class _LowLevelParser(SourceReader):
outputExprs = []
strConst = ''
while self.pos() < (endPos-startPosIdx):
- if self.matchCheetahVarStart() or self.matchExpressionPlaceholderStart():
+ if self.matchCheetahVarStart() \
+ or self.matchExpressionPlaceholderStart():
if strConst:
outputExprs.append(repr(strConst))
strConst = ''
@@ -1267,29 +1305,29 @@ class _LowLevelParser(SourceReader):
elif groupdict.get('enclosure'):
raise ParseError(
self,
- msg='Long-form placeholders - ${}, $(), $[], etc. are not valid inside expressions. '
+ msg='Long-form placeholders - ${}, $(), $[], etc. '
+ 'are not valid inside expressions. '
'Use them in top-level $placeholders only.')
else:
raise ParseError(
self,
msg='This form of $placeholder syntax is not valid here.')
-
- def getPlaceholder(self, allowCacheTokens=False, plain=False, returnEverything=False):
+ def getPlaceholder(self, allowCacheTokens=False,
+ plain=False, returnEverything=False):
# filtered
for callback in self.setting('preparsePlaceholderHooks'):
callback(parser=self)
startPos = self.pos()
lineCol = self.getRowCol(startPos)
- startToken = self.getCheetahVarStartToken()
+ startToken = self.getCheetahVarStartToken() # noqa: F841
silentPlaceholderToken = self.getSilentPlaceholderToken()
if silentPlaceholderToken:
isSilentPlaceholder = True
else:
isSilentPlaceholder = False
-
if allowCacheTokens:
cacheToken = self.getCacheToken()
cacheTokenParts = self.cacheTokenRE.match(cacheToken).groupdict()
@@ -1299,7 +1337,7 @@ class _LowLevelParser(SourceReader):
if self.peek() in '({[':
pos = self.pos()
enclosureOpenChar = self.getc()
- enclosures = [ (enclosureOpenChar, pos) ]
+ enclosures = [(enclosureOpenChar, pos)]
self.getWhiteSpace()
else:
enclosures = []
@@ -1312,14 +1350,18 @@ class _LowLevelParser(SourceReader):
if enclosures:
WS = self.getWhiteSpace()
expr += WS
- if self.setting('allowPlaceholderFilterArgs') and self.peek()==',':
- filterArgs = self.getCallArgString(enclosures=enclosures)[1:-1]
+ if self.setting('allowPlaceholderFilterArgs') \
+ and self.peek() == ',':
+ filterArgs = \
+ self.getCallArgString(enclosures=enclosures)[1:-1]
else:
- if self.peek()==closurePairsRev[enclosureOpenChar]:
+ if self.peek() == closurePairsRev[enclosureOpenChar]:
self.getc()
else:
- restOfExpr = self.getExpression(enclosed=True, enclosures=enclosures)
- if restOfExpr[-1] == closurePairsRev[enclosureOpenChar]:
+ restOfExpr = self.getExpression(
+ enclosed=True, enclosures=enclosures)
+ if restOfExpr[-1] == \
+ closurePairsRev[enclosureOpenChar]:
restOfExpr = restOfExpr[:-1]
expr += restOfExpr
rawPlaceholder = self[startPos: self.pos()]
@@ -1327,10 +1369,11 @@ class _LowLevelParser(SourceReader):
expr = self.getExpression(enclosed=True, enclosures=enclosures)
if expr[-1] == closurePairsRev[enclosureOpenChar]:
expr = expr[:-1]
- rawPlaceholder=self[startPos: self.pos()]
+ rawPlaceholder = self[startPos:self.pos()]
expr = self._applyExpressionFilters(expr, 'placeholder',
- rawExpr=rawPlaceholder, startPos=startPos)
+ rawExpr=rawPlaceholder,
+ startPos=startPos)
for callback in self.setting('postparsePlaceholderHooks'):
callback(parser=self)
@@ -1347,7 +1390,8 @@ class _HighLevelParser(_LowLevelParser):
Cheetah.Compiler.Compiler.
"""
def __init__(self, src, filename=None, breakPoint=None, compiler=None):
- super(_HighLevelParser, self).__init__(src, filename=filename, breakPoint=breakPoint)
+ super(_HighLevelParser, self).__init__(
+ src, filename=filename, breakPoint=breakPoint)
self.setSettingsManager(compiler)
self._compiler = compiler
self.setupState()
@@ -1382,7 +1426,8 @@ class _HighLevelParser(_LowLevelParser):
elif val is None:
handler = val
else:
- raise Exception('Invalid parser/handler value %r for %s'%(val, name))
+ raise Exception('Invalid parser/handler value %r for %s'
+ % (val, name))
return handler
normalizeHandlerVal = normalizeParserVal
@@ -1392,7 +1437,8 @@ class _HighLevelParser(_LowLevelParser):
_directiveNamesAndParsers.update(customNamesAndParsers)
_endDirectiveNamesAndHandlers = endDirectiveNamesAndHandlers.copy()
- customNamesAndHandlers = self.setting('endDirectiveNamesAndHandlers', {})
+ customNamesAndHandlers = self.setting('endDirectiveNamesAndHandlers',
+ {})
_endDirectiveNamesAndHandlers.update(customNamesAndHandlers)
self._directiveNamesAndParsers = {}
@@ -1419,12 +1465,9 @@ class _HighLevelParser(_LowLevelParser):
for directiveName in self.setting('closeableDirectives', []):
self._closeableDirectives.append(directiveName)
-
-
macroDirectives = self.setting('macroDirectives', {})
macroDirectives['i18n'] = I18n
-
for macroName, callback in macroDirectives.items():
if isinstance(callback, type):
callback = callback(parser=self)
@@ -1432,7 +1475,8 @@ class _HighLevelParser(_LowLevelParser):
self._macros[macroName] = callback
self._directiveNamesAndParsers[macroName] = self.eatMacroCall
- def _applyExpressionFilters(self, expr, exprType, rawExpr=None, startPos=None):
+ def _applyExpressionFilters(self, expr, exprType,
+ rawExpr=None, startPos=None):
"""Pipes cheetah expressions through a set of optional filter hooks.
The filters are functions which may modify the expressions or raise
@@ -1446,12 +1490,14 @@ class _HighLevelParser(_LowLevelParser):
- to enforce style guidelines
- filter call signature: (parser, expr, exprType, rawExpr=None, startPos=None)
- - parser is the Cheetah parser
- - expr is the expression to filter. In some cases the parser will have
- already modified it from the original source code form. For example,
- placeholders will have been translated into namemapper calls. If you
- need to work with the original source, see rawExpr.
+ Filter call signature:
+ (parser, expr, exprType, rawExpr=None, startPos=None)
+ - parser is the Cheetah parser.
+ - expr is the expression to filter. In some cases the parser
+ will have already modified it from the original source code form.
+ For example, placeholders will have been translated
+ into namemapper calls.
+ If you need to work with the original source, see rawExpr.
- exprType is the name of the directive, 'psp', or 'placeholder'. All
lowercase. @@TR: These will eventually be replaced with a set of
constants.
@@ -1460,9 +1506,9 @@ class _HighLevelParser(_LowLevelParser):
- startPos is the character position in the source string/file
where the parser started parsing the current expression.
- @@TR: I realize this use of the term 'expression' is a bit wonky as many
- of the 'expressions' are actually statements, but I haven't thought of
- a better name yet. Suggestions?
+ @@TR: I realize this use of the term 'expression' is a bit wonky
+ as many of the 'expressions' are actually statements,
+ but I haven't thought of a better name yet. Suggestions?
"""
for callback in self.setting('expressionFilterHooks'):
expr = callback(parser=self, expr=expr, exprType=exprType,
@@ -1476,9 +1522,10 @@ class _HighLevelParser(_LowLevelParser):
and directiveName not in self.setting('enabledDirectives'))):
for callback in self.setting('disabledDirectiveHooks'):
callback(parser=self, directiveName=directiveName)
- raise ForbiddenDirective(self, msg='This %r directive is disabled'%directiveName)
+ raise ForbiddenDirective(
+ self, msg='This %r directive is disabled' % directiveName)
- ## main parse loop
+ # main parse loop
def parse(self, breakPoint=None, assertEmptyStack=True):
if breakPoint:
@@ -1508,7 +1555,7 @@ class _HighLevelParser(_LowLevelParser):
if breakPoint:
self.setBreakPoint(origBP)
- ## non-directive eat methods
+ # non-directive eat methods
def eatPlainText(self):
startPos = self.pos()
@@ -1558,12 +1605,14 @@ class _HighLevelParser(_LowLevelParser):
if not self.atEnd():
self.getMultiLineCommentEndToken()
- if (not self.atEnd()) and self.setting('gobbleWhitespaceAroundMultiLineComments'):
+ if (not self.atEnd()) and \
+ self.setting('gobbleWhitespaceAroundMultiLineComments'):
restOfLine = self[self.pos():self.findEOL()]
- if not restOfLine.strip(): # WS only to EOL
+ if not restOfLine.strip(): # WS only to EOL
self.readToEOL(gobble=isLineClearToStartToken)
- if isLineClearToStartToken and (self.atEnd() or self.pos() > endOfFirstLine):
+ if isLineClearToStartToken and \
+ (self.atEnd() or self.pos() > endOfFirstLine):
self._compiler.handleWSBeforeDirective()
self._compiler.addComment(comm)
@@ -1595,11 +1644,12 @@ class _HighLevelParser(_LowLevelParser):
break
self.advance()
pspString = self.readTo(self.pos(), start=startPos).strip()
- pspString = self._applyExpressionFilters(pspString, 'psp', startPos=startPos)
+ pspString = self._applyExpressionFilters(pspString, 'psp',
+ startPos=startPos)
self._compiler.addPSP(pspString)
self.getPSPEndToken()
- ## generic directive eat methods
+ # generic directive eat methods
_simpleIndentingDirectives = '''
else elif for while repeat unless try except finally'''.split()
_simpleExprDirectives = '''
@@ -1609,6 +1659,7 @@ class _HighLevelParser(_LowLevelParser):
import from'''.split()
_directiveHandlerNames = {'import': 'addImportStatement',
'from': 'addImportStatement', }
+
def eatDirective(self):
directiveName = self.matchDirective()
self._filterDisabledDirectives(directiveName)
@@ -1644,7 +1695,8 @@ class _HighLevelParser(_LowLevelParser):
for callback in self.setting('postparseDirectiveHooks'):
callback(parser=self, directiveName=directiveName)
- def _eatRestOfDirectiveTag(self, isLineClearToStartToken, endOfFirstLinePos):
+ def _eatRestOfDirectiveTag(self, isLineClearToStartToken,
+ endOfFirstLinePos):
foundComment = False
if self.matchCommentStartToken():
pos = self.pos()
@@ -1652,17 +1704,19 @@ class _HighLevelParser(_LowLevelParser):
if not self.matchDirective():
self.setPos(pos)
foundComment = True
- self.eatComment() # this won't gobble the EOL
+ self.eatComment() # this won't gobble the EOL
else:
self.setPos(pos)
if not foundComment and self.matchDirectiveEndToken():
- self.getDirectiveEndToken()
- elif isLineClearToStartToken and (not self.atEnd()) and self.peek() in '\r\n':
+ self.getDirectiveEndToken()
+ elif isLineClearToStartToken and (not self.atEnd()) \
+ and self.peek() in '\r\n':
# still gobble the EOL if a comment was found.
self.readToEOL(gobble=True)
- if isLineClearToStartToken and (self.atEnd() or self.pos() > endOfFirstLinePos):
+ if isLineClearToStartToken and (
+ self.atEnd() or self.pos() > endOfFirstLinePos):
self._compiler.handleWSBeforeDirective()
def _eatToThisEndDirective(self, directiveName):
@@ -1680,7 +1734,8 @@ class _HighLevelParser(_LowLevelParser):
if self.isLineClearToStartToken(endRawPos):
isLineClearToStartToken = True
endRawPos = self.findBOL(endRawPos)
- self.advance(len(directiveName)) # to end of directiveName
+ # to the end of directiveName
+ self.advance(len(directiveName))
self.getWhiteSpace()
finalPos = self.pos()
break
@@ -1694,15 +1749,16 @@ class _HighLevelParser(_LowLevelParser):
if self.matchDirectiveEndToken():
self.getDirectiveEndToken()
- elif isLineClearToStartToken and (not self.atEnd()) and self.peek() in '\r\n':
+ elif isLineClearToStartToken and (not self.atEnd()) \
+ and self.peek() in '\r\n':
self.readToEOL(gobble=True)
if isLineClearToStartToken and self.pos() > endOfFirstLinePos:
self._compiler.handleWSBeforeDirective()
return textEaten
-
- def eatSimpleExprDirective(self, directiveName, includeDirectiveNameInExpr=True):
+ def eatSimpleExprDirective(self, directiveName,
+ includeDirectiveNameInExpr=True):
# filtered
isLineClearToStartToken = self.isLineClearToStartToken()
endOfFirstLine = self.findEOL()
@@ -1712,7 +1768,8 @@ class _HighLevelParser(_LowLevelParser):
startPos = self.pos()
expr = self.getExpression().strip()
directiveName = expr.split()[0]
- expr = self._applyExpressionFilters(expr, directiveName, startPos=startPos)
+ expr = self._applyExpressionFilters(expr, directiveName,
+ startPos=startPos)
if directiveName in self._closeableDirectives:
self.pushToOpenDirectivesStack(directiveName)
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
@@ -1725,16 +1782,18 @@ class _HighLevelParser(_LowLevelParser):
endOfFirstLinePos = self.findEOL()
lineCol = self.getRowCol()
self.getDirectiveStartToken()
- if directiveName not in 'else elif for while try except finally'.split():
+ if directiveName not in \
+ 'else elif for while try except finally'.split():
self.advance(len(directiveName))
startPos = self.pos()
self.getWhiteSpace()
expr = self.getExpression(pyTokensToBreakAt=[':'])
- expr = self._applyExpressionFilters(expr, directiveName, startPos=startPos)
+ expr = self._applyExpressionFilters(expr, directiveName,
+ startPos=startPos)
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
if directiveName in 'else elif except finally'.split():
callback(expr, dedent=False, lineCol=lineCol)
else:
@@ -1745,10 +1804,11 @@ class _HighLevelParser(_LowLevelParser):
self._compiler.commitStrConst()
self._compiler.dedent()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
if directiveName in self._closeableDirectives:
self.pushToOpenDirectivesStack(directiveName)
callback(expr, lineCol=lineCol)
@@ -1768,17 +1828,19 @@ class _HighLevelParser(_LowLevelParser):
raise ParseError(self, msg='Invalid end directive')
endOfFirstLinePos = self.findEOL()
- self.getExpression() # eat in any extra comment-like crap
+ self.getExpression() # eat in any extra comment-like crap
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
if directiveName in self._closeableDirectives:
self.popFromOpenDirectivesStack(directiveName)
- # subclasses can override the default behaviours here by providing an
- # end-directive handler in self._endDirectiveNamesAndHandlers[directiveName]
+ # subclasses can override the default behaviours here
+ # by providing an end-directive handler
+ # in self._endDirectiveNamesAndHandlers[directiveName]
if self._endDirectiveNamesAndHandlers.get(directiveName):
handler = self._endDirectiveNamesAndHandlers[directiveName]
handler()
- elif directiveName in 'block capture cache call filter errorCatcher'.split():
+ elif directiveName in \
+ 'block capture cache call filter errorCatcher'.split():
if key == 'block':
self._compiler.closeBlock()
elif key == 'capture':
@@ -1794,13 +1856,13 @@ class _HighLevelParser(_LowLevelParser):
elif directiveName in 'while for if try repeat unless'.split():
self._compiler.commitStrConst()
self._compiler.dedent()
- elif directiveName=='closure':
+ elif directiveName == 'closure':
self._compiler.commitStrConst()
self._compiler.dedent()
# @@TR: temporary hack of useSearchList
self.setSetting('useSearchList', self._useSearchList_orig)
- ## specific directive eat methods
+ # specific directive eat methods
def eatBreakPoint(self):
"""Tells the parser to stop parsing at this point and completely ignore
@@ -1817,7 +1879,8 @@ class _HighLevelParser(_LowLevelParser):
self.getWhiteSpace()
startPos = self.pos()
shBang = self.readToEOL()
- shBang = self._applyExpressionFilters(shBang, 'shbang', startPos=startPos)
+ shBang = self._applyExpressionFilters(shBang, 'shbang',
+ startPos=startPos)
self._compiler.setShBang(shBang.strip())
def eatEncoding(self):
@@ -1827,7 +1890,8 @@ class _HighLevelParser(_LowLevelParser):
self.getWhiteSpace()
startPos = self.pos()
encoding = self.readToEOL()
- encoding = self._applyExpressionFilters(encoding, 'encoding', startPos=startPos)
+ encoding = self._applyExpressionFilters(encoding, 'encoding',
+ startPos=startPos)
self._compiler.setModuleEncoding(encoding.strip())
def eatCompiler(self):
@@ -1843,8 +1907,9 @@ class _HighLevelParser(_LowLevelParser):
settingName = self.getIdentifier()
if settingName.lower() == 'reset':
- self.getExpression() # gobble whitespace & junk
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
+ self.getExpression() # gobble whitespace & junk
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLine)
self._initializeSettings()
self.configureParser()
return
@@ -1860,21 +1925,26 @@ class _HighLevelParser(_LowLevelParser):
# @@TR: it's unlikely that anyone apply filters would have left this
# directive enabled:
# @@TR: fix up filtering, regardless
- self._applyExpressionFilters('%s=%r'%(settingName, valueExpr),
+ self._applyExpressionFilters('%s=%r' % (settingName, valueExpr),
'compiler', startPos=startPos)
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
try:
self._compiler.setCompilerSetting(settingName, valueExpr)
- except:
- sys.stderr.write('An error occurred while processing the following #compiler directive.\n')
- sys.stderr.write('----------------------------------------------------------------------\n')
+ except Exception:
+ sys.stderr.write(
+ 'An error occurred while processing '
+ 'the following #compiler directive.\n')
+ sys.stderr.write(
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('%s\n' % self[startPos:endPos])
- sys.stderr.write('----------------------------------------------------------------------\n')
+ sys.stderr.write(
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('Please check the syntax of these settings.\n\n')
raise
-
def eatCompilerSettings(self):
# filtered
isLineClearToStartToken = self.isLineClearToStartToken()
@@ -1890,21 +1960,28 @@ class _HighLevelParser(_LowLevelParser):
if 'reset' in keywords:
self._compiler._initializeSettings()
self.configureParser()
- # @@TR: this implies a single-line #compiler-settings directive, and
- # thus we should parse forward for an end directive.
- # Subject to change in the future
+ # @@TR: this implies a single-line #compiler-settings directive,
+ # and thus we should parse forward for an end directive.
+ # Subject to change in the future.
return
startPos = self.pos()
settingsStr = self._eatToThisEndDirective('compiler-settings')
- settingsStr = self._applyExpressionFilters(settingsStr, 'compilerSettings',
- startPos=startPos)
+ settingsStr = self._applyExpressionFilters(
+ settingsStr, 'compilerSettings', startPos=startPos)
try:
- self._compiler.setCompilerSettings(keywords=keywords, settingsStr=settingsStr)
- except:
- sys.stderr.write('An error occurred while processing the following compiler settings.\n')
- sys.stderr.write('----------------------------------------------------------------------\n')
+ self._compiler.setCompilerSettings(keywords=keywords,
+ settingsStr=settingsStr)
+ except Exception:
+ sys.stderr.write(
+ 'An error occurred while processing '
+ 'the following compiler settings.\n')
+ sys.stderr.write(
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('%s\n' % settingsStr.strip())
- sys.stderr.write('----------------------------------------------------------------------\n')
+ sys.stderr.write(
+ '------------------------------------'
+ '----------------------------------\n')
sys.stderr.write('Please check the syntax of these settings.\n\n')
raise
@@ -1932,18 +2009,21 @@ class _HighLevelParser(_LowLevelParser):
endOfFirstLinePos = self.findEOL()
startPos = self.pos()
self.getDirectiveStartToken()
- #self.advance() # eat @
+ # self.advance() # eat @
startPos = self.pos()
decoratorExpr = self.getExpression()
- decoratorExpr = self._applyExpressionFilters(decoratorExpr, 'decorator', startPos=startPos)
+ decoratorExpr = self._applyExpressionFilters(
+ decoratorExpr, 'decorator', startPos=startPos)
self._compiler.addDecorator(decoratorExpr)
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
self.getWhiteSpace()
directiveName = self.matchDirective()
- if not directiveName or directiveName not in ('def', 'block', 'closure', '@'):
+ if not directiveName or \
+ directiveName not in ('def', 'block', 'closure', '@'):
raise ParseError(
- self, msg='Expected #def, #block, #closure or another @decorator')
+ self, msg='Expected #def, #block, #closure '
+ 'or another @decorator')
self.eatDirective()
def eatDef(self):
@@ -1982,19 +2062,22 @@ class _HighLevelParser(_LowLevelParser):
if argsList and argsList[0][0] == 'self':
del argsList[0]
else:
- argsList=[]
+ argsList = []
def includeBlockMarkers():
if self.setting('includeBlockMarkers'):
startMarker = self.setting('blockMarkerStart')
- self._compiler.addStrConst(startMarker[0] + methodName + startMarker[1])
+ self._compiler.addStrConst(
+ startMarker[0] + methodName + startMarker[1])
# @@TR: fix up filtering
- self._applyExpressionFilters(self[startPos:self.pos()], 'def', startPos=startPos)
+ self._applyExpressionFilters(self[startPos:self.pos()], 'def',
+ startPos=startPos)
if self.matchColonForSingleLineShortFormDirective():
isNestedDef = (self.setting('allowNestedDefScopes')
- and [name for name in self._openDirectivesStack if name=='def'])
+ and [name for name in self._openDirectivesStack
+ if name == 'def'])
self.getc()
rawSignature = self[startPos:endOfFirstLinePos]
self._eatSingleLineDef(directiveName=directiveName,
@@ -2003,7 +2086,8 @@ class _HighLevelParser(_LowLevelParser):
startPos=startPos,
endPos=endOfFirstLinePos)
if directiveName == 'def' and not isNestedDef:
- #@@TR: must come before _eatRestOfDirectiveTag ... for some reason
+ # @@TR: must come before _eatRestOfDirectiveTag...
+ # ...for some reason.
self._compiler.closeDef()
elif directiveName == 'block':
includeBlockMarkers()
@@ -2011,17 +2095,17 @@ class _HighLevelParser(_LowLevelParser):
elif directiveName == 'closure' or isNestedDef:
self._compiler.dedent()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.getc()
self.pushToOpenDirectivesStack(directiveName)
rawSignature = self[startPos:self.pos()]
- self._eatMultiLineDef(directiveName=directiveName,
- methodName=methodName,
- argsList=argsList,
- startPos=startPos,
- isLineClearToStartToken=isLineClearToStartToken)
+ self._eatMultiLineDef(
+ directiveName=directiveName, methodName=methodName,
+ argsList=argsList, startPos=startPos,
+ isLineClearToStartToken=isLineClearToStartToken)
if directiveName == 'block':
includeBlockMarkers()
@@ -2040,27 +2124,32 @@ class _HighLevelParser(_LowLevelParser):
+ '.')
isNestedDef = (self.setting('allowNestedDefScopes')
- and len([name for name in self._openDirectivesStack if name=='def'])>1)
- if directiveName=='block' or (directiveName=='def' and not isNestedDef):
+ and len([name for name in self._openDirectivesStack
+ if name == 'def']) > 1)
+ if directiveName == 'block' or (
+ directiveName == 'def' and not isNestedDef):
self._compiler.startMethodDef(methodName, argsList, parserComment)
- else: #closure
+ else: # closure
self._useSearchList_orig = self.setting('useSearchList')
self.setSetting('useSearchList', False)
self._compiler.addClosure(methodName, argsList, parserComment)
return methodName
- def _eatSingleLineDef(self, directiveName, methodName, argsList, startPos, endPos):
+ def _eatSingleLineDef(self, directiveName, methodName,
+ argsList, startPos, endPos):
# filtered in calling method
fullSignature = self[startPos:endPos]
parserComment = ('## Generated from ' + fullSignature +
' at line %s, col %s' % self.getRowCol(startPos)
+ '.')
isNestedDef = (self.setting('allowNestedDefScopes')
- and [name for name in self._openDirectivesStack if name=='def'])
- if directiveName=='block' or (directiveName=='def' and not isNestedDef):
+ and [name for name in self._openDirectivesStack
+ if name == 'def'])
+ if directiveName == 'block' or (
+ directiveName == 'def' and not isNestedDef):
self._compiler.startMethodDef(methodName, argsList, parserComment)
- else: #closure
+ else: # closure
# @@TR: temporary hack of useSearchList
useSearchList_orig = self.setting('useSearchList')
self.setSetting('useSearchList', False)
@@ -2068,7 +2157,8 @@ class _HighLevelParser(_LowLevelParser):
self.getWhiteSpace(max=1)
self.parse(breakPoint=endPos)
- if directiveName=='closure' or isNestedDef: # @@TR: temporary hack of useSearchList
+ if directiveName == 'closure' or isNestedDef:
+ # @@TR: temporary hack of useSearchList
self.setSetting('useSearchList', useSearchList_orig)
def eatExtends(self):
@@ -2085,8 +2175,9 @@ class _HighLevelParser(_LowLevelParser):
baseName = self.getCommaSeparatedSymbols()
baseName = ', '.join(baseName)
- baseName = self._applyExpressionFilters(baseName, 'extends', startPos=startPos)
- self._compiler.setBaseClass(baseName) # in compiler
+ baseName = self._applyExpressionFilters(baseName, 'extends',
+ startPos=startPos)
+ self._compiler.setBaseClass(baseName) # in compiler
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
def eatImplements(self):
@@ -2104,11 +2195,13 @@ class _HighLevelParser(_LowLevelParser):
if argsList and argsList[0][0] == 'self':
del argsList[0]
else:
- argsList=[]
+ argsList = []
# @@TR: need to split up filtering of the methodname and the args
- #methodName = self._applyExpressionFilters(methodName, 'implements', startPos=startPos)
- self._applyExpressionFilters(self[startPos:self.pos()], 'implements', startPos=startPos)
+ # methodName = self._applyExpressionFilters(methodName, 'implements',
+ # startPos=startPos)
+ self._applyExpressionFilters(self[startPos:self.pos()], 'implements',
+ startPos=startPos)
self._compiler.setMainMethodName(methodName)
self._compiler.setMainMethodArgs(argsList)
@@ -2130,11 +2223,12 @@ class _HighLevelParser(_LowLevelParser):
if argsList and argsList[0][0] == 'self':
del argsList[0]
else:
- argsList=[]
+ argsList = []
- self._applyExpressionFilters(self[startPos:self.pos()], 'super', startPos=startPos)
+ self._applyExpressionFilters(self[startPos:self.pos()], 'super',
+ startPos=startPos)
- #parserComment = ('## CHEETAH: generated from ' + signature +
+ # parserComment = ('## CHEETAH: generated from ' + signature +
# ' at line %s, col %s' % self.getRowCol(startPos)
# + '.')
@@ -2162,9 +2256,9 @@ class _HighLevelParser(_LowLevelParser):
self.getWhiteSpace()
style = SET_MODULE
- startsWithDollar = self.matchCheetahVarStart()
startPos = self.pos()
- LVALUE = self.getExpression(pyTokensToBreakAt=assignmentOps, useNameMapper=False).strip()
+ LVALUE = self.getExpression(pyTokensToBreakAt=assignmentOps,
+ useNameMapper=False).strip()
OP = self.getAssignmentOperator()
RVALUE = self.getExpression()
expr = LVALUE + ' ' + OP + ' ' + RVALUE.strip()
@@ -2172,7 +2266,9 @@ class _HighLevelParser(_LowLevelParser):
expr = self._applyExpressionFilters(expr, 'set', startPos=startPos)
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
- class Components: pass # used for 'set global'
+ # used for 'set global'
+ class Components:
+ pass
exprComponents = Components()
exprComponents.LVALUE = LVALUE
exprComponents.OP = OP
@@ -2198,14 +2294,15 @@ class _HighLevelParser(_LowLevelParser):
self.advance(len('raw'))
self.getWhiteSpace()
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self.getWhiteSpace(max=1)
rawBlock = self.readToEOL(gobble=False)
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
rawBlock = self._eatToThisEndDirective('raw')
self._compiler.addRawText(rawBlock)
@@ -2221,7 +2318,7 @@ class _HighLevelParser(_LowLevelParser):
isRaw = False
if self.startswith('raw'):
self.advance(3)
- isRaw=True
+ isRaw = True
self.getWhiteSpace()
if self.startswith('source'):
@@ -2233,11 +2330,11 @@ class _HighLevelParser(_LowLevelParser):
self.advance()
startPos = self.pos()
sourceExpr = self.getExpression()
- sourceExpr = self._applyExpressionFilters(sourceExpr, 'include', startPos=startPos)
+ sourceExpr = self._applyExpressionFilters(sourceExpr, 'include',
+ startPos=startPos)
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
self._compiler.addInclude(sourceExpr, includeFrom, isRaw)
-
def eatDefMacro(self):
# @@TR: not filtered yet
isLineClearToStartToken = self.isLineClearToStartToken()
@@ -2256,7 +2353,7 @@ class _HighLevelParser(_LowLevelParser):
if argsList and argsList[0][0] == 'self':
del argsList[0]
else:
- argsList=[]
+ argsList = []
assert macroName not in self._directiveNamesAndParsers
argsList.insert(0, ('src', None))
@@ -2269,30 +2366,32 @@ class _HighLevelParser(_LowLevelParser):
argsList.append(('endPos', 'None'))
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self.getWhiteSpace(max=1)
macroSrc = self.readToEOL(gobble=False)
self.readToEOL(gobble=True)
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
macroSrc = self._eatToThisEndDirective('defmacro')
normalizedMacroSrc = ''.join(
- ['%def callMacro('+','.join([defv and '%s=%s'%(n, defv) or n
- for n, defv in argsList])
- +')\n',
+ ['%def callMacro(' + ','.join([defv and '%s=%s' % (n, defv) or n
+ for n, defv in argsList]) + ')\n',
macroSrc,
'%end def'])
-
from Cheetah.Template import Template
- templateAPIClass = self.setting('templateAPIClassForDefMacro', default=Template)
- compilerSettings = self.setting('compilerSettingsForDefMacro', default={})
+ templateAPIClass = self.setting('templateAPIClassForDefMacro',
+ default=Template)
+ compilerSettings = self.setting('compilerSettingsForDefMacro',
+ default={})
searchListForMacros = self.setting('searchListForDefMacro', default=[])
- searchListForMacros = list(searchListForMacros) # copy to avoid mutation bugs
+ # copy to avoid mutation bugs
+ searchListForMacros = list(searchListForMacros)
searchListForMacros.append({'macros': self._macros,
'parser': self,
'compilerSettings': self.settings(),
@@ -2300,15 +2399,17 @@ class _HighLevelParser(_LowLevelParser):
templateAPIClass._updateSettingsWithPreprocessTokens(
compilerSettings, placeholderToken='@', directiveToken='%')
- macroTemplateClass = templateAPIClass.compile(source=normalizedMacroSrc,
- compilerSettings=compilerSettings)
- #t = macroTemplateClass()
+ macroTemplateClass = templateAPIClass.compile(
+ source=normalizedMacroSrc, compilerSettings=compilerSettings)
+ # t = macroTemplateClass()
- class MacroDetails: pass
+ class MacroDetails:
+ pass
macroDetails = MacroDetails()
macroDetails.macroSrc = macroSrc
macroDetails.argsList = argsList
- macroDetails.template = macroTemplateClass(searchList=searchListForMacros)
+ macroDetails.template = macroTemplateClass(
+ searchList=searchListForMacros)
self._macroDetails[macroName] = macroDetails
self._macros[macroName] = macroDetails.template.callMacro
@@ -2333,28 +2434,28 @@ class _HighLevelParser(_LowLevelParser):
if self.matchColonForSingleLineShortFormDirective():
isShortForm = True
- self.advance() # skip over :
+ self.advance() # skip over :
self.getWhiteSpace(max=1)
srcBlock = self.readToEOL(gobble=False)
EOLCharsInShortForm = self.readToEOL(gobble=True)
- #self.readToEOL(gobble=False)
+ # self.readToEOL(gobble=False)
else:
isShortForm = False
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
srcBlock = self._eatToThisEndDirective(macroName)
-
if hasattr(macro, 'convertArgStrToDict'):
- kwArgs = macro.convertArgStrToDict(args, parser=self, startPos=startPos)
+ kwArgs = macro.convertArgStrToDict(args, parser=self,
+ startPos=startPos)
else:
def getArgs(*pargs, **kws):
return kws
kwArgs = eval('getArgs(%(args)s)' % locals())
-
assert 'src' not in kwArgs
kwArgs['src'] = srcBlock
@@ -2400,8 +2501,7 @@ class _HighLevelParser(_LowLevelParser):
self.setBreakPoint(origBreakPoint)
self.setPos(origPos)
-
- #self._compiler.addRawText('end')
+ # self._compiler.addRawText('end')
def eatCache(self):
isLineClearToStartToken = self.isLineClearToStartToken()
@@ -2412,23 +2512,25 @@ class _HighLevelParser(_LowLevelParser):
startPos = self.pos()
argList = self.getDefArgList(useNameMapper=True)
- argList = self._applyExpressionFilters(argList, 'cache', startPos=startPos)
+ argList = self._applyExpressionFilters(argList, 'cache',
+ startPos=startPos)
def startCache():
cacheInfo = self._compiler.genCacheInfoFromArgList(argList)
self._compiler.startCacheRegion(cacheInfo, lineCol)
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self.getWhiteSpace(max=1)
startCache()
self.parse(breakPoint=self.findEOL(gobble=True))
self._compiler.endCacheRegion()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
self.pushToOpenDirectivesStack('cache')
startCache()
@@ -2450,22 +2552,24 @@ class _HighLevelParser(_LowLevelParser):
functionName = self.getCheetahVar(plain=True, skipStartToken=True)
self.setSetting('useAutocalling', useAutocallingOrig)
# @@TR: fix up filtering
- self._applyExpressionFilters(self[startPos:self.pos()], 'call', startPos=startPos)
+ self._applyExpressionFilters(self[startPos:self.pos()], 'call',
+ startPos=startPos)
self.getWhiteSpace()
args = self.getExpression(pyTokensToBreakAt=[':']).strip()
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self._compiler.startCallRegion(functionName, args, lineCol)
self.getWhiteSpace(max=1)
self.parse(breakPoint=self.findEOL(gobble=False))
self._compiler.endCallRegion()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
self.pushToOpenDirectivesStack("call")
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
self._compiler.startCallRegion(functionName, args, lineCol)
def eatCallArg(self):
@@ -2479,12 +2583,14 @@ class _HighLevelParser(_LowLevelParser):
self.getWhiteSpace()
argName = self.getIdentifier()
self.getWhiteSpace()
- argName = self._applyExpressionFilters(argName, 'arg', startPos=startPos)
+ argName = self._applyExpressionFilters(argName, 'arg',
+ startPos=startPos)
self._compiler.setCallArg(argName, lineCol)
if self.peek() == ':':
self.getc()
else:
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
def eatFilter(self):
isLineClearToStartToken = self.isLineClearToStartToken()
@@ -2501,20 +2607,22 @@ class _HighLevelParser(_LowLevelParser):
isKlass = False
theFilter = self.getIdentifier()
self.getWhiteSpace()
- theFilter = self._applyExpressionFilters(theFilter, 'filter', startPos=startPos)
+ theFilter = self._applyExpressionFilters(theFilter, 'filter',
+ startPos=startPos)
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self.getWhiteSpace(max=1)
self._compiler.setFilter(theFilter, isKlass)
self.parse(breakPoint=self.findEOL(gobble=False))
self._compiler.closeFilterBlock()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
self.pushToOpenDirectivesStack("filter")
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
self._compiler.setFilter(theFilter, isKlass)
def eatTransform(self):
@@ -2532,15 +2640,15 @@ class _HighLevelParser(_LowLevelParser):
isKlass = False
transformer = self.getIdentifier()
self.getWhiteSpace()
- transformer = self._applyExpressionFilters(transformer, 'transform', startPos=startPos)
+ transformer = self._applyExpressionFilters(transformer, 'transform',
+ startPos=startPos)
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
self._compiler.setTransform(transformer, isKlass)
-
def eatErrorCatcher(self):
isLineClearToStartToken = self.isLineClearToStartToken()
endOfFirstLinePos = self.findEOL()
@@ -2555,7 +2663,8 @@ class _HighLevelParser(_LowLevelParser):
self._compiler.setErrorCatcher(errorCatcherName)
def eatCapture(self):
- # @@TR: this could be refactored to use the code in eatSimpleIndentingDirective
+ # @@TR: this could be refactored
+ # to use the code in eatSimpleIndentingDirective
# filtered
isLineClearToStartToken = self.isLineClearToStartToken()
endOfFirstLinePos = self.findEOL()
@@ -2569,20 +2678,20 @@ class _HighLevelParser(_LowLevelParser):
expr = self.getExpression(pyTokensToBreakAt=[':'])
expr = self._applyExpressionFilters(expr, 'capture', startPos=startPos)
if self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self._compiler.startCaptureRegion(assignTo=expr, lineCol=lineCol)
self.getWhiteSpace(max=1)
self.parse(breakPoint=self.findEOL(gobble=False))
self._compiler.endCaptureRegion()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLinePos)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLinePos)
self.pushToOpenDirectivesStack("capture")
self._compiler.startCaptureRegion(assignTo=expr, lineCol=lineCol)
-
def eatIf(self):
# filtered
isLineClearToStartToken = self.isLineClearToStartToken()
@@ -2595,16 +2704,17 @@ class _HighLevelParser(_LowLevelParser):
expr = ''.join(expressionParts).strip()
expr = self._applyExpressionFilters(expr, 'if', startPos=startPos)
- isTernaryExpr = ('then' in expressionParts and 'else' in expressionParts)
+ isTernaryExpr = ('then' in expressionParts and
+ 'else' in expressionParts)
if isTernaryExpr:
conditionExpr = []
trueExpr = []
falseExpr = []
currentExpr = conditionExpr
for part in expressionParts:
- if part.strip()=='then':
+ if part.strip() == 'then':
currentExpr = trueExpr
- elif part.strip()=='else':
+ elif part.strip() == 'else':
currentExpr = falseExpr
else:
currentExpr.append(part)
@@ -2612,27 +2722,31 @@ class _HighLevelParser(_LowLevelParser):
conditionExpr = ''.join(conditionExpr)
trueExpr = ''.join(trueExpr)
falseExpr = ''.join(falseExpr)
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
- self._compiler.addTernaryExpr(conditionExpr, trueExpr, falseExpr, lineCol=lineCol)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLine)
+ self._compiler.addTernaryExpr(conditionExpr, trueExpr,
+ falseExpr, lineCol=lineCol)
elif self.matchColonForSingleLineShortFormDirective():
- self.advance() # skip over :
+ self.advance() # skip over :
self._compiler.addIf(expr, lineCol=lineCol)
self.getWhiteSpace(max=1)
self.parse(breakPoint=self.findEOL(gobble=True))
self._compiler.commitStrConst()
self._compiler.dedent()
else:
- if self.peek()==':':
+ if self.peek() == ':':
self.advance()
self.getWhiteSpace()
- self._eatRestOfDirectiveTag(isLineClearToStartToken, endOfFirstLine)
+ self._eatRestOfDirectiveTag(isLineClearToStartToken,
+ endOfFirstLine)
self.pushToOpenDirectivesStack('if')
self._compiler.addIf(expr, lineCol=lineCol)
- ## end directive handlers
+ # end directive handlers
def handleEndDef(self):
- isNestedDef = (self.setting('allowNestedDefScopes')
- and [name for name in self._openDirectivesStack if name=='def'])
+ isNestedDef = (self.setting('allowNestedDefScopes') and
+ [name for name in self._openDirectivesStack
+ if name == 'def'])
if not isNestedDef:
self._compiler.closeDef()
else:
@@ -2653,16 +2767,17 @@ class _HighLevelParser(_LowLevelParser):
if self._openDirectivesStack[-1] == directiveName:
del self._openDirectivesStack[-1]
else:
- raise ParseError(self, msg="#end %s found, expected #end %s" %(
+ raise ParseError(self, msg="#end %s found, expected #end %s" % (
directiveName, self._openDirectivesStack[-1]))
def assertEmptyOpenDirectivesStack(self):
if self._openDirectivesStack:
errorMsg = (
- "Some #directives are missing their corresponding #end ___ tag: %s" %(
- ', '.join(self._openDirectivesStack)))
+ "Some #directives are missing their corresponding #end ___ tag"
+ ": %s" % ', '.join(self._openDirectivesStack))
raise ParseError(self, msg=errorMsg)
+
##################################################
-## Make an alias to export
+# Make an alias to export
Parser = _HighLevelParser
diff --git a/Cheetah/Servlet.py b/Cheetah/Servlet.py
index 70e8315..8caa9d8 100644..100755
--- a/Cheetah/Servlet.py
+++ b/Cheetah/Servlet.py
@@ -3,9 +3,9 @@
Provides an abstract Servlet baseclass for Cheetah's Template class
'''
-import sys
import os.path
+
class Servlet(object):
"""
This class is an abstract baseclass for Cheetah.Template.Template.
@@ -25,8 +25,8 @@ definition.""")
def sleep(self, transaction):
super(Servlet, self).sleep(transaction)
self.session = None
- self.request = None
- self._request = None
+ self.request = None
+ self._request = None
self.response = None
self.transaction = None
diff --git a/Cheetah/SettingsManager.py b/Cheetah/SettingsManager.py
index 9a2bcc2..e2e847d 100644
--- a/Cheetah/SettingsManager.py
+++ b/Cheetah/SettingsManager.py
@@ -1,4 +1,3 @@
-import sys
import os.path
import copy as copyModule
try:
@@ -6,22 +5,22 @@ try:
except ImportError: # PY3
from configparser import ConfigParser
import re
-from tokenize import Intnumber, Floatnumber, Number
+from tokenize import Number
import types
-import time
try:
from StringIO import StringIO
except ImportError:
from io import StringIO
-import imp # used by SettingsManager.updateSettingsFromPySrcFile()
from Cheetah.compat import PY2
numberRE = re.compile(Number)
-complexNumberRE = re.compile('[\(]*' +Number + r'[ \t]*\+[ \t]*' + Number + '[\)]*')
+complexNumberRE = re.compile(
+ '[\(]*' + Number + r'[ \t]*\+[ \t]*' + Number + '[\)]*')
##################################################
-## FUNCTIONS ##
+# FUNCTIONS ##
+
def mergeNestedDictionaries(dict1, dict2, copy=False, deepcopy=False):
"""Recursively merge the values of dict2 into dict1.
@@ -36,12 +35,14 @@ def mergeNestedDictionaries(dict1, dict2, copy=False, deepcopy=False):
dict1 = copyModule.deepcopy(dict1)
for key, val in dict2.items():
- if key in dict1 and isinstance(val, dict) and isinstance(dict1[key], dict):
+ if key in dict1 and isinstance(val, dict) \
+ and isinstance(dict1[key], dict):
dict1[key] = mergeNestedDictionaries(dict1[key], val)
else:
dict1[key] = val
return dict1
+
def stringIsNumber(S):
"""Return True if theString represents a Python number, False otherwise.
This also works for complex numbers and numbers with +/- in front."""
@@ -59,9 +60,11 @@ def stringIsNumber(S):
else:
return True
-def convStringToNum(theString):
- """Convert a string representation of a Python number to the Python version"""
+def convStringToNum(theString):
+ """
+ Convert a string representation of a Python number to the Python version
+ """
if not stringIsNumber(theString):
raise Error(theString + ' cannot be converted to a Python number')
return eval(theString, {}, {})
@@ -70,9 +73,11 @@ def convStringToNum(theString):
class Error(Exception):
pass
+
class NoDefault(object):
pass
+
class ConfigParserCaseSensitive(ConfigParser):
"""A case sensitive version of the standard Python ConfigParser."""
@@ -80,14 +85,14 @@ class ConfigParserCaseSensitive(ConfigParser):
"""Don't change the case as is done in the default implemenation."""
return optionstr
+
class _SettingsCollector(object):
"""An abstract base class that provides the methods SettingsManager uses to
collect settings from config files and strings.
- This class only collects settings it doesn't modify the _settings dictionary
- of SettingsManager instances in any way.
+ This class only collects settings, it doesn't modify
+ the _settings dictionary of SettingsManager instances in any way.
"""
-
_ConfigParserClass = ConfigParserCaseSensitive
def readSettingsFromModule(self, mod, ignoreUnderscored=True):
@@ -105,10 +110,10 @@ class _SettingsCollector(object):
def readSettingsFromPySrcStr(self, theString):
"""Return a dictionary of the settings in a Python src string."""
- globalsDict = {'True': (1==1),
- 'False': (0==1),
+ globalsDict = {'True': (1 == 1),
+ 'False': (0 == 1),
}
- newSettings = {'self':self}
+ newSettings = {'self': self}
exec((theString+os.linesep), globalsDict, newSettings)
del newSettings['self']
module = types.ModuleType('temp_settings_module')
@@ -135,9 +140,9 @@ class _SettingsCollector(object):
* The string 'False' will be converted to a Python false value
- * Any string starting with 'python:' will be treated as a Python literal
- or expression that needs to be eval'd. This approach is useful for
- declaring lists and dictionaries.
+ * Any string starting with 'python:' will be treated
+ as a Python literal or expression that needs to be eval'd.
+ This approach is useful for declaring lists and dictionaries.
If a config section titled 'Globals' is present the options defined
under it will be treated as top-level settings.
@@ -160,8 +165,8 @@ class _SettingsCollector(object):
if o != '__name__':
newSettings[s][o] = p.get(s, o)
- ## loop through new settings -> deal with global settings, numbers,
- ## booleans and None ++ also deal with 'importSettings' commands
+ # loop through new settings -> deal with global settings, numbers,
+ # booleans and None ++ also deal with 'importSettings' commands
for sect, subDict in list(newSettings.items()):
for key, val in list(subDict.items()):
@@ -177,14 +182,14 @@ class _SettingsCollector(object):
if stringIsNumber(val):
subDict[key] = convStringToNum(val)
- ## now deal with any 'importSettings' commands
+ # now deal with any 'importSettings' commands
if key.lower() == 'importsettings':
if val.find(';') < 0:
importedSettings = self.readSettingsFromPySrcFile(val)
else:
path = val.split(';')[0]
rest = ''.join(val.split(';')[1:]).strip()
- parentDict = self.readSettingsFromPySrcFile(path)
+ parentDict = self.readSettingsFromPySrcFile(path) # noqa: E501,F841
importedSettings = eval('parentDict["' + rest + '"]')
subDict.update(mergeNestedDictionaries(subDict,
@@ -213,26 +218,27 @@ class SettingsManager(_SettingsCollector):
return {}
def _initializeSettings(self):
- """A hook that allows for complex setting initialization sequences that
- involve references to 'self' or other settings. For example:
+ """A hook that allows for complex setting initialization sequences
+ that involve references to 'self' or other settings. For example:
self._settings['myCalcVal'] = self._settings['someVal'] * 15
- This method should be called by the class' __init__() method when needed.
+ This method should be called by the class' __init__() method
+ when needed.
The dummy implementation should be reimplemented by subclasses.
"""
-
pass
- ## core post startup methods
+ # core post startup methods
def setting(self, name, default=NoDefault):
- """Get a setting from self._settings, with or without a default value."""
+ """
+ Get a setting from self._settings, with or without a default value
+ """
if default is NoDefault:
return self._settings[name]
else:
return self._settings.get(name, default)
-
def hasSetting(self, key):
"""True/False"""
return key in self._settings
@@ -254,31 +260,32 @@ class SettingsManager(_SettingsCollector):
return copyModule.deepcopy(self._settings)
def updateSettings(self, newSettings, merge=True):
- """Update the settings with a selective merge or a complete overwrite."""
-
+ """
+ Update the settings with a selective merge or a complete overwrite
+ """
if merge:
mergeNestedDictionaries(self._settings, newSettings)
else:
self._settings.update(newSettings)
-
- ## source specific update methods
+ # source specific update methods
def updateSettingsFromPySrcStr(self, theString, merge=True):
"""Update the settings from a code in a Python src string."""
newSettings = self.readSettingsFromPySrcStr(theString)
self.updateSettings(newSettings,
- merge=newSettings.get('mergeSettings', merge) )
-
+ merge=newSettings.get('mergeSettings', merge))
- def updateSettingsFromConfigFileObj(self, inFile, convert=True, merge=True):
+ def updateSettingsFromConfigFileObj(self, inFile,
+ convert=True, merge=True):
"""See the docstring for .updateSettingsFromConfigFile()
The caller of this method is responsible for closing the inFile file
object."""
- newSettings = self.readSettingsFromConfigFileObj(inFile, convert=convert)
+ newSettings = self.readSettingsFromConfigFileObj(inFile,
+ convert=convert)
self.updateSettings(newSettings,
merge=newSettings.get('mergeSettings', merge))
@@ -288,7 +295,7 @@ class SettingsManager(_SettingsCollector):
configStr = '[globals]\n' + configStr
inFile = StringIO(configStr)
- newSettings = self.readSettingsFromConfigFileObj(inFile, convert=convert)
+ newSettings = self.readSettingsFromConfigFileObj(inFile,
+ convert=convert)
self.updateSettings(newSettings,
merge=newSettings.get('mergeSettings', merge))
-
diff --git a/Cheetah/SourceReader.py b/Cheetah/SourceReader.py
index 4d56ba9..44eb3ba 100644
--- a/Cheetah/SourceReader.py
+++ b/Cheetah/SourceReader.py
@@ -1,22 +1,23 @@
"""SourceReader class for Cheetah's Parser and CodeGenerator
"""
import re
-import sys
from Cheetah.compat import unicode
EOLre = re.compile(r'[ \f\t]*(?:\r\n|\r|\n)')
EOLZre = re.compile(r'(?:\r\n|\r|\n|\Z)')
ENCODINGsearch = re.compile("coding[=:]\s*([-\w.]+)").search
+
class Error(Exception):
pass
+
class SourceReader(object):
def __init__(self, src, filename=None, breakPoint=None, encoding=None):
self._src = src
self._filename = filename
self._srcLen = len(src)
- if breakPoint == None:
+ if breakPoint is None:
self._breakPoint = self._srcLen
else:
self.setBreakPoint(breakPoint)
@@ -24,7 +25,7 @@ class SourceReader(object):
self._bookmarks = {}
self._posTobookmarkMap = {}
- ## collect some meta-information
+ # collect some meta-information
self._EOLs = []
pos = 0
while pos < len(self):
@@ -54,7 +55,8 @@ class SourceReader(object):
return self._src[i]
def __getslice__(self, i, j):
- i = max(i, 0); j = max(j, 0)
+ i = max(i, 0)
+ j = max(j, 0)
return self._src[i:j]
def splitlines(self):
@@ -63,7 +65,7 @@ class SourceReader(object):
return self._srcLines
def lineNum(self, pos=None):
- if pos == None:
+ if pos is None:
pos = self._pos
for i in range(len(self._BOLs)):
@@ -71,20 +73,20 @@ class SourceReader(object):
return i
def getRowCol(self, pos=None):
- if pos == None:
+ if pos is None:
pos = self._pos
lineNum = self.lineNum(pos)
- BOL, EOL = self._BOLs[lineNum], self._EOLs[lineNum]
+ BOL = self._BOLs[lineNum]
return lineNum+1, pos-BOL+1
def getRowColLine(self, pos=None):
- if pos == None:
+ if pos is None:
pos = self._pos
row, col = self.getRowCol(pos)
return row, col, self.splitlines()[row-1]
def getLine(self, pos):
- if pos == None:
+ if pos is None:
pos = self._pos
lineNum = self.lineNum(pos)
return self.splitlines()[lineNum]
@@ -96,27 +98,29 @@ class SourceReader(object):
self.checkPos(pos)
self._pos = pos
-
def validPos(self, pos):
- return pos <= self._breakPoint and pos >=0
+ return pos <= self._breakPoint and pos >= 0
def checkPos(self, pos):
if not pos <= self._breakPoint:
- raise Error("pos (" + str(pos) + ") is invalid: beyond the stream's end (" +
- str(self._breakPoint-1) + ")" )
- elif not pos >=0:
- raise Error("pos (" + str(pos) + ") is invalid: less than 0" )
+ raise Error(
+ "pos (" + str(pos) + ") is invalid: beyond the stream's end ("
+ + str(self._breakPoint-1) + ")")
+ elif not pos >= 0:
+ raise Error("pos (" + str(pos) + ") is invalid: less than 0")
def breakPoint(self):
return self._breakPoint
def setBreakPoint(self, pos):
if pos > self._srcLen:
- raise Error("New breakpoint (" + str(pos) +
- ") is invalid: beyond the end of stream's source string (" +
- str(self._srcLen) + ")" )
+ raise Error(
+ "New breakpoint (" + str(pos) +
+ ") is invalid: beyond the end of stream's source string (" +
+ str(self._srcLen) + ")")
elif not pos >= 0:
- raise Error("New breakpoint (" + str(pos) + ") is invalid: less than 0" )
+ raise Error(
+ "New breakpoint (" + str(pos) + ") is invalid: less than 0")
self._breakPoint = pos
@@ -129,11 +133,12 @@ class SourceReader(object):
def gotoBookmark(self, name):
if not self.hasBookmark(name):
- raise Error("Invalid bookmark (" + name + ") is invalid: does not exist")
+ raise Error(
+ "Invalid bookmark (" + name + ") is invalid: does not exist")
pos = self._bookmarks[name]
if not self.validPos(pos):
- raise Error("Invalid bookmark (" + name + ', '+
- str(pos) + ") is invalid: pos is out of range" )
+ raise Error("Invalid bookmark (" + name + ', ' +
+ str(pos) + ") is invalid: pos is out of range")
self._pos = pos
def atEnd(self):
@@ -158,7 +163,7 @@ class SourceReader(object):
raise Error('Already at beginning of stream')
self._pos -= 1
- if not c==None:
+ if c is not None:
self._src[self._pos] = c
def advance(self, offset=1):
@@ -177,12 +182,11 @@ class SourceReader(object):
def readTo(self, to, start=None):
self.checkPos(to)
- if start == None:
+ if start is None:
start = self._pos
self._pos = to
return self._src[start:to]
-
def readToEOL(self, start=None, gobble=True):
EOLmatch = EOLZre.search(self.src(), self.pos())
if gobble:
@@ -191,11 +195,10 @@ class SourceReader(object):
pos = EOLmatch.start()
return self.readTo(to=pos, start=start)
-
def find(self, it, pos=None):
- if pos == None:
+ if pos is None:
pos = self._pos
- return self._src.find(it, pos )
+ return self._src.find(it, pos)
def startswith(self, it, pos=None):
if self.find(it, pos) == self.pos():
@@ -204,18 +207,18 @@ class SourceReader(object):
return False
def rfind(self, it, pos):
- if pos == None:
+ if pos is None:
pos = self._pos
return self._src.rfind(it, pos)
def findBOL(self, pos=None):
- if pos == None:
+ if pos is None:
pos = self._pos
src = self.src()
return max(src.rfind('\n', 0, pos)+1, src.rfind('\r', 0, pos)+1, 0)
def findEOL(self, pos=None, gobble=False):
- if pos == None:
+ if pos is None:
pos = self._pos
match = EOLZre.search(self.src(), pos)
@@ -225,7 +228,7 @@ class SourceReader(object):
return match.start()
def isLineClearToPos(self, pos=None):
- if pos == None:
+ if pos is None:
pos = self.pos()
self.checkPos(pos)
src = self.src()
@@ -235,11 +238,11 @@ class SourceReader(object):
def matches(self, strOrRE):
if isinstance(strOrRE, (str, unicode)):
return self.startswith(strOrRE, pos=self.pos())
- else: # assume an re object
+ else: # assume an re object
return strOrRE.match(self.src(), self.pos())
def matchWhiteSpace(self, WSchars=' \f\t'):
- return (not self.atEnd()) and self.peek() in WSchars
+ return (not self.atEnd()) and self.peek() in WSchars
def getWhiteSpace(self, max=None, WSchars=' \f\t'):
if not self.matchWhiteSpace(WSchars):
diff --git a/Cheetah/Template.py b/Cheetah/Template.py
index f3b3703..2cfd404 100644
--- a/Cheetah/Template.py
+++ b/Cheetah/Template.py
@@ -1,19 +1,18 @@
'''
-Provides the core API for Cheetah.
+Provides the core API for Cheetah
-See the docstring in the Template class and the Users' Guide for more information
+See the docstring in the Template class and the Users' Guide
+for more information.
'''
-################################################################################
-## DEPENDENCIES
+###############################################################################
+# DEPENDENCIES
import sys # used in the error handling code
import re # used to define the internal delims regex
import logging
-import string
import os.path
import time # used in the cache refresh code
from random import randrange
-import imp
import inspect
import io
try:
@@ -22,10 +21,27 @@ except ImportError:
from io import StringIO
import traceback
import pprint
-import cgi # Used by .webInput() if the template is a CGI script.
+import cgi # Used by .webInput() if the template is a CGI script.
import types
+from Cheetah import ErrorCatchers # for placeholder tags
+from Cheetah import Filters # the output filters
+from Cheetah.CacheRegion import CacheRegion
+from Cheetah.CacheStore import MemoryCacheStore # , MemcachedCacheStore
+from Cheetah.Compiler import Compiler
+from Cheetah.NameMapper import NotFound, valueFromSearchList
+from Cheetah.Parser import ParseError, SourceReader
+# Base classes for Template
+from Cheetah.Servlet import Servlet
+from Cheetah.Unspecified import Unspecified
+from Cheetah.Utils.Indenter import Indenter # and for placeholders
+from Cheetah.Utils.WebInputMixin import _Converter, _lookup, \
+ NonNumericInputError
+from Cheetah.Version import MinCompatibleVersion
+from Cheetah.Version import convertVersionStringToTuple, \
+ MinCompatibleVersionTuple
from Cheetah.compat import PY2, string_type, unicode
+from Cheetah.convertTmplPathToModuleName import convertTmplPathToModuleName
try:
from threading import Lock
@@ -33,53 +49,40 @@ except ImportError:
class Lock:
def acquire(self):
pass
+
def release(self):
pass
if PY2:
filetype = io.IOBase
+
def createMethod(func, cls):
return types.MethodType(func, None, cls)
else:
filetype = io.IOBase
+
def createMethod(func, cls):
return func
-
-from Cheetah.Version import convertVersionStringToTuple, MinCompatibleVersionTuple
-from Cheetah.Version import MinCompatibleVersion
-# Base classes for Template
-from Cheetah.Servlet import Servlet
-# More intra-package imports ...
-from Cheetah.Parser import ParseError, SourceReader
-from Cheetah.Compiler import Compiler, DEFAULT_COMPILER_SETTINGS
-from Cheetah import ErrorCatchers # for placeholder tags
-from Cheetah import Filters # the output filters
-from Cheetah.convertTmplPathToModuleName import convertTmplPathToModuleName
-
-from Cheetah.Utils.Misc import checkKeywords # Used in Template.__init__
-from Cheetah.Utils.Indenter import Indenter # Used in Template.__init__ and for
- # placeholders
-from Cheetah.NameMapper import NotFound, valueFromSearchList
-from Cheetah.CacheStore import MemoryCacheStore, MemcachedCacheStore
-from Cheetah.CacheRegion import CacheRegion
-from Cheetah.Utils.WebInputMixin import _Converter, _lookup, NonNumericInputError
-
-from Cheetah.Unspecified import Unspecified
-
NoneType = type(None)
# Decide whether to use the file modification time in file's cache key
__checkFileMtime = True
+
+
def checkFileMtime(value):
globals()['__checkFileMtime'] = value
+
class Error(Exception):
pass
+
+
class PreprocessError(Error):
pass
+
def hashList(l):
hashedList = []
for v in l:
@@ -90,6 +93,7 @@ def hashList(l):
hashedList.append(v)
return hash(tuple(hashedList))
+
def hashDict(d):
items = sorted(d.items())
hashedList = []
@@ -102,23 +106,25 @@ def hashDict(d):
return hash(tuple(hashedList))
-################################################################################
-## MODULE GLOBALS AND CONSTANTS
+###############################################################################
+# MODULE GLOBALS AND CONSTANTS
def _genUniqueModuleName(baseModuleName):
"""The calling code is responsible for concurrency locking.
"""
finalName = baseModuleName
while finalName in sys.modules:
- finalName = ('cheetah_%s_%s_%s'%(baseModuleName,
- str(time.time()).replace('.', '_'),
- str(randrange(10000, 99999))))
+ finalName = ('cheetah_%s_%s_%s' % (baseModuleName,
+ str(time.time()).replace('.', '_'),
+ str(randrange(10000, 99999))))
return finalName
+
# Cache of a cgi.FieldStorage() instance, maintained by .webInput().
# This is only relavent to templates used as CGI scripts.
_formUsedByWebInput = None
+
def updateLinecache(filename, src):
import linecache
size = len(src)
@@ -127,9 +133,11 @@ def updateLinecache(filename, src):
fullname = filename
linecache.cache[filename] = size, mtime, lines, fullname
+
class CompileCacheItem(object):
pass
+
class TemplatePreprocessor(object):
'''
This is used with the preprocessors argument to Template.compile().
@@ -147,8 +155,8 @@ class TemplatePreprocessor(object):
it outputs
"""
settings = self._settings
- if not source: # @@TR: this needs improving
- if isinstance(file, (str, unicode)): # it's a filename.
+ if not source: # @@TR: this needs improving
+ if isinstance(file, (str, unicode)): # it's a filename.
f = open(file)
source = f.read()
f.close()
@@ -167,12 +175,14 @@ class TemplatePreprocessor(object):
if hasattr(settings, arg):
compileKwArgs[arg] = getattr(settings, arg)
- tmplClass = templateAPIClass.compile(source=source, file=file, **compileKwArgs)
+ tmplClass = templateAPIClass.compile(
+ source=source, file=file, **compileKwArgs)
tmplInstance = tmplClass(**settings.templateInitArgs)
outputSource = settings.outputTransformer(tmplInstance)
outputFile = None
return outputSource, outputFile
+
class Template(Servlet):
'''
This class provides a) methods used by templates at runtime and b)
@@ -183,14 +193,14 @@ class Template(Servlet):
Cheetah Users' Guide for non-programmers. It also assumes you have read
about Cheetah's syntax in the Users' Guide.
- The following explains how to use Cheetah from within Python programs or via
- the interpreter. If you statically compile your templates on the command
- line using the 'cheetah' script, this is not relevant to you. Statically
- compiled Cheetah template modules/classes (e.g. myTemplate.py:
- MyTemplateClasss) are just like any other Python module or class. Also note,
- most Python web frameworks (Webware, Aquarium, mod_python, Turbogears,
- CherryPy, Quixote, etc.) provide plugins that handle Cheetah compilation for
- you.
+ The following explains how to use Cheetah from within Python programs or
+ via the interpreter. If you statically compile your templates on the
+ command line using the 'cheetah' script, this is not relevant to you.
+ Statically compiled Cheetah template modules/classes (e.g. myTemplate.py:
+ MyTemplateClasss) are just like any other Python module or class. Also
+ note, most Python web frameworks (Webware, Aquarium, mod_python,
+ Turbogears, CherryPy, Quixote, etc.) provide plugins that handle Cheetah
+ compilation for you.
There are several possible usage patterns::
@@ -202,13 +212,15 @@ class Template(Servlet):
Template.compile provides a rich and very flexible API via its
optional arguments so there are many possible variations of this
pattern. One example is:
- tclass = Template.compile('hello $name from $caller', baseclass=dict)
+ tclass = Template.compile('hello $name from $caller',
+ baseclass=dict)
print(tclass(name='world', caller='me'))
See the Template.compile() docstring for more details.
2) tmplInstance = Template(src)
# or Template(src, namespaces=[namespace,...])
- outputStr = str(tmplInstance) # or outputStr = tmplInstance.aMethodYouDefined(...args...)
+ outputStr = str(tmplInstance)
+ # or outputStr = tmplInstance.aMethodYouDefined(...args...)
Notes on the usage patterns::
@@ -232,14 +244,16 @@ class Template(Servlet):
new-style 'object' baseclass. Cheetah.Template is a subclass of
'object'. You also can not #extend dict, list, or other builtin
types.
- - If your template baseclass' __init__ constructor expects args there
- is currently no way to pass them in.
+ - If your template baseclass' __init__ constructor expects args
+ there is currently no way to pass them in.
- If you need to subclass a dynamically compiled Cheetah class, do something like this::
+ If you need to subclass a dynamically compiled Cheetah class, do something
+ like this::
from Cheetah.Template import Template
T1 = Template.compile('$meth1 #def meth1: this is meth1 in T1')
- T2 = Template.compile('#implements meth1\\nthis is meth1 redefined in T2', baseclass=T1)
+ T2 = Template.compile(
+ '#implements meth1\\nthis is meth1 redefined in T2', baseclass=T1)
print(T1, T1())
print(T2, T2())
@@ -286,20 +300,22 @@ class Template(Servlet):
'_getTemplateAPIClassForIncludeDirectiveCompilation',
)
_CHEETAH_requiredCheetahClassMethods = ('subclass',)
- _CHEETAH_requiredCheetahClassAttributes = ('cacheRegionClass', 'cacheStore',
- 'cacheStoreIdPrefix', 'cacheStoreClass')
+ _CHEETAH_requiredCheetahClassAttributes = (
+ 'cacheRegionClass', 'cacheStore',
+ 'cacheStoreIdPrefix', 'cacheStoreClass')
- ## the following are used by .compile(). Most are documented in its docstring.
+ # The following are used by .compile().
+ # Most are documented in its docstring.
_CHEETAH_cacheModuleFilesForTracebacks = False
- _CHEETAH_cacheDirForModuleFiles = None # change to a dirname
+ _CHEETAH_cacheDirForModuleFiles = None # change to a dirname
- _CHEETAH_compileCache = dict() # cache store for compiled code and classes
+ _CHEETAH_compileCache = dict() # cache store for compiled code and classes
# To do something other than simple in-memory caching you can create an
# alternative cache store. It just needs to support the basics of Python's
# mapping/dict protocol. E.g.:
# class AdvCachingTemplate(Template):
# _CHEETAH_compileCache = MemoryOrFileCache()
- _CHEETAH_compileLock = Lock() # used to prevent race conditions
+ _CHEETAH_compileLock = Lock() # used to prevent race conditions
_CHEETAH_defaultMainMethodName = None
_CHEETAH_compilerSettings = None
_CHEETAH_compilerClass = Compiler
@@ -311,17 +327,18 @@ class Template(Servlet):
_CHEETAH_defaultClassNameForTemplates = None
# defaults to DEFAULT_COMPILER_SETTINGS['mainMethodName']:
_CHEETAH_defaultMainMethodNameForTemplates = None
- _CHEETAH_defaultModuleNameForTemplates = 'DynamicallyCompiledCheetahTemplate'
+ _CHEETAH_defaultModuleNameForTemplates = \
+ 'DynamicallyCompiledCheetahTemplate'
_CHEETAH_defaultModuleGlobalsForTemplates = None
_CHEETAH_preprocessors = None
_CHEETAH_defaultPreprocessorClass = TemplatePreprocessor
- ## The following attributes are used by instance methods:
+ # The following attributes are used by instance methods:
_CHEETAH_generatedModuleCode = None
NonNumericInputError = NonNumericInputError
_CHEETAH_cacheRegionClass = CacheRegion
_CHEETAH_cacheStoreClass = MemoryCacheStore
- #_CHEETAH_cacheStoreClass = MemcachedCacheStore
+ # _CHEETAH_cacheStoreClass = MemcachedCacheStore
_CHEETAH_cacheStore = None
_CHEETAH_cacheStoreIdPrefix = None
@@ -363,24 +380,24 @@ class Template(Servlet):
Internally, this method a) parses the Cheetah source code and generates
Python code defining a module with a single class in it, b) dynamically
creates a module object with a unique name, c) execs the generated code
- in that module's namespace then inserts the module into sys.modules, and
- d) returns a reference to the generated class. If you want to get the
- generated python source code instead, pass the argument
+ in that module's namespace then inserts the module into sys.modules,
+ and d) returns a reference to the generated class. If you want to get
+ the generated python source code instead, pass the argument
returnAClass=False.
It caches generated code and classes. See the descriptions of the
arguments'cacheCompilationResults' and 'useCache' for details. This
- doesn't mean that templates will automatically recompile themselves when
- the source file changes. Rather, if you call Template.compile(src) or
- Template.compile(file=path) repeatedly it will attempt to return a
+ doesn't mean that templates will automatically recompile themselves
+ when the source file changes. Rather, if you call Template.compile(src)
+ or Template.compile(file=path) repeatedly it will attempt to return a
cached class definition instead of recompiling.
Hooks are provided template source preprocessing. See the notes on the
'preprocessors' arg.
- If you are an advanced user and need to customize the way Cheetah parses
- source code or outputs Python code, you should check out the
- compilerSettings argument.
+ If you are an advanced user and need to customize the way Cheetah
+ parses source code or outputs Python code, you should check out
+ the compilerSettings argument.
Arguments::
@@ -391,8 +408,8 @@ class Template(Servlet):
The rest of the arguments are strictly optional. All but the first
have defaults in attributes of the Template class which can be
- overridden in subclasses of this class. Working with most of these is
- an advanced topic.
+ overridden in subclasses of this class. Working with most of these
+ is an advanced topic.
::
@@ -418,18 +435,17 @@ class Template(Servlet):
Template._CHEETAH_defaultModuleNameForTemplates
='DynamicallyCompiledCheetahTemplate'
- What to name the generated Python module. If the provided value is
- None and a file arg was given, the moduleName is created from the
- file path. In all cases if the moduleName provided is already in
- sys.modules it is passed through a filter that generates a unique
- variant of the name.
-
+ What to name the generated Python module. If the provided value
+ is None and a file arg was given, the moduleName is created from
+ the file path. In all cases if the moduleName provided is
+ already in sys.modules it is passed through a filter that
+ generates a unique variant of the name.
- className (a string)
Default: Template._CHEETAH_defaultClassNameForTemplates=None
- What to name the generated Python class. If the provided value is
- None, the moduleName is use as the class name.
+ What to name the generated Python class. If the provided value
+ is None, the moduleName is use as the class name.
- mainMethodName (a string)
Default:
@@ -464,9 +480,9 @@ class Template(Servlet):
- cacheCompilationResults (True/False)
Default: Template._CHEETAH_cacheCompilationResults=True
- Tells Cheetah to cache the generated code and classes so that they
- can be reused if Template.compile() is called multiple times with
- the same source and options.
+ Tells Cheetah to cache the generated code and classes so that
+ they can be reused if Template.compile() is called multiple times
+ with the same source and options.
- useCache (True/False)
Default: Template._CHEETAH_useCompilationCache=True
@@ -581,21 +597,24 @@ class Template(Servlet):
happen if you don't provide at least one):
- tokens: same as the single string described above. You can
also provide a tuple of 2 strings.
- - searchList: the searchList used for preprocess $placeholders
- - compilerSettings: used in the compilation of the intermediate
- template
+ - searchList: the searchList used
+ for preprocess $placeholders
+ - compilerSettings: used in the compilation
+ of the intermediate template
- templateAPIClass: an optional subclass of `Template`
- outputTransformer: a simple hook for passing in a callable
which can do further transformations of the preprocessor
output, or do something else like debug logging. The
default is str().
- + any keyword arguments to Template.compile which you want to
- provide for the compilation of the intermediate template.
+ + any keyword arguments to Template.compile which you want
+ to provide for the compilation
+ of the intermediate template.
- klass = Template.compile(src,
- preprocessors=[ dict(tokens='@ %', searchList=[...]) ] )
+ klass = Template.compile(
+ src,
+ preprocessors=[dict(tokens='@ %', searchList=[...])])
- """
+ """ # noqa: E501
errmsg = "arg '%s' must be %s"
if not isinstance(source, (NoneType, string_type)):
@@ -656,7 +675,7 @@ class Template(Servlet):
if not isinstance(className, (NoneType, string_type)):
raise TypeError(errmsg % ('className', 'string or None'))
- className = re.sub(r'^_+([^0-9])',r'\1', className or moduleName)
+ className = re.sub(r'^_+([^0-9])', r'\1', className or moduleName)
if mainMethodName is Unspecified:
mainMethodName = klass._CHEETAH_defaultMainMethodNameForTemplates
@@ -668,7 +687,8 @@ class Template(Servlet):
moduleGlobals = klass._CHEETAH_defaultModuleGlobalsForTemplates
if cacheModuleFilesForTracebacks is Unspecified:
- cacheModuleFilesForTracebacks = klass._CHEETAH_cacheModuleFilesForTracebacks
+ cacheModuleFilesForTracebacks = \
+ klass._CHEETAH_cacheModuleFilesForTracebacks
if not isinstance(cacheModuleFilesForTracebacks, (int, bool)):
raise TypeError(errmsg %
@@ -682,13 +702,12 @@ class Template(Servlet):
('cacheDirForModuleFiles', 'string or None'))
##################################################
- ## handle any preprocessors
+ # handle any preprocessors
if preprocessors:
- origSrc = source
source, file = klass._preprocessSource(source, file, preprocessors)
##################################################
- ## compilation, using cache if requested/possible
+ # compilation, using cache if requested/possible
baseclassValue = None
baseclassName = None
if baseclass:
@@ -696,10 +715,11 @@ class Template(Servlet):
baseclassName = baseclass
elif isinstance(baseclass, type):
# @@TR: should soft-code this
- baseclassName = 'CHEETAH_dynamicallyAssignedBaseClass_'+baseclass.__name__
+ baseclassName = \
+ 'CHEETAH_dynamicallyAssignedBaseClass_' + \
+ baseclass.__name__
baseclassValue = baseclass
-
cacheHash = None
cacheItem = None
if source or isinstance(file, string_type):
@@ -735,8 +755,8 @@ class Template(Servlet):
moduleGlobalsHash,
hash(cacheDirForModuleFiles),
]])
- except:
- #@@TR: should add some logging to this
+ except Exception:
+ # @@TR: should add some logging to this
pass
outputEncoding = 'ascii'
compiler = None
@@ -757,11 +777,13 @@ class Template(Servlet):
outputEncoding = compiler.getModuleEncoding()
if not returnAClass:
- # This is a bit of a hackish solution to make sure we're setting the proper
- # encoding on generated code that is destined to be written to a file
+ # This is a bit of a hackish solution to make sure
+ # we're setting the proper encoding on generated code
+ # that is destined to be written to a file.
if not outputEncoding == 'ascii':
generatedModuleCode = generatedModuleCode.split('\n')
- generatedModuleCode.insert(1, '# -*- coding: %s -*-' % outputEncoding)
+ generatedModuleCode.insert(
+ 1, '# -*- coding: %s -*-' % outputEncoding)
generatedModuleCode = '\n'.join(generatedModuleCode)
return generatedModuleCode.encode(outputEncoding)
else:
@@ -772,11 +794,13 @@ class Template(Servlet):
try:
klass._CHEETAH_compileLock.acquire()
uniqueModuleName = _genUniqueModuleName(moduleName)
- __file__ = uniqueModuleName+'.py' # relative file path with no dir part
+ # relative file path with no dir part
+ __file__ = uniqueModuleName + '.py'
if cacheModuleFilesForTracebacks:
if not os.path.exists(cacheDirForModuleFiles):
- raise Exception('%s does not exist'%cacheDirForModuleFiles)
+ raise Exception('%s does not exist'
+ % cacheDirForModuleFiles)
__file__ = os.path.join(cacheDirForModuleFiles, __file__)
# @@TR: might want to assert that it doesn't already exist
@@ -802,7 +826,7 @@ class Template(Servlet):
try:
parseError = genParserErrorFromPythonException(
source, file, generatedModuleCode, exception=e)
- except:
+ except Exception:
updateLinecache(__file__, generatedModuleCode)
e.generatedModuleCode = generatedModuleCode
raise e
@@ -819,10 +843,8 @@ class Template(Servlet):
templateClass = getattr(mod, className)
- if (cacheCompilationResults
- and cacheHash
- and cacheHash not in klass._CHEETAH_compileCache):
-
+ if (cacheCompilationResults and cacheHash
+ and cacheHash not in klass._CHEETAH_compileCache):
cacheItem = CompileCacheItem()
cacheItem.cacheTime = cacheItem.lastCheckoutTime = time.time()
cacheItem.code = generatedModuleCode
@@ -833,7 +855,8 @@ class Template(Servlet):
templateClass._CHEETAH_isInCompilationCache = False
if keepRefToGeneratedCode or cacheCompilationResults:
- templateClass._CHEETAH_generatedModuleCode = generatedModuleCode
+ templateClass._CHEETAH_generatedModuleCode = \
+ generatedModuleCode
# If we have a compiler object, let's set it to the compiler class
# to help the directive analyzer code
@@ -846,7 +869,8 @@ class Template(Servlet):
"""Takes the same args as the .compile() classmethod and returns a
template that is a subclass of the template this method is called from.
- T1 = Template.compile('foo - $meth1 - bar\\n#def meth1: this is T1.meth1')
+ T1 = Template.compile(
+ 'foo - $meth1 - bar\\n#def meth1: this is T1.meth1')
T2 = T1.subclass('#implements meth1\\n this is T2.meth1')
"""
kws['baseclass'] = klass
@@ -874,10 +898,10 @@ class Template(Servlet):
@classmethod
def _normalizePreprocessorArg(klass, arg):
"""Used to convert the items in the .compile() classmethod's
- preprocessors argument into real source preprocessors. This permits the
- use of several shortcut forms for defining preprocessors.
+ preprocessors argument into real source preprocessors.
+ This permits the use of several shortcut forms
+ for defining preprocessors.
"""
-
if hasattr(arg, 'preprocess'):
return arg
elif hasattr(arg, '__call__'):
@@ -901,7 +925,6 @@ class Template(Servlet):
settings = klass._normalizePreprocessorSettings(settings)
return klass._CHEETAH_defaultPreprocessorClass(settings)
-
@classmethod
def _normalizePreprocessorSettings(klass, settings):
settings.keepRefToGeneratedCode = True
@@ -913,27 +936,27 @@ class Template(Servlet):
def normalizeTokens(tokens):
if isinstance(tokens, str):
- return tokens.split() # space delimited string e.g.'@ %'
+ return tokens.split() # space delimited string e.g.'@ %'
elif isinstance(tokens, (list, tuple)):
return tokens
else:
- raise PreprocessError('invalid tokens argument: %r'%tokens)
+ raise PreprocessError('invalid tokens argument: %r' % tokens)
if hasattr(settings, 'tokens'):
(settings.placeholderToken,
settings.directiveToken) = normalizeTokens(settings.tokens)
if (not getattr(settings, 'compilerSettings', None)
- and not getattr(settings, 'placeholderToken', None) ):
-
+ and not getattr(settings, 'placeholderToken', None)):
raise TypeError(
- 'Preprocessor requires either a "tokens" or a "compilerSettings" arg.'
- ' Neither was provided.')
+ 'Preprocessor requires either a "tokens" '
+ 'or a "compilerSettings" arg. Neither was provided.')
if not hasattr(settings, 'templateInitArgs'):
settings.templateInitArgs = {}
if 'searchList' not in settings.templateInitArgs:
- if not hasattr(settings, 'searchList') and hasattr(settings, 'namespaces'):
+ if not hasattr(settings, 'searchList') \
+ and hasattr(settings, 'namespaces'):
settings.searchList = settings.namespaces
elif not hasattr(settings, 'searchList'):
settings.searchList = []
@@ -945,7 +968,8 @@ class Template(Servlet):
settings.outputTransformer = unicode
if not hasattr(settings, 'templateAPIClass'):
- class PreprocessTemplateAPIClass(klass): pass
+ class PreprocessTemplateAPIClass(klass):
+ pass
settings.templateAPIClass = PreprocessTemplateAPIClass
if not hasattr(settings, 'compilerSettings'):
@@ -960,9 +984,10 @@ class Template(Servlet):
@classmethod
def _updateSettingsWithPreprocessTokens(
- klass, compilerSettings, placeholderToken, directiveToken):
+ klass, compilerSettings, placeholderToken, directiveToken):
- if (placeholderToken and 'cheetahVarStartToken' not in compilerSettings):
+ if (placeholderToken and
+ 'cheetahVarStartToken' not in compilerSettings):
compilerSettings['cheetahVarStartToken'] = placeholderToken
if directiveToken:
if 'directiveStartToken' not in compilerSettings:
@@ -1000,7 +1025,8 @@ class Template(Servlet):
for classMethName in klass._CHEETAH_requiredCheetahClassMethods:
if not hasattr(concreteTemplateClass, classMethName):
meth = getattr(klass, classMethName)
- setattr(concreteTemplateClass, classMethName, classmethod(meth.__func__))
+ setattr(concreteTemplateClass, classMethName,
+ classmethod(meth.__func__))
for attrname in klass._CHEETAH_requiredCheetahClassAttributes:
attrname = '_CHEETAH_'+attrname
@@ -1009,10 +1035,11 @@ class Template(Servlet):
setattr(concreteTemplateClass, attrname, attrVal)
if (not hasattr(concreteTemplateClass, '__str__')
- or concreteTemplateClass.__str__ is object.__str__):
-
- mainMethNameAttr = '_mainCheetahMethod_for_'+concreteTemplateClass.__name__
- mainMethName = getattr(concreteTemplateClass, mainMethNameAttr, None)
+ or concreteTemplateClass.__str__ == object.__str__):
+ mainMethNameAttr = '_mainCheetahMethod_for_' \
+ + concreteTemplateClass.__name__
+ mainMethName = getattr(concreteTemplateClass,
+ mainMethNameAttr, None)
if mainMethName:
def __str__(self):
rc = getattr(self, mainMethName)()
@@ -1021,10 +1048,11 @@ class Template(Servlet):
if not PY2 and isinstance(rc, bytes):
return rc.decode('utf-8')
return rc
+
def __unicode__(self):
return getattr(self, mainMethName)()
elif (hasattr(concreteTemplateClass, 'respond')
- and concreteTemplateClass.respond!=Servlet.respond):
+ and concreteTemplateClass.respond != Servlet.respond):
def __str__(self):
rc = self.respond()
if PY2 and isinstance(rc, unicode):
@@ -1032,6 +1060,7 @@ class Template(Servlet):
if not PY2 and isinstance(rc, bytes):
return rc.decode('utf-8')
return rc
+
def __unicode__(self):
return self.respond()
else:
@@ -1048,6 +1077,7 @@ class Template(Servlet):
if not PY2 and isinstance(rc, bytes):
return rc.decode('utf-8')
return rc
+
def __unicode__(self):
if hasattr(self, mainMethNameAttr):
return getattr(self, mainMethNameAttr)()
@@ -1056,26 +1086,30 @@ class Template(Servlet):
else:
return super(self.__class__, self).__unicode__()
- if not PY2: __str__ = __unicode__
+ if not PY2:
+ __str__ = __unicode__ # noqa: F811
__str__ = createMethod(__str__, concreteTemplateClass)
__unicode__ = createMethod(__unicode__, concreteTemplateClass)
setattr(concreteTemplateClass, '__str__', __str__)
setattr(concreteTemplateClass, '__unicode__', __unicode__)
-
def __init__(self, source=None,
namespaces=None, searchList=None,
# use either or. They are aliases for the same thing.
file=None,
- filter='RawOrEncodedUnicode', # which filter from Cheetah.Filters
+ # which filter from Cheetah.Filters
+ filter='RawOrEncodedUnicode',
filtersLib=Filters,
errorCatcher=None,
- compilerSettings=Unspecified, # control the behaviour of the compiler
- _globalSetVars=None, # used internally for #include'd templates
- _preBuiltSearchList=None # used internally for #include'd templates
+ # control the behaviour of the compiler
+ compilerSettings=Unspecified,
+ # used internally for #include'd templates
+ _globalSetVars=None,
+ # used internally for #include'd templates
+ _preBuiltSearchList=None
):
"""a) compiles a new template OR b) instantiates an existing template.
@@ -1101,14 +1135,16 @@ class Template(Servlet):
## i) first you need a reference to a compiled template class:
- tclass = Template.compile(source=src) # or just Template.compile(src)
+ tclass = Template.compile(source=src)
+ # or just Template.compile(src)
# or
tclass = Template.compile(file='some/path')
# or
tclass = Template.compile(file=someFileObject)
# or
- # if you used the command line compiler or have Cheetah's ImportHooks
- # installed your template class is also available via Python's
+ # if you used the command line compiler
+ # or have Cheetah's ImportHooks installed
+ # your template class is also available via Python's
# standard import mechanism:
from ACompileTemplate import AcompiledTemplate as tclass
@@ -1142,10 +1178,12 @@ class Template(Servlet):
Do not use positional args with this usage pattern, unless your
template subclasses something other than Cheetah.Template and you
want to pass positional args to that baseclass. E.g.:
- dictTemplate = Template.compile('hello $name from $caller', baseclass=dict)
+ dictTemplate = Template.compile('hello $name from $caller',
+ baseclass=dict)
tmplvars = dict(name='world', caller='me')
print(dictTemplate(tmplvars))
- This usage requires all Cheetah args to be passed in as keyword args.
+ This usage requires all Cheetah args to be passed in
+ as keyword args.
optional args for both usage patterns:
@@ -1159,10 +1197,10 @@ class Template(Servlet):
If you provide a single namespace instead of a list, Cheetah will
automatically convert it into a list.
- NOTE: Cheetah does NOT force you to use the namespaces search list
- and related features. It's on by default, but you can turn if off
- using the compiler settings useSearchList=False or
- useNameMapper=False.
+ NOTE: Cheetah does NOT force you to use the namespaces
+ search list and related features. It's on by default,
+ but you can turn if off using the compiler settings
+ useSearchList=False or useNameMapper=False.
- filter
Default: 'EncodeUnicode'
@@ -1175,8 +1213,8 @@ class Template(Servlet):
- filtersLib
Default: Cheetah.Filters
- A module containing subclasses of Cheetah.Filters.Filter. See the
- Users' Guide for more details.
+ A module containing subclasses of Cheetah.Filters.Filter.
+ See the Users' Guide for more details.
- errorCatcher
Default: None
@@ -1197,17 +1235,20 @@ class Template(Servlet):
raise TypeError(errmsg %
('file', 'string, file open for reading, or None'))
- if not isinstance(filter, (string_type, type)) and not \
- (isinstance(filter, type) and issubclass(filter, Filters.Filter)):
+ if not isinstance(filter, (string_type, type)) \
+ and not (isinstance(filter, type) and
+ issubclass(filter, Filters.Filter)):
raise TypeError(errmsgextra %
('filter', 'string or class',
- '(if class, must be subclass of Cheetah.Filters.Filter)'))
+ '(if class, must be subclass '
+ 'of Cheetah.Filters.Filter)'))
if not isinstance(filtersLib, (string_type, types.ModuleType)):
raise TypeError(errmsgextra %
('filtersLib', 'string or module',
- '(if module, must contain subclasses of Cheetah.Filters.Filter)'))
+ '(if module, must contain subclasses '
+ 'of Cheetah.Filters.Filter)'))
- if not errorCatcher is None:
+ if errorCatcher is not None:
err = True
if isinstance(errorCatcher, (string_type, type)):
err = False
@@ -1215,9 +1256,10 @@ class Template(Servlet):
issubclass(errorCatcher, ErrorCatchers.ErrorCatcher):
err = False
if err:
- raise TypeError(errmsgextra %
- ('errorCatcher', 'string, class or None',
- '(if class, must be subclass of Cheetah.ErrorCatchers.ErrorCatcher)'))
+ raise TypeError(
+ errmsgextra % ('errorCatcher', 'string, class or None',
+ '(if class, must be subclass of '
+ 'Cheetah.ErrorCatchers.ErrorCatcher)'))
if compilerSettings is not Unspecified:
if not isinstance(compilerSettings, dict):
raise TypeError(errmsg %
@@ -1228,44 +1270,57 @@ class Template(Servlet):
" 'file' keyword argument, but not both")
##################################################
- ## Do superclass initialization.
+ # Do superclass initialization.
super(Template, self).__init__()
##################################################
- ## Do required version check
+ # Do required version check
if not hasattr(self, '_CHEETAH_versionTuple'):
try:
mod = sys.modules[self.__class__.__module__]
compiledVersion = mod.__CHEETAH_version__
- compiledVersionTuple = convertVersionStringToTuple(compiledVersion)
+ compiledVersionTuple = \
+ convertVersionStringToTuple(compiledVersion)
if compiledVersionTuple < MinCompatibleVersionTuple:
raise AssertionError(
- 'This template was compiled with Cheetah version'
- ' %s. Templates compiled before version %s must be recompiled.'%(
- compiledVersion, MinCompatibleVersion))
+ 'This template was compiled with Cheetah version %s.'
+ 'Templates compiled before version %s must be recompiled.'
+ % (compiledVersion, MinCompatibleVersion))
except AssertionError:
raise
- except:
+ except Exception:
pass
##################################################
- ## Setup instance state attributes used during the life of template
- ## post-compile
+ # Setup instance state attributes used during the life of template
+ # post-compile
if searchList:
for namespace in searchList:
if isinstance(namespace, dict):
- intersection = self.Reserved_SearchList & set(namespace.keys())
+ intersection = self.Reserved_SearchList \
+ & set(namespace.keys())
warn = False
if intersection:
warn = True
- if isinstance(compilerSettings, dict) and compilerSettings.get('prioritizeSearchListOverSelf'):
+ if isinstance(compilerSettings, dict) and \
+ compilerSettings.get(
+ 'prioritizeSearchListOverSelf'):
warn = False
if warn:
- logging.info(''' The following keys are members of the Template class and will result in NameMapper collisions! ''')
- logging.info(''' > %s ''' % ', '.join(list(intersection)))
- logging.info(''' Please change the key's name or use the compiler setting "prioritizeSearchListOverSelf=True" to prevent the NameMapper from using ''')
- logging.info(''' the Template member in place of your searchList variable ''')
-
+ logging.info(
+ ''' The following keys are members '''
+ '''of the Template class and will result '''
+ '''in NameMapper collisions! ''')
+ logging.info(
+ ''' > %s ''' % ', '.join(list(intersection)))
+ logging.info(
+ ''' Please change the key's name '''
+ '''or use the compiler setting '''
+ '''"prioritizeSearchListOverSelf=True" '''
+ '''to prevent the NameMapper from using ''')
+ logging.info(
+ ''' the Template member in place of '''
+ '''your searchList variable ''')
self._initCheetahInstance(
searchList=searchList, namespaces=namespaces,
@@ -1276,7 +1331,7 @@ class Template(Servlet):
_preBuiltSearchList=_preBuiltSearchList)
##################################################
- ## Now, compile if we're meant to
+ # Now, compile if we're meant to
if (source is not None) or (file is not None):
self._compile(source, file, compilerSettings=compilerSettings)
@@ -1294,7 +1349,8 @@ class Template(Servlet):
return self._CHEETAH_generatedModuleCode[
self._CHEETAH_generatedModuleCode.find('\nclass '):
- self._CHEETAH_generatedModuleCode.find('\n## END CLASS DEFINITION')]
+ self._CHEETAH_generatedModuleCode.find(
+ '\n## END CLASS DEFINITION')]
def searchList(self):
"""Return a reference to the searchlist
@@ -1306,7 +1362,7 @@ class Template(Servlet):
"""
return self._CHEETAH__errorCatcher
- ## cache methods ##
+ # cache methods ##
def _getCacheStore(self):
if not self._CHEETAH__cacheStore:
if self._CHEETAH_cacheStore is not None:
@@ -1357,26 +1413,27 @@ class Template(Servlet):
cregion = self._CHEETAH__cacheRegions.get(cacheRegionId)
if not cregion:
return
- if not cacheItemId: # clear the desired region and all its cacheItems
+ if not cacheItemId:
+ # clear the desired region and all its cacheItems
cregion.clear()
- else: # clear one specific cache of a specific region
+ else: # clear one specific cache of a specific region
cache = cregion.getCacheItem(cacheItemId)
if cache:
cache.clear()
- ## end cache methods ##
+ # end cache methods ##
def shutdown(self):
"""Break reference cycles before discarding a servlet.
"""
try:
Servlet.shutdown(self)
- except:
+ except Exception:
pass
self._CHEETAH__searchList = None
self.__dict__ = {}
- ## utility functions ##
+ # utility functions ##
def getVar(self, varName, default=Unspecified, autoCall=True):
"""Get a variable from the searchList. If the variable can't be found
@@ -1385,7 +1442,8 @@ class Template(Servlet):
"""
try:
- return valueFromSearchList(self.searchList(), varName.replace('$', ''), autoCall)
+ return valueFromSearchList(
+ self.searchList(), varName.replace('$', ''), autoCall)
except NotFound:
if default is not Unspecified:
return default
@@ -1396,15 +1454,14 @@ class Template(Servlet):
"""Test if a variable name exists in the searchList.
"""
try:
- valueFromSearchList(self.searchList(), varName.replace('$', ''), autoCall)
+ valueFromSearchList(self.searchList(),
+ varName.replace('$', ''), autoCall)
return True
except NotFound:
return False
-
hasVar = varExists
-
def i18n(self, message,
plural=None,
n=None,
@@ -1419,7 +1476,8 @@ class Template(Servlet):
::
plural = the plural form of the message
- n = a sized argument to distinguish between single and plural forms
+ n = a sized argument to distinguish
+ between single and plural forms
id = msgid in the translation catalog
domain = translation domain
source = source lang
@@ -1431,18 +1489,18 @@ class Template(Servlet):
Other notes::
- - There is no need to replicate the i18n:name attribute from plone / PTL,
- as cheetah placeholders serve the same purpose
- """
+ - There is no need to replicate the i18n:name attribute
+ from plone / PTL, as cheetah placeholders serve the same purpose.
+ """
return message
def getFileContents(self, path):
"""A hook for getting the contents of a file. The default
- implementation just uses the Python open() function to load local files.
- This method could be reimplemented to allow reading of remote files via
- various protocols, as PHP allows with its 'URL fopen wrapper'
+ implementation just uses the Python open() function
+ to load local files. This method could be reimplemented
+ to allow reading of remote files via various protocols,
+ as PHP allows with its 'URL fopen wrapper'.
"""
-
fp = open(path, 'r')
output = fp.read()
fp.close()
@@ -1459,12 +1517,13 @@ class Template(Servlet):
CmdLineIface(templateObj=self).run()
##################################################
- ## internal methods -- not to be called by end-users
+ # internal methods -- not to be called by end-users
def _initCheetahInstance(self,
searchList=None,
namespaces=None,
- filter='RawOrEncodedUnicode', # which filter from Cheetah.Filters
+ # which filter from Cheetah.Filters
+ filter='RawOrEncodedUnicode',
filtersLib=Filters,
errorCatcher=None,
_globalSetVars=None,
@@ -1487,12 +1546,14 @@ class Template(Servlet):
assert searchList is None, (
'Provide "namespaces" or "searchList", not both!')
searchList = namespaces
- if searchList is not None and not isinstance(searchList, (list, tuple)):
+ if searchList is not None \
+ and not isinstance(searchList, (list, tuple)):
searchList = [searchList]
self._CHEETAH__globalSetVars = {}
if _globalSetVars is not None:
- # this is intended to be used internally by Nested Templates in #include's
+ # this is intended to be used internally by Nested Templates
+ # in #include's
self._CHEETAH__globalSetVars = _globalSetVars
if _preBuiltSearchList is not None:
@@ -1503,8 +1564,10 @@ class Template(Servlet):
# create our own searchList
self._CHEETAH__searchList = [self._CHEETAH__globalSetVars, self]
if searchList is not None:
- if isinstance(compilerSettings, dict) and compilerSettings.get('prioritizeSearchListOverSelf'):
- self._CHEETAH__searchList = searchList + self._CHEETAH__searchList
+ if isinstance(compilerSettings, dict) and \
+ compilerSettings.get('prioritizeSearchListOverSelf'):
+ self._CHEETAH__searchList = searchList + \
+ self._CHEETAH__searchList
else:
self._CHEETAH__searchList.extend(list(searchList))
self._CHEETAH__cheetahIncludes = {}
@@ -1520,7 +1583,8 @@ class Template(Servlet):
else:
klass = filter
filterName = klass.__name__
- self._CHEETAH__currentFilter = self._CHEETAH__filters[filterName] = klass(self).filter
+ self._CHEETAH__currentFilter = self._CHEETAH__filters[filterName] = \
+ klass(self).filter
self._CHEETAH__initialFilter = self._CHEETAH__currentFilter
self._CHEETAH__errorCatchers = {}
@@ -1552,8 +1616,8 @@ class Template(Servlet):
"""Compile the template. This method is automatically called by
Template.__init__ it is provided with 'file' or 'source' args.
- USERS SHOULD \*NEVER\* CALL THIS METHOD THEMSELVES. Use Template.compile
- instead.
+ USERS SHOULD \*NEVER\* CALL THIS METHOD THEMSELVES.
+ Use Template.compile instead.
"""
if compilerSettings is Unspecified:
compilerSettings = self._getCompilerSettings(source, file) or {}
@@ -1567,10 +1631,10 @@ class Template(Servlet):
self._fileDirName, self._fileBaseName = os.path.split(file)
self._filePath = file
templateClass = self.compile(source, file,
- moduleName=moduleName,
- mainMethodName=mainMethodName,
- compilerSettings=compilerSettings,
- keepRefToGeneratedCode=True)
+ moduleName=moduleName,
+ mainMethodName=mainMethodName,
+ compilerSettings=compilerSettings,
+ keepRefToGeneratedCode=True)
if not self.__class__ == Template:
# Only propogate attributes if we're in a subclass of
@@ -1578,21 +1642,22 @@ class Template(Servlet):
for k, v in self.__class__.__dict__.items():
if not v or k.startswith('__'):
continue
- ## Propogate the class attributes to the instance
- ## since we're about to obliterate self.__class__
- ## (see: cheetah.Tests.Tepmlate.SubclassSearchListTest)
+ # Propogate the class attributes to the instance
+ # since we're about to obliterate self.__class__
+ # (see: cheetah.Tests.Tepmlate.SubclassSearchListTest)
setattr(self, k, v)
self.__class__ = templateClass
# must initialize it so instance attributes are accessible
templateClass.__init__(self,
- #_globalSetVars=self._CHEETAH__globalSetVars,
- #_preBuiltSearchList=self._CHEETAH__searchList
+ # _globalSetVars=self._CHEETAH__globalSetVars,
+ # _preBuiltSearchList=self._CHEETAH__searchList
)
if not hasattr(self, 'transaction'):
self.transaction = None
- def _handleCheetahInclude(self, srcArg, trans=None, includeFrom='file', raw=False):
+ def _handleCheetahInclude(self, srcArg, trans=None,
+ includeFrom='file', raw=False):
"""Called at runtime to handle #include directives.
"""
_includeID = srcArg
@@ -1606,28 +1671,35 @@ class Template(Servlet):
else:
file = path = os.path.normpath(srcArg)
else:
- file = srcArg ## a file-like object
+ file = srcArg # # a file-like object
else:
source = srcArg
file = None
# @@TR: might want to provide some syntax for specifying the
# Template class to be used for compilation so compilerSettings
# can be changed.
- compiler = self._getTemplateAPIClassForIncludeDirectiveCompilation(source, file)
- nestedTemplateClass = compiler.compile(source=source, file=file)
- nestedTemplate = nestedTemplateClass(_preBuiltSearchList=self.searchList(),
- _globalSetVars=self._CHEETAH__globalSetVars)
+ compiler = \
+ self._getTemplateAPIClassForIncludeDirectiveCompilation(
+ source, file)
+ nestedTemplateClass = compiler.compile(source=source,
+ file=file)
+ nestedTemplate = nestedTemplateClass(
+ _preBuiltSearchList=self.searchList(),
+ _globalSetVars=self._CHEETAH__globalSetVars)
# Set the inner template filters to the initial filter of the
# outer template:
# this is the only really safe way to use
# filter='WebSafe'.
- nestedTemplate._CHEETAH__initialFilter = self._CHEETAH__initialFilter
- nestedTemplate._CHEETAH__currentFilter = self._CHEETAH__initialFilter
+ nestedTemplate._CHEETAH__initialFilter = \
+ self._CHEETAH__initialFilter
+ nestedTemplate._CHEETAH__currentFilter = \
+ self._CHEETAH__initialFilter
self._CHEETAH__cheetahIncludes[_includeID] = nestedTemplate
else:
if includeFrom == 'file':
path = self.serverSidePath(srcArg)
- self._CHEETAH__cheetahIncludes[_includeID] = self.getFileContents(path)
+ self._CHEETAH__cheetahIncludes[_includeID] = \
+ self.getFileContents(path)
else:
self._CHEETAH__cheetahIncludes[_includeID] = srcArg
##
@@ -1648,22 +1720,24 @@ class Template(Servlet):
else:
return Template
- ## functions for using templates as CGI scripts
+ # functions for using templates as CGI scripts
def webInput(self, names, namesMulti=(), default='', src='f',
- defaultInt=0, defaultFloat=0.00, badInt=0, badFloat=0.00, debug=False):
+ defaultInt=0, defaultFloat=0.00, badInt=0, badFloat=0.00,
+ debug=False):
"""Method for importing web transaction variables in bulk.
This works for GET/POST fields both in Webware servlets and in CGI
- scripts, and for cookies and session variables in Webware servlets. If
- you try to read a cookie or session variable in a CGI script, you'll get
- a RuntimeError. 'In a CGI script' here means 'not running as a Webware
- servlet'. If the CGI environment is not properly set up, Cheetah will
- act like there's no input.
+ scripts, and for cookies and session variables in Webware servlets.
+ If you try to read a cookie or session variable in a CGI script,
+ you'll get a RuntimeError. 'In a CGI script' here means
+ 'not running as a Webware servlet'. If the CGI environment
+ is not properly set up, Cheetah will act like there's no input.
The public method provided is::
def webInput(self, names, namesMulti=(), default='', src='f',
- defaultInt=0, defaultFloat=0.00, badInt=0, badFloat=0.00, debug=False):
+ defaultInt=0, defaultFloat=0.00,
+ badInt=0, badFloat=0.00, debug=False):
This method places the specified GET/POST fields, cookies or session
variables into a dictionary, which is both returned and put at the
@@ -1689,25 +1763,28 @@ class Template(Servlet):
write(dic['choice'])
Both these examples retrieves the GET/POST field 'choice' and print it.
- If you leave off the'#silent', all the values would be printed too. But
- a better way to preview the values is::
+ If you leave off the'#silent', all the values would be printed too.
+ But a better way to preview the values is::
#silent $webInput(['name'], $debug=1)
because this pretty-prints all the values inside HTML <PRE> tags.
- \*\* KLUDGE: 'debug' is supposed to insert into the template output, but it
- wasn't working so I changed it to a'print' statement. So the debugging
- output will appear wherever standard output is pointed, whether at the
- terminal, in a Webware log file, or whatever. \*\*\*
+ \*\*\* KLUDGE: 'debug' is supposed to insert into the template output,
+ but it wasn't working so I changed it to a'print' statement.
+ So the debugging output will appear wherever standard output
+ is pointed, whether at the terminal, in a Webware log file,
+ or whatever. \*\*\*
Since we didn't specify any coversions, the value is a string. It's a
'single' value because we specified it in 'names' rather than
'namesMulti'. Single values work like this::
* If one value is found, take it.
- * If several values are found, choose one arbitrarily and ignore the rest.
- * If no values are found, use or raise the appropriate 'default*' value.
+ * If several values are found, choose one arbitrarily
+ and ignore the rest.
+ * If no values are found, use or raise
+ the appropriate 'default*' value.
Multi values work like this::
@@ -1716,8 +1793,9 @@ class Template(Servlet):
* If no values are found, use the empty list ([]). The 'default*'
arguments are *not* consulted in this case.
- Example: assume 'days' came from a set of checkboxes or a multiple combo
- box on a form, and the user chose'Monday', 'Tuesday' and 'Thursday'::
+ Example: assume 'days' came from a set of checkboxes
+ or a multiple combo box on a form, and the user chose'Monday',
+ 'Tuesday' and 'Thursday'::
#silent $webInput([], ['days'])
The days you chose are: #slurp
@@ -1730,7 +1808,8 @@ class Template(Servlet):
for day in dic['days']:
write(day + ' ')
- Both these examples print: 'The days you chose are: Monday Tuesday Thursday'.
+ Both these examples print: 'The days you chose are:
+ Monday Tuesday Thursday'.
By default, missing strings are replaced by '' and missing/bad numbers
by zero. (A'bad number' means the converter raised an exception for
@@ -1753,11 +1832,11 @@ class Template(Servlet):
Here's an example using multiple values to schedule newspaper
deliveries. 'checkboxes' comes from a form with checkboxes for all the
days of the week. The days the user previously chose are preselected.
- The user checks/unchecks boxes as desired and presses Submit. The value
- of 'checkboxes' is a list of checkboxes that were checked when Submit
- was pressed. Our task now is to turn on the days the user checked, turn
- off the days he unchecked, and leave on or off the days he didn't
- change.
+ The user checks/unchecks boxes as desired and presses Submit.
+ The value of 'checkboxes' is a list of checkboxes that were checked
+ when Submit was pressed. Our task now is to turn on the days
+ the user checked, turn off the days he unchecked, and leave on or off
+ the days he didn't change.
::
@@ -1803,16 +1882,17 @@ class Template(Servlet):
write('Pshaw, you're short.')
To convert a value to a number, suffix ':int' or ':float' to the name.
- The method will search first for a 'height:int' variable and then for a
- 'height' variable. (It will be called 'height' in the final
- dictionary.) If a numeric conversion fails, use or raise 'badInt' or
- 'badFloat'. Missing values work the same way as for strings, except the
- default is 'defaultInt' or 'defaultFloat' instead of 'default'.
-
- If a name represents an uploaded file, the entire file will be read into
- memory. For more sophistocated file-upload handling, leave that name
- out of the list and do your own handling, or wait for
- Cheetah.Utils.UploadFileMixin.
+ The method will search first for a 'height:int' variable
+ and then for a 'height' variable. (It will be called 'height'
+ in the final dictionary.) If a numeric conversion fails,
+ use or raise 'badInt' or 'badFloat'. Missing values work the same way
+ as for strings, except the default is 'defaultInt'
+ or 'defaultFloat' instead of 'default'.
+
+ If a name represents an uploaded file, the entire file will be read
+ into memory. For more sophistocated file-upload handling,
+ leave that name out of the list and do your own handling,
+ or wait for Cheetah.Utils.UploadFileMixin.
This only in a subclass that also inherits from Webware's Servlet or
HTTPServlet. Otherwise you'll get an AttributeError on 'self.request'.
@@ -1827,15 +1907,15 @@ class Template(Servlet):
Meta-Data::
Author: Mike Orr <iron@mso.oz.net>
- License: This software is released for unlimited distribution under the
- terms of the MIT license. See the LICENSE file.
+ License: This software is released for unlimited distribution
+ under the terms of the MIT license. See the LICENSE file.
Version: 1.186
Start Date: 2002/03/17
Last Revision Date: 2008/03/10 04:48:11
"""
src = src.lower()
isCgi = not self._CHEETAH__isControlledByWebKit
- if isCgi and src in ('f', 'v'):
+ if isCgi and src in ('f', 'v'):
global _formUsedByWebInput
if _formUsedByWebInput is None:
_formUsedByWebInput = cgi.FieldStorage()
@@ -1855,16 +1935,16 @@ class Template(Servlet):
elif src == 'v':
source, func = 'value', self.request().value
elif src == 's':
- source, func = 'session', self.request().session().value
+ source, func = 'session', self.request().session().value # noqa: E501,F841
else:
raise TypeError("arg 'src' invalid")
- sources = source + 's'
converters = {
- '': _Converter('string', None, default, default ),
- 'int': _Converter('int', int, defaultInt, badInt ),
- 'float': _Converter('float', float, defaultFloat, badFloat), }
- #pprint.pprint(locals()); return {}
- dic = {} # Destination.
+ '': _Converter('string', None, default, default),
+ 'int': _Converter('int', int, defaultInt, badInt),
+ 'float': _Converter('float', float, defaultFloat, badFloat),
+ }
+ # pprint.pprint(locals()); return {}
+ dic = {} # Destination.
for name in names:
k, v = _lookup(name, func, False, converters)
dic[k] = v
@@ -1878,14 +1958,17 @@ class Template(Servlet):
# 'dic = super(ThisClass, self).webInput(names, namesMulti, ...)'
# and then the code below.
if debug:
- print("<PRE>\n" + pprint.pformat(dic) + "\n</PRE>\n\n")
+ print("<PRE>\n" + pprint.pformat(dic) + "\n</PRE>\n\n")
self.searchList().insert(0, dic)
return dic
+
T = Template # Short and sweet for debugging at the >>> prompt.
Template.Reserved_SearchList = set(dir(Template))
-def genParserErrorFromPythonException(source, file, generatedPyCode, exception):
+
+def genParserErrorFromPythonException(source, file,
+ generatedPyCode, exception):
filename = isinstance(file, (str, unicode)) and file or None
@@ -1896,35 +1979,38 @@ def genParserErrorFromPythonException(source, file, generatedPyCode, exception):
if hasattr(exception, 'lineno'):
pyLineno = exception.lineno
else:
- pyLineno = int(re.search('[ \t]*File.*line (\d+)', formatedExc).group(1))
+ pyLineno = int(
+ re.search('[ \t]*File.*line (\d+)', formatedExc).group(1))
lines = generatedPyCode.splitlines()
prevLines = [] # (i, content)
for i in range(1, 4):
- if pyLineno-i <=0:
+ if pyLineno-i <= 0:
break
- prevLines.append( (pyLineno+1-i, lines[pyLineno-i]) )
+ prevLines.append((pyLineno+1-i, lines[pyLineno-i]))
nextLines = [] # (i, content)
for i in range(1, 4):
if not pyLineno+i < len(lines):
break
- nextLines.append( (pyLineno+i, lines[pyLineno+i]) )
+ nextLines.append((pyLineno+i, lines[pyLineno+i]))
nextLines.reverse()
report = 'Line|Python Code\n'
- report += '----|-------------------------------------------------------------\n'
+ report += '----|--------------------------' \
+ '-----------------------------------\n'
while prevLines:
lineInfo = prevLines.pop()
- report += "%(row)-4d|%(line)s\n"% {'row':lineInfo[0], 'line':lineInfo[1]}
+ report += "%(row)-4d|%(line)s\n" \
+ % {'row': lineInfo[0], 'line': lineInfo[1]}
if hasattr(exception, 'offset'):
report += ' '*(3+(exception.offset or 0)) + '^\n'
while nextLines:
lineInfo = nextLines.pop()
- report += "%(row)-4d|%(line)s\n"% {'row':lineInfo[0], 'line':lineInfo[1]}
-
+ report += "%(row)-4d|%(line)s\n" \
+ % {'row': lineInfo[0], 'line': lineInfo[1]}
message = [
"Error in the Python code which Cheetah generated for this template:",
@@ -1939,7 +2025,7 @@ def genParserErrorFromPythonException(source, file, generatedPyCode, exception):
if cheetahPosMatch:
lineno = int(cheetahPosMatch.group(1))
col = int(cheetahPosMatch.group(2))
- #if hasattr(exception, 'offset'):
+ # if hasattr(exception, 'offset'):
# col = exception.offset
message.append('\nHere is the corresponding Cheetah code:\n')
else:
@@ -1954,7 +2040,6 @@ def genParserErrorFromPythonException(source, file, generatedPyCode, exception):
message.append('** I had to guess the line & column numbers,'
' so they are probably incorrect:\n')
-
message = '\n'.join(message)
reader = SourceReader(source, filename=filename)
return ParseError(reader, message, lineno=lineno, col=col)
diff --git a/Cheetah/TemplateCmdLineIface.py b/Cheetah/TemplateCmdLineIface.py
index c83602d..17c8be5 100644
--- a/Cheetah/TemplateCmdLineIface.py
+++ b/Cheetah/TemplateCmdLineIface.py
@@ -10,9 +10,11 @@ except ImportError:
from Cheetah.Version import Version
+
class Error(Exception):
pass
+
class CmdLineIface:
"""A command line interface to compiled Cheetah template modules."""
@@ -33,10 +35,8 @@ class CmdLineIface:
def _processCmdLineArgs(self):
try:
self._opts, self._args = getopt.getopt(
- self._cmdLineArgs, 'h', ['help',
- 'env',
- 'pickle=',
- ])
+ self._cmdLineArgs, 'h', ['help', 'env', 'pickle=']
+ )
except getopt.GetoptError as v:
# print help information and exit:
@@ -87,8 +87,6 @@ and collect the output. It can prepend the shell ENVIRONMENT or a pickled
Python dictionary to the template's $placeholder searchList, overriding the
defaults for the $placeholders.
-""" % {'scriptName': self._scriptName,
- 'Version': Version,
- }
+""" % {'scriptName': self._scriptName, 'Version': Version}
# vim: shiftwidth=4 tabstop=4 expandtab
diff --git a/Cheetah/Templates/SkeletonPage.py b/Cheetah/Templates/SkeletonPage.py
index 62bb3cb..c9ea300 100755
--- a/Cheetah/Templates/SkeletonPage.py
+++ b/Cheetah/Templates/SkeletonPage.py
@@ -283,5 +283,3 @@ if not hasattr(SkeletonPage, '_initCheetahAttributes'):
if __name__ == '__main__':
from Cheetah.TemplateCmdLineIface import CmdLineIface
CmdLineIface(templateObj=SkeletonPage()).run()
-
-
diff --git a/Cheetah/Templates/_SkeletonPage.py b/Cheetah/Templates/_SkeletonPage.py
index 425cb05..085d625 100644
--- a/Cheetah/Templates/_SkeletonPage.py
+++ b/Cheetah/Templates/_SkeletonPage.py
@@ -1,25 +1,28 @@
"""A baseclass for the SkeletonPage template"""
##################################################
-## DEPENDENCIES ##
+# DEPENDENCIES ##
-import time, types, os, sys
+import os
+import time
# intra-package imports ...
from Cheetah.Template import Template
##################################################
-## CLASSES ##
+# CLASSES ##
class _SkeletonPage(Template):
"""A baseclass for the SkeletonPage template"""
- docType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ' + \
- '"http://www.w3.org/TR/html4/loose.dtd">'
+ docType = '<!DOCTYPE HTML PUBLIC ' \
+ '"-//W3C//DTD HTML 4.01 Transitional//EN" ' \
+ '"http://www.w3.org/TR/html4/loose.dtd">'
- # docType = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ' + \
- #'"http://www.w3.org/TR/xhtml1l/DTD/transitional.dtd">'
+ # docType = '<!DOCTYPE HTML PUBLIC ' \
+ # '"-//W3C//DTD XHTML 1.0 Transitional//EN" ' \
+ # '"http://www.w3.org/TR/xhtml1l/DTD/transitional.dtd">'
title = ''
siteDomainName = 'www.example.com'
@@ -29,12 +32,19 @@ class _SkeletonPage(Template):
def __init__(self, *args, **KWs):
Template.__init__(self, *args, **KWs)
- self._metaTags = {'HTTP-EQUIV':{'keywords': 'Cheetah',
- 'Content-Type': 'text/html; charset=iso-8859-1',
- },
- 'NAME':{'generator':'Cheetah: The Python-Powered Template Engine'}
- }
- # metaTags = {'HTTP_EQUIV':{'test':1234}, 'NAME':{'test':1234,'test2':1234} }
+ self._metaTags = {
+ 'HTTP-EQUIV': {
+ 'keywords': 'Cheetah',
+ 'Content-Type': 'text/html; charset=iso-8859-1',
+ },
+ 'NAME': {
+ 'generator': 'Cheetah: The Python-Powered Template Engine'
+ }
+ }
+ # metaTags = {
+ # 'HTTP_EQUIV':{'test':1234},
+ # 'NAME':{'test':1234,'test2':1234}
+ # }
self._stylesheets = {}
# stylesheets = {'.cssClassName':'stylesheetCode'}
self._stylesheetsOrder = []
@@ -61,7 +71,9 @@ class _SkeletonPage(Template):
stylesheetTagsTxt = ''
for title, src in self._stylesheetLibs.items():
- stylesheetTagsTxt += '<link rel="stylesheet" type="text/css" href="' + str(src) + '" />\n'
+ stylesheetTagsTxt += \
+ '<link rel="stylesheet" type="text/css" href="' \
+ + str(src) + '" />\n'
if not self._stylesheetsOrder:
return stylesheetTagsTxt
@@ -80,9 +92,9 @@ class _SkeletonPage(Template):
attribCode = ''
for k, v in attribsDict.items():
attribCode += str(k) + ': ' + str(v) + '; '
- attribCode = attribCode[:-2] # get rid of the last semicolon
+ attribCode = attribCode[:-2] # get rid of the last semicolon
- cssCode = '\n' + identifier + ' {' + attribCode + '}'
+ cssCode = '\n' + identifier + ' {' + attribCode + '}'
stylesheetTagsTxt += cssCode
stylesheetTagsTxt += '\n//--></style>\n'
@@ -91,27 +103,31 @@ class _SkeletonPage(Template):
def javascriptTags(self):
"""Return a formatted version of the javascriptTags and
- javascriptLibs dictionaries. Each value in javascriptTags
- should be a either a code string to include, or a list containing the
- JavaScript version number and the code string. The keys can be anything.
- The same applies for javascriptLibs, but the string should be the
- SRC filename rather than a code string."""
+ javascriptLibs dictionaries
+
+ Each value in javascriptTags should be a either a code string
+ to include, or a list containing the JavaScript version number
+ and the code string. The keys can be anything. The same applies
+ for javascriptLibs, but the string should be the SRC filename
+ rather than a code string.
+ """
javascriptTagsTxt = []
for key, details in self._javascriptTags.items():
if not isinstance(details, (list, tuple)):
details = ['', details]
- javascriptTagsTxt += ['<script language="JavaScript', str(details[0]),
+ javascriptTagsTxt += ['<script language="JavaScript',
+ str(details[0]),
'" type="text/javascript"><!--\n',
str(details[0]), '\n//--></script>\n']
-
for key, details in self._javascriptLibs.items():
if not isinstance(details, (list, tuple)):
details = ['', details]
- javascriptTagsTxt += ['<script language="JavaScript', str(details[0]),
+ javascriptTagsTxt += ['<script language="JavaScript',
+ str(details[0]),
'" type="text/javascript" src="',
str(details[1]), '" />\n']
return ''.join(javascriptTagsTxt)
@@ -120,38 +136,42 @@ class _SkeletonPage(Template):
"""Create a body tag from the entries in the dict bodyTagAttribs."""
return self.formHTMLTag('body', self._bodyTagAttribs)
-
def imgTag(self, src, alt='', width=None, height=None, border=0):
+ """Dynamically generate an image tag
- """Dynamically generate an image tag. Cheetah will try to convert the
- src argument to a WebKit serverSidePath relative to the servlet's
- location. If width and height aren't specified they are calculated using
- PIL or ImageMagick if available."""
+ Cheetah will try to convert the src argument to a WebKit serverSidePath
+ relative to the servlet's location. If width and height aren't
+ specified they are calculated using PIL or ImageMagick if available.
+ """
src = self.normalizePath(src)
-
if not width or not height:
- try: # see if the dimensions can be calc'd with PIL
+ try: # see if the dimensions can be calc'd with PIL
import Image
im = Image.open(src)
calcWidth, calcHeight = im.size
del im
- if not width: width = calcWidth
- if not height: height = calcHeight
+ if not width:
+ width = calcWidth
+ if not height:
+ height = calcHeight
- except:
+ except Exception:
try: # try imageMagick instead
calcWidth, calcHeight = os.popen(
'identify -format "%w,%h" ' + src).read().split(',')
- if not width: width = calcWidth
- if not height: height = calcHeight
+ if not width:
+ width = calcWidth
+ if not height:
+ height = calcHeight
- except:
+ except Exception:
pass
if width and height:
- return ''.join(['<img src="', src, '" width="', str(width), '" height="', str(height),
+ return ''.join(['<img src="', src, '" width="',
+ str(width), '" height="', str(height),
'" alt="', alt, '" border="', str(border), '" />'])
elif width:
return ''.join(['<img src="', src, '" width="', str(width),
@@ -160,8 +180,8 @@ class _SkeletonPage(Template):
return ''.join(['<img src="', src, '" height="', str(height),
'" alt="', alt, '" border="', str(border), '" />'])
else:
- return ''.join(['<img src="', src, '" alt="', alt, '" border="', str(border), '" />'])
-
+ return ''.join(['<img src="', src, '" alt="', alt,
+ '" border="', str(border), '" />'])
def currentYr(self):
"""Return a string representing the current yr."""
@@ -171,8 +191,9 @@ class _SkeletonPage(Template):
"""Return a string representing the current localtime."""
return time.strftime(formatString, time.localtime(time.time()))
- def spacer(self, width=1,height=1):
- return '<img src="spacer.gif" width="%s" height="%s" alt="" />'% (str(width), str(height))
+ def spacer(self, width=1, height=1):
+ return '<img src="spacer.gif" width="%s" height="%s" alt="" />' \
+ % (str(width), str(height))
def formHTMLTag(self, tagName, attributes={}):
"""returns a string containing an HTML <tag> """
@@ -187,12 +208,11 @@ class _SkeletonPage(Template):
metaTagsTxt = []
if 'HTTP-EQUIV' in metaTags:
for http_equiv, contents in metaTags['HTTP-EQUIV'].items():
- metaTagsTxt += ['<meta http-equiv="', str(http_equiv), '" content="',
- str(contents), '" />\n']
+ metaTagsTxt += ['<meta http-equiv="', str(http_equiv),
+ '" content="', str(contents), '" />\n']
if 'NAME' in metaTags:
for name, contents in metaTags['NAME'].items():
- metaTagsTxt += ['<meta name="', str(name), '" content="', str(contents),
- '" />\n']
+ metaTagsTxt += ['<meta name="', str(name), '" content="',
+ str(contents), '" />\n']
return ''.join(metaTagsTxt)
-
diff --git a/Cheetah/Templates/__init__.py b/Cheetah/Templates/__init__.py
index 8b13789..e69de29 100644
--- a/Cheetah/Templates/__init__.py
+++ b/Cheetah/Templates/__init__.py
@@ -1 +0,0 @@
-
diff --git a/Cheetah/Tests/Analyzer.py b/Cheetah/Tests/Analyzer.py
index ad72096..8e1a2a2 100644
--- a/Cheetah/Tests/Analyzer.py
+++ b/Cheetah/Tests/Analyzer.py
@@ -26,4 +26,3 @@ useNameMapper = False
if __name__ == '__main__':
unittest.main()
-
diff --git a/Cheetah/Tests/Boinker.py b/Cheetah/Tests/Boinker.py
index 6eb65b7..0a0362e 100644
--- a/Cheetah/Tests/Boinker.py
+++ b/Cheetah/Tests/Boinker.py
@@ -4,5 +4,5 @@ from Cheetah.Template import Template
class Boinker(Template):
- def boink(self):
- return [1, 2, 3]
+ def boink(self):
+ return [1, 2, 3]
diff --git a/Cheetah/Tests/CheetahWrapper.py b/Cheetah/Tests/CheetahWrapper.py
index c67f51a..3acf574 100755
--- a/Cheetah/Tests/CheetahWrapper.py
+++ b/Cheetah/Tests/CheetahWrapper.py
@@ -14,7 +14,6 @@ Besides unittest usage, recognizes the following command-line options:
import os
import os.path
-import pdb
import re # Used by listTests.
import shutil
import sys
@@ -26,13 +25,14 @@ from Cheetah.CheetahWrapper import CheetahWrapper # Used by NoBackup.
try:
from subprocess import Popen, PIPE, STDOUT
+
class Popen4(Popen):
def __init__(self, cmd, bufsize=-1, shell=True, close_fds=True,
- stdin=PIPE, stdout=PIPE, stderr=STDOUT, **kwargs):
+ stdin=PIPE, stdout=PIPE, stderr=STDOUT, **kwargs):
- super(Popen4, self).__init__(cmd, bufsize=bufsize, shell=shell,
- close_fds=close_fds, stdin=stdin, stdout=stdout,
- stderr=stderr, **kwargs)
+ super(Popen4, self).__init__(
+ cmd, bufsize=bufsize, shell=shell, close_fds=close_fds,
+ stdin=stdin, stdout=stdout, stderr=stderr, **kwargs)
self.tochild = self.stdin
self.fromchild = self.stdout
@@ -40,21 +40,23 @@ try:
except ImportError:
from popen2 import Popen4
-DELETE = True # True to clean up after ourselves, False for debugging.
-OUTPUT = False # Normally False, True for debugging.
+DELETE = True # True to clean up after ourselves, False for debugging.
+OUTPUT = False # Normally False, True for debugging.
BACKUP_SUFFIX = CheetahWrapper.BACKUP_SUFFIX
+
def warn(msg):
sys.stderr.write(msg + '\n')
+
class CFBase(unittest.TestCase):
"""Base class for "cheetah compile" and "cheetah fill" unit tests.
"""
- srcDir = '' # Nonblank to create source directory.
- subdirs = ('child', 'child/grandkid') # Delete in reverse order.
+ srcDir = '' # Nonblank to create source directory.
+ subdirs = ('child', 'child/grandkid') # Delete in reverse order.
srcFiles = ('a.tmpl', 'child/a.tmpl', 'child/grandkid/a.tmpl')
- expectError = False # Used by --list option.
+ expectError = False # Used by --list option.
def inform(self, message):
if self.verbose:
@@ -73,7 +75,6 @@ class CFBase(unittest.TestCase):
if (pythonPath != cwd) and \
not pythonPath.endswith(':%s' % cwd):
os.environ['PYTHONPATH'] = '%s:%s' % (pythonPath, cwd)
- I = self.inform
# Step 1: Create the scratch directory and chdir into it.
self.scratchDir = scratchDir = tempfile.mktemp()
os.mkdir(scratchDir)
@@ -93,15 +94,15 @@ class CFBase(unittest.TestCase):
def tearDown(self):
os.chdir(self.origCwd)
if DELETE:
- shutil.rmtree(self.scratchDir, True) # Ignore errors.
+ shutil.rmtree(self.scratchDir, True) # Ignore errors.
if os.path.exists(self.scratchDir):
warn("Warning: unable to delete scratch directory %s")
else:
- warn("Warning: not deleting scratch directory %s" % self.scratchDir)
-
+ warn("Warning: not deleting scratch directory %s"
+ % self.scratchDir)
def _checkDestFileHelper(self, path, expected,
- allowSurroundingText, errmsg):
+ allowSurroundingText, errmsg):
"""Low-level helper to check a destination file.
in : path, string, the destination path.
@@ -126,17 +127,15 @@ class CFBase(unittest.TestCase):
msg = errmsg % locals()
self.assertTrue(success, msg)
-
def checkCompile(self, path):
# Raw string to prevent "\n" from being converted to a newline.
- #expected = R"write('Hello, world!\n')"
- expected = "Hello, world!" # might output a u'' string
+ # expected = R"write('Hello, world!\n')"
+ expected = "Hello, world!" # might output a u'' string
errmsg = """\
destination file %(path)s doesn't contain expected substring:
%(expected)r"""
self._checkDestFileHelper(path, expected, True, errmsg)
-
def checkFill(self, path):
expected = "Hello, world!\n"
errmsg = """\
@@ -145,7 +144,6 @@ Expected %(expected)r
Found %(result)r"""
self._checkDestFileHelper(path, expected, False, errmsg)
-
def checkSubdirPyInit(self, path):
"""Verify a destination subdirectory exists and contains an
__init__.py file.
@@ -158,7 +156,6 @@ Found %(result)r"""
msg = "destination init file missing: %s" % initPath
self.assertTrue(exists, msg)
-
def checkNoBackup(self, path):
"""Verify 'path' does not exist. (To check --nobackup.)
"""
@@ -170,7 +167,6 @@ Found %(result)r"""
paths = os.getenv('PATH')
if not paths:
return cmd
- parts = cmd.split(' ')
paths = paths.split(':')
for p in paths:
p = os.path.join(p, cmd)
@@ -190,7 +186,8 @@ Found %(result)r"""
if status is None:
status = 0
else:
- process = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=STDOUT)
+ process = Popen(cmd, shell=True,
+ stdin=PIPE, stdout=PIPE, stderr=STDOUT)
process.stdin.close()
output = process.stdout.read()
status = process.wait()
@@ -244,13 +241,13 @@ class CFIdirBase(CFBase):
"""Subclass for tests with --idir.
"""
srcDir = 'SRC'
- subdirs = ('SRC/child', 'SRC/child/grandkid') # Delete in reverse order.
+ subdirs = ('SRC/child', 'SRC/child/grandkid') # Delete in reverse order.
srcFiles = ('SRC/a.tmpl', 'SRC/child/a.tmpl', 'SRC/child/grandkid/a.tmpl')
-
##################################################
-## TEST CASE CLASSES
+# TEST CASE CLASSES
+
class OneFile(CFBase):
def testCompile(self):
@@ -293,6 +290,7 @@ class SplatTmpl(CFBase):
self.go("cheetah fill --oext txt *.tmpl")
self.checkFill("a.txt")
+
class ThreeFilesWithSubdirectories(CFBase):
def testCompile(self):
self.go("cheetah compile a.tmpl child/a.tmpl child/grandkid/a.tmpl")
@@ -307,7 +305,8 @@ class ThreeFilesWithSubdirectories(CFBase):
self.checkFill("child/grandkid/a.html")
def testText(self):
- self.go("cheetah fill --oext txt a.tmpl child/a.tmpl child/grandkid/a.tmpl")
+ self.go("cheetah fill --oext txt "
+ "a.tmpl child/a.tmpl child/grandkid/a.tmpl")
self.checkFill("a.txt")
self.checkFill("child/a.txt")
self.checkFill("child/grandkid/a.txt")
@@ -347,7 +346,8 @@ class SplatTmplWithSubdirectories(CFBase):
self.checkFill("child/grandkid/a.html")
def testText(self):
- self.go("cheetah fill --oext txt *.tmpl child/*.tmpl child/grandkid/*.tmpl")
+ self.go("cheetah fill --oext txt "
+ "*.tmpl child/*.tmpl child/grandkid/*.tmpl")
self.checkFill("a.txt")
self.checkFill("child/a.txt")
self.checkFill("child/grandkid/a.txt")
@@ -370,7 +370,8 @@ class OneFileWithOdir(CFBase):
class VarietyWithOdir(CFBase):
def testCompile(self):
- self.go("cheetah compile --odir DEST a.tmpl child/a child/grandkid/*.tmpl")
+ self.go("cheetah compile --odir DEST "
+ "a.tmpl child/a child/grandkid/*.tmpl")
self.checkSubdirPyInit("DEST")
self.checkSubdirPyInit("DEST/child")
self.checkSubdirPyInit("DEST/child/grandkid")
@@ -379,13 +380,15 @@ class VarietyWithOdir(CFBase):
self.checkCompile("DEST/child/grandkid/a.py")
def testFill(self):
- self.go("cheetah fill --odir DEST a.tmpl child/a child/grandkid/*.tmpl")
+ self.go("cheetah fill --odir DEST "
+ "a.tmpl child/a child/grandkid/*.tmpl")
self.checkFill("DEST/a.html")
self.checkFill("DEST/child/a.html")
self.checkFill("DEST/child/grandkid/a.html")
def testText(self):
- self.go("cheetah fill --odir DEST --oext txt a.tmpl child/a child/grandkid/*.tmpl")
+ self.go("cheetah fill --odir DEST --oext txt "
+ "a.tmpl child/a child/grandkid/*.tmpl")
self.checkFill("DEST/a.txt")
self.checkFill("DEST/child/a.txt")
self.checkFill("DEST/child/grandkid/a.txt")
@@ -515,13 +518,16 @@ class IdirFlatRecurseCollision(CFIdirBase):
expectError = True
def testCompile(self):
- self.assertSubprocess("cheetah compile -R --flat --idir SRC", nonzero=True)
+ self.assertSubprocess(
+ "cheetah compile -R --flat --idir SRC", nonzero=True)
def testFill(self):
- self.assertSubprocess("cheetah fill -R --flat --idir SRC", nonzero=True)
+ self.assertSubprocess(
+ "cheetah fill -R --flat --idir SRC", nonzero=True)
def testText(self):
- self.assertSubprocess("cheetah fill -R --flat --idir SRC --oext txt", nonzero=True)
+ self.assertSubprocess(
+ "cheetah fill -R --flat --idir SRC --oext txt", nonzero=True)
class NoBackup(CFBase):
@@ -543,12 +549,13 @@ class NoBackup(CFBase):
self.go("cheetah fill --nobackup --oext txt a.tmpl")
self.checkNoBackup("a.txt" + BACKUP_SUFFIX)
+
def listTests(cheetahWrapperFile):
"""cheetahWrapperFile, string, path of this script.
XXX TODO: don't print test where expectError is true.
"""
- rx = re.compile( R'self\.go\("(.*?)"\)' )
+ rx = re.compile(R'self\.go\("(.*?)"\)')
f = open(cheetahWrapperFile)
while True:
lin = f.readline()
@@ -559,6 +566,7 @@ def listTests(cheetahWrapperFile):
print(m.group(1))
f.close()
+
def main():
global DELETE, OUTPUT
parser = OptionParser()
@@ -586,6 +594,7 @@ def main():
sys.argv.extend(files)
unittest.main()
+
if __name__ == '__main__':
main()
diff --git a/Cheetah/Tests/Cheps.py b/Cheetah/Tests/Cheps.py
index da53ad9..075a509 100755
--- a/Cheetah/Tests/Cheps.py
+++ b/Cheetah/Tests/Cheps.py
@@ -6,6 +6,7 @@ import Cheetah
import Cheetah.Parser
import Cheetah.Template
+
class Chep_2_Conditionalized_Import_Behavior(unittest.TestCase):
def test_ModuleLevelImport(self):
''' Verify module level (traditional) import behavior '''
@@ -28,12 +29,13 @@ class Chep_2_Conditionalized_Import_Behavior(unittest.TestCase):
except Cheetah.Parser.ParseError as ex:
self.fail('Failed to properly generate code %s' % ex)
template = template()
- rc = tepmlate.funky('abc def')
+ rc = template.funky('abc def')
assert rc == 'abc+def'
def test_LegacyMode(self):
''' Verify disabling of CHEP #2 works '''
pass
+
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/Filters.py b/Cheetah/Tests/Filters.py
index 23eb68c..23d2ebb 100755
--- a/Cheetah/Tests/Filters.py
+++ b/Cheetah/Tests/Filters.py
@@ -1,11 +1,10 @@
#!/usr/bin/env python
-import sys
import unittest
-
import Cheetah.Template
import Cheetah.Filters
+
class BasicMarkdownFilterTest(unittest.TestCase):
'''
Test that our markdown filter works
@@ -22,7 +21,8 @@ Header
expected = '''<p>bar</p>
<h1>Header</h1>'''
try:
- template = Cheetah.Template.Template(template, searchList=[{'foo' : 'bar'}])
+ template = Cheetah.Template.Template(
+ template, searchList=[{'foo': 'bar'}])
template = str(template)
assert template == expected
except ImportError as ex:
@@ -44,7 +44,8 @@ class BasicCodeHighlighterFilterTest(unittest.TestCase):
def foo(self):
return '$foo'
'''
- template = Cheetah.Template.Template(template, searchList=[{'foo' : 'bar'}])
+ template = Cheetah.Template.Template(
+ template, searchList=[{'foo': 'bar'}])
template = str(template)
assert template, (template, 'We should have some content here...')
@@ -55,7 +56,8 @@ def foo(self):
<html><head></head><body>$foo</body></html>
'''
- template = Cheetah.Template.Template(template, searchList=[{'foo' : 'bar'}])
+ template = Cheetah.Template.Template(
+ template, searchList=[{'foo': 'bar'}])
template = str(template)
assert template, (template, 'We should have some content here...')
diff --git a/Cheetah/Tests/Misc.py b/Cheetah/Tests/Misc.py
index bad3e55..fec8fce 100644..100755
--- a/Cheetah/Tests/Misc.py
+++ b/Cheetah/Tests/Misc.py
@@ -7,14 +7,14 @@ from Cheetah import SettingsManager
class SettingsManagerTests(unittest.TestCase):
def test_mergeDictionaries(self):
- left = {'foo' : 'bar', 'abc' : {'a' : 1, 'b' : 2, 'c' : (3,)}}
- right = {'xyz' : (10, 9)}
- expect = {'xyz': (10, 9), 'foo': 'bar', 'abc': {'a': 1, 'c': (3,), 'b': 2}}
-
+ left = {'foo': 'bar', 'abc': {'a': 1, 'b': 2, 'c': (3,)}}
+ right = {'xyz': (10, 9)}
+ expect = {
+ 'xyz': (10, 9), 'foo': 'bar', 'abc': {'a': 1, 'c': (3,), 'b': 2}
+ }
result = SettingsManager.mergeNestedDictionaries(left, right)
self.assertEqual(result, expect)
if __name__ == '__main__':
unittest.main()
-
diff --git a/Cheetah/Tests/NameMapper.py b/Cheetah/Tests/NameMapper.py
index f3b2f83..7a635ee 100755
--- a/Cheetah/Tests/NameMapper.py
+++ b/Cheetah/Tests/NameMapper.py
@@ -1,12 +1,9 @@
#!/usr/bin/env python
import sys
-import types
-import os
-import os.path
-
import unittest
-from Cheetah.NameMapper import NotFound, valueForKey, \
+
+from Cheetah.NameMapper import NotFound, \
valueForName, valueFromSearchList, valueFromFrame, \
valueFromFrameOrSearchList
@@ -41,9 +38,10 @@ class DummyClass(object):
if x == 'xx':
pass
return x
- except:
+ except Exception:
raise
+
class DummyClassGetAttrRaises(object):
def __getattr__(self, name):
raise ValueError
@@ -52,6 +50,7 @@ class DummyClassGetAttrRaises(object):
def dummyFunc(arg="Scooby"):
return arg
+
def funcThatRaises():
raise ValueError
@@ -63,10 +62,10 @@ testNamespace = {
'aDict': {'one': 'item1',
'two': 'item2',
'nestedDict': {'one': 'nestedItem1',
- 'two': 'nestedItem2',
- 'funcThatRaises': funcThatRaises,
- 'aClass': DummyClass,
- },
+ 'two': 'nestedItem2',
+ 'funcThatRaises': funcThatRaises,
+ 'aClass': DummyClass,
+ },
'nestedFunc': dummyFunc,
},
'aClass': DummyClass,
@@ -97,10 +96,11 @@ results.update({'anObj.meth1': 'doo',
for k in testNamespace.keys():
# put them in the globals for the valueFromFrame tests
- exec('%s = testNamespace[k]'%k)
+ exec('%s = testNamespace[k]' % k)
##################################################
-## TEST BASE CLASSES
+# TEST BASE CLASSES
+
class NameMapperTest(unittest.TestCase):
failureException = NotFound
@@ -116,7 +116,6 @@ class NameMapperTest(unittest.TestCase):
def VFS(self, searchList, name, autocall=True):
return valueFromSearchList(searchList, name, autocall)
-
# alias to be overriden later
get = VFN
@@ -130,7 +129,7 @@ class NameMapperTest(unittest.TestCase):
##################################################
-## TEST CASE CLASSES
+# TEST CASE CLASSES
class VFN(NameMapperTest):
@@ -215,25 +214,24 @@ class VFN(NameMapperTest):
for i in range(10):
self.check('aDict')
- def test17(self):
+ def test19(self):
"""aDict in dict lookup"""
self.check('aDict')
- def test18(self):
+ def test20(self):
"""aDict in dict lookup in a loop"""
for i in range(10):
self.check('aDict')
- def test19(self):
+ def test21(self):
"""aClass.classVar1 in dict lookup"""
self.check('aClass.classVar1')
- def test20(self):
+ def test22(self):
"""aClass.classVar1 in dict lookup in a loop"""
for i in range(10):
self.check('aClass.classVar1')
-
def test23(self):
"""anObj.instanceVar1 in dict lookup"""
self.check('anObj.instanceVar1')
@@ -243,7 +241,7 @@ class VFN(NameMapperTest):
for i in range(10):
self.check('anObj.instanceVar1')
- ## tests 22, 25, and 26 removed when the underscored lookup was removed
+ # tests 22, 25, and 26 removed when the underscored lookup was removed
def test27(self):
"""anObj.meth1 in dict lookup"""
@@ -380,7 +378,6 @@ class VFN(NameMapperTest):
for i in range(10):
self.assertRaises(ValueError, test)
-
def test53(self):
"""Other exception from func test"""
@@ -410,24 +407,34 @@ class VFN(NameMapperTest):
assert self.get('aDict.nestedDict.aClass', False) == DummyClass
def test58(self):
- """aDict.nestedDict.aClass in dict lookup in a loop - without autocalling"""
+ """
+ aDict.nestedDict.aClass in dict lookup in a loop - without
+ autocalling
+ """
+
for i in range(10):
assert self.get('aDict.nestedDict.aClass', False) == DummyClass
def test59(self):
- """Other exception from func test -- but without autocalling shouldn't raise"""
-
+ """
+ Other exception from func test -- but without autocalling shouldn't
+ raise
+ """
self.get('aDict.nestedDict.funcThatRaises', False)
def test60(self):
- """Other exception from func test in a loop -- but without autocalling shouldn't raise"""
-
+ """
+ Other exception from func test in a loop -- but without autocalling
+ shouldn't raise
+ """
for i in range(10):
self.get('aDict.nestedDict.funcThatRaises', False)
def test61(self):
- """Accessing attribute where __getattr__ raises shouldn't segfault if something follows it"""
-
+ """
+ Accessing attribute where __getattr__ raises shouldn't segfault
+ if something follows it
+ """
def test(self=self):
self.get('anObjThatRaises.willraise.anything')
self.assertRaises(ValueError, test)
@@ -441,10 +448,10 @@ class VFS(VFN):
if lng == 1:
return [self.namespace()]
elif lng == 2:
- return [self.namespace(), {'dummy':1234}]
+ return [self.namespace(), {'dummy': 1234}]
elif lng == 3:
# a tuple for kicks
- return ({'dummy':1234}, self.namespace(), {'dummy':1234})
+ return ({'dummy': 1234}, self.namespace(), {'dummy': 1234})
elif lng == 4:
# a generator for more kicks
return self.searchListGenerator()
@@ -452,27 +459,31 @@ class VFS(VFN):
def searchListGenerator(self):
class Test:
pass
- for i in [Test(), {'dummy':1234}, self.namespace(), {'dummy':1234}]:
+ for i in [Test(), {'dummy': 1234}, self.namespace(), {'dummy': 1234}]:
yield i
def get(self, name, autocall=True):
return self.VFS(self.searchList(), name, autocall)
+
class VFS_2namespaces(VFS):
_searchListLength = 2
+
class VFS_3namespaces(VFS):
_searchListLength = 3
+
class VFS_4namespaces(VFS):
_searchListLength = 4
+
class VFF(VFN):
def get(self, name, autocall=True):
ns = self._testNamespace
- aStr = ns['aStr']
- aFloat = ns['aFloat']
- none = 'some'
+ aStr = ns['aStr'] # noqa: F841
+ aFloat = ns['aFloat'] # noqa: F841
+ none = 'some' # noqa: F841
return valueFromFrame(name, autocall)
def setUp(self):
@@ -493,8 +504,9 @@ class VFF(VFN):
self.check('True')
self.check('None')
self.check('False')
- assert self.get('eval', False)==eval
- assert self.get('range', False)==range
+ assert self.get('eval', False) == eval
+ assert self.get('range', False) == range
+
class VFFSL(VFS):
_searchListLength = 1
@@ -508,25 +520,29 @@ class VFFSL(VFS):
ns['aFloat'] = res['aFloat'] = 0.1234
res['none'] = 'some'
- del ns['anInt'] # will be picked up by globals
+ del ns['anInt'] # will be picked up by globals
def VFFSL(self, searchList, name, autocall=True):
- anInt = 1
- none = 'some'
+ anInt = 1 # noqa: F841
+ none = 'some' # noqa: F841
return valueFromFrameOrSearchList(searchList, name, autocall)
def get(self, name, autocall=True):
return self.VFFSL(self.searchList(), name, autocall)
+
class VFFSL_2(VFFSL):
_searchListLength = 2
+
class VFFSL_3(VFFSL):
_searchListLength = 3
+
class VFFSL_4(VFFSL):
_searchListLength = 4
+
if sys.platform.startswith('java'):
del VFF, VFFSL, VFFSL_2, VFFSL_3, VFFSL_4
@@ -537,13 +553,12 @@ class MapBuiltins(unittest.TestCase):
t = Template('''
#def intify(val)
#return $int(val)
- #end def''', compilerSettings={'useStackFrames' : False})
+ #end def''', compilerSettings={'useStackFrames': False})
self.assertEqual(5, t.intify('5'))
-
##################################################
-## if run from the command line ##
+# if run from the command line ##
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/NameMapper_pure.py b/Cheetah/Tests/NameMapper_pure.py
index 836415b..2a26e3a 100755
--- a/Cheetah/Tests/NameMapper_pure.py
+++ b/Cheetah/Tests/NameMapper_pure.py
@@ -4,37 +4,39 @@ import sys
import unittest
try:
- from Cheetah import _namemapper
+ from Cheetah import _namemapper # noqa
except ImportError:
# _namemapper hasn't been compiled so Tests/NameMapper.py
# tests pure-python NameMapper.py; no need to duplicate these tests.
pass
-else: # Test NameMapper tests without _namemapper extension.
- from Cheetah.Tests.NameMapper import *
+
def setUpModule():
if 'Cheetah.NameMapper' in sys.modules:
del sys.modules['Cheetah.NameMapper']
sys.modules['Cheetah._namemapper'] = None
- from Cheetah.NameMapper import NotFound, valueForKey, \
- valueForName, valueFromSearchList, valueFromFrame, \
- valueFromFrameOrSearchList
+ from Cheetah.NameMapper import NotFound, \
+ valueForName, valueFromSearchList, valueFromFrame, \
+ valueFromFrameOrSearchList
from Cheetah.Tests import NameMapper
for func in [
- NotFound, valueForKey, valueForName, valueFromSearchList,
+ NotFound, valueForName, valueFromSearchList,
valueFromFrame, valueFromFrameOrSearchList
]:
setattr(NameMapper, func.__name__, func)
+
def tearDownModule():
del sys.modules['Cheetah.NameMapper']
del sys.modules['Cheetah._namemapper']
del sys.modules['Cheetah.Tests.NameMapper']
+
class NameMapperTest(unittest.TestCase):
def test_valueForName(self):
from Cheetah.NameMapper import valueForName
self.assertEqual(valueForName('upper', 'upper', True), 'UPPER')
+
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/Parser.py b/Cheetah/Tests/Parser.py
index fe67420..87a4a1b 100755
--- a/Cheetah/Tests/Parser.py
+++ b/Cheetah/Tests/Parser.py
@@ -4,24 +4,27 @@ import unittest
from Cheetah import Parser
+
class ArgListTest(unittest.TestCase):
def setUp(self):
super(ArgListTest, self).setUp()
self.al = Parser.ArgList()
def test_merge1(self):
- '''
- Testing the ArgList case results from Template.Preprocessors.test_complexUsage
- '''
+ """
+ Testing the ArgList case results from
+ Template.Preprocessors.test_complexUsage
+ """
self.al.add_argument('arg')
expect = [('arg', None)]
self.assertEqual(expect, self.al.merge())
def test_merge2(self):
- '''
- Testing the ArgList case results from SyntaxAndOutput.BlockDirective.test4
- '''
+ """
+ Testing the ArgList case results from
+ SyntaxAndOutput.BlockDirective.test4
+ """
self.al.add_argument('a')
self.al.add_default('999')
self.al.next()
@@ -32,18 +35,17 @@ class ArgListTest(unittest.TestCase):
self.assertEqual(expect, self.al.merge())
-
-
def test_merge3(self):
- '''
- Testing the ArgList case results from SyntaxAndOutput.BlockDirective.test13
- '''
+ """
+ Testing the ArgList case results from
+ SyntaxAndOutput.BlockDirective.test13
+ """
self.al.add_argument('arg')
self.al.add_default("'This is my block'")
expect = [('arg', "'This is my block'")]
self.assertEqual(expect, self.al.merge())
+
if __name__ == '__main__':
unittest.main()
-
diff --git a/Cheetah/Tests/Performance.py b/Cheetah/Tests/Performance.py
index 7d980ad..25272f4 100755
--- a/Cheetah/Tests/Performance.py
+++ b/Cheetah/Tests/Performance.py
@@ -22,16 +22,21 @@ DEBUG = False
kPS = 1000
TOLERANCE = 0.5*kPS
+
class DurationError(AssertionError):
pass
+
_pystone_calibration_mark = None
+
+
def _pystone_calibration():
global _pystone_calibration_mark
if not _pystone_calibration_mark:
_pystone_calibration_mark = pystone.pystones(loops=pystone.LOOPS)
return _pystone_calibration_mark
+
def perftest(max_num_pystones, current_pystone=None):
'''
Performance test decorator based off the 'timedtest'
@@ -58,21 +63,21 @@ def perftest(max_num_pystones, current_pystone=None):
pystone_total_time = total_time / pystone_rate
global DEBUG
if DEBUG:
- print('The test "%s" took: %s pystones' % (function.__name__,
- pystone_total_time))
+ print('The test "%s" took: %s pystones' % (
+ function.__name__, pystone_total_time))
else:
if pystone_total_time > (max_num_pystones + TOLERANCE):
- raise DurationError((('Test too long (%.2f Ps, '
- 'need at most %.2f Ps)')
- % (pystone_total_time,
- max_num_pystones)))
+ raise DurationError(
+ 'Test too long (%.2f Ps, need at most %.2f Ps)'
+ % (pystone_total_time, max_num_pystones))
return wrapper
return _test
class DynamicTemplatePerformanceTest(unittest.TestCase):
loops = 10
- #@perftest(1200)
+ # @perftest(1200)
+
def test_BasicDynamic(self):
template = '''
#def foo(arg1, arg2)
@@ -84,6 +89,7 @@ class DynamicTemplatePerformanceTest(unittest.TestCase):
assert klass
test_BasicDynamic = perftest(1200)(test_BasicDynamic)
+
class PerformanceTest(unittest.TestCase):
iterations = 100000
display = False
@@ -100,15 +106,16 @@ class PerformanceTest(unittest.TestCase):
self.prof.close()
if self.display:
print('>>> %s (%d iterations) ' % (self.__class__.__name__,
- self.iterations))
+ self.iterations))
stats = hotshot.stats.load('%s.prof' % self.__class__.__name__)
- #stats.strip_dirs()
+ # stats.strip_dirs()
stats.sort_stats('time', 'calls')
stats.print_stats(50)
if not self.save:
os.unlink('%s.prof' % self.__class__.__name__)
+
class DynamicMethodCompilationTest(PerformanceTest):
def performanceSample(self):
template = '''
@@ -119,14 +126,15 @@ class DynamicMethodCompilationTest(PerformanceTest):
#return $foo[0]
#end def
'''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
+ template = Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False)
template = template()
- value = template.testMethod()
+ value = template.testMethod() # noqa: F841
class BunchOfWriteCalls(PerformanceTest):
iterations = 1000
+
def performanceSample(self):
template = '''
#import sys
@@ -135,12 +143,13 @@ class BunchOfWriteCalls(PerformanceTest):
$i
#end for
'''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
+ template = Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False)
template = template()
value = template.respond()
del value
+
class DynamicSimpleCompilationTest(PerformanceTest):
def performanceSample(self):
template = '''
@@ -152,14 +161,15 @@ class DynamicSimpleCompilationTest(PerformanceTest):
Here's an array too: $foo
'''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
+ template = Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False)
template = template()
template = unicode(template)
class FilterTest(PerformanceTest):
template = None
+
def setUp(self):
super(FilterTest, self).setUp()
template = '''
@@ -169,18 +179,19 @@ class FilterTest(PerformanceTest):
$foo, $foo, $foo
'''
- template = Cheetah.Template.Template.compile(template,
- keepRefToGeneratedCode=False)
+ template = Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False)
self.template = template()
def performanceSample(self):
- value = unicode(self.template)
+ value = unicode(self.template) # noqa: F841
class LongCompileTest(PerformanceTest):
''' Test the compilation on a sufficiently large template '''
def compile(self, template):
- return Cheetah.Template.Template.compile(template, keepRefToGeneratedCode=False)
+ return Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False)
def performanceSample(self):
template = '''
@@ -225,15 +236,18 @@ class LongCompileTest(PerformanceTest):
'''
return self.compile(template)
+
class LongCompile_CompilerSettingsTest(LongCompileTest):
def compile(self, template):
- return Cheetah.Template.Template.compile(template, keepRefToGeneratedCode=False,
- compilerSettings={'useStackFrames' : True, 'useAutocalling' : True})
+ return Cheetah.Template.Template.compile(
+ template, keepRefToGeneratedCode=False,
+ compilerSettings={'useStackFrames': True, 'useAutocalling': True})
+
class LongCompileAndRun(LongCompileTest):
def performanceSample(self):
template = super(LongCompileAndRun, self).performanceSample()
- template = template(searchList=[{'title' : 'foo'}])
+ template = template(searchList=[{'title': 'foo'}])
template = template.respond()
diff --git a/Cheetah/Tests/Pinger.py b/Cheetah/Tests/Pinger.py
index ac39cec..09e45c7 100644
--- a/Cheetah/Tests/Pinger.py
+++ b/Cheetah/Tests/Pinger.py
@@ -4,5 +4,5 @@ from Cheetah.Template import Template
class Pinger(Template):
- def ping(self):
- return 'pong'
+ def ping(self):
+ return 'pong'
diff --git a/Cheetah/Tests/Regressions.py b/Cheetah/Tests/Regressions.py
index 33de90a..c38c113 100755
--- a/Cheetah/Tests/Regressions.py
+++ b/Cheetah/Tests/Regressions.py
@@ -1,20 +1,20 @@
#!/usr/bin/env python
-import sys
import unittest
-
import Cheetah.NameMapper
import Cheetah.Template
-from Cheetah.compat import unicode
+from Cheetah.compat import unicode # noqa
class GetAttrException(Exception):
pass
+
class CustomGetAttrClass(object):
def __getattr__(self, name):
raise GetAttrException('FAIL, %s' % name)
+
class GetAttrTest(unittest.TestCase):
'''
Test for an issue occurring when __getatttr__() raises an exception
@@ -27,7 +27,7 @@ class GetAttrTest(unittest.TestCase):
except GetAttrException as e:
# expected
return
- except:
+ except Exception as e:
self.fail('Invalid exception raised: %s' % e)
self.fail('Should have had an exception raised')
@@ -37,8 +37,9 @@ class GetAttrTest(unittest.TestCase):
$obj.attr
#end def'''
- template = Cheetah.Template.Template.compile(template, compilerSettings={}, keepRefToGeneratedCode=True)
- template = template(searchList=[{'obj' : CustomGetAttrClass()}])
+ template = Cheetah.Template.Template.compile(
+ template, compilerSettings={}, keepRefToGeneratedCode=True)
+ template = template(searchList=[{'obj': CustomGetAttrClass()}])
assert template, 'We should have a valid template object by now'
self.assertRaises(GetAttrException, template.raiseme)
@@ -61,7 +62,9 @@ class InlineImportTest(unittest.TestCase):
#end if
#end def
'''
- template = Cheetah.Template.Template.compile(template, compilerSettings={'useLegacyImportMode' : False}, keepRefToGeneratedCode=True)
+ template = Cheetah.Template.Template.compile(
+ template, compilerSettings={'useLegacyImportMode': False},
+ keepRefToGeneratedCode=True)
template = template(searchList=[{}])
assert template, 'We should have a valid template object by now'
@@ -79,11 +82,14 @@ class InlineImportTest(unittest.TestCase):
$invalidmodule.FOO
'''
- template = Cheetah.Template.Template.compile(template, compilerSettings={'useLegacyImportMode' : False}, keepRefToGeneratedCode=True)
+ template = Cheetah.Template.Template.compile(
+ template, compilerSettings={'useLegacyImportMode': False},
+ keepRefToGeneratedCode=True)
template = template(searchList=[{}])
assert template, 'We should have a valid template object by now'
- assert str(template), 'We weren\'t able to properly generate the result from the template'
+ assert str(template), \
+ "We weren't able to properly generate the result from the template"
def test_ProperImportOfBadModule(self):
template = '''
@@ -91,7 +97,10 @@ class InlineImportTest(unittest.TestCase):
This should totally $fail
'''
- self.assertRaises(ImportError, Cheetah.Template.Template.compile, template, compilerSettings={'useLegacyImportMode' : False}, keepRefToGeneratedCode=True)
+ self.assertRaises(
+ ImportError, Cheetah.Template.Template.compile,
+ template, compilerSettings={'useLegacyImportMode': False},
+ keepRefToGeneratedCode=True)
def test_AutoImporting(self):
template = '''
@@ -99,7 +108,8 @@ class InlineImportTest(unittest.TestCase):
Boo!
'''
- self.assertRaises(ImportError, Cheetah.Template.Template.compile, template)
+ self.assertRaises(
+ ImportError, Cheetah.Template.Template.compile, template)
def test_StuffBeforeImport_Legacy(self):
template = '''
@@ -109,7 +119,10 @@ class InlineImportTest(unittest.TestCase):
#extends Foo
Bar
'''
- self.assertRaises(ImportError, Cheetah.Template.Template.compile, template, compilerSettings={'useLegacyImportMode' : True}, keepRefToGeneratedCode=True)
+ self.assertRaises(
+ ImportError, Cheetah.Template.Template.compile,
+ template, compilerSettings={'useLegacyImportMode': True},
+ keepRefToGeneratedCode=True)
class Mantis_Issue_11_Regression_Test(unittest.TestCase):
@@ -126,19 +139,22 @@ class Mantis_Issue_11_Regression_Test(unittest.TestCase):
'''
def test_FailingBehavior(self):
import cgi
- template = Cheetah.Template.Template("$escape($request)", searchList=[{'escape' : cgi.escape, 'request' : 'foobar'}])
+ template = Cheetah.Template.Template(
+ "$escape($request)",
+ searchList=[{'escape': cgi.escape, 'request': 'foobar'}])
assert template
self.assertRaises(AttributeError, template.respond)
-
def test_FailingBehaviorWithSetting(self):
import cgi
- template = Cheetah.Template.Template("$escape($request)",
- searchList=[{'escape' : cgi.escape, 'request' : 'foobar'}],
- compilerSettings={'prioritizeSearchListOverSelf' : True})
+ template = Cheetah.Template.Template(
+ "$escape($request)",
+ searchList=[{'escape': cgi.escape, 'request': 'foobar'}],
+ compilerSettings={'prioritizeSearchListOverSelf': True})
assert template
assert template.respond()
+
class Mantis_Issue_21_Regression_Test(unittest.TestCase):
'''
Test case for bug outlined in issue #21
@@ -157,7 +173,8 @@ class Mantis_Issue_21_Regression_Test(unittest.TestCase):
'''
template = Cheetah.Template.Template.compile(template)
assert template
- assert template.testMethod(output='bug') # raises a NameError: global name '_filter' is not defined
+ # raises a NameError: global name '_filter' is not defined
+ assert template.testMethod(output='bug')
class Mantis_Issue_22_Regression_Test(unittest.TestCase):
@@ -195,8 +212,8 @@ class Mantis_Issue_22_Regression_Test(unittest.TestCase):
#end filter
#end def
'''
- # The generated code for the template's testMethod() should look something
- # like this in the 'error' case:
+ # The generated code for the template's testMethod() should look
+ # something like this in the 'error' case:
'''
@staticmethod
def testMethod(**KWS):
@@ -213,13 +230,16 @@ class Mantis_Issue_22_Regression_Test(unittest.TestCase):
_orig_filter_18517345 = _filter
filterName = u'Filter'
if "Filter" in self._CHEETAH__filters:
- _filter = self._CHEETAH__currentFilter = self._CHEETAH__filters[filterName]
+ _filter = self._CHEETAH__currentFilter = \
+ self._CHEETAH__filters[filterName]
else:
_filter = self._CHEETAH__currentFilter = \
- self._CHEETAH__filters[filterName] = getattr(self._CHEETAH__filtersLib, filterName)(self).filter
+ self._CHEETAH__filters[filterName] = \
+ getattr(self._CHEETAH__filtersLib, filterName)(self).filter
write(u' This is my ')
_v = VFFSL(SL,"output",True) # u'$output' on line 5, col 32
- if _v is not None: write(_filter(_v, rawExpr=u'$output')) # from line 5, col 32.
+ # from line 5, col 32.
+ if _v is not None: write(_filter(_v, rawExpr=u'$output'))
########################################
## END - generated method body
diff --git a/Cheetah/Tests/SyntaxAndOutput.py b/Cheetah/Tests/SyntaxAndOutput.py
index b3517ea..dc14ec3 100755
--- a/Cheetah/Tests/SyntaxAndOutput.py
+++ b/Cheetah/Tests/SyntaxAndOutput.py
@@ -14,33 +14,32 @@ TODO
##################################################
-## DEPENDENCIES ##
+# DEPENDENCIES ##
-import sys
-import types
-import re
-from copy import deepcopy
import os
import os.path
-import warnings
+import sys
import unittest
+import warnings
from Cheetah.NameMapper import NotFound
-from Cheetah.NameMapper import C_VERSION as NameMapper_C_VERSION
from Cheetah.Template import Template
from Cheetah.Parser import ParseError
-from Cheetah.Compiler import Compiler, DEFAULT_COMPILER_SETTINGS
+from Cheetah.Compiler import DEFAULT_COMPILER_SETTINGS
from Cheetah.compat import PY2
class Unspecified(object):
pass
+
def testdecorator(func):
return func
+
class DummyClass:
_called = False
+
def __str__(self):
return 'object'
@@ -64,6 +63,7 @@ class DummyClass:
def dummyFunc(arg="Scooby"):
return arg
+
defaultTestNameSpace = {
'aStr': 'blarg',
'anInt': 1,
@@ -71,9 +71,9 @@ defaultTestNameSpace = {
'aList': ['item0', 'item1', 'item2'],
'aDict': {'one': 'item1',
'two': 'item2',
- 'nestedDict': {1:'nestedItem1',
- 'two':'nestedItem2'
- },
+ 'nestedDict': {1: 'nestedItem1',
+ 'two': 'nestedItem2'
+ },
'nestedFunc': dummyFunc,
},
'aFunc': dummyFunc,
@@ -95,7 +95,7 @@ defaultTestNameSpace = {
'includeBlock2': """$numOne $numTwo $aSetVar""",
'includeFileName': 'parseTest.txt',
- 'listOfLambdas': [lambda x: x, lambda x: x, lambda x: x,],
+ 'listOfLambdas': [lambda x: x, lambda x: x, lambda x: x],
'list': [
{'index': 0, 'numOne': 1, 'numTwo': 2},
{'index': 1, 'numOne': 1, 'numTwo': 2},
@@ -108,7 +108,7 @@ defaultTestNameSpace = {
##################################################
-## TEST BASE CLASSES
+# TEST BASE CLASSES
class OutputTest(unittest.TestCase):
report = '''
@@ -131,7 +131,7 @@ Template output mismatch:
_searchList = [defaultTestNameSpace]
_useNewStyleCompilation = True
- #_useNewStyleCompilation = False
+ # _useNewStyleCompilation = False
_extraCompileKwArgs = None
@@ -147,7 +147,8 @@ Template output mismatch:
convertEOLs = self.convertEOLs
if convertEOLs:
input = input.replace('\n', self._EOLreplacement)
- expectedOutput = expectedOutput.replace('\n', self._EOLreplacement)
+ expectedOutput = expectedOutput.replace(
+ '\n', self._EOLreplacement)
self._input = input
if self._useNewStyleCompilation:
@@ -174,8 +175,10 @@ Template output mismatch:
print(
moduleCode.encode('ascii', 'backslashreplace').decode('ascii'))
try:
- output = templateObj.respond() # rather than __str__, because of unicode
- assert output==expectedOutput, self._outputMismatchReport(output, expectedOutput)
+ # rather than __str__, because of unicode
+ output = templateObj.respond()
+ assert output == expectedOutput, \
+ self._outputMismatchReport(output, expectedOutput)
finally:
templateObj.shutdown()
@@ -186,10 +189,12 @@ Template output mismatch:
if self._debugEOLReplacement and self._EOLreplacement:
EOLrepl = self._EOLreplacement
marker = '*EOL*'
- return self.report % {'template': self._input.replace(EOLrepl, marker),
- 'expected': expectedOutput.replace(EOLrepl, marker),
- 'actual': output.replace(EOLrepl, marker),
- 'end': '(end)'}
+ return self.report % {
+ 'template': self._input.replace(EOLrepl, marker),
+ 'expected': expectedOutput.replace(EOLrepl, marker),
+ 'actual': output.replace(EOLrepl, marker),
+ 'end': '(end)',
+ }
else:
return self.report % {'template': self._input,
'expected': expectedOutput,
@@ -205,10 +210,12 @@ Template output mismatch:
return self.template.generatedModuleCode()
##################################################
-## TEST CASE CLASSES
+# TEST CASE CLASSES
+
class EmptyTemplate(OutputTest):
convertEOLs = False
+
def test1(self):
"""an empty string for the template"""
@@ -227,7 +234,8 @@ class EmptyTemplate(OutputTest):
except NotImplementedError:
pass
else:
- self.fail("This should barf about respond() not being implemented.")
+ self.fail(
+ "This should barf about respond() not being implemented.")
self.verify("#implements respond", "")
@@ -239,9 +247,10 @@ class Backslashes(OutputTest):
def setUp(self):
fp = open('backslashes.txt', 'w')
- fp.write(r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
+ fp.write(
+ r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
fp.flush()
- fp.close
+ fp.close()
def tearDown(self):
if os.path.exists('backslashes.txt'):
@@ -275,13 +284,15 @@ class Backslashes(OutputTest):
triple-quotes for strings with lots of \\n in them and repr(theStr) for
shorter strings with only a few newlines."""
- self.verify(r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n',
- r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
+ self.verify(
+ r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n',
+ r'#LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
def test6(self):
""" test backslash handling in an included file"""
- self.verify(r'#include "backslashes.txt"',
- r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
+ self.verify(
+ r'#include "backslashes.txt"',
+ r'\ #LogFormat "%h %l %u %t \"%r\" %>s %b"' + '\n\n\n\n\n\n\n')
def test7(self):
""" a single \\ without using rawstrings plus many NEWLINES"""
@@ -292,8 +303,10 @@ class Backslashes(OutputTest):
""" single line from an apache conf file with single quotes and many NEWLINES
"""
- self.verify(r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n',
- r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n')
+ self.verify(
+ r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n',
+ r"""#LogFormat '%h %l %u %t \"%r\" %>s %b'""" + '\n\n\n\n\n\n\n')
+
class NonTokens(OutputTest):
def test1(self):
@@ -320,6 +333,7 @@ class NonTokens(OutputTest):
"""1 dollar sign"""
self.verify("$",
"$")
+
def _X_test6(self):
"""1 dollar sign followed by hash"""
self.verify("\n$#\n",
@@ -328,12 +342,13 @@ class NonTokens(OutputTest):
def test6(self):
"""1 dollar sign followed by EOL Slurp Token"""
if DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']:
- self.verify("\n$%s\n"%DEFAULT_COMPILER_SETTINGS['EOLSlurpToken'],
+ self.verify("\n$%s\n" % DEFAULT_COMPILER_SETTINGS['EOLSlurpToken'],
"\n$")
else:
self.verify("\n$#\n",
"\n$#\n")
+
class Comments_SingleLine(OutputTest):
def test1(self):
"""## followed by WS"""
@@ -349,6 +364,7 @@ class Comments_SingleLine(OutputTest):
"""## followed by text then NEWLINE"""
self.verify("## oeuao aoe uaoe \n",
"")
+
def test4(self):
"""## gobbles leading WS"""
self.verify(" ## oeuao aoe uaoe \n",
@@ -395,13 +411,12 @@ class Comments_SingleLine(OutputTest):
class Comments_MultiLine_NoGobble(OutputTest):
- """
- Multiline comments used to not gobble whitespace. They do now, but this can
- be turned off with a compilerSetting
- """
+ """Multiline comments used to not gobble whitespace
+ They do now, but this can be turned off with a compilerSetting.
+ """
def _getCompilerSettings(self):
- return {'gobbleWhitespaceAroundMultiLineComments':False}
+ return {'gobbleWhitespaceAroundMultiLineComments': False}
def test1(self):
"""#* *# followed by WS
@@ -431,6 +446,7 @@ class Comments_MultiLine_NoGobble(OutputTest):
self.verify(" #* \nblarg\n *# ",
" ")
+
class Comments_MultiLine(OutputTest):
"""
Note: Multiline comments don't gobble whitespace!
@@ -494,20 +510,22 @@ class Comments_MultiLine(OutputTest):
self.verify("foo\nfoo bar #* #for $i in range(15) *# foo\n",
"foo\nfoo bar foo\n")
- def test9(self):
+ def test10(self):
""" text around #* *# containing #for directive and trailing whitespace
which should be gobbled
"""
self.verify("foo\nfoo bar #* #for $i in range(15) *# \ntest",
"foo\nfoo bar \ntest")
- def test10(self):
- """ text around #* *# containing #for directive and newlines: trailing whitespace
- which should be gobbled.
+ def test11(self):
+ """
+ Text around #* *# containing #for directive and newlines:
+ trailing whitespace which should be gobbled.
"""
self.verify("foo\nfoo bar #* \n\n#for $i in range(15) \n\n*# \ntest",
"foo\nfoo bar \ntest")
+
class Placeholders(OutputTest):
def test1(self):
"""1 placeholder"""
@@ -594,11 +612,11 @@ class Placeholders(OutputTest):
def test20(self):
"""silent mode $!placeholders """
- self.verify("$!aStr$!nonExistant$!*nonExistant$!{nonExistant}", "blarg")
+ self.verify(
+ "$!aStr$!nonExistant$!*nonExistant$!{nonExistant}", "blarg")
try:
- self.verify("$!aStr$nonExistant",
- "blarg")
+ self.verify("$!aStr$nonExistant", "blarg")
except NotFound:
pass
else:
@@ -610,22 +628,24 @@ class Placeholders(OutputTest):
names = namesStr.split()
tmpl = Template.compile('#for name in $names: $name ', baseclass=dict)
- assert str(tmpl({'names':names})).strip()==namesStr
+ assert str(tmpl({'names': names})).strip() == namesStr
tmpl = tmpl.subclass('#for name in $names: $*name ')
- assert str(tmpl({'names':names}))=='You '*len(names)
+ assert str(tmpl({'names': names})) == 'You '*len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*name ')
- assert str(tmpl({'names':names}))=='You '*len(names)
+ assert str(tmpl({'names': names})) == 'You '*len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')
- assert str(tmpl({'names':names}))=='You '*len(names)
+ assert str(tmpl({'names': names})) == 'You '*len(names)
tmpl = tmpl.subclass('#for name in $names: $*1*(name) ')
- assert str(tmpl(names=names))=='You '*len(names)
+ assert str(tmpl(names=names)) == 'You '*len(names)
+
class Placeholders_Vals(OutputTest):
convertEOLs = False
+
def test1(self):
"""string"""
self.verify("$aStr", "blarg")
@@ -660,13 +680,14 @@ class Placeholders_Vals(OutputTest):
def test8(self):
"""True, False
"""
- self.verify("$True $False", "%s %s"%(repr(True), repr(False)))
+ self.verify("$True $False", "%s %s" % (repr(True), repr(False)))
def test9(self):
"""$_
"""
self.verify("$_('foo')", "Translated: foo")
+
class PlaceholderStrings(OutputTest):
def test1(self):
"""some c'text $placeholder text' strings"""
@@ -678,7 +699,8 @@ class PlaceholderStrings(OutputTest):
def test3(self):
"""some c'text $placeholder text' strings"""
- self.verify("$str(c'$(aStr.upper.replace(c\"A$str()\",\"\"))')", "BLRG")
+ self.verify(
+ "$str(c'$(aStr.upper.replace(c\"A$str()\",\"\"))')", "BLRG")
def test4(self):
"""some c'text $placeholder text' strings"""
@@ -690,7 +712,8 @@ class PlaceholderStrings(OutputTest):
def test6(self):
"""some c'text $placeholder text' strings"""
- self.verify("#if 1\n$str(c'$(aStr.upper)')#slurp\n#else\n0#end if", "BLARG")
+ self.verify(
+ "#if 1\n$str(c'$(aStr.upper)')#slurp\n#else\n0#end if", "BLARG")
def test7(self):
"""some c'text $placeholder text' strings"""
@@ -702,19 +725,20 @@ class PlaceholderStrings(OutputTest):
"BLARG1")
-
class UnicodeStrings(OutputTest):
def test1(self):
"""unicode data in placeholder
"""
- #self.verify(u"$unicodeData", defaultTestNameSpace['unicodeData'], outputEncoding='utf8')
+ # self.verify(u"$unicodeData", defaultTestNameSpace['unicodeData'],
+ # outputEncoding='utf8')
self.verify(u"$unicodeData", defaultTestNameSpace['unicodeData'])
def test2(self):
"""unicode data in body
"""
self.verify(u"aoeu12345\u1234", u"aoeu12345\u1234")
- #self.verify(u"#encoding utf8#aoeu12345\u1234", u"aoeu12345\u1234")
+ # self.verify(u"#encoding utf8#aoeu12345\u1234", u"aoeu12345\u1234")
+
class EncodingDirective(OutputTest):
def test1(self):
@@ -757,6 +781,7 @@ class EncodingDirective(OutputTest):
self.verify(source,
u'\u1234', outputEncoding='utf8')
+
class UnicodeDirective(OutputTest):
def test1(self):
"""basic #unicode """
@@ -782,8 +807,10 @@ class UnicodeDirective(OutputTest):
self.verify("#encoding latin-1\n1234ü",
u"1234ü")
+
class Placeholders_Esc(OutputTest):
convertEOLs = False
+
def test1(self):
"""1 escaped placeholder"""
self.verify("\$var",
@@ -845,6 +872,7 @@ class Placeholders_Calls(OutputTest):
r"""func placeholder - with (\nint\n)"""
self.verify("$aFunc(\n1234\n)",
"1234", convertEOLs=False)
+
def test8(self):
"""func placeholder - with (string)"""
self.verify("$aFunc('aoeu')",
@@ -854,6 +882,7 @@ class Placeholders_Calls(OutputTest):
"""func placeholder - with ('''string''')"""
self.verify("$aFunc('''aoeu''')",
"aoeu")
+
def test10(self):
r"""func placeholder - with ('''\nstring\n''')"""
self.verify("$aFunc('''\naoeu\n''')",
@@ -908,6 +937,7 @@ class Placeholders_Calls(OutputTest):
"""deeply nested argstring, no enclosure + with WS"""
self.verify("$aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) )",
"1")
+
def test21(self):
"""deeply nested argstring, () enclosure + with WS"""
self.verify("$(aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",
@@ -927,6 +957,7 @@ class Placeholders_Calls(OutputTest):
"""deeply nested argstring, () enclosure + *cache"""
self.verify("$*(aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",
"1")
+
def test25(self):
"""deeply nested argstring, () enclosure + *15*cache"""
self.verify("$*15*(aFunc( $arg = $aMeth( $arg = $aFunc( 1 ) ) ) )",
@@ -937,6 +968,7 @@ class Placeholders_Calls(OutputTest):
self.verify("$aFunc(None)",
"")
+
class NameMapper(OutputTest):
def test1(self):
"""autocalling"""
@@ -1014,7 +1046,10 @@ class NameMapper(OutputTest):
"NESTEDITEM2")
def test16(self):
- """nested dictionary access - NameMapper style - followed by method, then slice"""
+ """
+ Nested dictionary access - NameMapper style - followed by method,
+ then slice.
+ """
self.verify("$aDict.nestedDict.two.upper[:4]",
"NEST")
@@ -1036,8 +1071,9 @@ class NameMapper(OutputTest):
def test20(self):
"""object method access, followed by a very complex slice
If it can pass this one, it's safe to say it works!!"""
- self.verify("$( anObj.meth1[0:\n (\n(4//4*2)*2)//$anObj.meth1(2)\n ] )",
- "do")
+ self.verify(
+ "$( anObj.meth1[0:\n (\n(4//4*2)*2)//$anObj.meth1(2)\n ] )",
+ "do")
def test21(self):
"""object method access with % in the default arg for the meth.
@@ -1049,7 +1085,7 @@ class NameMapper(OutputTest):
"110%")
-#class NameMapperDict(OutputTest):
+# class NameMapperDict(OutputTest):
#
# _searchList = [{"update": "Yabba dabba doo!"}]
#
@@ -1096,7 +1132,6 @@ $aStr#slurp
$foo$foo$foo$foo$foo""",
"1\n01234blarg"*5)
-
def test5(self):
r"""nested #cache blocks"""
self.verify("""#slurp
@@ -1122,6 +1157,7 @@ $foo$foo$foo$foo$foo""",
self.verify("#cached",
"#cached")
+
class CallDirective(OutputTest):
def test1(self):
@@ -1148,7 +1184,7 @@ $arg.upper()#slurp
#call $meth
$(1234+1) foo#slurp
#end call''',
- "1235 FOO")
+ "1235 FOO")
def test4(self):
r"""#call with keyword #args"""
@@ -1162,7 +1198,7 @@ $(1234+1) foo#slurp
#arg arg2
UPPER#slurp
#end call''',
- "1235 FOO - upper")
+ "1235 FOO - upper")
def test5(self):
r"""#call with single-line keyword #args """
@@ -1174,7 +1210,7 @@ $arg1.upper() - $arg2.lower()#slurp
#arg arg1:$(1234+1) foo#slurp
#arg arg2:UPPER#slurp
#end call''',
- "1235 FOO - upper")
+ "1235 FOO - upper")
def test6(self):
"""#call with python kwargs and cheetah output for the 1s positional
@@ -1187,7 +1223,7 @@ $arg1.upper() - $arg2.lower()#slurp
#call self.meth arg2="UPPER"
$(1234+1) foo#slurp
#end call''',
- "1235 FOO - upper")
+ "1235 FOO - upper")
def test7(self):
"""#call with python kwargs and #args"""
@@ -1198,7 +1234,7 @@ $arg1.upper() - $arg2.lower() - $arg3#slurp
#call self.meth arg2="UPPER", arg3=999
#arg arg1:$(1234+1) foo#slurp
#end call''',
- "1235 FOO - upper - 999")
+ "1235 FOO - upper - 999")
def test8(self):
"""#call with python kwargs and #args, and using a function to get the
@@ -1210,7 +1246,7 @@ $arg1.upper() - $arg2.lower() - $arg3#slurp
#call getattr(self, "meth") arg2="UPPER", arg3=999
#arg arg1:$(1234+1) foo#slurp
#end call''',
- "1235 FOO - upper - 999")
+ "1235 FOO - upper - 999")
def test9(self):
"""nested #call directives"""
@@ -1236,8 +1272,7 @@ $x$y#slurp
#end call 4
#end call 2
#end call 1''',
- "12345")
-
+ "12345")
class I18nDirective(OutputTest):
@@ -1262,8 +1297,7 @@ $(1234+1) foo#slurp
#end capture
$cap1#slurp
''',
- "1235 foo")
-
+ "1235 foo")
def test2(self):
r"""slightly more complex #capture"""
@@ -1276,7 +1310,7 @@ $(1234+1) $anInt $meth("foo")#slurp
#end capture
$cap1#slurp
''',
- "1235 1 FOO")
+ "1235 1 FOO")
class SlurpDirective(OutputTest):
@@ -1310,40 +1344,43 @@ class SlurpDirective(OutputTest):
" 1234 ")
-
class EOLSlurpToken(OutputTest):
_EOLSlurpToken = DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']
+
def test1(self):
r"""#slurp with 1 \n """
- self.verify("%s\n"%self._EOLSlurpToken,
+ self.verify("%s\n" % self._EOLSlurpToken,
"")
def test2(self):
r"""#slurp with 1 \n, leading whitespace
Should gobble"""
- self.verify(" %s\n"%self._EOLSlurpToken,
+ self.verify(" %s\n" % self._EOLSlurpToken,
"")
+
def test3(self):
r"""#slurp with 1 \n, leading content
Shouldn't gobble"""
- self.verify(" 1234 %s\n"%self._EOLSlurpToken,
+ self.verify(" 1234 %s\n" % self._EOLSlurpToken,
" 1234 ")
def test4(self):
r"""#slurp with WS then \n, leading content
Shouldn't gobble"""
- self.verify(" 1234 %s \n"%self._EOLSlurpToken,
+ self.verify(" 1234 %s \n" % self._EOLSlurpToken,
" 1234 ")
def test5(self):
r"""#slurp with garbage chars then \n, leading content
Should NOT eat the garbage"""
- self.verify(" 1234 %s garbage \n"%self._EOLSlurpToken,
- " 1234 %s garbage \n"%self._EOLSlurpToken)
+ self.verify(" 1234 %s garbage \n" % self._EOLSlurpToken,
+ " 1234 %s garbage \n" % self._EOLSlurpToken)
+
if not DEFAULT_COMPILER_SETTINGS['EOLSlurpToken']:
del EOLSlurpToken
+
class RawDirective(OutputTest):
def test1(self):
"""#raw till EOF"""
@@ -1376,8 +1413,10 @@ class RawDirective(OutputTest):
def test6(self):
""" Escape characters in a #raw block """
- self.verify( """#raw: This escape should be preserved: \\$unexpanded So should this one: \\#blah The string "\\012" should not disappear.""",
- r"""This escape should be preserved: \$unexpanded So should this one: \#blah The string "\012" should not disappear.""")
+ # noqa
+ self.verify("""\
+#raw: This escape should be preserved: \\$unexpanded So should this one: \\#blah The string "\\012" should not disappear.""", # noqa
+ r"""This escape should be preserved: \$unexpanded So should this one: \#blah The string "\012" should not disappear.""") # noqa
class BreakpointDirective(OutputTest):
@@ -1415,13 +1454,14 @@ class StopDirective(OutputTest):
def test4(self):
"""#stop in pos test block"""
- self.verify("""$anInt
+ self.verify("""\
+$anInt
#if 1
inside the if block
#stop
#end if
blarg""",
- "1\ninside the if block\n")
+ "1\ninside the if block\n")
def test5(self):
"""#stop in neg test block"""
@@ -1431,7 +1471,7 @@ inside the if block
#stop
#end if
blarg""",
- "1\nblarg")
+ "1\nblarg")
class ReturnDirective(OutputTest):
@@ -1468,7 +1508,9 @@ aoeuoaeu
"1\n2\n3\n")
def test3(self):
- """#return'ing an string AND streaming other output via the transaction"""
+ """
+ #return'ing an string AND streaming other output via the transaction
+ """
self.verify("""1
$str($test(trans=trans)[1])
3
@@ -1486,25 +1528,25 @@ aoeuoaeu
class YieldDirective(OutputTest):
convertEOLs = False
+
def test1(self):
"""simple #yield """
src1 = """#for i in range(10)\n#yield i\n#end for"""
src2 = """#for i in range(10)\n$i#slurp\n#yield\n#end for"""
src3 = ("#def iterator\n"
- "#for i in range(10)\n#yield i\n#end for\n"
- "#end def\n"
- "#for i in $iterator\n$i#end for"
- )
-
+ "#for i in range(10)\n#yield i\n#end for\n"
+ "#end def\n"
+ "#for i in $iterator\n$i#end for"
+ )
for src in (src1, src2, src3):
klass = Template.compile(src, keepRefToGeneratedCode=True)
- #print klass._CHEETAH_generatedModuleCode
+ # print klass._CHEETAH_generatedModuleCode
iter = klass().respond()
output = [str(i) for i in iter]
- assert ''.join(output)=='0123456789'
- #print ''.join(output)
+ assert ''.join(output) == '0123456789'
+ # print ''.join(output)
# @@TR: need to expand this to cover error conditions etc.
@@ -1525,7 +1567,6 @@ class ForDirective(OutputTest):
self.verify("#for $i in range(5) ##comment\n$i\n#end for",
"0\n1\n2\n3\n4\n")
-
def test2(self):
"""#for loop with WS in loop"""
self.verify("#for $i in range(5)\n$i \n#end for",
@@ -1566,27 +1607,38 @@ class ForDirective(OutputTest):
self.verify("#for $func in $listOfLambdas\n$func($anInt)\n#end for",
"1\n1\n1\n")
-
def test10(self):
"""#for loop over list, using methods of the items"""
- self.verify("#for i, j in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",
- "AA,BB\nCC,DD\n")
- self.verify("#for $i, $j in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",
- "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for i, j in [('aa','bb'),('cc','dd')]\n"
+ "$i.upper,$j.upper\n#end for",
+ "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for $i, $j in [('aa','bb'),('cc','dd')]\n"
+ "$i.upper,$j.upper\n#end for",
+ "AA,BB\nCC,DD\n")
def test11(self):
"""#for loop over list, using ($i,$j) style target list"""
- self.verify("#for (i, j) in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",
- "AA,BB\nCC,DD\n")
- self.verify("#for ($i, $j) in [('aa','bb'),('cc','dd')]\n$i.upper,$j.upper\n#end for",
- "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for (i, j) in [('aa','bb'),('cc','dd')]\n"
+ "$i.upper,$j.upper\n#end for",
+ "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for ($i, $j) in [('aa','bb'),('cc','dd')]\n"
+ "$i.upper,$j.upper\n#end for",
+ "AA,BB\nCC,DD\n")
def test12(self):
"""#for loop over list, using i, (j,k) style target list"""
- self.verify("#for i, (j, k) in enumerate([('aa','bb'),('cc','dd')])\n$j.upper,$k.upper\n#end for",
- "AA,BB\nCC,DD\n")
- self.verify("#for $i, ($j, $k) in enumerate([('aa','bb'),('cc','dd')])\n$j.upper,$k.upper\n#end for",
- "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for i, (j, k) in enumerate([('aa','bb'),('cc','dd')])\n"
+ "$j.upper,$k.upper\n#end for",
+ "AA,BB\nCC,DD\n")
+ self.verify(
+ "#for $i, ($j, $k) in enumerate([('aa','bb'),('cc','dd')])\n"
+ "$j.upper,$k.upper\n#end for",
+ "AA,BB\nCC,DD\n")
def test13(self):
"""single line #for"""
@@ -1651,7 +1703,7 @@ class RepeatDirective(OutputTest):
self.verify("#repeat $numTwo: 1\n"*2,
"1\n1\n"*2)
- #false single-line
+ # false single-line
self.verify("#repeat 3: \n1\n#end repeat",
"1\n1\n1\n")
@@ -1706,46 +1758,57 @@ class DefDirective(OutputTest):
def test3(self):
"""#def with argstring, gobble WS"""
- self.verify(" #def testMeth($a=999) \n1234-$a\n #end def\n$testMeth",
- "1234-999\n")
+ self.verify(
+ " #def testMeth($a=999) \n1234-$a\n #end def\n$testMeth",
+ "1234-999\n")
def test4(self):
"""#def with argstring, gobble WS, string used in call"""
- self.verify(" #def testMeth($a=999) \n1234-$a\n #end def\n$testMeth('ABC')",
- "1234-ABC\n")
+ self.verify(
+ " #def testMeth($a=999) \n"
+ "1234-$a\n #end def\n$testMeth('ABC')",
+ "1234-ABC\n")
def test5(self):
"""#def with argstring, gobble WS, list used in call"""
- self.verify(" #def testMeth($a=999) \n1234-$a\n #end def\n$testMeth([1,2,3])",
- "1234-[1, 2, 3]\n")
+ self.verify(
+ " #def testMeth($a=999) \n"
+ "1234-$a\n #end def\n$testMeth([1,2,3])",
+ "1234-[1, 2, 3]\n")
def test6(self):
"""#def with 2 args, gobble WS, list used in call"""
- self.verify(" #def testMeth($a, $b='default') \n1234-$a$b\n #end def\n$testMeth([1,2,3])",
- "1234-[1, 2, 3]default\n")
+ self.verify(
+ " #def testMeth($a, $b='default') \n"
+ "1234-$a$b\n #end def\n$testMeth([1,2,3])",
+ "1234-[1, 2, 3]default\n")
def test7(self):
"""#def with *args, gobble WS"""
- self.verify(" #def testMeth($*args) \n1234-$args\n #end def\n$testMeth",
- "1234-()\n")
+ self.verify(
+ " #def testMeth($*args) \n1234-$args\n #end def\n$testMeth",
+ "1234-()\n")
def test8(self):
"""#def with **KWs, gobble WS"""
- self.verify(" #def testMeth($**KWs) \n1234-$KWs\n #end def\n$testMeth",
- "1234-{}\n")
+ self.verify(
+ " #def testMeth($**KWs) \n1234-$KWs\n #end def\n$testMeth",
+ "1234-{}\n")
def test9(self):
"""#def with *args + **KWs, gobble WS"""
- self.verify(" #def testMeth($*args, $**KWs) \n1234-$args-$KWs\n #end def\n$testMeth",
- "1234-()-{}\n")
+ self.verify(
+ " #def testMeth($*args, $**KWs) \n"
+ "1234-$args-$KWs\n #end def\n$testMeth",
+ "1234-()-{}\n")
def test10(self):
"""#def with *args + **KWs, gobble WS"""
self.verify(
- " #def testMeth($*args, $**KWs) \n1234-$args-$KWs.a\n #end def\n$testMeth(1,2, a=1)",
+ " #def testMeth($*args, $**KWs) \n"
+ "1234-$args-$KWs.a\n #end def\n$testMeth(1,2, a=1)",
"1234-(1, 2)-1\n")
-
def test11(self):
"""single line #def with extra WS"""
self.verify(
@@ -1794,12 +1857,13 @@ class DefDirective(OutputTest):
def test19(self):
"""#def that extends over two lines with arguments"""
self.verify("#def $testMeth($arg=1234,\n"
- +" $arg2=5678)\n"
- +"$arg $arg2\n"
- +"#end def\n"
- +"$testMeth",
+ + " $arg2=5678)\n"
+ + "$arg $arg2\n"
+ + "#end def\n"
+ + "$testMeth",
"1234 5678\n")
+
class DecoratorDirective(OutputTest):
def test1(self):
"""single line #def with decorator"""
@@ -1808,23 +1872,23 @@ class DecoratorDirective(OutputTest):
self.verify("#@23 blah", "#@23 blah")
self.verify("#@@TR: comment", "#@@TR: comment")
- self.verify("#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
- +"#@testdecorator"
- +"\n#def $testMeth():1234\n$testMeth",
-
- "1234")
-
- self.verify("#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
- +"#@testdecorator"
- +"\n#block $testMeth():1234",
+ self.verify(
+ "#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
+ + "#@testdecorator"
+ + "\n#def $testMeth():1234\n$testMeth",
+ "1234")
- "1234")
+ self.verify(
+ "#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
+ + "#@testdecorator"
+ + "\n#block $testMeth():1234",
+ "1234")
try:
self.verify(
"#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
- +"#@testdecorator\n sdf"
- +"\n#def $testMeth():1234\n$testMeth",
+ + "#@testdecorator\n sdf"
+ + "\n#def $testMeth():1234\n$testMeth",
"1234")
except ParseError:
@@ -1834,14 +1898,15 @@ class DecoratorDirective(OutputTest):
def test2(self):
"""#def with multiple decorators"""
- self.verify("#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
- +"#@testdecorator\n"
- +"#@testdecorator\n"
- +"#def testMeth\n"
- +"1234\n"
- "#end def\n"
- "$testMeth",
- "1234\n")
+ self.verify(
+ "#from Cheetah.Tests.SyntaxAndOutput import testdecorator\n"
+ + "#@testdecorator\n"
+ + "#@testdecorator\n"
+ + "#def testMeth\n"
+ + "1234\n"
+ "#end def\n"
+ "$testMeth",
+ "1234\n")
class BlockDirective(OutputTest):
@@ -1862,17 +1927,17 @@ class BlockDirective(OutputTest):
def test3(self):
"""#block with argstring, gobble WS
- Because blocks can be reused in multiple parts of the template arguments
- (!!with defaults!!) can be given."""
-
+ Because blocks can be reused in multiple parts of the template
+ arguments (!!with defaults!!) can be given.
+ """
self.verify(" #block testBlock($a=999) \n1234-$a\n #end block ",
"1234-999\n")
def test4(self):
"""#block with 2 args, gobble WS"""
- self.verify(" #block testBlock($a=999, $b=444) \n1234-$a$b\n #end block ",
- "1234-999444\n")
-
+ self.verify(
+ " #block testBlock($a=999, $b=444) \n1234-$a$b\n #end block ",
+ "1234-999444\n")
def test5(self):
"""#block with 2 nested blocks
@@ -1893,7 +1958,6 @@ inner
""",
"this is a test block\nouter\ninner\n---\n")
-
def test6(self):
"""single line #block """
self.verify(
@@ -1953,13 +2017,14 @@ inner
"""#block $testMeth: \nfoo\n#end block\ntest $testMeth-""",
"foo\ntest foo\n-")
+
class IncludeDirective(OutputTest):
def setUp(self):
fp = open('parseTest.txt', 'w')
fp.write("$numOne $numTwo")
fp.flush()
- fp.close
+ fp.close()
def tearDown(self):
if os.path.exists('parseTest.txt'):
@@ -2028,12 +2093,12 @@ class IncludeDirective(OutputTest):
class SilentDirective(OutputTest):
- def test1(self):
+ def _X_test1(self):
"""simple #silent"""
self.verify("#silent $aFunc",
"")
- def test2(self):
+ def _X_test2(self):
"""simple #silent"""
self.verify("#silent $anObj.callIt\n$anObj.callArg",
"1234")
@@ -2041,11 +2106,18 @@ class SilentDirective(OutputTest):
self.verify("#silent $anObj.callIt ##comment\n$anObj.callArg",
"1234")
- def test3(self):
+ def _X_test3(self):
"""simple #silent"""
self.verify("#silent $anObj.callIt(99)\n$anObj.callArg",
"99")
+ def test4(self):
+ """#silent 1234
+ """
+ self.verify("#silent 1234",
+ "")
+
+
class SetDirective(OutputTest):
def test1(self):
@@ -2055,7 +2127,6 @@ class SetDirective(OutputTest):
self.verify("#set testVar = 'blarg'\n$testVar",
"blarg")
-
self.verify("#set testVar = 'blarg'##comment\n$testVar",
"blarg")
@@ -2063,6 +2134,7 @@ class SetDirective(OutputTest):
"""simple #set with no WS between operands"""
self.verify("#set $testVar='blarg'",
"")
+
def test3(self):
"""#set + use of var"""
self.verify("#set $testVar = 'blarg'\n$testVar",
@@ -2070,15 +2142,16 @@ class SetDirective(OutputTest):
def test4(self):
"""#set + use in an #include"""
- self.verify("#set global $aSetVar = 1234\n#include source=$includeBlock2",
- "1 2 1234")
+ self.verify(
+ "#set global $aSetVar = 1234\n#include source=$includeBlock2",
+ "1 2 1234")
def test5(self):
"""#set with a dictionary"""
- self.verify( """#set $testDict = {'one':'one1','two':'two2','three':'three3'}
+ self.verify("""#set $testDict = {'one':'one1','two':'two2','three':'three3'}
$testDict.one
$testDict.two""",
- "one1\ntwo2")
+ "one1\ntwo2")
def test6(self):
"""#set with string, then used in #if block"""
@@ -2128,8 +2201,9 @@ $testDict.two""",
def test14(self):
"""simple #set without NameMapper on"""
- self.verify("""#compiler useNameMapper = 0\n#set $testVar = 1 \n$testVar""",
- "1")
+ self.verify(
+ """#compiler useNameMapper = 0\n#set $testVar = 1 \n$testVar""",
+ "1")
def test15(self):
"""simple #set without $"""
@@ -2182,10 +2256,10 @@ class IfDirective(OutputTest):
"blarg\n")
self.verify("#if 1: ##comment \n$aStr\n#end if\n",
- "blarg\n")
+ "blarg\n")
self.verify("#if 1 ##comment \n$aStr\n#end if\n",
- "blarg\n")
+ "blarg\n")
self.verify("#if 1##for i in range(10)#$i#end for##end if",
'0123456789')
@@ -2200,6 +2274,7 @@ class IfDirective(OutputTest):
"""simple #if block, with WS"""
self.verify(" #if 1\n$aStr\n #end if \n",
"blarg\n")
+
def test3(self):
"""simple #if block, with WS and explicit closures"""
self.verify(" #if 1#\n$aStr\n #end if #--\n",
@@ -2214,19 +2289,24 @@ class IfDirective(OutputTest):
"""#if block using $zero"""
self.verify("#if $zero\n$aStr\n#end if\n",
"")
+
def test6(self):
"""#if block using $emptyString"""
self.verify("#if $emptyString\n$aStr\n#end if\n",
"")
+
def test7(self):
"""#if ... #else ... block using a $emptyString"""
- self.verify("#if $emptyString\n$anInt\n#else\n$anInt - $anInt\n#end if",
- "1 - 1\n")
+ self.verify(
+ "#if $emptyString\n$anInt\n#else\n$anInt - $anInt\n#end if",
+ "1 - 1\n")
def test8(self):
"""#if ... #elif ... #else ... block using a $emptyString"""
- self.verify("#if $emptyString\n$c\n#elif $numOne\n$numOne\n#else\n$c - $c\n#end if",
- "1\n")
+ self.verify(
+ "#if $emptyString\n$c\n"
+ "#elif $numOne\n$numOne\n#else\n$c - $c\n#end if",
+ "1\n")
def test9(self):
"""#if 'not' test, with #slurp"""
@@ -2247,7 +2327,9 @@ class IfDirective(OutputTest):
self.fail('This should barf')
def test11(self):
- """#if block using invalid top-level $(placeholder) syntax - should barf"""
+ """
+ #if block using invalid top-level $(placeholder) syntax - should barf
+ """
for badSyntax in ("#if $*5*emptyString\n$aStr\n#end if\n",
"#if ${emptyString}\n$aStr\n#end if\n",
@@ -2265,9 +2347,10 @@ class IfDirective(OutputTest):
def test12(self):
"""#if ... #else if ... #else ... block using a $emptyString
Same as test 8 but using else if instead of elif"""
- self.verify("#if $emptyString\n$c\n#else if $numOne\n$numOne\n#else\n$c - $c\n#end if",
- "1\n")
-
+ self.verify(
+ "#if $emptyString\n$c\n#else "
+ "if $numOne\n$numOne\n#else\n$c - $c\n#end if",
+ "1\n")
def test13(self):
"""#if# ... #else # ... block using a $emptyString with """
@@ -2286,15 +2369,16 @@ class IfDirective(OutputTest):
def test16(self):
"""single-line #if: with the words 'else' and 'then' in the output """
- self.verify("#if ($anInt and not $emptyString==''' else ''') then $str('then') else 'else'",
- "then")
+ self.verify(
+ "#if ($anInt and not $emptyString==''' else ''') "
+ "then $str('then') else 'else'",
+ "then")
def test17(self):
"""single-line #if: """
self.verify("#if 1: foo\n#if 0: bar\n#if 1: foo",
"foo\nfoo")
-
self.verify("#if 1: foo\n#if 0: bar\n#if 1: foo",
"foo\nfoo")
@@ -2309,6 +2393,7 @@ class IfDirective(OutputTest):
self.verify("#if 0: foo\n#elif 0: bar\n#else: blarg\n",
"blarg\n")
+
class UnlessDirective(OutputTest):
def test1(self):
@@ -2325,7 +2410,6 @@ class UnlessDirective(OutputTest):
self.verify("#unless 1 ##comment\n 1234 \n#end unless",
"")
-
def test2(self):
"""#unless 0"""
self.verify("#unless 0\n 1234 \n#end unless",
@@ -2352,6 +2436,7 @@ class UnlessDirective(OutputTest):
self.verify("#unless 0: 1234", "1234")
self.verify("#unless 0: 1234\n"*2, "1234\n"*2)
+
class PSP(OutputTest):
def searchList(self):
return None
@@ -2367,6 +2452,7 @@ class PSP(OutputTest):
def test3(self):
"""simple <%= None %>"""
self.verify("<%= None %>", "")
+
def test4(self):
"""simple <%= [string] %> + $anInt"""
self.verify("<%= 'blarg' %>$anInt", "blarg1")
@@ -2395,7 +2481,7 @@ class PSP(OutputTest):
def test10(self):
""" Using getVar and write within a PSP """
- self._searchList = [{'me' : 1}]
+ self._searchList = [{'me': 1}]
template = '''This is my template
<%
me = self.getVar('me')
@@ -2410,8 +2496,10 @@ else:
class WhileDirective(OutputTest):
def test1(self):
"""simple #while with a counter"""
- self.verify("#set $i = 0\n#while $i < 5\n$i#slurp\n#set $i += 1\n#end while",
- "01234")
+ self.verify(
+ "#set $i = 0\n#while $i < 5\n$i#slurp\n#set $i += 1\n#end while",
+ "01234")
+
class ContinueDirective(OutputTest):
def test1(self):
@@ -2425,7 +2513,7 @@ class ContinueDirective(OutputTest):
$i#slurp
#set $i += 1
#end while""",
- "0124")
+ "0124")
def test2(self):
"""#continue with a #for"""
@@ -2435,12 +2523,14 @@ $i#slurp
#end if
$i#slurp
#end for""",
- "0124")
+ "0124")
+
class BreakDirective(OutputTest):
def test1(self):
"""#break with a #while"""
- self.verify("""#set $i = 0
+ self.verify("""\
+#set $i = 0
#while $i < 5
#if $i == 3
#break
@@ -2448,17 +2538,18 @@ class BreakDirective(OutputTest):
$i#slurp
#set $i += 1
#end while""",
- "012")
+ "012")
def test2(self):
"""#break with a #for"""
- self.verify("""#for $i in range(5)
+ self.verify("""\
+#for $i in range(5)
#if $i == 3
#break
#end if
$i#slurp
#end for""",
- "012")
+ "012")
class TryDirective(OutputTest):
@@ -2480,23 +2571,24 @@ class TryDirective(OutputTest):
Should gobble
"""
- self.verify(" #try \n #raise ValueError \n #except \nblarg\n #end try",
- "blarg\n")
-
+ self.verify(
+ " #try \n #raise ValueError \n #except \nblarg\n #end try",
+ "blarg\n")
def test4(self):
"""#try / #except with #raise + WS and leading text
Shouldn't gobble
"""
- self.verify("--#try \n #raise ValueError \n #except \nblarg\n #end try#--",
- "--\nblarg\n --")
+ self.verify(
+ "--#try \n #raise ValueError \n #except \nblarg\n #end try#--",
+ "--\nblarg\n --")
def test5(self):
"""nested #try / #except with #raise
"""
- self.verify(
-"""#try
+ self.verify("""\
+#try
#raise ValueError
#except
#try
@@ -2504,9 +2596,10 @@ class TryDirective(OutputTest):
#except
blarg
#end try
-#end try""",
+#end try""", # noqa
"blarg\n")
+
class PassDirective(OutputTest):
def test1(self):
"""#pass in a #try / #except block
@@ -2517,8 +2610,10 @@ class PassDirective(OutputTest):
def test2(self):
"""#pass in a #try / #except block + WS
"""
- self.verify(" #try \n #raise ValueError \n #except \n #pass \n #end try",
- "")
+ self.verify(
+ " #try \n #raise ValueError \n "
+ "#except \n #pass \n #end try",
+ "")
class AssertDirective(OutputTest):
@@ -2564,7 +2659,6 @@ class RaiseDirective(OutputTest):
"")
self.assertRaises(ValueError, test)
-
def test3(self):
"""#raise ValueError in #if block
@@ -2574,7 +2668,6 @@ class RaiseDirective(OutputTest):
"blarg\n")
-
class ImportDirective(OutputTest):
def test1(self):
"""#import math
@@ -2655,6 +2748,7 @@ $os.path.exists('.')""",
self.verify("#from math import *\n$pow(1,2) $log10(10)",
"1.0 1.0")
+
class CompilerDirective(OutputTest):
def test1(self):
"""overriding the commentStartToken
@@ -2716,10 +2810,12 @@ $anInt//comment
""",
"1\n1\n")
+
if sys.platform.startswith('java'):
del CompilerDirective
del CompilerSettingsDirective
+
class ExtendsDirective(OutputTest):
def test1(self):
@@ -2731,13 +2827,13 @@ $spacer()
""",
'<img src="spacer.gif" width="1" height="1" alt="" />\n')
-
self.verify("""#from Cheetah.Templates._SkeletonPage import _SkeletonPage
#extends _SkeletonPage
#implements respond(foo=1234)
$spacer()$foo
""",
- '<img src="spacer.gif" width="1" height="1" alt="" />1234\n')
+ '<img src="spacer.gif" width="1" height="1" alt="" />'
+ '1234\n')
def test2(self):
"""#extends Cheetah.Templates.SkeletonPage without #import"""
@@ -2748,7 +2844,9 @@ $spacer()
'<img src="spacer.gif" width="1" height="1" alt="" />\n')
def test3(self):
- """#extends Cheetah.Templates.SkeletonPage.SkeletonPage without #import"""
+ """
+ #extends Cheetah.Templates.SkeletonPage.SkeletonPage without #import
+ """
self.verify("""#extends Cheetah.Templates.SkeletonPage.SkeletonPage
#implements respond
$spacer()
@@ -2784,7 +2882,7 @@ class SuperDirective(OutputTest):
expected = ('this is base foo '
'This is child foo\nthis is base foo '
'super-1234\n super-99')
- assert str(tmpl2()).strip()==expected
+ assert str(tmpl2()).strip() == expected
class ImportantExampleCases(OutputTest):
@@ -2798,11 +2896,12 @@ $sep$letter#slurp
""",
"a, b, c")
+
class FilterDirective(OutputTest):
- convertEOLs=False
+ convertEOLs = False
def _getCompilerSettings(self):
- return {'useFilterArgsInPlaceholders':True}
+ return {'useFilterArgsInPlaceholders': True}
def test1(self):
"""#filter Filter
@@ -2881,12 +2980,6 @@ class EchoDirective(OutputTest):
self.verify("#echo 1234",
"1234")
-class SilentDirective(OutputTest):
- def test1(self):
- """#silent 1234
- """
- self.verify("#silent 1234",
- "")
class ErrorCatcherDirective(OutputTest):
pass
@@ -2924,6 +3017,7 @@ class VarExists(OutputTest): # Template.varExists()
self.verify("#if $varExists('$anInt')\n1234\n#else\n999#end if",
"1234\n")
+
class GetVar(OutputTest): # Template.getVar()
def test1(self):
"""$getVar('$anInt')
@@ -2970,10 +3064,11 @@ class MiscComplexSyntax(OutputTest):
class CGI(OutputTest):
"""CGI scripts with(out) the CGI environment and with(out) GET variables.
"""
- convertEOLs=False
+ convertEOLs = False
def _beginCGI(self):
os.environ['REQUEST_METHOD'] = "GET"
+
def _endCGI(self):
try:
del os.environ['REQUEST_METHOD']
@@ -2981,7 +3076,6 @@ class CGI(OutputTest):
pass
_guaranteeNoCGI = _endCGI
-
def test1(self):
"""A regular template."""
self._guaranteeNoCGI()
@@ -2991,7 +3085,6 @@ class CGI(OutputTest):
"Hello, world!"
self.verify(source, "Hello, world!")
-
def test2(self):
"""A CGI script."""
self._beginCGI()
@@ -3002,13 +3095,13 @@ class CGI(OutputTest):
self.verify(source, "Content-type: text/html\n\nHello, world!")
self._endCGI()
-
def test3(self):
"""A (pseudo) Webware servlet.
This uses the Python syntax escape to set
self._CHEETAH__isControlledByWebKit.
- We could instead do '#silent self._CHEETAH__isControlledByWebKit = True',
+ We could instead do
+ '#silent self._CHEETAH__isControlledByWebKit = True',
taking advantage of the fact that it will compile unchanged as long
as there's no '$' in the statement. (It won't compile with an '$'
because that would convert to a function call, and you can't assign
@@ -3025,7 +3118,6 @@ class CGI(OutputTest):
self.verify(source, "Hello, world!")
self._endCGI()
-
def test4(self):
"""A CGI script with a GET variable."""
self._beginCGI()
@@ -3041,10 +3133,9 @@ class CGI(OutputTest):
self._endCGI()
-
class WhitespaceAfterDirectiveTokens(OutputTest):
def _getCompilerSettings(self):
- return {'allowWhitespaceAfterDirectiveStartToken':True}
+ return {'allowWhitespaceAfterDirectiveStartToken': True}
def test1(self):
self.verify("# for i in range(10): $i",
@@ -3055,14 +3146,12 @@ class WhitespaceAfterDirectiveTokens(OutputTest):
"0123456789")
-
class DefmacroDirective(OutputTest):
def _getCompilerSettings(self):
def aMacro(src):
return '$aStr'
- return {'macroDirectives':{'aMacro':aMacro
- }}
+ return {'macroDirectives': {'aMacro': aMacro}}
def test1(self):
self.verify("""\
@@ -3072,8 +3161,6 @@ class DefmacroDirective(OutputTest):
$i""",
"2")
-
-
self.verify("""\
#defmacro test
#for i in range(10): @src
@@ -3088,8 +3175,8 @@ $i""",
#end defmacro
#test: $i-foo
#for i in range(3): $i""",
- "0-foo\n1-foo\n2-foo\n3-foo\n4-foo\n5-foo\n6-foo\n7-foo\n8-foo\n9-foo\n012")
-
+ "0-foo\n1-foo\n2-foo\n3-foo\n4-foo\n5-foo\n"
+ "6-foo\n7-foo\n8-foo\n9-foo\n012")
self.verify("""\
#defmacro test: #for i in range(10): @src
@@ -3131,7 +3218,7 @@ $i""",
class Indenter(OutputTest):
- convertEOLs=False
+ convertEOLs = False
source = """
public class X
@@ -3201,8 +3288,9 @@ public class X
"""
+
def _getCompilerSettings(self):
- return {'useFilterArgsInPlaceholders':True}
+ return {'useFilterArgsInPlaceholders': True}
def searchList(self): # Inside Indenter class.
class Method:
@@ -3220,25 +3308,28 @@ public class X
##################################################
-## CREATE CONVERTED EOL VERSIONS OF THE TEST CASES
+# CREATE CONVERTED EOL VERSIONS OF THE TEST CASES
if OutputTest._useNewStyleCompilation:
- extraCompileKwArgsForDiffBaseclass = {'baseclass':dict}
+ extraCompileKwArgsForDiffBaseclass = {'baseclass': dict}
else:
- extraCompileKwArgsForDiffBaseclass = {'baseclass':object}
+ extraCompileKwArgsForDiffBaseclass = {'baseclass': object}
def install_eols():
- klasses = [v for v in globals().values() if isinstance(v, type) and issubclass(v, unittest.TestCase)]
+ klasses = [v for v in globals().values()
+ if isinstance(v, type) and issubclass(v, unittest.TestCase)]
for klass in klasses:
name = klass.__name__
if hasattr(klass, 'convertEOLs') and klass.convertEOLs:
- win32Src = r"class %(name)s_Win32EOL(%(name)s): _EOLreplacement = '\r\n'"%locals()
- macSrc = r"class %(name)s_MacEOL(%(name)s): _EOLreplacement = '\r'"%locals()
+ win32Src = r"class %(name)s_Win32EOL(%(name)s): " \
+ r"_EOLreplacement = '\r\n'" % locals()
+ macSrc = r"class %(name)s_MacEOL(%(name)s): " \
+ r"_EOLreplacement = '\r'" % locals()
exec(win32Src, globals())
exec(macSrc, globals())
- src = r"class %(name)s_DiffBaseClass(%(name)s): "%locals()
+ src = r"class %(name)s_DiffBaseClass(%(name)s): " % locals()
src += " _extraCompileKwArgs = extraCompileKwArgsForDiffBaseclass"
exec(src, globals())
@@ -3246,7 +3337,8 @@ def install_eols():
del klass
##################################################
-## if run from the command line ##
+# if run from the command line ##
+
if __name__ == '__main__':
install_eols()
diff --git a/Cheetah/Tests/Template.py b/Cheetah/Tests/Template.py
index 76ca80e..69461be 100755
--- a/Cheetah/Tests/Template.py
+++ b/Cheetah/Tests/Template.py
@@ -1,19 +1,20 @@
#!/usr/bin/env python
-import pdb
-import sys
-import types
import os
import os.path
-import tempfile
+import sys
import shutil
+import tempfile
import unittest
+
from Cheetah.Template import Template
from Cheetah.compat import unicode
+
class TemplateTest(unittest.TestCase):
pass
+
class ClassMethods_compile(TemplateTest):
"""I am using the same Cheetah source for each test to root out clashes
caused by the compile caching in Template.compile().
@@ -21,152 +22,143 @@ class ClassMethods_compile(TemplateTest):
def test_basicUsage(self):
klass = Template.compile(source='$foo')
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
def test_baseclassArg(self):
klass = Template.compile(source='$foo', baseclass=dict)
- t = klass({'foo':1234})
- assert str(t)=='1234'
+ t = klass({'foo': 1234})
+ assert str(t) == '1234'
klass2 = Template.compile(source='$foo', baseclass=klass)
- t = klass2({'foo':1234})
- assert str(t)=='1234'
+ t = klass2({'foo': 1234})
+ assert str(t) == '1234'
- klass3 = Template.compile(source='#implements dummy\n$bar', baseclass=klass2)
- t = klass3({'foo':1234})
- assert str(t)=='1234'
+ klass3 = Template.compile(source='#implements dummy\n$bar',
+ baseclass=klass2)
+ t = klass3({'foo': 1234})
+ assert str(t) == '1234'
klass4 = Template.compile(source='$foo', baseclass='dict')
- t = klass4({'foo':1234})
- assert str(t)=='1234'
+ t = klass4({'foo': 1234})
+ assert str(t) == '1234'
def test_moduleFileCaching(self):
tmpDir = tempfile.mkdtemp()
try:
- #print tmpDir
+ # print tmpDir
assert os.path.exists(tmpDir)
klass = Template.compile(source='$foo',
cacheModuleFilesForTracebacks=True,
cacheDirForModuleFiles=tmpDir)
mod = sys.modules[klass.__module__]
- #print mod.__file__
+ # print mod.__file__
assert os.path.exists(mod.__file__)
- assert os.path.dirname(mod.__file__)==tmpDir
+ assert os.path.dirname(mod.__file__) == tmpDir
finally:
shutil.rmtree(tmpDir, True)
def test_classNameArg(self):
klass = Template.compile(source='$foo', className='foo123')
- assert klass.__name__=='foo123'
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ assert klass.__name__ == 'foo123'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
def test_moduleNameArg(self):
klass = Template.compile(source='$foo', moduleName='foo99')
- mod = sys.modules['foo99']
- assert klass.__name__=='foo99'
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
-
+ assert klass.__name__ == 'foo99'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
klass = Template.compile(source='$foo',
moduleName='foo1',
className='foo2')
- mod = sys.modules['foo1']
- assert klass.__name__=='foo2'
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
-
+ assert klass.__name__ == 'foo2'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
def test_mainMethodNameArg(self):
klass = Template.compile(source='$foo',
className='foo123',
mainMethodName='testMeth')
- assert klass.__name__=='foo123'
- t = klass(namespaces={'foo':1234})
- #print t.generatedClassCode()
- assert str(t)=='1234'
- assert t.testMeth()=='1234'
+ assert klass.__name__ == 'foo123'
+ t = klass(namespaces={'foo': 1234})
+ # print t.generatedClassCode()
+ assert str(t) == '1234'
+ assert t.testMeth() == '1234'
klass = Template.compile(source='$foo',
moduleName='fooXXX',
className='foo123',
mainMethodName='testMeth',
baseclass=dict)
- assert klass.__name__=='foo123'
- t = klass({'foo':1234})
- #print t.generatedClassCode()
- assert str(t)=='1234'
- assert t.testMeth()=='1234'
-
-
+ assert klass.__name__ == 'foo123'
+ t = klass({'foo': 1234})
+ # print t.generatedClassCode()
+ assert str(t) == '1234'
+ assert t.testMeth() == '1234'
def test_moduleGlobalsArg(self):
klass = Template.compile(source='$foo',
- moduleGlobals={'foo':1234})
+ moduleGlobals={'foo': 1234})
t = klass()
- assert str(t)=='1234'
+ assert str(t) == '1234'
klass2 = Template.compile(source='$foo', baseclass='Test1',
- moduleGlobals={'Test1':dict})
- t = klass2({'foo':1234})
- assert str(t)=='1234'
+ moduleGlobals={'Test1': dict})
+ t = klass2({'foo': 1234})
+ assert str(t) == '1234'
klass3 = Template.compile(source='$foo', baseclass='Test1',
- moduleGlobals={'Test1':dict, 'foo':1234})
+ moduleGlobals={'Test1': dict, 'foo': 1234})
t = klass3()
- assert str(t)=='1234'
-
+ assert str(t) == '1234'
def test_keepRefToGeneratedCodeArg(self):
klass = Template.compile(source='$foo',
className='unique58',
cacheCompilationResults=False,
keepRefToGeneratedCode=False)
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
assert not t.generatedModuleCode()
-
klass2 = Template.compile(source='$foo',
- className='unique58',
- keepRefToGeneratedCode=True)
- t = klass2(namespaces={'foo':1234})
- assert str(t)=='1234'
+ className='unique58',
+ keepRefToGeneratedCode=True)
+ t = klass2(namespaces={'foo': 1234})
+ assert str(t) == '1234'
assert t.generatedModuleCode()
klass3 = Template.compile(source='$foo',
- className='unique58',
- keepRefToGeneratedCode=False)
- t = klass3(namespaces={'foo':1234})
- assert str(t)=='1234'
+ className='unique58',
+ keepRefToGeneratedCode=False)
+ t = klass3(namespaces={'foo': 1234})
+ assert str(t) == '1234'
# still there as this class came from the cache
assert t.generatedModuleCode()
-
def test_compilationCache(self):
klass = Template.compile(source='$foo',
className='unique111',
cacheCompilationResults=False)
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
assert not klass._CHEETAH_isInCompilationCache
-
# this time it will place it in the cache
klass = Template.compile(source='$foo',
className='unique111',
cacheCompilationResults=True)
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
assert klass._CHEETAH_isInCompilationCache
# by default it will be in the cache
klass = Template.compile(source='$foo',
className='unique999099')
- t = klass(namespaces={'foo':1234})
- assert str(t)=='1234'
+ t = klass(namespaces={'foo': 1234})
+ assert str(t) == '1234'
assert klass._CHEETAH_isInCompilationCache
@@ -174,36 +166,37 @@ class ClassMethods_subclass(TemplateTest):
def test_basicUsage(self):
klass = Template.compile(source='$foo', baseclass=dict)
- t = klass({'foo':1234})
- assert str(t)=='1234'
+ t = klass({'foo': 1234})
+ assert str(t) == '1234'
klass2 = klass.subclass(source='$foo')
- t = klass2({'foo':1234})
- assert str(t)=='1234'
+ t = klass2({'foo': 1234})
+ assert str(t) == '1234'
klass3 = klass2.subclass(source='#implements dummy\n$bar')
- t = klass3({'foo':1234})
- assert str(t)=='1234'
+ t = klass3({'foo': 1234})
+ assert str(t) == '1234'
class Preprocessors(TemplateTest):
def test_basicUsage1(self):
- src='''\
+ src = '''\
%set foo = @a
$(@foo*10)
@a'''
src = '\n'.join([ln.strip() for ln in src.splitlines()])
- preprocessors = {'tokens':'@ %',
- 'namespaces':{'a':99}
+ preprocessors = {'tokens': '@ %',
+ 'namespaces': {'a': 99}
}
klass = Template.compile(src, preprocessors=preprocessors)
- assert str(klass())=='990\n99'
+ assert str(klass()) == '990\n99'
def test_normalizePreprocessorArgVariants(self):
- src='%set foo = 12\n%%comment\n$(@foo*10)'
+ src = '%set foo = 12\n%%comment\n$(@foo*10)'
- class Settings1: tokens = '@ %'
+ class Settings1:
+ tokens = '@ %'
Settings1 = Settings1()
from Cheetah.Template import TemplatePreprocessor
@@ -222,23 +215,22 @@ class Preprocessors(TemplateTest):
}
for arg in ['@ %',
- {'tokens':'@ %'},
- {'compilerSettings':compilerSettings},
- {'compilerSettings':compilerSettings,
- 'templateInitArgs':{}},
- {'tokens':'@ %',
- 'templateAPIClass':TemplateSubclass},
+ {'tokens': '@ %'},
+ {'compilerSettings': compilerSettings},
+ {'compilerSettings': compilerSettings,
+ 'templateInitArgs': {}},
+ {'tokens': '@ %',
+ 'templateAPIClass': TemplateSubclass},
Settings1,
preprocObj,
preprocFunc,
]:
klass = Template.compile(src, preprocessors=arg)
- assert str(klass())=='120'
-
+ assert str(klass()) == '120'
def test_complexUsage(self):
- src='''\
+ src = '''\
%set foo = @a
%def func1: #def func(arg): $arg("***")
%% comment
@@ -247,31 +239,31 @@ class Preprocessors(TemplateTest):
$func(lambda x:c"--$x--@a")'''
src = '\n'.join([ln.strip() for ln in src.splitlines()])
-
- for arg in [{'tokens':'@ %', 'namespaces':{'a':99} },
- {'tokens':'@ %', 'namespaces':{'a':99} },
+ for arg in [{'tokens': '@ %', 'namespaces': {'a': 99}},
+ {'tokens': '@ %', 'namespaces': {'a': 99}},
]:
klass = Template.compile(src, preprocessors=arg)
t = klass()
- assert str(t)=='990\n--***--99'
-
-
+ assert str(t) == '990\n--***--99'
def test_i18n(self):
- src='''\
+ src = '''\
%i18n: This is a $string that needs translation
%i18n id="foo", domain="root": This is a $string that needs translation
'''
src = '\n'.join([ln.strip() for ln in src.splitlines()])
klass = Template.compile(src, preprocessors='@ %', baseclass=dict)
- t = klass({'string':'bit of text'})
- #print str(t), repr(str(t))
- assert str(t)==('This is a bit of text that needs translation\n'*2)[:-1]
+ t = klass({'string': 'bit of text'})
+ # print str(t), repr(str(t))
+ assert str(t) == (
+ 'This is a bit of text that needs translation\n'*2)[:-1]
class TryExceptImportTest(TemplateTest):
def test_FailCase(self):
- ''' Test situation where an inline #import statement will get relocated '''
+ """
+ Test situation where an inline #import statement will get relocated
+ """
source = '''
#def myFunction()
Ahoy!
@@ -283,8 +275,10 @@ class TryExceptImportTest(TemplateTest):
#end def
'''
# This should raise an IndentationError (if the bug exists)
- klass = Template.compile(source=source, compilerSettings={'useLegacyImportMode' : False})
- t = klass(namespaces={'foo' : 1234})
+ klass = Template.compile(
+ source=source, compilerSettings={'useLegacyImportMode': False})
+ t = klass(namespaces={'foo': 1234}) # noqa: F841
+
class ClassMethodSupport(TemplateTest):
def test_BasicDecorator(self):
@@ -297,10 +291,12 @@ class ClassMethodSupport(TemplateTest):
template = Template.compile(source=template)
try:
rc = template.myClassMethod(foo='bar')
- assert rc == '$foo = bar', (rc, 'Template class method didn\'t return what I expected')
+ assert rc == '$foo = bar', \
+ (rc, 'Template class method didn\'t return what I expected')
except AttributeError as ex:
self.fail(ex)
+
class StaticMethodSupport(TemplateTest):
def test_BasicDecorator(self):
template = '''
@@ -312,7 +308,8 @@ class StaticMethodSupport(TemplateTest):
template = Template.compile(source=template)
try:
rc = template.myStaticMethod(foo='bar')
- assert rc == '$foo = bar', (rc, 'Template class method didn\'t return what I expected')
+ assert rc == '$foo = bar', \
+ (rc, 'Template class method didn\'t return what I expected')
except AttributeError as ex:
self.fail(ex)
@@ -344,7 +341,8 @@ class SubclassSearchListTest(TemplateTest):
self.assertEqual(unicode(tmpl), 'When we meet, I say "Hola"')
##################################################
-## if run from the command line ##
+# if run from the command line ##
+
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/Test.py b/Cheetah/Tests/Test.py
index 8eaebdf..3464081 100755
--- a/Cheetah/Tests/Test.py
+++ b/Cheetah/Tests/Test.py
@@ -1,5 +1,5 @@
#!/usr/bin/env python
-'''
+"""
Core module of Cheetah's Unit-testing framework
TODO
@@ -7,8 +7,9 @@ TODO
# combo tests
# negative test cases for expected exceptions
# black-box vs clear-box testing
-# do some tests that run the Template for long enough to check that the refresh code works
-'''
+# do some tests that run the Template for long enough to check
+# that the refresh code works
+"""
import sys
import unittest
@@ -19,7 +20,7 @@ from Cheetah.Tests import NameMapper_pure
from Cheetah.Tests import Misc
from Cheetah.Tests import Filters
from Cheetah.Tests import Template
-from Cheetah.Tests import Cheps
+# from Cheetah.Tests import Cheps
from Cheetah.Tests import Parser
from Cheetah.Tests import Regressions
from Cheetah.Tests import Unicode
@@ -34,7 +35,7 @@ suites = [
unittest.findTestCases(NameMapper_pure),
unittest.findTestCases(Filters),
unittest.findTestCases(Template),
- #unittest.findTestCases(Cheps),
+ # unittest.findTestCases(Cheps),
unittest.findTestCases(Regressions),
unittest.findTestCases(Unicode),
unittest.findTestCases(Misc),
@@ -57,4 +58,3 @@ if __name__ == '__main__':
sys.exit(0)
else:
sys.exit(1)
-
diff --git a/Cheetah/Tests/Unicode.py b/Cheetah/Tests/Unicode.py
index 3c6460f..c574195 100755
--- a/Cheetah/Tests/Unicode.py
+++ b/Cheetah/Tests/Unicode.py
@@ -10,9 +10,9 @@ import tempfile
import unittest
from Cheetah.Template import Template
from Cheetah import CheetahWrapper
-from Cheetah import DummyTransaction
from Cheetah.compat import PY2, unicode
+
class CommandLineTest(unittest.TestCase):
def createAndCompile(self, source):
sourcefile = '-'
@@ -41,6 +41,7 @@ class CommandLineTest(unittest.TestCase):
rmtree(__pycache__)
return template
+
class JBQ_UTF8_Test1(unittest.TestCase):
def runTest(self):
t = Template.compile(source="""Main file with |$v|
@@ -56,6 +57,7 @@ class JBQ_UTF8_Test1(unittest.TestCase):
assert unicode(t())
+
class JBQ_UTF8_Test2(unittest.TestCase):
def runTest(self):
t = Template.compile(source="""Main file with |$v|
@@ -87,6 +89,7 @@ class JBQ_UTF8_Test3(unittest.TestCase):
assert unicode(t())
+
class JBQ_UTF8_Test4(unittest.TestCase):
def runTest(self):
t = Template.compile(source="""#encoding utf-8
@@ -96,6 +99,7 @@ class JBQ_UTF8_Test4(unittest.TestCase):
assert unicode(t())
+
class JBQ_UTF8_Test5(unittest.TestCase):
def runTest(self):
t = Template.compile(source="""#encoding utf-8
@@ -105,6 +109,7 @@ class JBQ_UTF8_Test5(unittest.TestCase):
assert unicode(t())
+
def loadModule(moduleName, path=None):
if path:
assert isinstance(path, list)
@@ -121,6 +126,7 @@ def loadModule(moduleName, path=None):
fp.close()
return mod
+
class JBQ_UTF8_Test6(unittest.TestCase):
def runTest(self):
source = """#encoding utf-8
@@ -132,6 +138,7 @@ class JBQ_UTF8_Test6(unittest.TestCase):
assert unicode(t())
+
class JBQ_UTF8_Test7(CommandLineTest):
def runTest(self):
source = """#encoding utf-8
@@ -143,6 +150,7 @@ class JBQ_UTF8_Test7(CommandLineTest):
assert unicode(template())
+
class JBQ_UTF8_Test8(CommandLineTest):
def testStaticCompile(self):
source = """#encoding utf-8
@@ -161,13 +169,14 @@ $someUnicodeString"""
#set $someUnicodeString = u"Bébé"
$someUnicodeString"""
- template = Template(source = source)
+ template = Template(source=source)
a = unicode(template)
if PY2:
a = a.encode("utf-8")
self.assertEqual("Bébé", a)
+
class EncodeUnicodeCompatTest(unittest.TestCase):
"""
Taken initially from Red Hat's bugzilla #529332
@@ -178,10 +187,12 @@ class EncodeUnicodeCompatTest(unittest.TestCase):
t.var = u"Text with some non-ascii characters: åäö"
rc = t.respond()
- assert isinstance(rc, unicode), ('Template.respond() should return unicode', rc)
+ assert isinstance(rc, unicode), \
+ ('Template.respond() should return unicode', rc)
rc = str(t)
- assert isinstance(rc, str), ('Template.__str__() should return a UTF-8 encoded string', rc)
+ assert isinstance(rc, str), \
+ ('Template.__str__() should return a UTF-8 encoded string', rc)
class Unicode_in_SearchList_Test(CommandLineTest):
@@ -190,7 +201,7 @@ class Unicode_in_SearchList_Test(CommandLineTest):
template = self.createAndCompile(source)
assert template and issubclass(template, Template)
- template = template(searchList=[{'adjective' : u'neat'}])
+ template = template(searchList=[{'adjective': u'neat'}])
assert template.respond()
def test_Thai(self):
@@ -198,17 +209,24 @@ class Unicode_in_SearchList_Test(CommandLineTest):
source = '''This is $foo $adjective'''
template = self.createAndCompile(source)
assert template and issubclass(template, Template)
- template = template(searchList=[{'foo' : 'bar',
- 'adjective' : u'\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a'}])
+ template = template(
+ searchList=[{
+ 'foo': 'bar',
+ 'adjective':
+ u'\u0e22\u0e34\u0e19\u0e14\u0e35\u0e15'
+ u'\u0e49\u0e2d\u0e19\u0e23\u0e31\u0e1a'
+ }])
assert template.respond()
def test_Thai_utf8(self):
- utf8 = '\xe0\xb8\xa2\xe0\xb8\xb4\xe0\xb8\x99\xe0\xb8\x94\xe0\xb8\xb5\xe0\xb8\x95\xe0\xb9\x89\xe0\xb8\xad\xe0\xb8\x99\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x9a'
+ utf8 = '\xe0\xb8\xa2\xe0\xb8\xb4\xe0\xb8\x99\xe0' \
+ '\xb8\x94\xe0\xb8\xb5\xe0\xb8\x95\xe0\xb9\x89\xe0' \
+ '\xb8\xad\xe0\xb8\x99\xe0\xb8\xa3\xe0\xb8\xb1\xe0\xb8\x9a'
source = '''This is $adjective'''
template = self.createAndCompile(source)
assert template and issubclass(template, Template)
- template = template(searchList=[{'adjective' : utf8}])
+ template = template(searchList=[{'adjective': utf8}])
assert template.respond()
@@ -233,24 +251,26 @@ class InlineSpanishTest(unittest.TestCase):
</center>
</body>
</html>
- '''
+ ''' # noqa
if PY2: # In PY3 templates are already unicode
def test_failure(self):
""" Test a template lacking a proper #encoding tag """
- self.assertRaises(UnicodeDecodeError, Template, self.template, searchList=[{'header' : '',
- 'nombre' : '', 'numpedidos_bodega' : '',
- 'numpedidos_noconf' : ''}])
+ self.assertRaises(UnicodeDecodeError, Template, self.template,
+ searchList=[{'header': '',
+ 'nombre': '',
+ 'numpedidos_bodega': '',
+ 'numpedidos_noconf': ''}])
def test_success(self):
""" Test a template with a proper #encoding tag """
template = '#encoding utf-8\n%s' % self.template
- template = Template(template, searchList=[{'header' : '',
- 'nombre' : '', 'numpedidos_bodega' : '',
- 'numpedidos_noconf' : ''}])
+ template = Template(template, searchList=[{'header': '',
+ 'nombre': '',
+ 'numpedidos_bodega': '',
+ 'numpedidos_noconf': ''}])
self.assertTrue(unicode(template))
-
if __name__ == '__main__':
unittest.main()
diff --git a/Cheetah/Tests/xmlrunner.py b/Cheetah/Tests/xmlrunner.py
index 60b8259..9668d8d 100644
--- a/Cheetah/Tests/xmlrunner.py
+++ b/Cheetah/Tests/xmlrunner.py
@@ -33,21 +33,21 @@ class _TestInfo(object):
self._error = None
self._failure = None
-
def print_report(self, stream):
"""Print information about this test case in XML format to the
supplied stream.
"""
- stream.write(' <testcase classname="%(class)s" name="%(method)s" time="%(time).4f">' % \
- {
+ stream.write(
+ ' <testcase classname="%(class)s" name="%(method)s" '
+ 'time="%(time).4f">' % {
"class": self._class,
"method": self._method,
"time": self._time,
})
- if self._failure != None:
+ if self._failure is not None:
self._print_error(stream, 'failure', self._failure)
- if self._error != None:
+ if self._error is not None:
self._print_error(stream, 'error', self._error)
stream.write('</testcase>\n')
@@ -55,8 +55,11 @@ class _TestInfo(object):
"""Print information from a failure or error to the supplied stream."""
text = escape(str(error[1]))
stream.write('\n')
- stream.write(' <%s type="%s">%s\n' \
- % (tagname, issubclass(error[0], Exception) and error[0].__name__ or str(error[0]), text))
+ stream.write(
+ ' <%s type="%s">%s\n'
+ % (tagname,
+ issubclass(error[0], Exception) and
+ error[0].__name__ or str(error[0]), text))
tb_stream = StringIO()
traceback.print_tb(error[2], None, tb_stream)
stream.write(escape(tb_stream.getvalue()))
@@ -64,22 +67,27 @@ class _TestInfo(object):
stream.write(' ')
# Module level functions since Python 2.3 doesn't grok decorators
+
+
def create_success(test, time):
"""Create a _TestInfo instance for a successful test."""
return _TestInfo(test, time)
+
def create_failure(test, time, failure):
"""Create a _TestInfo instance for a failed test."""
info = _TestInfo(test, time)
info._failure = failure
return info
+
def create_error(test, time, error):
"""Create a _TestInfo instance for an erroneous test."""
info = _TestInfo(test, time)
info._error = error
return info
+
class _XMLTestResult(unittest.TestResult):
"""A test result class that stores result as XML.
@@ -128,14 +136,13 @@ class _XMLTestResult(unittest.TestResult):
output and standard error streams must be passed in.a
"""
- stream.write('<testsuite errors="%(e)d" failures="%(f)d" ' % \
- { "e": len(self.errors), "f": len(self.failures) })
- stream.write('name="%(n)s" tests="%(t)d" time="%(time).3f">\n' % \
- {
- "n": self._test_name,
- "t": self.testsRun,
- "time": time_taken,
- })
+ stream.write('<testsuite errors="%(e)d" failures="%(f)d" ' %
+ {"e": len(self.errors), "f": len(self.failures)})
+ stream.write('name="%(n)s" tests="%(t)d" time="%(time).3f">\n' % {
+ "n": self._test_name,
+ "t": self.testsRun,
+ "time": time_taken,
+ })
for info in self._tests:
info.print_report(stream)
stream.write(' <system-out><![CDATA[%s]]></system-out>\n' % out)
@@ -165,11 +172,11 @@ class XMLTestRunner(object):
"""Run the given test case or test suite."""
class_ = test.__class__
classname = class_.__module__ + "." + class_.__name__
- if self._stream == None:
+ if self._stream is None:
filename = "TEST-%s.xml" % classname
if self._filename:
filename = self._filename
- stream = file(os.path.join(self._path, filename), "w")
+ stream = open(os.path.join(self._path, filename), "w")
stream.write('<?xml version="1.0" encoding="utf-8"?>\n')
else:
stream = self._stream
@@ -199,7 +206,7 @@ class XMLTestRunner(object):
time_taken = time.time() - start_time
result.print_report(stream, time_taken, out_s, err_s)
- if self._stream == None:
+ if self._stream is None:
stream.close()
return result
@@ -207,11 +214,11 @@ class XMLTestRunner(object):
def _set_path(self, path):
self._path = path
- path = property(lambda self: self._path, _set_path, None,
- """The path where the XML files are stored.
+ path = property(
+ lambda self: self._path, _set_path, None,
+ """The path where the XML files are stored
- This property is ignored when the XML file is written to a file
- stream.""")
+This property is ignored when the XML file is written to a file stream.""")
class XMLTestRunnerTest(unittest.TestCase):
@@ -237,8 +244,11 @@ class XMLTestRunnerTest(unittest.TestCase):
got = re.sub(r'time="\d+\.\d+"', 'time="0.000"', got)
# Likewise, replace all failure and error messages by a simple "Foobar"
# string.
- got = re.sub(r'(?s)<failure (.*?)>.*?</failure>', r'<failure \1>Foobar</failure>', got)
- got = re.sub(r'(?s)<error (.*?)>.*?</error>', r'<error \1>Foobar</error>', got)
+ got = re.sub(
+ r'(?s)<failure (.*?)>.*?</failure>',
+ r'<failure \1>Foobar</failure>', got)
+ got = re.sub(
+ r'(?s)<error (.*?)>.*?</error>', r'<error \1>Foobar</error>', got)
self.assertEqual(expected, got)
@@ -253,7 +263,7 @@ class XMLTestRunnerTest(unittest.TestCase):
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
-""")
+""") # noqa
def test_success(self):
"""Regression test: Check whether a test run with a successful test
@@ -268,7 +278,7 @@ class XMLTestRunnerTest(unittest.TestCase):
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
-""")
+""") # noqa
def test_failure(self):
"""Regression test: Check whether a test run with a failing test
@@ -285,7 +295,7 @@ class XMLTestRunnerTest(unittest.TestCase):
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
-""")
+""") # noqa
def test_error(self):
"""Regression test: Check whether a test run with a erroneous test
@@ -302,7 +312,7 @@ class XMLTestRunnerTest(unittest.TestCase):
<system-out><![CDATA[]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
-""")
+""") # noqa
def test_stdout_capture(self):
"""Regression test: Check whether a test run with output to stdout
@@ -318,7 +328,7 @@ class XMLTestRunnerTest(unittest.TestCase):
]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
-""")
+""") # noqa
def test_stderr_capture(self):
"""Regression test: Check whether a test run with output to stderr
@@ -334,7 +344,7 @@ class XMLTestRunnerTest(unittest.TestCase):
<system-err><![CDATA[Test
]]></system-err>
</testsuite>
-""")
+""") # noqa
class NullStream(object):
"""A file-like object that discards everything written to it."""
@@ -372,6 +382,7 @@ class XMLTestProgram(unittest.TestProgram):
self.testRunner = XMLTestRunner()
unittest.TestProgram.runTests(self)
+
main = XMLTestProgram
diff --git a/Cheetah/Tools/CGITemplate.py b/Cheetah/Tools/CGITemplate.py
index b859769..0deb049 100644
--- a/Cheetah/Tools/CGITemplate.py
+++ b/Cheetah/Tools/CGITemplate.py
@@ -28,13 +28,13 @@ single-inheritance model.
import os
from Cheetah.Template import Template
+
class CGITemplate(Template):
"""Methods useful in CGI scripts.
Any class that inherits this mixin must also inherit Cheetah.Servlet.
"""
-
def cgiHeaders(self):
"""Outputs the CGI headers if this is a CGI script.
@@ -44,14 +44,11 @@ class CGITemplate(Template):
if self.isCgi():
return self.cgiHeadersHook()
-
-
def cgiHeadersHook(self):
"""Override if you want to customize the CGI headers.
"""
return "Content-type: text/html\n\n"
-
def isCgi(self):
"""Is this a CGI script?
"""
@@ -60,5 +57,4 @@ class CGITemplate(Template):
return env and not wk
-
# vim: shiftwidth=4 tabstop=4 expandtab
diff --git a/Cheetah/Tools/MondoReport.py b/Cheetah/Tools/MondoReport.py
index 7642a25..bc7d476 100644
--- a/Cheetah/Tools/MondoReport.py
+++ b/Cheetah/Tools/MondoReport.py
@@ -27,50 +27,56 @@ except ImportError:
if hasattr(obj, name):
return getattr(obj, name)
else:
- return obj[name] # Raises KeyError.
+ return obj[name] # Raises KeyError.
+
+########################################
+# PUBLIC GENERIC FUNCTIONS
-########## PUBLIC GENERIC FUNCTIONS ##############################
class NegativeError(ValueError):
pass
+
def isNumeric(v):
return isinstance(v, (int, float))
+
def isNonNegative(v):
ret = isNumeric(v)
if ret and v < 0:
raise NegativeError(v)
+
def isNotNone(v):
return v is not None
+
def Roman(n):
- n = int(n) # Raises TypeError.
+ n = int(n) # Raises TypeError.
if n < 1:
raise ValueError("roman numeral for zero or negative undefined: " + n)
roman = ''
while n >= 1000:
- n = n - 1000
- roman = roman + 'M'
+ n = n - 1000
+ roman = roman + 'M'
while n >= 500:
- n = n - 500
- roman = roman + 'D'
+ n = n - 500
+ roman = roman + 'D'
while n >= 100:
- n = n - 100
- roman = roman + 'C'
+ n = n - 100
+ roman = roman + 'C'
while n >= 50:
- n = n - 50
- roman = roman + 'L'
+ n = n - 50
+ roman = roman + 'L'
while n >= 10:
- n = n - 10
- roman = roman + 'X'
+ n = n - 10
+ roman = roman + 'X'
while n >= 5:
- n = n - 5
- roman = roman + 'V'
+ n = n - 5
+ roman = roman + 'V'
while n < 5 and n >= 1:
- n = n - 1
- roman = roman + 'I'
+ n = n - 1
+ roman = roman + 'I'
roman = roman.replace('DCCCC', 'CM')
roman = roman.replace('CCCC', 'CD')
roman = roman.replace('LXXXX', 'XC')
@@ -83,15 +89,17 @@ def Roman(n):
def sum(lis):
return reduce(operator.add, lis, 0)
+
def mean(lis):
"""Always returns a floating-point number.
"""
lis_len = len(lis)
if lis_len == 0:
- return 0.00 # Avoid ZeroDivisionError (not raised for floats anyway)
- total = float( sum(lis) )
+ return 0.00 # Avoid ZeroDivisionError (not raised for floats anyway)
+ total = float(sum(lis))
return total / lis_len
+
def median(lis):
lis = sorted(lis[:])
return lis[int(len(lis)/2)]
@@ -100,17 +108,19 @@ def median(lis):
def variance(lis):
raise NotImplementedError()
+
def variance_n(lis):
raise NotImplementedError()
+
def standardDeviation(lis):
raise NotImplementedError()
+
def standardDeviation_n(lis):
raise NotImplementedError()
-
class IndexFormats:
"""Eight ways to display a subscript index.
("Fifty ways to leave your lover....")
@@ -157,8 +167,9 @@ class IndexFormats:
return self._item
+########################################
+# PRIVATE CLASSES
-########## PRIVATE CLASSES ##############################
class ValuesGetterMixin:
def __init__(self, origList):
@@ -178,7 +189,7 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
"""The statistics that depend on the current record.
"""
def __init__(self, origList, index):
- record = origList[index] # Raises IndexError.
+ record = origList[index] # Raises IndexError.
IndexFormats.__init__(self, index, record)
ValuesGetterMixin.__init__(self, origList)
@@ -192,7 +203,7 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
return self._index >= len(self._origList) - 1
def _firstOrLastValue(self, field, currentIndex, otherIndex):
- currentValue = self._origList[currentIndex] # Raises IndexError.
+ currentValue = self._origList[currentIndex] # Raises IndexError.
try:
otherValue = self._origList[otherIndex]
except IndexError:
@@ -210,7 +221,8 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
# firstPage and lastPage not implemented. Needed?
- def percentOfTotal(self, field=None, suffix='%', default='N/A', decimals=2):
+ def percentOfTotal(self, field=None, suffix='%',
+ default='N/A', decimals=2):
rec = self._origList[self._index]
if field:
val = lookup_func(rec, field)
@@ -221,7 +233,7 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
except NegativeError:
return default
total = sum(lis)
- if total == 0.00: # Avoid ZeroDivisionError.
+ if total == 0.00: # Avoid ZeroDivisionError.
return default
val = float(val)
try:
@@ -233,11 +245,11 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
else:
percent = round(percent, decimals)
if suffix:
- return str(percent) + suffix # String.
+ return str(percent) + suffix # String.
else:
- return percent # Numeric.
+ return percent # Numeric.
- def __call__(self): # Overrides IndexFormats.__call__
+ def __call__(self): # Overrides IndexFormats.__call__
"""This instance is not callable, so we override the super method.
"""
raise NotImplementedError()
@@ -270,45 +282,53 @@ class RecordStats(IndexFormats, ValuesGetterMixin):
def summary(self):
raise NotImplementedError()
-
-
def _prevNextHelper(self, start, end, size, orphan, sequence):
"""Copied from Zope's DT_InSV.py's "opt" function.
"""
if size < 1:
if start > 0 and end > 0 and end >= start:
- size=end+1-start
- else: size=7
+ size = end + 1 - start
+ else:
+ size = 7
if start > 0:
- try: sequence[start-1]
- except: start=len(sequence)
+ try:
+ sequence[start - 1]
+ except Exception:
+ start = len(sequence)
# if start > l: start=l
if end > 0:
- if end < start: end=start
+ if end < start:
+ end = start
else:
- end=start+size-1
- try: sequence[end+orphan-1]
- except: end=len(sequence)
+ end = start + size - 1
+ try:
+ sequence[end + orphan - 1]
+ except Exception:
+ end = len(sequence)
# if l - end < orphan: end=l
elif end > 0:
- try: sequence[end-1]
- except: end=len(sequence)
+ try:
+ sequence[end - 1]
+ except Exception:
+ end = len(sequence)
# if end > l: end=l
- start=end+1-size
- if start - 1 < orphan: start=1
+ start = end + 1 - size
+ if start - 1 < orphan:
+ start = 1
else:
- start=1
- end=start+size-1
- try: sequence[end+orphan-1]
- except: end=len(sequence)
+ start = 1
+ end = start+size-1
+ try:
+ sequence[end+orphan-1]
+ except Exception:
+ end = len(sequence)
# if l - end < orphan: end=l
return start, end, size
-
class Summary(ValuesGetterMixin):
"""The summary statistics, that don't depend on the current record.
"""
@@ -327,11 +347,11 @@ class Summary(ValuesGetterMixin):
def min(self, field=None):
lis = self._getValues(field, isNotNone)
- return min(lis) # Python builtin function min.
+ return min(lis) # Python builtin function min.
def max(self, field=None):
lis = self._getValues(field, isNotNone)
- return max(lis) # Python builtin function max.
+ return max(lis) # Python builtin function max.
def mean(self, field=None):
"""Always returns a floating point number.
@@ -346,16 +366,16 @@ class Summary(ValuesGetterMixin):
return median(lis)
def variance(self, field=None):
- raiseNotImplementedError()
+ raise NotImplementedError()
def variance_n(self, field=None):
- raiseNotImplementedError()
+ raise NotImplementedError()
def standardDeviation(self, field=None):
- raiseNotImplementedError()
+ raise NotImplementedError()
def standardDeviation_n(self, field=None):
- raiseNotImplementedError()
+ raise NotImplementedError()
class PrevNextPage:
@@ -366,7 +386,8 @@ class PrevNextPage:
self.length = size
-########## MAIN PUBLIC CLASS ##############################
+########################################
+# MAIN PUBLIC CLASS
class MondoReport:
_RecordStatsClass = RecordStats
_SummaryClass = Summary
@@ -382,9 +403,8 @@ class MondoReport:
if orphan != 0:
raise NotImplementedError("non-zero orphan")
origList = self._origList
- origList_len = len(origList)
start = max(0, start)
- end = min( start + size, len(self._origList) )
+ end = min(start + size, len(self._origList))
mySlice = origList[start:end]
ret = []
for rel in range(size):
@@ -396,17 +416,16 @@ class MondoReport:
ret.append(tup)
return ret
-
batch = page
def all(self):
origList_len = len(self._origList)
return self.page(origList_len, 0, 0, 0)
-
def summary(self):
return self._SummaryClass(self._origList)
+
"""
**********************************
Return a pageful of records from a sequence, with statistics.
@@ -431,7 +450,8 @@ class MondoReport:
end = min(start + size, origlist_len)
ret = []
# widow, orphan calculation: adjust 'start' and 'end' up and down,
- # Set 'widow', 'orphan', 'first_nonwidow', 'first_nonorphan' attributes.
+ # set 'widow', 'orphan', 'first_nonwidow',
+ # 'first_nonorphan' attributes.
for i in range(start, end):
o = origlist[i]
b = Batch(origlist, size, i)
diff --git a/Cheetah/Tools/RecursiveNull.py b/Cheetah/Tools/RecursiveNull.py
index af97e88..bebf5bb 100644
--- a/Cheetah/Tools/RecursiveNull.py
+++ b/Cheetah/Tools/RecursiveNull.py
@@ -7,15 +7,20 @@ This module was contributed by Ian Bicking.
"""
import sys
+
class RecursiveNull(object):
def __getattr__(self, attr):
return self
+
def __getitem__(self, item):
return self
+
def __call__(self, *args, **kwargs):
return self
+
def __str__(self):
return ''
+
def __repr__(self):
return ''
if sys.version_info[0] >= 3:
@@ -24,11 +29,14 @@ class RecursiveNull(object):
else:
def __nonzero__(self):
return 0
+
def __eq__(self, x):
if x:
return False
return True
+
def __ne__(self, x):
return x and True or False
+
del sys
diff --git a/Cheetah/Tools/SiteHierarchy.py b/Cheetah/Tools/SiteHierarchy.py
index 6c946f0..a1c6f73 100644
--- a/Cheetah/Tools/SiteHierarchy.py
+++ b/Cheetah/Tools/SiteHierarchy.py
@@ -7,22 +7,22 @@ representing further depth to the hierarchy. See the end of the file for an
example hierarchy.
Use Hierarchy(contents, currentURL), where contents is this hierarchy, and
-currentURL is the position you are currently in. The menubar and crumbs methods
-give you the HTML output.
+currentURL is the position you are currently in.
+The menubar and crumbs methods give you the HTML output.
There are methods you can override to customize the HTML output.
"""
##################################################
-## DEPENDENCIES
-import string
+# DEPENDENCIES
try:
from cStringIO import StringIO
except ImportError:
from StringIO import StringIO
##################################################
-## CLASSES
+# CLASSES
+
class Hierarchy:
def __init__(self, hierarchy, currentURL, prefix='', menuCSSClass=None,
@@ -44,10 +44,9 @@ class Hierarchy:
self._crumbCSSClass = ' class="%s"' % crumbCSSClass
else:
self._crumbCSSClass = ''
- self._prefix=prefix
-
+ self._prefix = prefix
- ## Main output methods
+ # Main output methods
def menuList(self, menuCSSClass=None):
"""An indented menu list"""
@@ -67,8 +66,8 @@ class Hierarchy:
path = []
pos = self._contents
while True:
- ## This is not the fastest algorithm, I'm afraid.
- ## But it probably won't be for a huge hierarchy anyway.
+ # This is not the fastest algorithm, I'm afraid.
+ # But it probably won't be for a huge hierarchy anyway.
foundAny = False
path.append(pos[0])
for item in pos[1:]:
@@ -88,13 +87,13 @@ class Hierarchy:
map(lambda x, self=self: self.crumbLink(x[0], x[1]), path)) + \
self.crumbTerminator()
- ## Methods to control the Aesthetics
+ # Methods to control the Aesthetics
# - override these methods for your own look
def menuLink(self, url, text, indent):
if url == self._currentURL or self._prefix + url == self._currentURL:
return '%s<B%s>%s</B> <BR>\n' % ('&nbsp;'*2*indent,
- self._menuCSSClass, text)
+ self._menuCSSClass, text)
else:
return '%s<A HREF="%s%s"%s>%s</A> <BR>\n' % \
('&nbsp;'*2*indent, self._prefix, url,
@@ -117,7 +116,7 @@ class Hierarchy:
"""When you are at the homepage"""
return ''
- ## internal methods
+ # internal methods
def _menubarRecurse(self, contents, indent, stream):
if isinstance(contents, tuple):
@@ -139,27 +138,29 @@ class Hierarchy:
return True
return False
##################################################
-## from the command line
+# from the command line
+
if __name__ == '__main__':
- hierarchy = [('/', 'home'),
- ('/about', 'About Us'),
- [('/services', 'Services'),
- [('/services/products', 'Products'),
- ('/services/products/widget', 'The Widget'),
- ('/services/products/wedge', 'The Wedge'),
- ('/services/products/thimble', 'The Thimble'),
- ],
- ('/services/prices', 'Prices'),
- ],
- ('/contact', 'Contact Us'),
- ]
+ hierarchy = [
+ ('/', 'home'),
+ ('/about', 'About Us'),
+ [('/services', 'Services'),
+ [('/services/products', 'Products'),
+ ('/services/products/widget', 'The Widget'),
+ ('/services/products/wedge', 'The Wedge'),
+ ('/services/products/thimble', 'The Thimble'),
+ ],
+ ('/services/prices', 'Prices'),
+ ],
+ ('/contact', 'Contact Us'),
+ ]
for url in ['/', '/services', '/services/products/widget', '/contact']:
print('<p>', '='*50)
print('<br> %s: <br>\n' % url)
- n = Hierarchy(hierarchy, url, menuCSSClass='menu', crumbCSSClass='crumb',
- prefix='/here')
+ n = Hierarchy(hierarchy, url, menuCSSClass='menu',
+ crumbCSSClass='crumb', prefix='/here')
print(n.menuList())
print('<p>', '-'*50)
print(n.crumbs())
diff --git a/Cheetah/Tools/turbocheetah/cheetahsupport.py b/Cheetah/Tools/turbocheetah/cheetahsupport.py
index 743f6fa..b7e77c3 100644
--- a/Cheetah/Tools/turbocheetah/cheetahsupport.py
+++ b/Cheetah/Tools/turbocheetah/cheetahsupport.py
@@ -1,10 +1,13 @@
"Template support for Cheetah"
-import sys, os, imp
+import imp
+import os
+import sys
from Cheetah import Compiler
import pkg_resources
+
def _recompile_template(package, basename, tfile, classname):
tmpl = pkg_resources.resource_string(package, "%s.tmpl" % basename)
c = Compiler.Compiler(source=tmpl, mainClassName='GenTemplate')
@@ -20,6 +23,7 @@ def _recompile_template(package, basename, tfile, classname):
sys.modules[classname] = mod
return mod
+
class TurboCheetah:
extension = "tmpl"
@@ -38,7 +42,8 @@ class TurboCheetah:
Template files must end in ".tmpl" and be in legitimate packages.
"""
- given = len([_f for _f in (template, template_string, template_file) if _f])
+ given = len(
+ [_f for _f in (template, template_string, template_file) if _f])
if given > 1:
raise TypeError(
"You may give only one of template, template_string, and "
@@ -69,7 +74,7 @@ class TurboCheetah:
tfile = pkg_resources.resource_filename(package,
"%s.%s" %
(basename,
- self.extension))
+ self.extension))
if classname in ct:
mtime = os.stat(tfile).st_mtime
if ct[classname] != mtime:
diff --git a/Cheetah/Tools/turbocheetah/tests/test_template.py b/Cheetah/Tools/turbocheetah/tests/test_template.py
index ab18e3e..045e5f9 100644
--- a/Cheetah/Tools/turbocheetah/tests/test_template.py
+++ b/Cheetah/Tools/turbocheetah/tests/test_template.py
@@ -8,6 +8,7 @@ values = {
'one': 1,
}
+
def test_normal():
plugin = TurboCheetah()
# Make sure a simple test works:
@@ -17,6 +18,7 @@ def test_normal():
s = plugin.render(values, template='turbocheetah.tests.import_inherit')
assert s.strip() == 'Inherited: import'
+
def test_path():
plugin = TurboCheetah()
plugin.search_path = [here]
@@ -27,6 +29,7 @@ def test_path():
s = plugin.render(values, template_file='sub/master')
assert s.strip() == 'sub1: 1'
+
def test_search():
plugin = TurboCheetah()
plugin.search_path = [os.path.join(here, 'sub'),
@@ -54,6 +57,7 @@ def test_search():
s = plugin.render(values, template_file='page_over')
assert s.strip() == 'SUB: sub content'
+
def test_string():
# Make sure simple string evaluation works:
plugin = TurboCheetah()
@@ -63,4 +67,3 @@ def test_string():
plugin.search_path = [here]
s = plugin.render(values, template_string="#extends inherit_from\ns value")
assert s.strip() == 'inherit: s value'
-
diff --git a/Cheetah/Unspecified.py b/Cheetah/Unspecified.py
index f25b068..652c6c9 100644
--- a/Cheetah/Unspecified.py
+++ b/Cheetah/Unspecified.py
@@ -4,6 +4,7 @@ except ImportError:
class _Unspecified:
def __repr__(self):
return 'Unspecified'
+
def __str__(self):
return 'Unspecified'
Unspecified = _Unspecified()
diff --git a/Cheetah/Utils/Indenter.py b/Cheetah/Utils/Indenter.py
index c3df179..c722040 100644
--- a/Cheetah/Utils/Indenter.py
+++ b/Cheetah/Utils/Indenter.py
@@ -11,11 +11,12 @@ soon be changed somewhat.
"""
import re
-import sys
+
def indentize(source):
return IndentProcessor().process(source)
+
class IndentProcessor(object):
"""Preprocess #indent tags."""
LINE_SEP = '\n'
@@ -43,7 +44,7 @@ class IndentProcessor(object):
for line in _txt.splitlines():
match = self.INDENT_DIR.match(line)
if match:
- #is indention directive
+ # is indention directive
args = match.group(self.ARGS).strip()
if args == self.ON:
line = "#silent $self._CHEETAH__indenter.on()"
@@ -55,10 +56,14 @@ class IndentProcessor(object):
line = "#silent $self._CHEETAH__indenter.dec()"
elif args.startswith(self.SET):
level = int(args[1:])
- line = "#silent $self._CHEETAH__indenter.setLevel(%(level)d)" % {"level":level}
+ line = "#silent " \
+ "$self._CHEETAH__indenter.setLevel(%(level)d)" \
+ % {"level": level}
elif args.startswith('chars'):
self.indentChars = eval(args.split('=')[1])
- line = "#silent $self._CHEETAH__indenter.setChars(%(level)d)" % {"level":level}
+ line = "#silent " \
+ "$self._CHEETAH__indenter.setChars(%(level)d)" \
+ % {"level": level}
elif args.startswith(self.PUSH):
line = "#silent $self._CHEETAH__indenter.push()"
elif args.startswith(self.POP):
@@ -66,17 +71,21 @@ class IndentProcessor(object):
else:
match = self.DIRECTIVE.match(line)
if not match:
- #is not another directive
+ # is not another directive
match = self.WHITESPACES.match(line)
if match:
size = len(match.group("ws").expandtabs(4))
- line = ("${self._CHEETAH__indenter.indent(%(size)d)}" % {"size":size}) + line.lstrip()
+ line = (
+ "${self._CHEETAH__indenter.indent(%(size)d)}"
+ % {"size": size}) \
+ + line.lstrip()
else:
line = "${self._CHEETAH__indenter.indent(0)}" + line
result.append(line)
return self.LINE_SEP.join(result)
+
class Indenter(object):
"""
A class that keeps track of the current indentation level.
@@ -89,17 +98,22 @@ class Indenter(object):
def on(self):
self.On = 1
+
def off(self):
self.On = 0
+
def inc(self):
self.Level += 1
+
def dec(self):
"""decrement can only be applied to values greater zero
values below zero don't make any sense at all!"""
if self.Level > 0:
self.Level -= 1
+
def push(self):
self.LevelStack.append(self.Level)
+
def pop(self):
"""the levestack can not become -1. any attempt to do so
sets the level to 0!"""
@@ -107,6 +121,7 @@ class Indenter(object):
self.Level = self.LevelStack.pop()
else:
self.Level = 0
+
def setLevel(self, _level):
"""the leve can't be less than zero. any attempt to do so
sets the level automatically to zero!"""
@@ -114,10 +129,11 @@ class Indenter(object):
self.Level = 0
else:
self.Level = _level
+
def setChar(self, _chars):
self.Chars = _chars
+
def indent(self, _default=0):
if self.On:
return self.Chars * self.Level
return " " * _default
-
diff --git a/Cheetah/Utils/Misc.py b/Cheetah/Utils/Misc.py
index b9cd58a..a046f5f 100644
--- a/Cheetah/Utils/Misc.py
+++ b/Cheetah/Utils/Misc.py
@@ -5,12 +5,14 @@ import os # Used in mkdirsWithPyInitFile.
import sys # Used in die.
##################################################
-## MISCELLANEOUS FUNCTIONS
+# MISCELLANEOUS FUNCTIONS
+
def die(reason):
sys.stderr.write(reason + '\n')
sys.exit(1)
+
def useOrRaise(thing, errmsg=''):
"""Raise 'thing' if it's a subclass of Exception. Otherwise return it.
@@ -60,7 +62,7 @@ def mkdirsWithPyInitFiles(path):
if not os.path.exists(path):
os.mkdir(path)
init = os.path.join(path, "__init__.py")
- f = open(init, 'w') # Open and close to produce empty file.
+ f = open(init, 'w') # Open and close to produce empty file.
f.close()
# vim: shiftwidth=4 tabstop=4 expandtab
diff --git a/Cheetah/Utils/WebInputMixin.py b/Cheetah/Utils/WebInputMixin.py
index d7eab7c..12af587 100644
--- a/Cheetah/Utils/WebInputMixin.py
+++ b/Cheetah/Utils/WebInputMixin.py
@@ -4,10 +4,13 @@ transaction variables in bulk. See the docstring of webInput for full details.
from Cheetah.Utils.Misc import useOrRaise
-class NonNumericInputError(ValueError): pass
+
+class NonNumericInputError(ValueError):
+ pass
##################################################
-## PRIVATE FUNCTIONS AND CLASSES
+# PRIVATE FUNCTIONS AND CLASSES
+
class _Converter:
"""A container object for info about type converters.
@@ -49,7 +52,7 @@ def _lookup(name, func, multi, converters):
# 'values' is a list of strings, a string or None.
# Step 3 -- Coerce 'values' to a list of zero, one or more strings.
- if values is None:
+ if values is None:
values = []
elif isinstance(values, str):
values = [values]
@@ -81,7 +84,7 @@ def _lookup(name, func, multi, converters):
# as is. If we're supposed to return a single value and the list is
# empty, return or raise 'converter.default'. Otherwise, return the
# first element in the list and ignore any additional values.
- if multi:
+ if multi:
return shortName, values
if len(values) == 0:
return shortName, useOrRaise(converter.default)
diff --git a/Cheetah/Utils/htmlDecode.py b/Cheetah/Utils/htmlDecode.py
index 2832a74..286f1f9 100644
--- a/Cheetah/Utils/htmlDecode.py
+++ b/Cheetah/Utils/htmlDecode.py
@@ -6,6 +6,7 @@
from Cheetah.Utils.htmlEncode import htmlCodesReversed
+
def htmlDecode(s, codes=htmlCodesReversed):
""" Returns the ASCII decoded version of the given HTML string. This does
NOT remove normal HTML tags like <p>. It is the inverse of htmlEncode()."""
diff --git a/Cheetah/Utils/htmlEncode.py b/Cheetah/Utils/htmlEncode.py
index f76c77e..9e2c63f 100644
--- a/Cheetah/Utils/htmlEncode.py
+++ b/Cheetah/Utils/htmlEncode.py
@@ -13,6 +13,7 @@ htmlCodes = [
htmlCodesReversed = htmlCodes[:]
htmlCodesReversed.reverse()
+
def htmlEncode(s, codes=htmlCodes):
""" Returns the HTML encoded version of the given string. This is useful to
display a plain ASCII text string on a web page."""
diff --git a/Cheetah/Utils/statprof.py b/Cheetah/Utils/statprof.py
index 2331c97..d26896c 100644
--- a/Cheetah/Utils/statprof.py
+++ b/Cheetah/Utils/statprof.py
@@ -1,23 +1,23 @@
-## statprof.py
-## Copyright (C) 2004,2005 Andy Wingo <wingo at pobox dot com>
-## Copyright (C) 2001 Rob Browning <rlb at defaultvalue dot org>
-
-## This library is free software; you can redistribute it and/or
-## modify it under the terms of the GNU Lesser General Public
-## License as published by the Free Software Foundation; either
-## version 2.1 of the License, or (at your option) any later version.
+# statprof.py
+# Copyright (C) 2004,2005 Andy Wingo <wingo at pobox dot com>
+# Copyright (C) 2001 Rob Browning <rlb at defaultvalue dot org>
+
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2.1 of the License, or (at your option) any later version.
##
-## This library is distributed in the hope that it will be useful,
-## but WITHOUT ANY WARRANTY; without even the implied warranty of
-## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-## Lesser General Public License for more details.
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+# Lesser General Public License for more details.
##
-## You should have received a copy of the GNU Lesser General Public
-## License along with this program; if not, contact:
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program; if not, contact:
##
-## Free Software Foundation Voice: +1-617-542-5942
-## 59 Temple Place - Suite 330 Fax: +1-617-542-2652
-## Boston, MA 02111-1307, USA gnu@gnu.org
+# Free Software Foundation Voice: +1-617-542-5942
+# 59 Temple Place - Suite 330 Fax: +1-617-542-2652
+# Boston, MA 02111-1307, USA gnu@gnu.org
"""
statprof is intended to be a fairly simple statistical profiler for
@@ -120,8 +120,6 @@ much as possible.
"""
-
-
try:
import itimer
except ImportError:
@@ -142,7 +140,7 @@ __all__ = ['start', 'stop', 'reset', 'display']
###########################################################################
-## Utils
+# Utils
def clock():
times = os.times()
@@ -150,7 +148,7 @@ def clock():
###########################################################################
-## Collection data structures
+# Collection data structures
class ProfileState(object):
def __init__(self, frequency=None):
@@ -183,10 +181,13 @@ class ProfileState(object):
def accumulate_time(self, stop_time):
self.accumulated_time += stop_time - self.last_start_time
+
state = ProfileState()
-## call_data := { code object: CallData }
+# call_data := { code object: CallData }
call_data = {}
+
+
class CallData(object):
def __init__(self, code):
self.name = code.co_name
@@ -197,12 +198,13 @@ class CallData(object):
self.self_sample_count = 0
call_data[code] = self
+
def get_call_data(code):
return call_data.get(code, None) or CallData(code)
###########################################################################
-## SIGPROF handler
+# SIGPROF handler
def sample_stack_procs(frame):
state.sample_count += 1
@@ -215,21 +217,22 @@ def sample_stack_procs(frame):
for code in code_seen:
get_call_data(code).cum_sample_count += 1
+
def profile_signal_handler(signum, frame):
if state.profile_level > 0:
state.accumulate_time(clock())
sample_stack_procs(frame)
- itimer.setitimer(itimer.ITIMER_PROF,
- state.sample_interval, 0.0)
+ itimer.setitimer(itimer.ITIMER_PROF, state.sample_interval, 0.0)
state.last_start_time = clock()
###########################################################################
-## Profiling API
+# Profiling API
def is_active():
return state.profile_level > 0
+
def start():
state.profile_level += 1
if state.profile_level == 1:
@@ -238,8 +241,9 @@ def start():
state.remaining_prof_time = None
signal.signal(signal.SIGPROF, profile_signal_handler)
itimer.setitimer(itimer.ITIMER_PROF,
- rpt or state.sample_interval, 0.0)
- state.gc_time_taken = 0 # dunno
+ rpt or state.sample_interval, 0.0)
+ state.gc_time_taken = 0 # dunno
+
def stop():
state.profile_level -= 1
@@ -249,7 +253,8 @@ def stop():
rpt = itimer.setitimer(itimer.ITIMER_PROF, 0.0, 0.0)
signal.signal(signal.SIGPROF, signal.SIG_IGN)
state.remaining_prof_time = rpt[0]
- state.gc_time_taken = 0 # dunno
+ state.gc_time_taken = 0 # dunno
+
def reset(frequency=None):
assert state.profile_level == 0, "Can't reset() while statprof is running"
@@ -258,7 +263,7 @@ def reset(frequency=None):
###########################################################################
-## Reporting API
+# Reporting API
class CallStats(object):
def __init__(self, call_data):
@@ -288,15 +293,16 @@ def display():
print('No samples recorded.')
return
- l = [CallStats(x) for x in call_data.values()]
- l = [(x.self_secs_in_proc, x.cum_secs_in_proc, x) for x in l]
- l.sort(reverse=True)
- l = [x[2] for x in l]
+ _l = [CallStats(x) for x in call_data.values()]
+ _l = [(x.self_secs_in_proc, x.cum_secs_in_proc, x) for x in _l]
+ _l.sort(reverse=True)
+ _l = [x[2] for x in _l]
print('%5.5s %10.10s %7.7s %-8.8s' % ('% ', 'cumulative', 'self', ''))
- print('%5.5s %9.9s %8.8s %-8.8s' % ("time", "seconds", "seconds", "name"))
+ print('%5.5s %9.9s %8.8s %-8.8s'
+ % ("time", "seconds", "seconds", "name"))
- for x in l:
+ for x in _l:
x.display()
print('---')
diff --git a/Cheetah/Version.py b/Cheetah/Version.py
index c7b6c5f..01c6e1b 100644
--- a/Cheetah/Version.py
+++ b/Cheetah/Version.py
@@ -1,21 +1,23 @@
-Version = '3.0.1'
-VersionTuple = (3, 0, 1, 'final', 1)
+Version = '3.1.0'
+VersionTuple = (3, 1, 0, 'final', 1)
MinCompatibleVersion = '3.0.0a1'
MinCompatibleVersionTuple = (3, 0, 0, 'alpha', 1)
####
+
+
def convertVersionStringToTuple(s):
versionNum = [0, 0, 0]
releaseType = 'final'
releaseTypeSubNum = 0
- if s.find('a')!=-1:
+ if s.find('a') != -1:
num, releaseTypeSubNum = s.split('a')
releaseType = 'alpha'
- elif s.find('b')!=-1:
+ elif s.find('b') != -1:
num, releaseTypeSubNum = s.split('b')
releaseType = 'beta'
- elif s.find('rc')!=-1:
+ elif s.find('rc') != -1:
num, releaseTypeSubNum = s.split('rc')
releaseType = 'candidate'
else:
@@ -23,7 +25,7 @@ def convertVersionStringToTuple(s):
num = num.split('.')
for i in range(len(num)):
versionNum[i] = int(num[i])
- if len(versionNum)<3:
+ if len(versionNum) < 3:
versionNum += [0]
releaseTypeSubNum = int(releaseTypeSubNum)
@@ -38,7 +40,6 @@ if __name__ == '__main__':
print(c('2.0'))
print(c('2.0.2'))
-
assert c('0.9.19b1') < c('0.9.19')
assert c('0.9b1') < c('0.9.19')
diff --git a/Cheetah/__init__.py b/Cheetah/__init__.py
index fa0fcc5..1156c6c 100644
--- a/Cheetah/__init__.py
+++ b/Cheetah/__init__.py
@@ -2,8 +2,9 @@
Cheetah is an open source template engine and code generation tool.
It can be used standalone or combined with other tools and frameworks. Web
-development is its principle use, but Cheetah is very flexible and is also being
-used to generate C++ game code, Java, sql, form emails and even Python code.
+development is its principle use, but Cheetah is very flexible and is also
+being used to generate C++ game code, Java, sql, form emails and even Python
+code.
Homepage, issue tracker
https://github.com/CheetahTemplate3/cheetah3
@@ -12,4 +13,4 @@ Documentation
http://cheetahtemplate.org/
'''
-from Cheetah.Version import *
+from Cheetah.Version import * # noqa
diff --git a/Cheetah/convertTmplPathToModuleName.py b/Cheetah/convertTmplPathToModuleName.py
index 620c61f..2dec2ab 100644
--- a/Cheetah/convertTmplPathToModuleName.py
+++ b/Cheetah/convertTmplPathToModuleName.py
@@ -8,11 +8,12 @@ try:
except AttributeError:
letters = string.letters
-l = ['_'] * 256
+_l = ['_'] * 256
for c in string.digits + letters:
- l[ord(c)] = c
-_pathNameTransChars = ''.join(l)
-del l, c
+ _l[ord(c)] = c
+_pathNameTransChars = ''.join(_l)
+del _l, c
+
def convertTmplPathToModuleName(tmplPath,
_pathNameTransChars=_pathNameTransChars,
@@ -21,5 +22,6 @@ def convertTmplPathToModuleName(tmplPath,
try:
moduleName = splitdrive(tmplPath)[1].translate(_pathNameTransChars)
except (UnicodeError, TypeError):
- moduleName = unicode(splitdrive(tmplPath)[1]).translate(unicode(_pathNameTransChars))
+ moduleName = unicode(splitdrive(tmplPath)[1])\
+ .translate(unicode(_pathNameTransChars))
return moduleName
diff --git a/Cheetah3.egg-info/PKG-INFO b/Cheetah3.egg-info/PKG-INFO
index 5061f60..9028fc1 100644
--- a/Cheetah3.egg-info/PKG-INFO
+++ b/Cheetah3.egg-info/PKG-INFO
@@ -1,19 +1,20 @@
Metadata-Version: 1.1
Name: Cheetah3
-Version: 3.0.1
+Version: 3.1.0
Summary: Cheetah is a template engine and code generation tool
Home-page: http://cheetahtemplate.org/
Author: Oleg Broytman
Author-email: phd@phdru.name
License: MIT
-Download-URL: https://pypi.python.org/pypi/Cheetah3/3.0.1
+Download-URL: https://pypi.python.org/pypi/Cheetah3/3.1.0
Description-Content-Type: UNKNOWN
Description: Cheetah3 is a free (BSD-style) and open source template engine and code
generation tool.
It can be used standalone or combined with other tools and frameworks. Web
- development is its principle use, but Cheetah is very flexible and is also being
- used to generate C++ game code, Java, sql, form emails and even Python code.
+ development is its principle use, but Cheetah is very flexible and
+ is also being used to generate C++ game code, Java, sql, form emails
+ and even Python code.
It's a fork of the original CheetahTemplate library.
@@ -33,12 +34,15 @@ Description: Cheetah3 is a free (BSD-style) and open source template engine and
See http://cheetahtemplate.org/news.html for full details
-Platform: UNKNOWN
+Keywords: template
+Platform: Any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
diff --git a/Cheetah3.egg-info/SOURCES.txt b/Cheetah3.egg-info/SOURCES.txt
index 7bf87da..daacb8a 100644
--- a/Cheetah3.egg-info/SOURCES.txt
+++ b/Cheetah3.egg-info/SOURCES.txt
@@ -88,389 +88,392 @@ Cheetah3.egg-info/top_level.txt
bin/cheetah
bin/cheetah-analyze
bin/cheetah-compile
-www/Makefile
-www/authors.rst
-www/chep.rst
-www/conf.py
-www/developers.rst
-www/documentation.rst
-www/download.rst
-www/genapidocs
-www/index.rst
-www/make.bat
-www/news.rst
-www/news2.rst
-www/rebuild
-www/roadmap.rst
-www/api/Cheetah.CacheRegion.rst
-www/api/Cheetah.CacheStore.rst
-www/api/Cheetah.CheetahWrapper.rst
-www/api/Cheetah.Compiler.rst
-www/api/Cheetah.DirectiveAnalyzer.rst
-www/api/Cheetah.Django.rst
-www/api/Cheetah.DummyTransaction.rst
-www/api/Cheetah.ErrorCatchers.rst
-www/api/Cheetah.FileUtils.rst
-www/api/Cheetah.Filters.rst
-www/api/Cheetah.ImportHooks.rst
-www/api/Cheetah.ImportManager.rst
-www/api/Cheetah.Macros.I18n.rst
-www/api/Cheetah.Macros.rst
-www/api/Cheetah.NameMapper.rst
-www/api/Cheetah.Parser.rst
-www/api/Cheetah.Servlet.rst
-www/api/Cheetah.SettingsManager.rst
-www/api/Cheetah.SourceReader.rst
-www/api/Cheetah.Template.rst
-www/api/Cheetah.TemplateCmdLineIface.rst
-www/api/Cheetah.Templates.SkeletonPage.rst
-www/api/Cheetah.Templates.rst
-www/api/Cheetah.Tests.Analyzer.rst
-www/api/Cheetah.Tests.Boinker.rst
-www/api/Cheetah.Tests.CheetahWrapper.rst
-www/api/Cheetah.Tests.Cheps.rst
-www/api/Cheetah.Tests.Filters.rst
-www/api/Cheetah.Tests.Misc.rst
-www/api/Cheetah.Tests.NameMapper.rst
-www/api/Cheetah.Tests.Parser.rst
-www/api/Cheetah.Tests.Performance.rst
-www/api/Cheetah.Tests.Pinger.rst
-www/api/Cheetah.Tests.Regressions.rst
-www/api/Cheetah.Tests.SyntaxAndOutput.rst
-www/api/Cheetah.Tests.Template.rst
-www/api/Cheetah.Tests.Test.rst
-www/api/Cheetah.Tests.Unicode.rst
-www/api/Cheetah.Tests.rst
-www/api/Cheetah.Tests.xmlrunner.rst
-www/api/Cheetah.Tools.CGITemplate.rst
-www/api/Cheetah.Tools.MondoReport.rst
-www/api/Cheetah.Tools.RecursiveNull.rst
-www/api/Cheetah.Tools.SiteHierarchy.rst
-www/api/Cheetah.Tools.rst
-www/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst
-www/api/Cheetah.Tools.turbocheetah.rst
-www/api/Cheetah.Tools.turbocheetah.tests.rst
-www/api/Cheetah.Tools.turbocheetah.tests.test_template.rst
-www/api/Cheetah.Unspecified.rst
-www/api/Cheetah.Utils.Indenter.rst
-www/api/Cheetah.Utils.Misc.rst
-www/api/Cheetah.Utils.WebInputMixin.rst
-www/api/Cheetah.Utils.htmlDecode.rst
-www/api/Cheetah.Utils.htmlEncode.rst
-www/api/Cheetah.Utils.rst
-www/api/Cheetah.Utils.statprof.rst
-www/api/Cheetah.Version.rst
-www/api/Cheetah.compat.rst
-www/api/Cheetah.convertTmplPathToModuleName.rst
-www/api/Cheetah.rst
-www/api/modules.rst
-www/cheps/1_chep.rst
-www/cheps/2_import.rst
-www/cheps/3_super.rst
-www/dev_guide/bnf.rst
-www/dev_guide/cache.rst
-www/dev_guide/comments.rst
-www/dev_guide/compiler.rst
-www/dev_guide/design.rst
-www/dev_guide/errorHandling.rst
-www/dev_guide/files.rst
-www/dev_guide/flowControl.rst
-www/dev_guide/history.rst
-www/dev_guide/index.rst
-www/dev_guide/inheritanceEtc.rst
-www/dev_guide/introduction.rst
-www/dev_guide/output.rst
-www/dev_guide/parser.rst
-www/dev_guide/parserInstructions.rst
-www/dev_guide/patching.rst
-www/dev_guide/placeholders.rst
-www/dev_guide/pyModules.rst
-www/dev_guide/safeDelegation.rst
-www/dev_guide/template.rst
-www/html/authors.html
-www/html/chep.html
-www/html/developers.html
-www/html/documentation.html
-www/html/download.html
-www/html/genindex.html
-www/html/index.html
-www/html/news.html
-www/html/news2.html
-www/html/py-modindex.html
-www/html/roadmap.html
-www/html/search.html
-www/html/searchindex.js
-www/html/_sources/authors.rst.txt
-www/html/_sources/chep.rst.txt
-www/html/_sources/developers.rst.txt
-www/html/_sources/documentation.rst.txt
-www/html/_sources/download.rst.txt
-www/html/_sources/index.rst.txt
-www/html/_sources/news.rst.txt
-www/html/_sources/news2.rst.txt
-www/html/_sources/roadmap.rst.txt
-www/html/_sources/api/Cheetah.CacheRegion.rst.txt
-www/html/_sources/api/Cheetah.CacheStore.rst.txt
-www/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
-www/html/_sources/api/Cheetah.Compiler.rst.txt
-www/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
-www/html/_sources/api/Cheetah.Django.rst.txt
-www/html/_sources/api/Cheetah.DummyTransaction.rst.txt
-www/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
-www/html/_sources/api/Cheetah.FileUtils.rst.txt
-www/html/_sources/api/Cheetah.Filters.rst.txt
-www/html/_sources/api/Cheetah.ImportHooks.rst.txt
-www/html/_sources/api/Cheetah.ImportManager.rst.txt
-www/html/_sources/api/Cheetah.Macros.I18n.rst.txt
-www/html/_sources/api/Cheetah.Macros.rst.txt
-www/html/_sources/api/Cheetah.NameMapper.rst.txt
-www/html/_sources/api/Cheetah.Parser.rst.txt
-www/html/_sources/api/Cheetah.Servlet.rst.txt
-www/html/_sources/api/Cheetah.SettingsManager.rst.txt
-www/html/_sources/api/Cheetah.SourceReader.rst.txt
-www/html/_sources/api/Cheetah.Template.rst.txt
-www/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
-www/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
-www/html/_sources/api/Cheetah.Templates.rst.txt
-www/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
-www/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
-www/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
-www/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
-www/html/_sources/api/Cheetah.Tests.Filters.rst.txt
-www/html/_sources/api/Cheetah.Tests.Misc.rst.txt
-www/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
-www/html/_sources/api/Cheetah.Tests.Parser.rst.txt
-www/html/_sources/api/Cheetah.Tests.Performance.rst.txt
-www/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
-www/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
-www/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
-www/html/_sources/api/Cheetah.Tests.Template.rst.txt
-www/html/_sources/api/Cheetah.Tests.Test.rst.txt
-www/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
-www/html/_sources/api/Cheetah.Tests.rst.txt
-www/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
-www/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
-www/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
-www/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
-www/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
-www/html/_sources/api/Cheetah.Tools.rst.txt
-www/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
-www/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
-www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
-www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
-www/html/_sources/api/Cheetah.Unspecified.rst.txt
-www/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
-www/html/_sources/api/Cheetah.Utils.Misc.rst.txt
-www/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
-www/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
-www/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
-www/html/_sources/api/Cheetah.Utils.rst.txt
-www/html/_sources/api/Cheetah.Utils.statprof.rst.txt
-www/html/_sources/api/Cheetah.Version.rst.txt
-www/html/_sources/api/Cheetah.compat.rst.txt
-www/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
-www/html/_sources/api/Cheetah.rst.txt
-www/html/_sources/api/modules.rst.txt
-www/html/_sources/cheps/1_chep.rst.txt
-www/html/_sources/cheps/2_import.rst.txt
-www/html/_sources/cheps/3_super.rst.txt
-www/html/_sources/dev_guide/bnf.rst.txt
-www/html/_sources/dev_guide/cache.rst.txt
-www/html/_sources/dev_guide/comments.rst.txt
-www/html/_sources/dev_guide/compiler.rst.txt
-www/html/_sources/dev_guide/design.rst.txt
-www/html/_sources/dev_guide/errorHandling.rst.txt
-www/html/_sources/dev_guide/files.rst.txt
-www/html/_sources/dev_guide/flowControl.rst.txt
-www/html/_sources/dev_guide/history.rst.txt
-www/html/_sources/dev_guide/index.rst.txt
-www/html/_sources/dev_guide/inheritanceEtc.rst.txt
-www/html/_sources/dev_guide/introduction.rst.txt
-www/html/_sources/dev_guide/output.rst.txt
-www/html/_sources/dev_guide/parser.rst.txt
-www/html/_sources/dev_guide/parserInstructions.rst.txt
-www/html/_sources/dev_guide/patching.rst.txt
-www/html/_sources/dev_guide/placeholders.rst.txt
-www/html/_sources/dev_guide/pyModules.rst.txt
-www/html/_sources/dev_guide/safeDelegation.rst.txt
-www/html/_sources/dev_guide/template.rst.txt
-www/html/_sources/recipes/inheritance.rst.txt
-www/html/_sources/recipes/precompiled.rst.txt
-www/html/_sources/recipes/staticmethod.rst.txt
-www/html/_sources/recipes/writing_a_recipe.rst.txt
-www/html/_sources/users_guide/comments.rst.txt
-www/html/_sources/users_guide/comparisons.rst.txt
-www/html/_sources/users_guide/editors.rst.txt
-www/html/_sources/users_guide/errorHandling.rst.txt
-www/html/_sources/users_guide/examples.rst.txt
-www/html/_sources/users_guide/flowControl.rst.txt
-www/html/_sources/users_guide/gettingStarted.rst.txt
-www/html/_sources/users_guide/glossary.rst.txt
-www/html/_sources/users_guide/index.rst.txt
-www/html/_sources/users_guide/inheritanceEtc.rst.txt
-www/html/_sources/users_guide/intro.rst.txt
-www/html/_sources/users_guide/language.rst.txt
-www/html/_sources/users_guide/libraries.rst.txt
-www/html/_sources/users_guide/links.rst.txt
-www/html/_sources/users_guide/nonHtml.rst.txt
-www/html/_sources/users_guide/otherHtml.rst.txt
-www/html/_sources/users_guide/output.rst.txt
-www/html/_sources/users_guide/parserInstructions.rst.txt
-www/html/_sources/users_guide/tipsAndTricks.rst.txt
-www/html/_sources/users_guide/webware.rst.txt
-www/html/_static/ajax-loader.gif
-www/html/_static/basic.css
-www/html/_static/comment-bright.png
-www/html/_static/comment-close.png
-www/html/_static/comment.png
-www/html/_static/contents.png
-www/html/_static/doctools.js
-www/html/_static/down-pressed.png
-www/html/_static/down.png
-www/html/_static/file.png
-www/html/_static/jquery-3.1.0.js
-www/html/_static/jquery.js
-www/html/_static/minus.png
-www/html/_static/navigation.png
-www/html/_static/plus.png
-www/html/_static/pygments.css
-www/html/_static/searchtools.js
-www/html/_static/sphinxdoc.css
-www/html/_static/underscore-1.3.1.js
-www/html/_static/underscore.js
-www/html/_static/up-pressed.png
-www/html/_static/up.png
-www/html/_static/websupport.js
-www/html/api/Cheetah.CacheRegion.html
-www/html/api/Cheetah.CacheStore.html
-www/html/api/Cheetah.CheetahWrapper.html
-www/html/api/Cheetah.Compiler.html
-www/html/api/Cheetah.DirectiveAnalyzer.html
-www/html/api/Cheetah.Django.html
-www/html/api/Cheetah.DummyTransaction.html
-www/html/api/Cheetah.ErrorCatchers.html
-www/html/api/Cheetah.FileUtils.html
-www/html/api/Cheetah.Filters.html
-www/html/api/Cheetah.ImportHooks.html
-www/html/api/Cheetah.ImportManager.html
-www/html/api/Cheetah.Macros.I18n.html
-www/html/api/Cheetah.Macros.html
-www/html/api/Cheetah.NameMapper.html
-www/html/api/Cheetah.Parser.html
-www/html/api/Cheetah.Servlet.html
-www/html/api/Cheetah.SettingsManager.html
-www/html/api/Cheetah.SourceReader.html
-www/html/api/Cheetah.Template.html
-www/html/api/Cheetah.TemplateCmdLineIface.html
-www/html/api/Cheetah.Templates.SkeletonPage.html
-www/html/api/Cheetah.Templates.html
-www/html/api/Cheetah.Tests.Analyzer.html
-www/html/api/Cheetah.Tests.Boinker.html
-www/html/api/Cheetah.Tests.CheetahWrapper.html
-www/html/api/Cheetah.Tests.Cheps.html
-www/html/api/Cheetah.Tests.Filters.html
-www/html/api/Cheetah.Tests.Misc.html
-www/html/api/Cheetah.Tests.NameMapper.html
-www/html/api/Cheetah.Tests.Parser.html
-www/html/api/Cheetah.Tests.Performance.html
-www/html/api/Cheetah.Tests.Pinger.html
-www/html/api/Cheetah.Tests.Regressions.html
-www/html/api/Cheetah.Tests.SyntaxAndOutput.html
-www/html/api/Cheetah.Tests.Template.html
-www/html/api/Cheetah.Tests.Test.html
-www/html/api/Cheetah.Tests.Unicode.html
-www/html/api/Cheetah.Tests.html
-www/html/api/Cheetah.Tests.xmlrunner.html
-www/html/api/Cheetah.Tools.CGITemplate.html
-www/html/api/Cheetah.Tools.MondoReport.html
-www/html/api/Cheetah.Tools.RecursiveNull.html
-www/html/api/Cheetah.Tools.SiteHierarchy.html
-www/html/api/Cheetah.Tools.html
-www/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
-www/html/api/Cheetah.Tools.turbocheetah.html
-www/html/api/Cheetah.Tools.turbocheetah.tests.html
-www/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
-www/html/api/Cheetah.Unspecified.html
-www/html/api/Cheetah.Utils.Indenter.html
-www/html/api/Cheetah.Utils.Misc.html
-www/html/api/Cheetah.Utils.WebInputMixin.html
-www/html/api/Cheetah.Utils.html
-www/html/api/Cheetah.Utils.htmlDecode.html
-www/html/api/Cheetah.Utils.htmlEncode.html
-www/html/api/Cheetah.Utils.statprof.html
-www/html/api/Cheetah.Version.html
-www/html/api/Cheetah.compat.html
-www/html/api/Cheetah.convertTmplPathToModuleName.html
-www/html/api/Cheetah.html
-www/html/api/modules.html
-www/html/cheps/1_chep.html
-www/html/cheps/2_import.html
-www/html/cheps/3_super.html
-www/html/dev_guide/bnf.html
-www/html/dev_guide/cache.html
-www/html/dev_guide/comments.html
-www/html/dev_guide/compiler.html
-www/html/dev_guide/design.html
-www/html/dev_guide/errorHandling.html
-www/html/dev_guide/files.html
-www/html/dev_guide/flowControl.html
-www/html/dev_guide/history.html
-www/html/dev_guide/index.html
-www/html/dev_guide/inheritanceEtc.html
-www/html/dev_guide/introduction.html
-www/html/dev_guide/output.html
-www/html/dev_guide/parser.html
-www/html/dev_guide/parserInstructions.html
-www/html/dev_guide/patching.html
-www/html/dev_guide/placeholders.html
-www/html/dev_guide/pyModules.html
-www/html/dev_guide/safeDelegation.html
-www/html/dev_guide/template.html
-www/html/recipes/inheritance.html
-www/html/recipes/precompiled.html
-www/html/recipes/staticmethod.html
-www/html/recipes/writing_a_recipe.html
-www/html/users_guide/comments.html
-www/html/users_guide/comparisons.html
-www/html/users_guide/editors.html
-www/html/users_guide/errorHandling.html
-www/html/users_guide/examples.html
-www/html/users_guide/flowControl.html
-www/html/users_guide/gettingStarted.html
-www/html/users_guide/glossary.html
-www/html/users_guide/index.html
-www/html/users_guide/inheritanceEtc.html
-www/html/users_guide/intro.html
-www/html/users_guide/language.html
-www/html/users_guide/libraries.html
-www/html/users_guide/links.html
-www/html/users_guide/nonHtml.html
-www/html/users_guide/otherHtml.html
-www/html/users_guide/output.html
-www/html/users_guide/parserInstructions.html
-www/html/users_guide/tipsAndTricks.html
-www/html/users_guide/webware.html
-www/recipes/inheritance.rst
-www/recipes/precompiled.rst
-www/recipes/staticmethod.rst
-www/recipes/writing_a_recipe.rst
-www/users_guide/comments.rst
-www/users_guide/comparisons.rst
-www/users_guide/editors.rst
-www/users_guide/errorHandling.rst
-www/users_guide/examples.rst
-www/users_guide/flowControl.rst
-www/users_guide/gettingStarted.rst
-www/users_guide/glossary.rst
-www/users_guide/index.rst
-www/users_guide/inheritanceEtc.rst
-www/users_guide/intro.rst
-www/users_guide/language.rst
-www/users_guide/libraries.rst
-www/users_guide/links.rst
-www/users_guide/nonHtml.rst
-www/users_guide/otherHtml.rst
-www/users_guide/output.rst
-www/users_guide/parserInstructions.rst
-www/users_guide/tipsAndTricks.rst
-www/users_guide/webware.rst \ No newline at end of file
+docs/Makefile
+docs/authors.rst
+docs/chep.rst
+docs/conf.py
+docs/developers.rst
+docs/documentation.rst
+docs/download.rst
+docs/genapidocs
+docs/index.rst
+docs/make.bat
+docs/news.rst
+docs/news2.rst
+docs/rebuild
+docs/roadmap.rst
+docs/api/Cheetah.CacheRegion.rst
+docs/api/Cheetah.CacheStore.rst
+docs/api/Cheetah.CheetahWrapper.rst
+docs/api/Cheetah.Compiler.rst
+docs/api/Cheetah.DirectiveAnalyzer.rst
+docs/api/Cheetah.Django.rst
+docs/api/Cheetah.DummyTransaction.rst
+docs/api/Cheetah.ErrorCatchers.rst
+docs/api/Cheetah.FileUtils.rst
+docs/api/Cheetah.Filters.rst
+docs/api/Cheetah.ImportHooks.rst
+docs/api/Cheetah.ImportManager.rst
+docs/api/Cheetah.Macros.I18n.rst
+docs/api/Cheetah.Macros.rst
+docs/api/Cheetah.NameMapper.rst
+docs/api/Cheetah.Parser.rst
+docs/api/Cheetah.Servlet.rst
+docs/api/Cheetah.SettingsManager.rst
+docs/api/Cheetah.SourceReader.rst
+docs/api/Cheetah.Template.rst
+docs/api/Cheetah.TemplateCmdLineIface.rst
+docs/api/Cheetah.Templates.SkeletonPage.rst
+docs/api/Cheetah.Templates.rst
+docs/api/Cheetah.Tests.Analyzer.rst
+docs/api/Cheetah.Tests.Boinker.rst
+docs/api/Cheetah.Tests.CheetahWrapper.rst
+docs/api/Cheetah.Tests.Cheps.rst
+docs/api/Cheetah.Tests.Filters.rst
+docs/api/Cheetah.Tests.Misc.rst
+docs/api/Cheetah.Tests.NameMapper.rst
+docs/api/Cheetah.Tests.NameMapper_pure.rst
+docs/api/Cheetah.Tests.Parser.rst
+docs/api/Cheetah.Tests.Performance.rst
+docs/api/Cheetah.Tests.Pinger.rst
+docs/api/Cheetah.Tests.Regressions.rst
+docs/api/Cheetah.Tests.SyntaxAndOutput.rst
+docs/api/Cheetah.Tests.Template.rst
+docs/api/Cheetah.Tests.Test.rst
+docs/api/Cheetah.Tests.Unicode.rst
+docs/api/Cheetah.Tests.rst
+docs/api/Cheetah.Tests.xmlrunner.rst
+docs/api/Cheetah.Tools.CGITemplate.rst
+docs/api/Cheetah.Tools.MondoReport.rst
+docs/api/Cheetah.Tools.RecursiveNull.rst
+docs/api/Cheetah.Tools.SiteHierarchy.rst
+docs/api/Cheetah.Tools.rst
+docs/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst
+docs/api/Cheetah.Tools.turbocheetah.rst
+docs/api/Cheetah.Tools.turbocheetah.tests.rst
+docs/api/Cheetah.Tools.turbocheetah.tests.test_template.rst
+docs/api/Cheetah.Unspecified.rst
+docs/api/Cheetah.Utils.Indenter.rst
+docs/api/Cheetah.Utils.Misc.rst
+docs/api/Cheetah.Utils.WebInputMixin.rst
+docs/api/Cheetah.Utils.htmlDecode.rst
+docs/api/Cheetah.Utils.htmlEncode.rst
+docs/api/Cheetah.Utils.rst
+docs/api/Cheetah.Utils.statprof.rst
+docs/api/Cheetah.Version.rst
+docs/api/Cheetah.compat.rst
+docs/api/Cheetah.convertTmplPathToModuleName.rst
+docs/api/Cheetah.rst
+docs/api/modules.rst
+docs/cheps/1_chep.rst
+docs/cheps/2_import.rst
+docs/cheps/3_super.rst
+docs/dev_guide/bnf.rst
+docs/dev_guide/cache.rst
+docs/dev_guide/comments.rst
+docs/dev_guide/compiler.rst
+docs/dev_guide/design.rst
+docs/dev_guide/errorHandling.rst
+docs/dev_guide/files.rst
+docs/dev_guide/flowControl.rst
+docs/dev_guide/history.rst
+docs/dev_guide/index.rst
+docs/dev_guide/inheritanceEtc.rst
+docs/dev_guide/introduction.rst
+docs/dev_guide/output.rst
+docs/dev_guide/parser.rst
+docs/dev_guide/parserInstructions.rst
+docs/dev_guide/patching.rst
+docs/dev_guide/placeholders.rst
+docs/dev_guide/pyModules.rst
+docs/dev_guide/safeDelegation.rst
+docs/dev_guide/template.rst
+docs/html/authors.html
+docs/html/chep.html
+docs/html/developers.html
+docs/html/documentation.html
+docs/html/download.html
+docs/html/genindex.html
+docs/html/index.html
+docs/html/news.html
+docs/html/news2.html
+docs/html/py-modindex.html
+docs/html/roadmap.html
+docs/html/search.html
+docs/html/searchindex.js
+docs/html/_sources/authors.rst.txt
+docs/html/_sources/chep.rst.txt
+docs/html/_sources/developers.rst.txt
+docs/html/_sources/documentation.rst.txt
+docs/html/_sources/download.rst.txt
+docs/html/_sources/index.rst.txt
+docs/html/_sources/news.rst.txt
+docs/html/_sources/news2.rst.txt
+docs/html/_sources/roadmap.rst.txt
+docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
+docs/html/_sources/api/Cheetah.CacheStore.rst.txt
+docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
+docs/html/_sources/api/Cheetah.Compiler.rst.txt
+docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
+docs/html/_sources/api/Cheetah.Django.rst.txt
+docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
+docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
+docs/html/_sources/api/Cheetah.FileUtils.rst.txt
+docs/html/_sources/api/Cheetah.Filters.rst.txt
+docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
+docs/html/_sources/api/Cheetah.ImportManager.rst.txt
+docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
+docs/html/_sources/api/Cheetah.Macros.rst.txt
+docs/html/_sources/api/Cheetah.NameMapper.rst.txt
+docs/html/_sources/api/Cheetah.Parser.rst.txt
+docs/html/_sources/api/Cheetah.Servlet.rst.txt
+docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
+docs/html/_sources/api/Cheetah.SourceReader.rst.txt
+docs/html/_sources/api/Cheetah.Template.rst.txt
+docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
+docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
+docs/html/_sources/api/Cheetah.Templates.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
+docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
+docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
+docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
+docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
+docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
+docs/html/_sources/api/Cheetah.Tests.rst.txt
+docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
+docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
+docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
+docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
+docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
+docs/html/_sources/api/Cheetah.Tools.rst.txt
+docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
+docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
+docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
+docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
+docs/html/_sources/api/Cheetah.Unspecified.rst.txt
+docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
+docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
+docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
+docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
+docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
+docs/html/_sources/api/Cheetah.Utils.rst.txt
+docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
+docs/html/_sources/api/Cheetah.Version.rst.txt
+docs/html/_sources/api/Cheetah.compat.rst.txt
+docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
+docs/html/_sources/api/Cheetah.rst.txt
+docs/html/_sources/api/modules.rst.txt
+docs/html/_sources/cheps/1_chep.rst.txt
+docs/html/_sources/cheps/2_import.rst.txt
+docs/html/_sources/cheps/3_super.rst.txt
+docs/html/_sources/dev_guide/bnf.rst.txt
+docs/html/_sources/dev_guide/cache.rst.txt
+docs/html/_sources/dev_guide/comments.rst.txt
+docs/html/_sources/dev_guide/compiler.rst.txt
+docs/html/_sources/dev_guide/design.rst.txt
+docs/html/_sources/dev_guide/errorHandling.rst.txt
+docs/html/_sources/dev_guide/files.rst.txt
+docs/html/_sources/dev_guide/flowControl.rst.txt
+docs/html/_sources/dev_guide/history.rst.txt
+docs/html/_sources/dev_guide/index.rst.txt
+docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
+docs/html/_sources/dev_guide/introduction.rst.txt
+docs/html/_sources/dev_guide/output.rst.txt
+docs/html/_sources/dev_guide/parser.rst.txt
+docs/html/_sources/dev_guide/parserInstructions.rst.txt
+docs/html/_sources/dev_guide/patching.rst.txt
+docs/html/_sources/dev_guide/placeholders.rst.txt
+docs/html/_sources/dev_guide/pyModules.rst.txt
+docs/html/_sources/dev_guide/safeDelegation.rst.txt
+docs/html/_sources/dev_guide/template.rst.txt
+docs/html/_sources/recipes/inheritance.rst.txt
+docs/html/_sources/recipes/precompiled.rst.txt
+docs/html/_sources/recipes/staticmethod.rst.txt
+docs/html/_sources/recipes/writing_a_recipe.rst.txt
+docs/html/_sources/users_guide/comments.rst.txt
+docs/html/_sources/users_guide/comparisons.rst.txt
+docs/html/_sources/users_guide/editors.rst.txt
+docs/html/_sources/users_guide/errorHandling.rst.txt
+docs/html/_sources/users_guide/examples.rst.txt
+docs/html/_sources/users_guide/flowControl.rst.txt
+docs/html/_sources/users_guide/gettingStarted.rst.txt
+docs/html/_sources/users_guide/glossary.rst.txt
+docs/html/_sources/users_guide/index.rst.txt
+docs/html/_sources/users_guide/inheritanceEtc.rst.txt
+docs/html/_sources/users_guide/intro.rst.txt
+docs/html/_sources/users_guide/language.rst.txt
+docs/html/_sources/users_guide/libraries.rst.txt
+docs/html/_sources/users_guide/links.rst.txt
+docs/html/_sources/users_guide/nonHtml.rst.txt
+docs/html/_sources/users_guide/otherHtml.rst.txt
+docs/html/_sources/users_guide/output.rst.txt
+docs/html/_sources/users_guide/parserInstructions.rst.txt
+docs/html/_sources/users_guide/tipsAndTricks.rst.txt
+docs/html/_sources/users_guide/webware.rst.txt
+docs/html/_static/ajax-loader.gif
+docs/html/_static/basic.css
+docs/html/_static/comment-bright.png
+docs/html/_static/comment-close.png
+docs/html/_static/comment.png
+docs/html/_static/contents.png
+docs/html/_static/doctools.js
+docs/html/_static/down-pressed.png
+docs/html/_static/down.png
+docs/html/_static/file.png
+docs/html/_static/jquery-3.1.0.js
+docs/html/_static/jquery.js
+docs/html/_static/minus.png
+docs/html/_static/navigation.png
+docs/html/_static/plus.png
+docs/html/_static/pygments.css
+docs/html/_static/searchtools.js
+docs/html/_static/sphinxdoc.css
+docs/html/_static/underscore-1.3.1.js
+docs/html/_static/underscore.js
+docs/html/_static/up-pressed.png
+docs/html/_static/up.png
+docs/html/_static/websupport.js
+docs/html/api/Cheetah.CacheRegion.html
+docs/html/api/Cheetah.CacheStore.html
+docs/html/api/Cheetah.CheetahWrapper.html
+docs/html/api/Cheetah.Compiler.html
+docs/html/api/Cheetah.DirectiveAnalyzer.html
+docs/html/api/Cheetah.Django.html
+docs/html/api/Cheetah.DummyTransaction.html
+docs/html/api/Cheetah.ErrorCatchers.html
+docs/html/api/Cheetah.FileUtils.html
+docs/html/api/Cheetah.Filters.html
+docs/html/api/Cheetah.ImportHooks.html
+docs/html/api/Cheetah.ImportManager.html
+docs/html/api/Cheetah.Macros.I18n.html
+docs/html/api/Cheetah.Macros.html
+docs/html/api/Cheetah.NameMapper.html
+docs/html/api/Cheetah.Parser.html
+docs/html/api/Cheetah.Servlet.html
+docs/html/api/Cheetah.SettingsManager.html
+docs/html/api/Cheetah.SourceReader.html
+docs/html/api/Cheetah.Template.html
+docs/html/api/Cheetah.TemplateCmdLineIface.html
+docs/html/api/Cheetah.Templates.SkeletonPage.html
+docs/html/api/Cheetah.Templates.html
+docs/html/api/Cheetah.Tests.Analyzer.html
+docs/html/api/Cheetah.Tests.Boinker.html
+docs/html/api/Cheetah.Tests.CheetahWrapper.html
+docs/html/api/Cheetah.Tests.Cheps.html
+docs/html/api/Cheetah.Tests.Filters.html
+docs/html/api/Cheetah.Tests.Misc.html
+docs/html/api/Cheetah.Tests.NameMapper.html
+docs/html/api/Cheetah.Tests.NameMapper_pure.html
+docs/html/api/Cheetah.Tests.Parser.html
+docs/html/api/Cheetah.Tests.Performance.html
+docs/html/api/Cheetah.Tests.Pinger.html
+docs/html/api/Cheetah.Tests.Regressions.html
+docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
+docs/html/api/Cheetah.Tests.Template.html
+docs/html/api/Cheetah.Tests.Test.html
+docs/html/api/Cheetah.Tests.Unicode.html
+docs/html/api/Cheetah.Tests.html
+docs/html/api/Cheetah.Tests.xmlrunner.html
+docs/html/api/Cheetah.Tools.CGITemplate.html
+docs/html/api/Cheetah.Tools.MondoReport.html
+docs/html/api/Cheetah.Tools.RecursiveNull.html
+docs/html/api/Cheetah.Tools.SiteHierarchy.html
+docs/html/api/Cheetah.Tools.html
+docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
+docs/html/api/Cheetah.Tools.turbocheetah.html
+docs/html/api/Cheetah.Tools.turbocheetah.tests.html
+docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
+docs/html/api/Cheetah.Unspecified.html
+docs/html/api/Cheetah.Utils.Indenter.html
+docs/html/api/Cheetah.Utils.Misc.html
+docs/html/api/Cheetah.Utils.WebInputMixin.html
+docs/html/api/Cheetah.Utils.html
+docs/html/api/Cheetah.Utils.htmlDecode.html
+docs/html/api/Cheetah.Utils.htmlEncode.html
+docs/html/api/Cheetah.Utils.statprof.html
+docs/html/api/Cheetah.Version.html
+docs/html/api/Cheetah.compat.html
+docs/html/api/Cheetah.convertTmplPathToModuleName.html
+docs/html/api/Cheetah.html
+docs/html/api/modules.html
+docs/html/cheps/1_chep.html
+docs/html/cheps/2_import.html
+docs/html/cheps/3_super.html
+docs/html/dev_guide/bnf.html
+docs/html/dev_guide/cache.html
+docs/html/dev_guide/comments.html
+docs/html/dev_guide/compiler.html
+docs/html/dev_guide/design.html
+docs/html/dev_guide/errorHandling.html
+docs/html/dev_guide/files.html
+docs/html/dev_guide/flowControl.html
+docs/html/dev_guide/history.html
+docs/html/dev_guide/index.html
+docs/html/dev_guide/inheritanceEtc.html
+docs/html/dev_guide/introduction.html
+docs/html/dev_guide/output.html
+docs/html/dev_guide/parser.html
+docs/html/dev_guide/parserInstructions.html
+docs/html/dev_guide/patching.html
+docs/html/dev_guide/placeholders.html
+docs/html/dev_guide/pyModules.html
+docs/html/dev_guide/safeDelegation.html
+docs/html/dev_guide/template.html
+docs/html/recipes/inheritance.html
+docs/html/recipes/precompiled.html
+docs/html/recipes/staticmethod.html
+docs/html/recipes/writing_a_recipe.html
+docs/html/users_guide/comments.html
+docs/html/users_guide/comparisons.html
+docs/html/users_guide/editors.html
+docs/html/users_guide/errorHandling.html
+docs/html/users_guide/examples.html
+docs/html/users_guide/flowControl.html
+docs/html/users_guide/gettingStarted.html
+docs/html/users_guide/glossary.html
+docs/html/users_guide/index.html
+docs/html/users_guide/inheritanceEtc.html
+docs/html/users_guide/intro.html
+docs/html/users_guide/language.html
+docs/html/users_guide/libraries.html
+docs/html/users_guide/links.html
+docs/html/users_guide/nonHtml.html
+docs/html/users_guide/otherHtml.html
+docs/html/users_guide/output.html
+docs/html/users_guide/parserInstructions.html
+docs/html/users_guide/tipsAndTricks.html
+docs/html/users_guide/webware.html
+docs/recipes/inheritance.rst
+docs/recipes/precompiled.rst
+docs/recipes/staticmethod.rst
+docs/recipes/writing_a_recipe.rst
+docs/users_guide/comments.rst
+docs/users_guide/comparisons.rst
+docs/users_guide/editors.rst
+docs/users_guide/errorHandling.rst
+docs/users_guide/examples.rst
+docs/users_guide/flowControl.rst
+docs/users_guide/gettingStarted.rst
+docs/users_guide/glossary.rst
+docs/users_guide/index.rst
+docs/users_guide/inheritanceEtc.rst
+docs/users_guide/intro.rst
+docs/users_guide/language.rst
+docs/users_guide/libraries.rst
+docs/users_guide/links.rst
+docs/users_guide/nonHtml.rst
+docs/users_guide/otherHtml.rst
+docs/users_guide/output.rst
+docs/users_guide/parserInstructions.rst
+docs/users_guide/tipsAndTricks.rst
+docs/users_guide/webware.rst \ No newline at end of file
diff --git a/MANIFEST.in b/MANIFEST.in
index 5b619e3..387faaa 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -1,8 +1,8 @@
global-include *.py *.rst *.txt
recursive-include Cheetah *.tmpl *.h *.c
recursive-include bin *
-recursive-include www *.css *.html *.js *.gif *.png
+recursive-include docs *.css *.html *.js *.gif *.png
include .travis.yml BUGS LICENSE MANIFEST.in TODO buildandrun tox.ini
-include www/genapidocs www/Makefile www/make.bat www/rebuild
+include docs/genapidocs docs/Makefile docs/make.bat docs/rebuild
recursive-exclude devscripts *
-recursive-exclude www/_build *
+recursive-exclude docs/_build *
diff --git a/PKG-INFO b/PKG-INFO
index 5061f60..9028fc1 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,19 +1,20 @@
Metadata-Version: 1.1
Name: Cheetah3
-Version: 3.0.1
+Version: 3.1.0
Summary: Cheetah is a template engine and code generation tool
Home-page: http://cheetahtemplate.org/
Author: Oleg Broytman
Author-email: phd@phdru.name
License: MIT
-Download-URL: https://pypi.python.org/pypi/Cheetah3/3.0.1
+Download-URL: https://pypi.python.org/pypi/Cheetah3/3.1.0
Description-Content-Type: UNKNOWN
Description: Cheetah3 is a free (BSD-style) and open source template engine and code
generation tool.
It can be used standalone or combined with other tools and frameworks. Web
- development is its principle use, but Cheetah is very flexible and is also being
- used to generate C++ game code, Java, sql, form emails and even Python code.
+ development is its principle use, but Cheetah is very flexible and
+ is also being used to generate C++ game code, Java, sql, form emails
+ and even Python code.
It's a fork of the original CheetahTemplate library.
@@ -33,12 +34,15 @@ Description: Cheetah3 is a free (BSD-style) and open source template engine and
See http://cheetahtemplate.org/news.html for full details
-Platform: UNKNOWN
+Keywords: template
+Platform: Any
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: System Administrators
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
+Classifier: Programming Language :: Python :: Implementation :: CPython
+Classifier: Programming Language :: Python :: Implementation :: PyPy
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 2
Classifier: Programming Language :: Python :: 2.7
diff --git a/README.rst b/README.rst
index cc2e62d..e58d79e 100644
--- a/README.rst
+++ b/README.rst
@@ -1,4 +1,4 @@
-Cheetah Template 3.0.1
+Cheetah Template 3.1.0
======================
Cheetah3 is a free (BSD-style) and open source template engine and code
diff --git a/SetupConfig.py b/SetupConfig.py
index a514e92..3410fb3 100644
--- a/SetupConfig.py
+++ b/SetupConfig.py
@@ -1,10 +1,15 @@
-#-------Main Package Settings-----------#
+# -------Main Package Settings-----------#
+from distutils.core import Extension
+import os
+import os.path
import sys
+from Cheetah.Version import Version as version
+from Cheetah.compat import PY2
+
# Cheetah3 has already been taken at PyPI,
# CheetahTemplate3 seems to be too long.
name = 'Cheetah3'
-from Cheetah.Version import Version as version
description = "Cheetah is a template engine and code generation tool"
license = "MIT"
author = "Tavis Rudd"
@@ -13,8 +18,11 @@ maintainer = "Oleg Broytman"
maintainer_email = "phd@phdru.name"
url = "http://cheetahtemplate.org/"
dev_tag = ""
-download_url = "https://pypi.python.org/pypi/%s/%s%s" % (name, version, dev_tag)
+download_url = "https://pypi.python.org/pypi/%s/%s%s" \
+ % (name, version, dev_tag)
del dev_tag
+keywords = ["template"]
+platforms = "Any"
packages = ['Cheetah',
'Cheetah.Macros',
'Cheetah.Templates',
@@ -28,6 +36,8 @@ classifiers = [line.strip() for line in '''\
Intended Audience :: System Administrators
License :: OSI Approved :: MIT License
Operating System :: OS Independent
+ Programming Language :: Python :: Implementation :: CPython
+ Programming Language :: Python :: Implementation :: PyPy
Programming Language :: Python
Programming Language :: Python :: 2
Programming Language :: Python :: 2.7
@@ -44,46 +54,41 @@ classifiers = [line.strip() for line in '''\
Topic :: Software Development :: User Interfaces
Topic :: Text Processing'''.splitlines() if not line.strip().startswith('#')]
-from Cheetah.compat import PY2
if PY2:
del line
del PY2 # Hide it from setup()
-import os
-import os.path
-from distutils.core import Extension
-
-ext_modules=[
+ext_modules = [
Extension("Cheetah._namemapper",
- [os.path.join('Cheetah', 'c', '_namemapper.c')]),
- # Extension("Cheetah._verifytype",
- # [os.path.join('Cheetah', 'c', '_verifytype.c')]),
- # Extension("Cheetah._filters",
- # [os.path.join('Cheetah', 'c', '_filters.c')]),
- # Extension('Cheetah._template',
- # [os.path.join('Cheetah', 'c', '_template.c')]),
+ [os.path.join('Cheetah', 'c', '_namemapper.c')]),
+ # Extension("Cheetah._verifytype",
+ # [os.path.join('Cheetah', 'c', '_verifytype.c')]),
+ # Extension("Cheetah._filters",
+ # [os.path.join('Cheetah', 'c', '_filters.c')]),
+ # Extension('Cheetah._template',
+ # [os.path.join('Cheetah', 'c', '_template.c')]),
]
-## Data Files and Scripts
+# Data Files and Scripts
scripts = ('bin/cheetah-compile',
'bin/cheetah',
'bin/cheetah-analyze',
- )
+ )
data_files = ['recursive: Cheetah *.tmpl *.txt *.rst LICENSE README.rst TODO']
if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
try:
- from setuptools import setup
if sys.platform == 'win32':
# use 'entry_points' instead of 'scripts'
del scripts
entry_points = {
'console_scripts': [
'cheetah = Cheetah.CheetahWrapper:_cheetah',
- 'cheetah-compile = Cheetah.CheetahWrapper:_cheetah_compile',
+ 'cheetah-compile = '
+ 'Cheetah.CheetahWrapper:_cheetah_compile',
]
- }
+ }
except ImportError:
pass
@@ -92,8 +97,9 @@ Cheetah3 is a free (BSD-style) and open source template engine and code
generation tool.
It can be used standalone or combined with other tools and frameworks. Web
-development is its principle use, but Cheetah is very flexible and is also being
-used to generate C++ game code, Java, sql, form emails and even Python code.
+development is its principle use, but Cheetah is very flexible and
+is also being used to generate C++ game code, Java, sql, form emails
+and even Python code.
It's a fork of the original CheetahTemplate library.
diff --git a/SetupTools.py b/SetupTools.py
index bf0ad88..470198e 100644
--- a/SetupTools.py
+++ b/SetupTools.py
@@ -3,37 +3,38 @@ import os
import os.path
import sys
-from distutils.core import setup
-if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
- try:
- from setuptools import setup
- except ImportError:
- from distutils.core import setup
-
-from distutils.core import Command
from distutils.command.build_ext import build_ext
from distutils.command.install_data import install_data
+from distutils.core import setup
from distutils.errors import CCompilerError, DistutilsExecError, \
DistutilsPlatformError
-#imports from Cheetah ...
+# imports from Cheetah ...
from Cheetah.FileUtils import findFiles
from Cheetah.compat import string_type
+if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
+ try:
+ from setuptools import setup # noqa: F811
+ except ImportError:
+ pass
+
if sys.platform == 'win32':
- # 2.6's distutils.msvc9compiler can raise an IOError when failing to
- # find the compiler
- ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError,
- IOError)
+ # 2.6's distutils.msvc9compiler can raise an IOError when failing to
+ # find the compiler
+ ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError,
+ IOError)
else:
- ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
+ ext_errors = (CCompilerError, DistutilsExecError, DistutilsPlatformError)
##################################################
-## CLASSES ##
+# CLASSES ##
+
class BuildFailed(Exception):
pass
+
class mod_build_ext(build_ext):
"""A modified version of the distutils build_ext command that raises an
exception when building of the extension fails.
@@ -61,11 +62,11 @@ class mod_install_data(install_data):
if self.install_dir is None:
installobj = self.distribution.get_command_obj('install')
- #self.install_dir = installobj.install_platlib
+ # self.install_dir = installobj.install_platlib
self.install_dir = installobj.install_lib
install_data.finalize_options(self)
- def run (self):
+ def run(self):
if not self.dry_run:
self.mkpath(self.install_dir)
@@ -86,10 +87,10 @@ class mod_install_data(install_data):
filenames = glob(entry)
for filename in filenames:
- ## generate the dstPath from the filename
+ # generate the dstPath from the filename
# - deal with 'package_dir' translations
topDir, subPath = (filename.split(os.sep)[0],
- os.sep.join( filename.split(os.sep)[1:] )
+ os.sep.join(filename.split(os.sep)[1:])
)
package_dirDict = self.distribution.package_dir
@@ -103,7 +104,7 @@ class mod_install_data(install_data):
packageDir = topDir
dstPath = os.path.join(self.install_dir, packageDir, subPath)
- ## add the file to the list of outfiles
+ # add the file to the list of outfiles
dstdir = os.path.split(dstPath)[0]
if not self.dry_run:
self.mkpath(dstdir)
@@ -113,19 +114,19 @@ class mod_install_data(install_data):
self.outfiles.append(outfile)
##################################################
-## FUNCTIONS ##
+# FUNCTIONS ##
-def run_setup(configurations):
- """ Run distutils setup.
- The parameters passed to setup() are extracted from the list of modules,
- classes or instances given in configurations.
+def run_setup(configurations):
+ """Run distutils setup.
- Names with leading underscore are removed from the parameters.
- Parameters which are not strings, lists, tuples, or dicts are removed as
- well. Configurations which occur later in the configurations list
- override settings of configurations earlier in the list.
+ The parameters passed to setup() are extracted from the list of modules,
+ classes or instances given in configurations.
+ Names with leading underscore are removed from the parameters.
+ Parameters which are not strings, lists, tuples, or dicts are removed as
+ well. Configurations which occur later in the configurations list
+ override settings of configurations earlier in the list.
"""
# Build parameter dictionary
kws = {}
diff --git a/TODO b/TODO
index 975a80f..d8a63fc 100644
--- a/TODO
+++ b/TODO
@@ -1,253 +1,7 @@
-NOTE: Please see https://github.com/CheetahTemplate3/cheetah3/issues
-for reporting bugs and feature requests.
+- https://pypi.python.org/pypi/cibuildwheel or
+ https://github.com/matthew-brett/multibuild or
+ https://pypi.python.org/pypi/wheelhouse-uploader
+- https://pypi.python.org/pypi/appveyor-artifacts
-===============================================================================
-===============================================================================
-
-Desired for Cheetah 2.0
-=======================
-- Smart HTML filter that escapes all values except those individually marked as
- preformatted, a la Kid/PTL/QPY. (MO)
-
-
-TODO Items (many are just ideas. This is not an official roadmap!)
-================================================================================
-
-- "cheetah test" problem: subcommands fail mysteriously on Windows. Rewrite
- to avoid using subcommands. Instead, set sys.argv and call the appropriate
- main() for each test.
-
-- Documentation: document #encoding. Explain problems "cheetah test" if they
- haven't been fixed yet.
-
-- There's a kludge in CheetahWrapper.py to abort with a helpful error message
- if the user runs 'cheetah test' but doesn't have write permission in the
- current directory. The tests should instead put their temporary files
- under the system tmp directory.
-
-- Reset the current filter to the default (or to the constructor's filter
- if specified) at the beginning of each fill. Currently, filter changes
- leak from one fill to the next.
-
-- CheetahWrapper stuff: (MO)
- * "cheetah preview [options] [FILES]" print template-specific portion of main
- method(s) to stdout, with line numbers based on the .py template module.
- Make a Template method to do the same thing, a la .generatedModuleCode().
- * Refactor, make compile/fill/code routines callbacks using a bundle arg.
- * If an input file ends in a dot, intelligently add the input extension if
- not found.
-
-- Debugging tools. See section below.
-
-- Provide a utility to list the names of all placeholders in the template.
- Requested by Tracy Ruggles on Feb 21, 2003.
-
-- 'errorCatcher None' to stop catching errors in the middle of a template.
-
-- Utils.WebInputMixin: factor out Cheetah-specific code so it can be used in
- non-Cheetah applications. Don't modify the searchList: have a Template
- wrapper method do that. Consider turning it into a function that does not
- require 'self'. Consider making Webware-specific code into plugins so that,
- e.g., other cookie-handling methods can be grafted in. Maybe use callback
- classes like the planned rewrite for CheetahWrapper. Low priority. (MO)
-
-- Look through Zope Page Templates (TAL) for ideas to borrow.
- http://www.zope.org/Documentation/Books/ZopeBook/current/AppendixC.stx
- http://www.owlfish.com/software/simpleTAL/index.html
-
-Debugging Tools (Dump Tools)
-============================
-It would be nice to provide debugging tools for users who can't figure
-out why a certain placeholder value isn't found or is being overridden.
-My idea is to define $dumpSearchList() and $dumpSearchListFlat() in
-Template, which would print a stanza in the output showing all searchList
-variables and their values. $dumpSearchList would group by searchList
-element; $dumpSearchListFlat would combine all into a single
-alphabetical listing.
- I made an experimental version but it printed only instance variables,
-not methods and not inherited attributes. Also, it wouldn't print right
-using the usual pattern of write-to-custom-StringIO-object-and-return-
-the-.getvalue() and I couldn't figure out why.
- The stanza should be set apart by a row of stars with the words
-"BEGIN/END SEARCH LIST DUMP". Then for $dumpSearchList, precede each
-group with "*** searchList[i], type <element type>, 142 variables ***".
- Because some elements like 'self' may have hundreds of inherited
-methods that would create a forest-through-trees situation for the user,
-we may need an option to supress the variable listing for elements with
-> 20 variables (just print the summary line instead). ?
- The final version should be in Template so it has implicit
-access to the searchList and perhaps later to other variables (locals,
-globals, "#set global"s, builtins) too. This is such a central
-debugging tool that you should not have to monopolize an #extends
-(the template's only #extends) to use it. You could import it, however,
-if you pass in the searchList explicitly as an argument. In that case,
-perhaps we can base it on a generic module for dumping variables/values.
- Note that we cannot simply depend on str() and pprint, because
-we need to show instances as dictionaries. Likewise, dir() and vars()
-may get us part of the distance, but only if they show methods and
-inherited attributes too.
- These functions should print only top-level variables, not
-the subelements of collections. I.e, if the first searchList element
-is a dictionary, show its keys/values, but do not expand any
-subvalues if they are dictionaries too, unless the display tool happens
-to default to that.
-
-#entry $func($arg1, $arg2="default", $**kw)
-===============================================================================
-Make a wrapper function in the .py template module that builds a searchList
-from its positional arguments, then instantiates and fills a template and
-returns the result. The preceding example would create a function thus:
- def func(arg1, arg2="default", searchList=None, **kw):
- """Function docstring."""
- sl = {'arg1': arg1, 'arg2': arg2}
- if searchList is None:
- searchList = [sl]
- elif type(searchList) == types.ListType:
- searchList.insert(0, sl)
- else:
- raise TypeError("arg 'searchList'")
- t = TheTemplate(searchList=searchList, **kw)
- return str(t)
-##doc-entry: and #*doc-entry: comments are appended to the function docstring.
- Finally, make this function accessible directly from the shell.
-If there are any non-option arguments on the command line, call the function
-instead of filling the template the normal way.
- This would perhaps make more sense as arguments to .respond(). But
-.respond() has that pesky 'trans' argument that mustn't be interfered with,
-and other programs may assume .respond() takes only one argument. Also,
-when called via str(), str() cannot take arguments.
-
-#indent
-========================================================================
-The current indenter (which exists but is undocumented) is a kludge that has an
-indentation object, with implicit placeholder calls added at each line to
-generate the indentation, and #silent calls to adjust the object. It should be
-reimplemented to generate code to call the indentation object directly. Also,
-the user interface should be cleaned up, the implementation and Users' Guide
-synchronized, and test cases built.
-
-The desired implementation revolves around self._indenter, which knows the
-current indentation level (a non-negative integer), chars (the string output
-per level, default four spaces), and stack (the previous indentation levels).
-The .indent() method returns the indentation string currently appropriate.
-The desired interface for phase 1 (subject to change):
- #indent strip ; strip leading whitespace from input lines
- #indent add ; add indentation to output lines as appropriate
- #indent on ; do both
- #indent off ; do neither
- #indent reset ; set level to 0 and clear stack
- #indent ++ ; increment level
- #indent -- ; decrement level
- #indent pop [EXPR] ; revert to Nth previous level (default 1)
- ; if pop past end of stack, set level to 0 and
- ; clear stack. All +/-/= operations push the old level
- ; onto the stack.
- #indent debug ; dump level, chars and stack to template output
-
-Possible extensions:
- #indent =EXPR ; set level to N (likely to be added to phase 1)
- #indent +EXPR ; add N to level (not very necessary)
- #indent -EXPR ; subtract N from level (not very necessary)
- #indent balance BOOL ; require all indent changes in a #def/#block to be
- ; popped before exiting the method. (difficult to
- ; implement)
- #indent implicitPop BOOL ; automatically pop indent changes within a
- ; #def/block when that method exits. (difficult to
- ; implement)
- #indent ?? ; a 3-way switch that combines unbalanced, balanced and
- ; implicit pop. (difficult to implement)
- #indent ?? ; smart stripping: strip input indentation according to
- ; nested directive level; e.g.,
- ; 01: #if foo=1
- ; 02: public int foo()
- ; 03: {
- ; 04: return FOO;
- ; 05: }
- ; 06: #end if
- ; With smart stripping, line 4 would be indented and the
- ; others not. With "on" or "strip" stripping, all lines
- ; 2-5 would be unindented. With "off" stripping,
- ; lines 2-5 would not be stripped.
-
-There should be one indentation object per Template instance, shared by
-methods and include files.
-
-
-Upload File
-========================================================================
-@@TR: This is way outside Cheetah's scope!
-
-A mixin method in Cheetah.Utils (for Template) that handles file uploads --
-these are too complicated for .webInput(). The method should do a "safe"
-file upload; e.g., http://us3.php.net/manual/en/features.file-upload.php ,
-within the limitations of Python's cgi module. The user has the choice of
-three destinations for the file contents: (A) copied to a local
-path you specify, (B) placed in a namespace variable like .cgiImport()
-does, or (C) returned. (B) parallels .webInput, but (A) will certainly be
-desirable situations where we just want to save the file, not read it into
-memory. Reject files larger than a user-specified size or not in a list of
-user-approved MIME types. Define appropriate exceptions for typical
-file-upload errors. Method name .webUploadFileAsString?
- One situation to support is when form has a text(area) field
-related to a file-upload control on the same form, and the user has the choice
-of typing into the field or uploading a text file. We need a method that
-updates the text field's value if there is an uploaded file, but not if there
-isn't. This may be handled by the regular method(s) or may require a separate
-method.
-
-RPM Building
-============
-From: John Landahl <john@landahl.org>
-To: cheetahtemplate-discuss@lists.sourceforge.net
-Subject: [Cheetahtemplate-discuss] Building Cheetah RPMs
-Date: Wed, 05 Nov 2003 01:27:24 -0800
-
-If anyone is interested in building Cheetah RPMs, simply add the following
-lines to a file called MANIFEST.in in the Cheetah directory and you'll be
-able to use the "bdist_rpm" option to setup.py (i.e. "python setup.py
-bdist_rpm"):
-
- include SetupTools.py
- include SetupConfig.py
- include bin/*
-
-Also, I've found that using /usr/lib/site-python for add-on Python
-packages is much more convenient than the default of
-/usr/lib/pythonX/site-packages, especially when jumping back and forth
-between 2.2 and 2.3. If you'd like Cheetah in /usr/lib/site-python,
-createa a setup.cfg with the following contents:
-
- [install]
- install-lib = /usr/lib/site-python
-
-Of course if you do have version specific libraries they should stay in
-/usr/lib/pythonX/site-packages, but Cheetah seems happy in both 2.2 and
-2.3 and so is a good candidate for /usr/lib/site-python.
-
-
-User-defined directives
-=======================================================================
-IF we decide to support user-defined directives someday, consider Spyce's
-interface. Spyce uses a base class which provides generic services to
-custom "active tags".
-http://spyce.sourceforge.net/docs/doc-tag.html
-http://spyce.sourceforge.net/docs/doc-tag_new.html
-
-
-Test Suite
-================================================================================
-- add cases that test the cheetah-compile script
-- add cases that test the integration with various webdev frameworks
-
-Examples
-================================================================================
-- create some non-html code generation examples
- - SQL
- - LaTeX
- - form email
-- Template definitions in a database. .py template modules in a
- database? Caching template classes and/or instances extracted from
- a database.
-- Pickled templates?
-
+- Support PyPy3.
diff --git a/www/Makefile b/docs/Makefile
index f390dee..f390dee 100644
--- a/www/Makefile
+++ b/docs/Makefile
diff --git a/www/api/Cheetah.CacheRegion.rst b/docs/api/Cheetah.CacheRegion.rst
index 256f06f..f9d3643 100644
--- a/www/api/Cheetah.CacheRegion.rst
+++ b/docs/api/Cheetah.CacheRegion.rst
@@ -1,5 +1,5 @@
-Cheetah.CacheRegion module
-==========================
+Cheetah\.CacheRegion module
+===========================
.. automodule:: Cheetah.CacheRegion
:members:
diff --git a/www/api/Cheetah.CacheStore.rst b/docs/api/Cheetah.CacheStore.rst
index 8eb7b23..dd3acce 100644
--- a/www/api/Cheetah.CacheStore.rst
+++ b/docs/api/Cheetah.CacheStore.rst
@@ -1,5 +1,5 @@
-Cheetah.CacheStore module
-=========================
+Cheetah\.CacheStore module
+==========================
.. automodule:: Cheetah.CacheStore
:members:
diff --git a/www/api/Cheetah.CheetahWrapper.rst b/docs/api/Cheetah.CheetahWrapper.rst
index 0693b7b..437699b 100644
--- a/www/api/Cheetah.CheetahWrapper.rst
+++ b/docs/api/Cheetah.CheetahWrapper.rst
@@ -1,5 +1,5 @@
-Cheetah.CheetahWrapper module
-=============================
+Cheetah\.CheetahWrapper module
+==============================
.. automodule:: Cheetah.CheetahWrapper
:members:
diff --git a/www/api/Cheetah.Compiler.rst b/docs/api/Cheetah.Compiler.rst
index 64153e6..88adbb5 100644
--- a/www/api/Cheetah.Compiler.rst
+++ b/docs/api/Cheetah.Compiler.rst
@@ -1,5 +1,5 @@
-Cheetah.Compiler module
-=======================
+Cheetah\.Compiler module
+========================
.. automodule:: Cheetah.Compiler
:members:
diff --git a/www/api/Cheetah.DirectiveAnalyzer.rst b/docs/api/Cheetah.DirectiveAnalyzer.rst
index 3815c45..c8a6c9c 100644
--- a/www/api/Cheetah.DirectiveAnalyzer.rst
+++ b/docs/api/Cheetah.DirectiveAnalyzer.rst
@@ -1,5 +1,5 @@
-Cheetah.DirectiveAnalyzer module
-================================
+Cheetah\.DirectiveAnalyzer module
+=================================
.. automodule:: Cheetah.DirectiveAnalyzer
:members:
diff --git a/www/api/Cheetah.Django.rst b/docs/api/Cheetah.Django.rst
index 65d95cf..861e95a 100644
--- a/www/api/Cheetah.Django.rst
+++ b/docs/api/Cheetah.Django.rst
@@ -1,5 +1,5 @@
-Cheetah.Django module
-=====================
+Cheetah\.Django module
+======================
.. automodule:: Cheetah.Django
:members:
diff --git a/www/api/Cheetah.DummyTransaction.rst b/docs/api/Cheetah.DummyTransaction.rst
index 60fe008..193d5eb 100644
--- a/www/api/Cheetah.DummyTransaction.rst
+++ b/docs/api/Cheetah.DummyTransaction.rst
@@ -1,5 +1,5 @@
-Cheetah.DummyTransaction module
-===============================
+Cheetah\.DummyTransaction module
+================================
.. automodule:: Cheetah.DummyTransaction
:members:
diff --git a/www/api/Cheetah.ErrorCatchers.rst b/docs/api/Cheetah.ErrorCatchers.rst
index 0aace3f..1fb9140 100644
--- a/www/api/Cheetah.ErrorCatchers.rst
+++ b/docs/api/Cheetah.ErrorCatchers.rst
@@ -1,5 +1,5 @@
-Cheetah.ErrorCatchers module
-============================
+Cheetah\.ErrorCatchers module
+=============================
.. automodule:: Cheetah.ErrorCatchers
:members:
diff --git a/www/api/Cheetah.FileUtils.rst b/docs/api/Cheetah.FileUtils.rst
index 6285254..3302322 100644
--- a/www/api/Cheetah.FileUtils.rst
+++ b/docs/api/Cheetah.FileUtils.rst
@@ -1,5 +1,5 @@
-Cheetah.FileUtils module
-========================
+Cheetah\.FileUtils module
+=========================
.. automodule:: Cheetah.FileUtils
:members:
diff --git a/www/api/Cheetah.Filters.rst b/docs/api/Cheetah.Filters.rst
index 0e76948..5612700 100644
--- a/www/api/Cheetah.Filters.rst
+++ b/docs/api/Cheetah.Filters.rst
@@ -1,5 +1,5 @@
-Cheetah.Filters module
-======================
+Cheetah\.Filters module
+=======================
.. automodule:: Cheetah.Filters
:members:
diff --git a/www/api/Cheetah.ImportHooks.rst b/docs/api/Cheetah.ImportHooks.rst
index 2bd0a4b..0217927 100644
--- a/www/api/Cheetah.ImportHooks.rst
+++ b/docs/api/Cheetah.ImportHooks.rst
@@ -1,5 +1,5 @@
-Cheetah.ImportHooks module
-==========================
+Cheetah\.ImportHooks module
+===========================
.. automodule:: Cheetah.ImportHooks
:members:
diff --git a/www/api/Cheetah.ImportManager.rst b/docs/api/Cheetah.ImportManager.rst
index b456826..7200c3d 100644
--- a/www/api/Cheetah.ImportManager.rst
+++ b/docs/api/Cheetah.ImportManager.rst
@@ -1,5 +1,5 @@
-Cheetah.ImportManager module
-============================
+Cheetah\.ImportManager module
+=============================
.. automodule:: Cheetah.ImportManager
:members:
diff --git a/www/api/Cheetah.Macros.I18n.rst b/docs/api/Cheetah.Macros.I18n.rst
index b108993..338726b 100644
--- a/www/api/Cheetah.Macros.I18n.rst
+++ b/docs/api/Cheetah.Macros.I18n.rst
@@ -1,5 +1,5 @@
-Cheetah.Macros.I18n module
-==========================
+Cheetah\.Macros\.I18n module
+============================
.. automodule:: Cheetah.Macros.I18n
:members:
diff --git a/www/api/Cheetah.Macros.rst b/docs/api/Cheetah.Macros.rst
index ff6d45b..1cf8052 100644
--- a/www/api/Cheetah.Macros.rst
+++ b/docs/api/Cheetah.Macros.rst
@@ -1,5 +1,5 @@
-Cheetah.Macros package
-======================
+Cheetah\.Macros package
+=======================
.. automodule:: Cheetah.Macros
:members:
diff --git a/www/api/Cheetah.NameMapper.rst b/docs/api/Cheetah.NameMapper.rst
index 950f0781..d995359 100644
--- a/www/api/Cheetah.NameMapper.rst
+++ b/docs/api/Cheetah.NameMapper.rst
@@ -1,5 +1,5 @@
-Cheetah.NameMapper module
-=========================
+Cheetah\.NameMapper module
+==========================
.. automodule:: Cheetah.NameMapper
:members:
diff --git a/www/api/Cheetah.Parser.rst b/docs/api/Cheetah.Parser.rst
index dd45e47..f459b45 100644
--- a/www/api/Cheetah.Parser.rst
+++ b/docs/api/Cheetah.Parser.rst
@@ -1,5 +1,5 @@
-Cheetah.Parser module
-=====================
+Cheetah\.Parser module
+======================
.. automodule:: Cheetah.Parser
:members:
diff --git a/www/api/Cheetah.Servlet.rst b/docs/api/Cheetah.Servlet.rst
index 69044f6..ca3cc39 100644
--- a/www/api/Cheetah.Servlet.rst
+++ b/docs/api/Cheetah.Servlet.rst
@@ -1,5 +1,5 @@
-Cheetah.Servlet module
-======================
+Cheetah\.Servlet module
+=======================
.. automodule:: Cheetah.Servlet
:members:
diff --git a/www/api/Cheetah.SettingsManager.rst b/docs/api/Cheetah.SettingsManager.rst
index b30bbcc..d067e6c 100644
--- a/www/api/Cheetah.SettingsManager.rst
+++ b/docs/api/Cheetah.SettingsManager.rst
@@ -1,5 +1,5 @@
-Cheetah.SettingsManager module
-==============================
+Cheetah\.SettingsManager module
+===============================
.. automodule:: Cheetah.SettingsManager
:members:
diff --git a/www/api/Cheetah.SourceReader.rst b/docs/api/Cheetah.SourceReader.rst
index e90032b..5e3d318 100644
--- a/www/api/Cheetah.SourceReader.rst
+++ b/docs/api/Cheetah.SourceReader.rst
@@ -1,5 +1,5 @@
-Cheetah.SourceReader module
-===========================
+Cheetah\.SourceReader module
+============================
.. automodule:: Cheetah.SourceReader
:members:
diff --git a/www/api/Cheetah.Template.rst b/docs/api/Cheetah.Template.rst
index b1d3908..0eb6c21 100644
--- a/www/api/Cheetah.Template.rst
+++ b/docs/api/Cheetah.Template.rst
@@ -1,5 +1,5 @@
-Cheetah.Template module
-=======================
+Cheetah\.Template module
+========================
.. automodule:: Cheetah.Template
:members:
diff --git a/www/api/Cheetah.TemplateCmdLineIface.rst b/docs/api/Cheetah.TemplateCmdLineIface.rst
index 575a1cb..9eb13f9 100644
--- a/www/api/Cheetah.TemplateCmdLineIface.rst
+++ b/docs/api/Cheetah.TemplateCmdLineIface.rst
@@ -1,5 +1,5 @@
-Cheetah.TemplateCmdLineIface module
-===================================
+Cheetah\.TemplateCmdLineIface module
+====================================
.. automodule:: Cheetah.TemplateCmdLineIface
:members:
diff --git a/www/api/Cheetah.Templates.SkeletonPage.rst b/docs/api/Cheetah.Templates.SkeletonPage.rst
index bc0f2f7..1689faa 100644
--- a/www/api/Cheetah.Templates.SkeletonPage.rst
+++ b/docs/api/Cheetah.Templates.SkeletonPage.rst
@@ -1,5 +1,5 @@
-Cheetah.Templates.SkeletonPage module
-=====================================
+Cheetah\.Templates\.SkeletonPage module
+=======================================
.. automodule:: Cheetah.Templates.SkeletonPage
:members:
diff --git a/www/api/Cheetah.Templates.rst b/docs/api/Cheetah.Templates.rst
index 4d11a62..a1cab72 100644
--- a/www/api/Cheetah.Templates.rst
+++ b/docs/api/Cheetah.Templates.rst
@@ -1,5 +1,5 @@
-Cheetah.Templates package
-=========================
+Cheetah\.Templates package
+==========================
.. automodule:: Cheetah.Templates
:members:
diff --git a/www/api/Cheetah.Tests.Analyzer.rst b/docs/api/Cheetah.Tests.Analyzer.rst
index 04aa596..674b25e 100644
--- a/www/api/Cheetah.Tests.Analyzer.rst
+++ b/docs/api/Cheetah.Tests.Analyzer.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Analyzer module
-=============================
+Cheetah\.Tests\.Analyzer module
+===============================
.. automodule:: Cheetah.Tests.Analyzer
:members:
diff --git a/www/api/Cheetah.Tests.Boinker.rst b/docs/api/Cheetah.Tests.Boinker.rst
index e03cdc1..dfaee8b 100644
--- a/www/api/Cheetah.Tests.Boinker.rst
+++ b/docs/api/Cheetah.Tests.Boinker.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Boinker module
-============================
+Cheetah\.Tests\.Boinker module
+==============================
.. automodule:: Cheetah.Tests.Boinker
:members:
diff --git a/www/api/Cheetah.Tests.CheetahWrapper.rst b/docs/api/Cheetah.Tests.CheetahWrapper.rst
index 4db7976..66dadcf 100644
--- a/www/api/Cheetah.Tests.CheetahWrapper.rst
+++ b/docs/api/Cheetah.Tests.CheetahWrapper.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.CheetahWrapper module
-===================================
+Cheetah\.Tests\.CheetahWrapper module
+=====================================
.. automodule:: Cheetah.Tests.CheetahWrapper
:members:
diff --git a/www/api/Cheetah.Tests.Cheps.rst b/docs/api/Cheetah.Tests.Cheps.rst
index 46d79e7..a7bcacc 100644
--- a/www/api/Cheetah.Tests.Cheps.rst
+++ b/docs/api/Cheetah.Tests.Cheps.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Cheps module
-==========================
+Cheetah\.Tests\.Cheps module
+============================
.. automodule:: Cheetah.Tests.Cheps
:members:
diff --git a/www/api/Cheetah.Tests.Filters.rst b/docs/api/Cheetah.Tests.Filters.rst
index f2f8f73..8d97947 100644
--- a/www/api/Cheetah.Tests.Filters.rst
+++ b/docs/api/Cheetah.Tests.Filters.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Filters module
-============================
+Cheetah\.Tests\.Filters module
+==============================
.. automodule:: Cheetah.Tests.Filters
:members:
diff --git a/www/api/Cheetah.Tests.Misc.rst b/docs/api/Cheetah.Tests.Misc.rst
index e462e79..ec9133b 100644
--- a/www/api/Cheetah.Tests.Misc.rst
+++ b/docs/api/Cheetah.Tests.Misc.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Misc module
-=========================
+Cheetah\.Tests\.Misc module
+===========================
.. automodule:: Cheetah.Tests.Misc
:members:
diff --git a/www/api/Cheetah.Tests.NameMapper.rst b/docs/api/Cheetah.Tests.NameMapper.rst
index 81c9a21..fb76c2a 100644
--- a/www/api/Cheetah.Tests.NameMapper.rst
+++ b/docs/api/Cheetah.Tests.NameMapper.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.NameMapper module
-===============================
+Cheetah\.Tests\.NameMapper module
+=================================
.. automodule:: Cheetah.Tests.NameMapper
:members:
diff --git a/docs/api/Cheetah.Tests.NameMapper_pure.rst b/docs/api/Cheetah.Tests.NameMapper_pure.rst
new file mode 100644
index 0000000..927661f
--- /dev/null
+++ b/docs/api/Cheetah.Tests.NameMapper_pure.rst
@@ -0,0 +1,7 @@
+Cheetah\.Tests\.NameMapper\_pure module
+=======================================
+
+.. automodule:: Cheetah.Tests.NameMapper_pure
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/www/api/Cheetah.Tests.Parser.rst b/docs/api/Cheetah.Tests.Parser.rst
index 1088a41..dd1bc7f 100644
--- a/www/api/Cheetah.Tests.Parser.rst
+++ b/docs/api/Cheetah.Tests.Parser.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Parser module
-===========================
+Cheetah\.Tests\.Parser module
+=============================
.. automodule:: Cheetah.Tests.Parser
:members:
diff --git a/www/api/Cheetah.Tests.Performance.rst b/docs/api/Cheetah.Tests.Performance.rst
index fdfb1ae..a2ebf49 100644
--- a/www/api/Cheetah.Tests.Performance.rst
+++ b/docs/api/Cheetah.Tests.Performance.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Performance module
-================================
+Cheetah\.Tests\.Performance module
+==================================
.. automodule:: Cheetah.Tests.Performance
:members:
diff --git a/www/api/Cheetah.Tests.Pinger.rst b/docs/api/Cheetah.Tests.Pinger.rst
index c17a6d5..a714077 100644
--- a/www/api/Cheetah.Tests.Pinger.rst
+++ b/docs/api/Cheetah.Tests.Pinger.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Pinger module
-===========================
+Cheetah\.Tests\.Pinger module
+=============================
.. automodule:: Cheetah.Tests.Pinger
:members:
diff --git a/www/api/Cheetah.Tests.Regressions.rst b/docs/api/Cheetah.Tests.Regressions.rst
index 8764330..249e4b6 100644
--- a/www/api/Cheetah.Tests.Regressions.rst
+++ b/docs/api/Cheetah.Tests.Regressions.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Regressions module
-================================
+Cheetah\.Tests\.Regressions module
+==================================
.. automodule:: Cheetah.Tests.Regressions
:members:
diff --git a/www/api/Cheetah.Tests.SyntaxAndOutput.rst b/docs/api/Cheetah.Tests.SyntaxAndOutput.rst
index 022bb99..5b2fbab 100644
--- a/www/api/Cheetah.Tests.SyntaxAndOutput.rst
+++ b/docs/api/Cheetah.Tests.SyntaxAndOutput.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.SyntaxAndOutput module
-====================================
+Cheetah\.Tests\.SyntaxAndOutput module
+======================================
.. automodule:: Cheetah.Tests.SyntaxAndOutput
:members:
diff --git a/www/api/Cheetah.Tests.Template.rst b/docs/api/Cheetah.Tests.Template.rst
index 4f6890e..eb24526 100644
--- a/www/api/Cheetah.Tests.Template.rst
+++ b/docs/api/Cheetah.Tests.Template.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Template module
-=============================
+Cheetah\.Tests\.Template module
+===============================
.. automodule:: Cheetah.Tests.Template
:members:
diff --git a/www/api/Cheetah.Tests.Test.rst b/docs/api/Cheetah.Tests.Test.rst
index 77153d6..23d5291 100644
--- a/www/api/Cheetah.Tests.Test.rst
+++ b/docs/api/Cheetah.Tests.Test.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Test module
-=========================
+Cheetah\.Tests\.Test module
+===========================
.. automodule:: Cheetah.Tests.Test
:members:
diff --git a/www/api/Cheetah.Tests.Unicode.rst b/docs/api/Cheetah.Tests.Unicode.rst
index 688d231..f3ee955 100644
--- a/www/api/Cheetah.Tests.Unicode.rst
+++ b/docs/api/Cheetah.Tests.Unicode.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.Unicode module
-============================
+Cheetah\.Tests\.Unicode module
+==============================
.. automodule:: Cheetah.Tests.Unicode
:members:
diff --git a/www/api/Cheetah.Tests.rst b/docs/api/Cheetah.Tests.rst
index 721f5d4..8d6c879 100644
--- a/www/api/Cheetah.Tests.rst
+++ b/docs/api/Cheetah.Tests.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests package
-=====================
+Cheetah\.Tests package
+======================
.. automodule:: Cheetah.Tests
:members:
@@ -18,6 +18,7 @@ Submodules
Cheetah.Tests.Filters
Cheetah.Tests.Misc
Cheetah.Tests.NameMapper
+ Cheetah.Tests.NameMapper_pure
Cheetah.Tests.Parser
Cheetah.Tests.Performance
Cheetah.Tests.Pinger
diff --git a/www/api/Cheetah.Tests.xmlrunner.rst b/docs/api/Cheetah.Tests.xmlrunner.rst
index 8a01937..23e34f4 100644
--- a/www/api/Cheetah.Tests.xmlrunner.rst
+++ b/docs/api/Cheetah.Tests.xmlrunner.rst
@@ -1,5 +1,5 @@
-Cheetah.Tests.xmlrunner module
-==============================
+Cheetah\.Tests\.xmlrunner module
+================================
.. automodule:: Cheetah.Tests.xmlrunner
:members:
diff --git a/www/api/Cheetah.Tools.CGITemplate.rst b/docs/api/Cheetah.Tools.CGITemplate.rst
index 4760bfe..3e72776 100644
--- a/www/api/Cheetah.Tools.CGITemplate.rst
+++ b/docs/api/Cheetah.Tools.CGITemplate.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.CGITemplate module
-================================
+Cheetah\.Tools\.CGITemplate module
+==================================
.. automodule:: Cheetah.Tools.CGITemplate
:members:
diff --git a/www/api/Cheetah.Tools.MondoReport.rst b/docs/api/Cheetah.Tools.MondoReport.rst
index fe75765..e875ead 100644
--- a/www/api/Cheetah.Tools.MondoReport.rst
+++ b/docs/api/Cheetah.Tools.MondoReport.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.MondoReport module
-================================
+Cheetah\.Tools\.MondoReport module
+==================================
.. automodule:: Cheetah.Tools.MondoReport
:members:
diff --git a/www/api/Cheetah.Tools.RecursiveNull.rst b/docs/api/Cheetah.Tools.RecursiveNull.rst
index 62053ce..eb5f72b 100644
--- a/www/api/Cheetah.Tools.RecursiveNull.rst
+++ b/docs/api/Cheetah.Tools.RecursiveNull.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.RecursiveNull module
-==================================
+Cheetah\.Tools\.RecursiveNull module
+====================================
.. automodule:: Cheetah.Tools.RecursiveNull
:members:
diff --git a/www/api/Cheetah.Tools.SiteHierarchy.rst b/docs/api/Cheetah.Tools.SiteHierarchy.rst
index 0289f08..9c8b983 100644
--- a/www/api/Cheetah.Tools.SiteHierarchy.rst
+++ b/docs/api/Cheetah.Tools.SiteHierarchy.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.SiteHierarchy module
-==================================
+Cheetah\.Tools\.SiteHierarchy module
+====================================
.. automodule:: Cheetah.Tools.SiteHierarchy
:members:
diff --git a/www/api/Cheetah.Tools.rst b/docs/api/Cheetah.Tools.rst
index 116b463..e5dd5a2 100644
--- a/www/api/Cheetah.Tools.rst
+++ b/docs/api/Cheetah.Tools.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools package
-=====================
+Cheetah\.Tools package
+======================
.. automodule:: Cheetah.Tools
:members:
diff --git a/www/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst b/docs/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst
index 4b71db7..c488cdd 100644
--- a/www/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst
+++ b/docs/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.cheetahsupport module
-================================================
+Cheetah\.Tools\.turbocheetah\.cheetahsupport module
+===================================================
.. automodule:: Cheetah.Tools.turbocheetah.cheetahsupport
:members:
diff --git a/www/api/Cheetah.Tools.turbocheetah.rst b/docs/api/Cheetah.Tools.turbocheetah.rst
index 6fe78ec..6ea7430 100644
--- a/www/api/Cheetah.Tools.turbocheetah.rst
+++ b/docs/api/Cheetah.Tools.turbocheetah.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah package
-==================================
+Cheetah\.Tools\.turbocheetah package
+====================================
.. automodule:: Cheetah.Tools.turbocheetah
:members:
diff --git a/www/api/Cheetah.Tools.turbocheetah.tests.rst b/docs/api/Cheetah.Tools.turbocheetah.tests.rst
index a384614..a7b1e4e 100644
--- a/www/api/Cheetah.Tools.turbocheetah.tests.rst
+++ b/docs/api/Cheetah.Tools.turbocheetah.tests.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.tests package
-========================================
+Cheetah\.Tools\.turbocheetah\.tests package
+===========================================
.. automodule:: Cheetah.Tools.turbocheetah.tests
:members:
diff --git a/www/api/Cheetah.Tools.turbocheetah.tests.test_template.rst b/docs/api/Cheetah.Tools.turbocheetah.tests.test_template.rst
index 2c1e38a..b04f2cf 100644
--- a/www/api/Cheetah.Tools.turbocheetah.tests.test_template.rst
+++ b/docs/api/Cheetah.Tools.turbocheetah.tests.test_template.rst
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.tests.test_template module
-=====================================================
+Cheetah\.Tools\.turbocheetah\.tests\.test\_template module
+==========================================================
.. automodule:: Cheetah.Tools.turbocheetah.tests.test_template
:members:
diff --git a/www/api/Cheetah.Unspecified.rst b/docs/api/Cheetah.Unspecified.rst
index 7e2293e..52fc6f7 100644
--- a/www/api/Cheetah.Unspecified.rst
+++ b/docs/api/Cheetah.Unspecified.rst
@@ -1,5 +1,5 @@
-Cheetah.Unspecified module
-==========================
+Cheetah\.Unspecified module
+===========================
.. automodule:: Cheetah.Unspecified
:members:
diff --git a/www/api/Cheetah.Utils.Indenter.rst b/docs/api/Cheetah.Utils.Indenter.rst
index 7b9bce8..74c8bd6 100644
--- a/www/api/Cheetah.Utils.Indenter.rst
+++ b/docs/api/Cheetah.Utils.Indenter.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.Indenter module
-=============================
+Cheetah\.Utils\.Indenter module
+===============================
.. automodule:: Cheetah.Utils.Indenter
:members:
diff --git a/www/api/Cheetah.Utils.Misc.rst b/docs/api/Cheetah.Utils.Misc.rst
index d107724..5baddfa 100644
--- a/www/api/Cheetah.Utils.Misc.rst
+++ b/docs/api/Cheetah.Utils.Misc.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.Misc module
-=========================
+Cheetah\.Utils\.Misc module
+===========================
.. automodule:: Cheetah.Utils.Misc
:members:
diff --git a/www/api/Cheetah.Utils.WebInputMixin.rst b/docs/api/Cheetah.Utils.WebInputMixin.rst
index 0dc5bdc..3083ae3 100644
--- a/www/api/Cheetah.Utils.WebInputMixin.rst
+++ b/docs/api/Cheetah.Utils.WebInputMixin.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.WebInputMixin module
-==================================
+Cheetah\.Utils\.WebInputMixin module
+====================================
.. automodule:: Cheetah.Utils.WebInputMixin
:members:
diff --git a/www/api/Cheetah.Utils.htmlDecode.rst b/docs/api/Cheetah.Utils.htmlDecode.rst
index c762890..dc09574 100644
--- a/www/api/Cheetah.Utils.htmlDecode.rst
+++ b/docs/api/Cheetah.Utils.htmlDecode.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.htmlDecode module
-===============================
+Cheetah\.Utils\.htmlDecode module
+=================================
.. automodule:: Cheetah.Utils.htmlDecode
:members:
diff --git a/www/api/Cheetah.Utils.htmlEncode.rst b/docs/api/Cheetah.Utils.htmlEncode.rst
index 0051d8a..4d8efa6 100644
--- a/www/api/Cheetah.Utils.htmlEncode.rst
+++ b/docs/api/Cheetah.Utils.htmlEncode.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.htmlEncode module
-===============================
+Cheetah\.Utils\.htmlEncode module
+=================================
.. automodule:: Cheetah.Utils.htmlEncode
:members:
diff --git a/www/api/Cheetah.Utils.rst b/docs/api/Cheetah.Utils.rst
index 338b4ab..54d238c 100644
--- a/www/api/Cheetah.Utils.rst
+++ b/docs/api/Cheetah.Utils.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils package
-=====================
+Cheetah\.Utils package
+======================
.. automodule:: Cheetah.Utils
:members:
diff --git a/www/api/Cheetah.Utils.statprof.rst b/docs/api/Cheetah.Utils.statprof.rst
index 7f3e3db..30628cf 100644
--- a/www/api/Cheetah.Utils.statprof.rst
+++ b/docs/api/Cheetah.Utils.statprof.rst
@@ -1,5 +1,5 @@
-Cheetah.Utils.statprof module
-=============================
+Cheetah\.Utils\.statprof module
+===============================
.. automodule:: Cheetah.Utils.statprof
:members:
diff --git a/www/api/Cheetah.Version.rst b/docs/api/Cheetah.Version.rst
index d9a7cfb..5560b29 100644
--- a/www/api/Cheetah.Version.rst
+++ b/docs/api/Cheetah.Version.rst
@@ -1,5 +1,5 @@
-Cheetah.Version module
-======================
+Cheetah\.Version module
+=======================
.. automodule:: Cheetah.Version
:members:
diff --git a/www/api/Cheetah.compat.rst b/docs/api/Cheetah.compat.rst
index 00d964d..58b262c 100644
--- a/www/api/Cheetah.compat.rst
+++ b/docs/api/Cheetah.compat.rst
@@ -1,5 +1,5 @@
-Cheetah.compat module
-=====================
+Cheetah\.compat module
+======================
.. automodule:: Cheetah.compat
:members:
diff --git a/www/api/Cheetah.convertTmplPathToModuleName.rst b/docs/api/Cheetah.convertTmplPathToModuleName.rst
index 6cc5611..f6efa39 100644
--- a/www/api/Cheetah.convertTmplPathToModuleName.rst
+++ b/docs/api/Cheetah.convertTmplPathToModuleName.rst
@@ -1,5 +1,5 @@
-Cheetah.convertTmplPathToModuleName module
-==========================================
+Cheetah\.convertTmplPathToModuleName module
+===========================================
.. automodule:: Cheetah.convertTmplPathToModuleName
:members:
diff --git a/www/api/Cheetah.rst b/docs/api/Cheetah.rst
index 1a39047..1a39047 100644
--- a/www/api/Cheetah.rst
+++ b/docs/api/Cheetah.rst
diff --git a/www/api/modules.rst b/docs/api/modules.rst
index 3aee30a..3aee30a 100644
--- a/www/api/modules.rst
+++ b/docs/api/modules.rst
diff --git a/www/authors.rst b/docs/authors.rst
index 5082451..9140385 100644
--- a/www/authors.rst
+++ b/docs/authors.rst
@@ -27,4 +27,5 @@ Contributions have been made by:
* mikola <mikola at tut.by>
* Adam Karpierz <python at python.pl>
* Jonathan Ross Rogers <jrogers at socialserve.com>
+* Mathias Stearn <redbeard0531 at gmail.com>
* Oleg Broytman <phd@phdru.name>
diff --git a/www/chep.rst b/docs/chep.rst
index abe8d22..abe8d22 100644
--- a/www/chep.rst
+++ b/docs/chep.rst
diff --git a/www/cheps/1_chep.rst b/docs/cheps/1_chep.rst
index 0dae336..0dae336 100644
--- a/www/cheps/1_chep.rst
+++ b/docs/cheps/1_chep.rst
diff --git a/www/cheps/2_import.rst b/docs/cheps/2_import.rst
index 25fc4b7..25fc4b7 100644
--- a/www/cheps/2_import.rst
+++ b/docs/cheps/2_import.rst
diff --git a/www/cheps/3_super.rst b/docs/cheps/3_super.rst
index 71f15f3..71f15f3 100644
--- a/www/cheps/3_super.rst
+++ b/docs/cheps/3_super.rst
diff --git a/www/conf.py b/docs/conf.py
index adaae5d..c9fdf71 100644
--- a/www/conf.py
+++ b/docs/conf.py
@@ -3,7 +3,8 @@
# Cheetah Template Engine documentation build configuration file, created by
# sphinx-quickstart on Sun May 31 22:23:43 2009.
#
-# This file is execfile()d with the current directory set to its containing dir.
+# This file is execfile()d with the current directory set
+# to its containing dir.
#
# Note that not all possible configuration values are present in this
# autogenerated file.
@@ -11,22 +12,23 @@
# All configuration values have a default; values that are commented out
# serve to show the default.
-import sys
import os
+import sys
+from Cheetah.Version import Version
# If extensions (or modules to document with autodoc) are in another directory,
# add these directories to sys.path here. If the directory is relative to the
# documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.append(os.path.abspath('.'))
+# sys.path.append(os.path.abspath('.'))
sys.path.insert(0, os.path.abspath('..'))
-# -- General configuration -----------------------------------------------------
+# -- General configuration ----------------------------------------------------
-# Add any Sphinx extension module names here, as strings. They can be extensions
-# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
+# Add any Sphinx extension module names here, as strings.
+# They can be extensions coming with Sphinx (named 'sphinx.ext.*')
+# or your custom ones.
extensions = [
'sphinx.ext.autodoc',
- #'github.tools.sphinx',
]
# Add any paths that contain templates here, relative to this directory.
@@ -36,20 +38,20 @@ templates_path = ['_templates']
source_suffix = '.rst'
# The encoding of source files.
-#source_encoding = 'utf-8'
+# source_encoding = 'utf-8'
# The master toctree document.
master_doc = 'index'
# General information about the project.
project = u'Cheetah3'
-copyright = u'2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team.'
+copyright = u'2017, Oleg Broytman; 2009-2012, R. Tyler Croy; ' \
+ u'2001-2008, The Cheetah Development Team.'
# The version info for the project you're documenting, acts as replacement for
# |version| and |release|, also used in various other places throughout the
# built documents.
#
-from Cheetah.Version import Version
# The short X.Y version.
version = '.'.join(Version.split('.')[:2])
# The full version, including alpha/beta/rc tags.
@@ -57,23 +59,23 @@ release = Version
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
-#language = None
+# language = None
# There are two options for replacing |today|: either, you set today to some
# non-false value, then it is used:
-#today = ''
+# today = ''
# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+# today_fmt = '%B %d, %Y'
# List of documents that shouldn't be included in the build.
-#unused_docs = []
+# unused_docs = []
# List of directories, relative to source directory, that shouldn't be searched
# for source files.
exclude_trees = ['_build']
-# The reST default role (used for this markup: `text`) to use for all documents.
-#default_role = None
+# The reST default role (used for markup `text`) to use for all documents.
+# default_role = None
# If true, '()' will be appended to :func: etc. cross-reference text.
add_function_parentheses = True
@@ -84,16 +86,16 @@ add_module_names = True
# If true, sectionauthor and moduleauthor directives will be shown in the
# output. They are ignored by default.
-#show_authors = False
+# show_authors = False
# The name of the Pygments (syntax highlighting) style to use.
pygments_style = 'sphinx'
# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# modindex_common_prefix = []
-# -- Options for HTML output ---------------------------------------------------
+# -- Options for HTML output --------------------------------------------------
# The theme to use for HTML and HTML Help pages. Major themes that come with
# Sphinx are currently 'default' and 'sphinxdoc'.
@@ -102,7 +104,7 @@ html_theme = 'sphinxdoc'
# Theme options are theme-specific and customize the look and feel of a theme
# further. For a list of options available for each theme, see the
# documentation.
-#html_theme_options = {}
+# html_theme_options = {}
# Add any paths that contain custom themes here, relative to this directory.
html_theme_path = ['.']
@@ -112,16 +114,16 @@ html_theme_path = ['.']
html_title = u'Cheetah3 - The Python-Powered Template Engine'
# A shorter title for the navigation bar. Default is the same as html_title.
-#html_short_title = None
+# html_short_title = None
# The name of an image file (relative to this directory) to place at the top
# of the sidebar.
-#html_logo = None
+# html_logo = None
# The name of an image file (within the static path) to use as favicon of the
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
# pixels large.
-#html_favicon = None
+# html_favicon = None
# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
@@ -137,11 +139,11 @@ html_last_updated_fmt = '%b %d, %Y'
html_use_smartypants = True
# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
+# html_sidebars = {}
# Additional templates that should be rendered to pages, maps page names to
# template names.
-#html_additional_pages = {}
+# html_additional_pages = {}
# If false, no module index is generated.
html_use_modindex = True
@@ -150,7 +152,7 @@ html_use_modindex = True
html_use_index = True
# If true, the index is split into individual pages for each letter.
-#html_split_index = False
+# html_split_index = False
# If true, links to the reST sources are added to the pages.
html_show_sourcelink = True
@@ -158,43 +160,45 @@ html_show_sourcelink = True
# If true, an OpenSearch description file will be output, and all pages will
# contain a <link> tag referring to it. The value of this option must be the
# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
+# html_use_opensearch = ''
# If nonempty, this is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = ''
+# html_file_suffix = ''
# Output file base name for HTML help builder.
htmlhelp_basename = 'CheetahTemplateEnginedoc'
-# -- Options for LaTeX output --------------------------------------------------
+# -- Options for LaTeX output -------------------------------------------------
# The paper size ('letter' or 'a4').
-#latex_paper_size = 'letter'
+# latex_paper_size = 'letter'
# The font size ('10pt', '11pt' or '12pt').
-#latex_font_size = '10pt'
+# latex_font_size = '10pt'
# Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
+# (source start file, target name, title,
+# author, documentclass [howto/manual]).
latex_documents = [
- ('index', 'CheetahTemplateEngine.tex', u'Cheetah Template Engine Documentation',
+ ('index', 'CheetahTemplateEngine.tex',
+ u'Cheetah Template Engine Documentation',
u'R. Tyler Ballance', 'manual'),
]
# The name of an image file (relative to this directory) to place at the top of
# the title page.
-#latex_logo = None
+# latex_logo = None
# For "manual" documents, if this is true, then toplevel headings are parts,
# not chapters.
-#latex_use_parts = False
+# latex_use_parts = False
# Additional stuff for the LaTeX preamble.
-#latex_preamble = ''
+# latex_preamble = ''
# Documents to append as an appendix to all manuals.
-#latex_appendices = []
+# latex_appendices = []
# If false, no module index is generated.
latex_use_modindex = True
diff --git a/www/dev_guide/bnf.rst b/docs/dev_guide/bnf.rst
index ef214b4..ef214b4 100644
--- a/www/dev_guide/bnf.rst
+++ b/docs/dev_guide/bnf.rst
diff --git a/www/dev_guide/cache.rst b/docs/dev_guide/cache.rst
index ce0829c..ce0829c 100644
--- a/www/dev_guide/cache.rst
+++ b/docs/dev_guide/cache.rst
diff --git a/www/dev_guide/comments.rst b/docs/dev_guide/comments.rst
index c2f9a89..c2f9a89 100644
--- a/www/dev_guide/comments.rst
+++ b/docs/dev_guide/comments.rst
diff --git a/www/dev_guide/compiler.rst b/docs/dev_guide/compiler.rst
index 33f3bcd..33f3bcd 100644
--- a/www/dev_guide/compiler.rst
+++ b/docs/dev_guide/compiler.rst
diff --git a/www/dev_guide/design.rst b/docs/dev_guide/design.rst
index 1ffabbd..1ffabbd 100644
--- a/www/dev_guide/design.rst
+++ b/docs/dev_guide/design.rst
diff --git a/www/dev_guide/errorHandling.rst b/docs/dev_guide/errorHandling.rst
index e97d1fb..e97d1fb 100644
--- a/www/dev_guide/errorHandling.rst
+++ b/docs/dev_guide/errorHandling.rst
diff --git a/www/dev_guide/files.rst b/docs/dev_guide/files.rst
index ab8d7a1..ab8d7a1 100644
--- a/www/dev_guide/files.rst
+++ b/docs/dev_guide/files.rst
diff --git a/www/dev_guide/flowControl.rst b/docs/dev_guide/flowControl.rst
index d391b2f..d391b2f 100644
--- a/www/dev_guide/flowControl.rst
+++ b/docs/dev_guide/flowControl.rst
diff --git a/www/dev_guide/history.rst b/docs/dev_guide/history.rst
index d0e1ceb..d0e1ceb 100644
--- a/www/dev_guide/history.rst
+++ b/docs/dev_guide/history.rst
diff --git a/www/dev_guide/index.rst b/docs/dev_guide/index.rst
index 83ff7d9..83ff7d9 100644
--- a/www/dev_guide/index.rst
+++ b/docs/dev_guide/index.rst
diff --git a/www/dev_guide/inheritanceEtc.rst b/docs/dev_guide/inheritanceEtc.rst
index 0b06ab9..0b06ab9 100644
--- a/www/dev_guide/inheritanceEtc.rst
+++ b/docs/dev_guide/inheritanceEtc.rst
diff --git a/www/dev_guide/introduction.rst b/docs/dev_guide/introduction.rst
index c77e1e5..c77e1e5 100644
--- a/www/dev_guide/introduction.rst
+++ b/docs/dev_guide/introduction.rst
diff --git a/www/dev_guide/output.rst b/docs/dev_guide/output.rst
index 55172d1..55172d1 100644
--- a/www/dev_guide/output.rst
+++ b/docs/dev_guide/output.rst
diff --git a/www/dev_guide/parser.rst b/docs/dev_guide/parser.rst
index 802b43f..802b43f 100644
--- a/www/dev_guide/parser.rst
+++ b/docs/dev_guide/parser.rst
diff --git a/www/dev_guide/parserInstructions.rst b/docs/dev_guide/parserInstructions.rst
index 805df7c..805df7c 100644
--- a/www/dev_guide/parserInstructions.rst
+++ b/docs/dev_guide/parserInstructions.rst
diff --git a/www/dev_guide/patching.rst b/docs/dev_guide/patching.rst
index c82c3c7..095d9a2 100644
--- a/www/dev_guide/patching.rst
+++ b/docs/dev_guide/patching.rst
@@ -84,7 +84,7 @@ The general procedure for modifying Cheetah is as follows:
below.
#. When {cheetah test} runs cleanly with your regression test
- included, update the {www/news.rst} file and check in your changes. If
+ included, update the {docs/news.rst} file and check in your changes. If
you made the changes in your installed copy of Cheetah, you'll have
to copy them back into the CVS sandbox first. If you added any
files that must be distributed, { be sure to} {cvs add} them before
diff --git a/www/dev_guide/placeholders.rst b/docs/dev_guide/placeholders.rst
index 60aa0d2..60aa0d2 100644
--- a/www/dev_guide/placeholders.rst
+++ b/docs/dev_guide/placeholders.rst
diff --git a/www/dev_guide/pyModules.rst b/docs/dev_guide/pyModules.rst
index 86c95dc..86c95dc 100644
--- a/www/dev_guide/pyModules.rst
+++ b/docs/dev_guide/pyModules.rst
diff --git a/www/dev_guide/safeDelegation.rst b/docs/dev_guide/safeDelegation.rst
index 87f3dc1..87f3dc1 100644
--- a/www/dev_guide/safeDelegation.rst
+++ b/docs/dev_guide/safeDelegation.rst
diff --git a/www/dev_guide/template.rst b/docs/dev_guide/template.rst
index 8dd23d9..8dd23d9 100644
--- a/www/dev_guide/template.rst
+++ b/docs/dev_guide/template.rst
diff --git a/www/developers.rst b/docs/developers.rst
index 7cf96e8..7cf96e8 100644
--- a/www/developers.rst
+++ b/docs/developers.rst
diff --git a/www/documentation.rst b/docs/documentation.rst
index af5cc44..af5cc44 100644
--- a/www/documentation.rst
+++ b/docs/documentation.rst
diff --git a/www/download.rst b/docs/download.rst
index dc73d33..dc73d33 100644
--- a/www/download.rst
+++ b/docs/download.rst
diff --git a/www/genapidocs b/docs/genapidocs
index 21589a6..0b762ce 100755
--- a/www/genapidocs
+++ b/docs/genapidocs
@@ -2,4 +2,4 @@
cd "`dirname $0`"/.. &&
exec sphinx-apidoc --separate --module-first --suffix=rst --force \
- --output-dir=www/api Cheetah
+ --output-dir=docs/api Cheetah
diff --git a/www/html/_sources/api/Cheetah.CacheRegion.rst.txt b/docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
index 256f06f..f9d3643 100644
--- a/www/html/_sources/api/Cheetah.CacheRegion.rst.txt
+++ b/docs/html/_sources/api/Cheetah.CacheRegion.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.CacheRegion module
-==========================
+Cheetah\.CacheRegion module
+===========================
.. automodule:: Cheetah.CacheRegion
:members:
diff --git a/www/html/_sources/api/Cheetah.CacheStore.rst.txt b/docs/html/_sources/api/Cheetah.CacheStore.rst.txt
index 8eb7b23..dd3acce 100644
--- a/www/html/_sources/api/Cheetah.CacheStore.rst.txt
+++ b/docs/html/_sources/api/Cheetah.CacheStore.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.CacheStore module
-=========================
+Cheetah\.CacheStore module
+==========================
.. automodule:: Cheetah.CacheStore
:members:
diff --git a/www/html/_sources/api/Cheetah.CheetahWrapper.rst.txt b/docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
index 0693b7b..437699b 100644
--- a/www/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
+++ b/docs/html/_sources/api/Cheetah.CheetahWrapper.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.CheetahWrapper module
-=============================
+Cheetah\.CheetahWrapper module
+==============================
.. automodule:: Cheetah.CheetahWrapper
:members:
diff --git a/www/html/_sources/api/Cheetah.Compiler.rst.txt b/docs/html/_sources/api/Cheetah.Compiler.rst.txt
index 64153e6..88adbb5 100644
--- a/www/html/_sources/api/Cheetah.Compiler.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Compiler.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Compiler module
-=======================
+Cheetah\.Compiler module
+========================
.. automodule:: Cheetah.Compiler
:members:
diff --git a/www/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt b/docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
index 3815c45..c8a6c9c 100644
--- a/www/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
+++ b/docs/html/_sources/api/Cheetah.DirectiveAnalyzer.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.DirectiveAnalyzer module
-================================
+Cheetah\.DirectiveAnalyzer module
+=================================
.. automodule:: Cheetah.DirectiveAnalyzer
:members:
diff --git a/www/html/_sources/api/Cheetah.Django.rst.txt b/docs/html/_sources/api/Cheetah.Django.rst.txt
index 65d95cf..861e95a 100644
--- a/www/html/_sources/api/Cheetah.Django.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Django.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Django module
-=====================
+Cheetah\.Django module
+======================
.. automodule:: Cheetah.Django
:members:
diff --git a/www/html/_sources/api/Cheetah.DummyTransaction.rst.txt b/docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
index 60fe008..193d5eb 100644
--- a/www/html/_sources/api/Cheetah.DummyTransaction.rst.txt
+++ b/docs/html/_sources/api/Cheetah.DummyTransaction.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.DummyTransaction module
-===============================
+Cheetah\.DummyTransaction module
+================================
.. automodule:: Cheetah.DummyTransaction
:members:
diff --git a/www/html/_sources/api/Cheetah.ErrorCatchers.rst.txt b/docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
index 0aace3f..1fb9140 100644
--- a/www/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
+++ b/docs/html/_sources/api/Cheetah.ErrorCatchers.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.ErrorCatchers module
-============================
+Cheetah\.ErrorCatchers module
+=============================
.. automodule:: Cheetah.ErrorCatchers
:members:
diff --git a/www/html/_sources/api/Cheetah.FileUtils.rst.txt b/docs/html/_sources/api/Cheetah.FileUtils.rst.txt
index 6285254..3302322 100644
--- a/www/html/_sources/api/Cheetah.FileUtils.rst.txt
+++ b/docs/html/_sources/api/Cheetah.FileUtils.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.FileUtils module
-========================
+Cheetah\.FileUtils module
+=========================
.. automodule:: Cheetah.FileUtils
:members:
diff --git a/www/html/_sources/api/Cheetah.Filters.rst.txt b/docs/html/_sources/api/Cheetah.Filters.rst.txt
index 0e76948..5612700 100644
--- a/www/html/_sources/api/Cheetah.Filters.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Filters.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Filters module
-======================
+Cheetah\.Filters module
+=======================
.. automodule:: Cheetah.Filters
:members:
diff --git a/www/html/_sources/api/Cheetah.ImportHooks.rst.txt b/docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
index 2bd0a4b..0217927 100644
--- a/www/html/_sources/api/Cheetah.ImportHooks.rst.txt
+++ b/docs/html/_sources/api/Cheetah.ImportHooks.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.ImportHooks module
-==========================
+Cheetah\.ImportHooks module
+===========================
.. automodule:: Cheetah.ImportHooks
:members:
diff --git a/www/html/_sources/api/Cheetah.ImportManager.rst.txt b/docs/html/_sources/api/Cheetah.ImportManager.rst.txt
index b456826..7200c3d 100644
--- a/www/html/_sources/api/Cheetah.ImportManager.rst.txt
+++ b/docs/html/_sources/api/Cheetah.ImportManager.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.ImportManager module
-============================
+Cheetah\.ImportManager module
+=============================
.. automodule:: Cheetah.ImportManager
:members:
diff --git a/www/html/_sources/api/Cheetah.Macros.I18n.rst.txt b/docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
index b108993..338726b 100644
--- a/www/html/_sources/api/Cheetah.Macros.I18n.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Macros.I18n.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Macros.I18n module
-==========================
+Cheetah\.Macros\.I18n module
+============================
.. automodule:: Cheetah.Macros.I18n
:members:
diff --git a/www/html/_sources/api/Cheetah.Macros.rst.txt b/docs/html/_sources/api/Cheetah.Macros.rst.txt
index ff6d45b..1cf8052 100644
--- a/www/html/_sources/api/Cheetah.Macros.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Macros.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Macros package
-======================
+Cheetah\.Macros package
+=======================
.. automodule:: Cheetah.Macros
:members:
diff --git a/www/html/_sources/api/Cheetah.NameMapper.rst.txt b/docs/html/_sources/api/Cheetah.NameMapper.rst.txt
index 950f0781..d995359 100644
--- a/www/html/_sources/api/Cheetah.NameMapper.rst.txt
+++ b/docs/html/_sources/api/Cheetah.NameMapper.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.NameMapper module
-=========================
+Cheetah\.NameMapper module
+==========================
.. automodule:: Cheetah.NameMapper
:members:
diff --git a/www/html/_sources/api/Cheetah.Parser.rst.txt b/docs/html/_sources/api/Cheetah.Parser.rst.txt
index dd45e47..f459b45 100644
--- a/www/html/_sources/api/Cheetah.Parser.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Parser.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Parser module
-=====================
+Cheetah\.Parser module
+======================
.. automodule:: Cheetah.Parser
:members:
diff --git a/www/html/_sources/api/Cheetah.Servlet.rst.txt b/docs/html/_sources/api/Cheetah.Servlet.rst.txt
index 69044f6..ca3cc39 100644
--- a/www/html/_sources/api/Cheetah.Servlet.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Servlet.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Servlet module
-======================
+Cheetah\.Servlet module
+=======================
.. automodule:: Cheetah.Servlet
:members:
diff --git a/www/html/_sources/api/Cheetah.SettingsManager.rst.txt b/docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
index b30bbcc..d067e6c 100644
--- a/www/html/_sources/api/Cheetah.SettingsManager.rst.txt
+++ b/docs/html/_sources/api/Cheetah.SettingsManager.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.SettingsManager module
-==============================
+Cheetah\.SettingsManager module
+===============================
.. automodule:: Cheetah.SettingsManager
:members:
diff --git a/www/html/_sources/api/Cheetah.SourceReader.rst.txt b/docs/html/_sources/api/Cheetah.SourceReader.rst.txt
index e90032b..5e3d318 100644
--- a/www/html/_sources/api/Cheetah.SourceReader.rst.txt
+++ b/docs/html/_sources/api/Cheetah.SourceReader.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.SourceReader module
-===========================
+Cheetah\.SourceReader module
+============================
.. automodule:: Cheetah.SourceReader
:members:
diff --git a/www/html/_sources/api/Cheetah.Template.rst.txt b/docs/html/_sources/api/Cheetah.Template.rst.txt
index b1d3908..0eb6c21 100644
--- a/www/html/_sources/api/Cheetah.Template.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Template.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Template module
-=======================
+Cheetah\.Template module
+========================
.. automodule:: Cheetah.Template
:members:
diff --git a/www/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt b/docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
index 575a1cb..9eb13f9 100644
--- a/www/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
+++ b/docs/html/_sources/api/Cheetah.TemplateCmdLineIface.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.TemplateCmdLineIface module
-===================================
+Cheetah\.TemplateCmdLineIface module
+====================================
.. automodule:: Cheetah.TemplateCmdLineIface
:members:
diff --git a/www/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt b/docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
index bc0f2f7..1689faa 100644
--- a/www/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Templates.SkeletonPage.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Templates.SkeletonPage module
-=====================================
+Cheetah\.Templates\.SkeletonPage module
+=======================================
.. automodule:: Cheetah.Templates.SkeletonPage
:members:
diff --git a/www/html/_sources/api/Cheetah.Templates.rst.txt b/docs/html/_sources/api/Cheetah.Templates.rst.txt
index 4d11a62..a1cab72 100644
--- a/www/html/_sources/api/Cheetah.Templates.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Templates.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Templates package
-=========================
+Cheetah\.Templates package
+==========================
.. automodule:: Cheetah.Templates
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
index 04aa596..674b25e 100644
--- a/www/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Analyzer.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Analyzer module
-=============================
+Cheetah\.Tests\.Analyzer module
+===============================
.. automodule:: Cheetah.Tests.Analyzer
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Boinker.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
index e03cdc1..dfaee8b 100644
--- a/www/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Boinker.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Boinker module
-============================
+Cheetah\.Tests\.Boinker module
+==============================
.. automodule:: Cheetah.Tests.Boinker
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt b/docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
index 4db7976..66dadcf 100644
--- a/www/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.CheetahWrapper.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.CheetahWrapper module
-===================================
+Cheetah\.Tests\.CheetahWrapper module
+=====================================
.. automodule:: Cheetah.Tests.CheetahWrapper
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Cheps.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
index 46d79e7..a7bcacc 100644
--- a/www/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Cheps.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Cheps module
-==========================
+Cheetah\.Tests\.Cheps module
+============================
.. automodule:: Cheetah.Tests.Cheps
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Filters.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
index f2f8f73..8d97947 100644
--- a/www/html/_sources/api/Cheetah.Tests.Filters.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Filters.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Filters module
-============================
+Cheetah\.Tests\.Filters module
+==============================
.. automodule:: Cheetah.Tests.Filters
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Misc.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
index e462e79..ec9133b 100644
--- a/www/html/_sources/api/Cheetah.Tests.Misc.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Misc.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Misc module
-=========================
+Cheetah\.Tests\.Misc module
+===========================
.. automodule:: Cheetah.Tests.Misc
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt b/docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
index 81c9a21..fb76c2a 100644
--- a/www/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.NameMapper.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.NameMapper module
-===============================
+Cheetah\.Tests\.NameMapper module
+=================================
.. automodule:: Cheetah.Tests.NameMapper
:members:
diff --git a/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt b/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
new file mode 100644
index 0000000..927661f
--- /dev/null
+++ b/docs/html/_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt
@@ -0,0 +1,7 @@
+Cheetah\.Tests\.NameMapper\_pure module
+=======================================
+
+.. automodule:: Cheetah.Tests.NameMapper_pure
+ :members:
+ :undoc-members:
+ :show-inheritance:
diff --git a/www/html/_sources/api/Cheetah.Tests.Parser.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
index 1088a41..dd1bc7f 100644
--- a/www/html/_sources/api/Cheetah.Tests.Parser.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Parser.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Parser module
-===========================
+Cheetah\.Tests\.Parser module
+=============================
.. automodule:: Cheetah.Tests.Parser
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Performance.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
index fdfb1ae..a2ebf49 100644
--- a/www/html/_sources/api/Cheetah.Tests.Performance.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Performance.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Performance module
-================================
+Cheetah\.Tests\.Performance module
+==================================
.. automodule:: Cheetah.Tests.Performance
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Pinger.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
index c17a6d5..a714077 100644
--- a/www/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Pinger.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Pinger module
-===========================
+Cheetah\.Tests\.Pinger module
+=============================
.. automodule:: Cheetah.Tests.Pinger
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Regressions.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
index 8764330..249e4b6 100644
--- a/www/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Regressions.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Regressions module
-================================
+Cheetah\.Tests\.Regressions module
+==================================
.. automodule:: Cheetah.Tests.Regressions
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt b/docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
index 022bb99..5b2fbab 100644
--- a/www/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.SyntaxAndOutput.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.SyntaxAndOutput module
-====================================
+Cheetah\.Tests\.SyntaxAndOutput module
+======================================
.. automodule:: Cheetah.Tests.SyntaxAndOutput
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Template.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
index 4f6890e..eb24526 100644
--- a/www/html/_sources/api/Cheetah.Tests.Template.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Template.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Template module
-=============================
+Cheetah\.Tests\.Template module
+===============================
.. automodule:: Cheetah.Tests.Template
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Test.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
index 77153d6..23d5291 100644
--- a/www/html/_sources/api/Cheetah.Tests.Test.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Test.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Test module
-=========================
+Cheetah\.Tests\.Test module
+===========================
.. automodule:: Cheetah.Tests.Test
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.Unicode.rst.txt b/docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
index 688d231..f3ee955 100644
--- a/www/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.Unicode.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.Unicode module
-============================
+Cheetah\.Tests\.Unicode module
+==============================
.. automodule:: Cheetah.Tests.Unicode
:members:
diff --git a/www/html/_sources/api/Cheetah.Tests.rst.txt b/docs/html/_sources/api/Cheetah.Tests.rst.txt
index 721f5d4..8d6c879 100644
--- a/www/html/_sources/api/Cheetah.Tests.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests package
-=====================
+Cheetah\.Tests package
+======================
.. automodule:: Cheetah.Tests
:members:
@@ -18,6 +18,7 @@ Submodules
Cheetah.Tests.Filters
Cheetah.Tests.Misc
Cheetah.Tests.NameMapper
+ Cheetah.Tests.NameMapper_pure
Cheetah.Tests.Parser
Cheetah.Tests.Performance
Cheetah.Tests.Pinger
diff --git a/www/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt b/docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
index 8a01937..23e34f4 100644
--- a/www/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tests.xmlrunner.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tests.xmlrunner module
-==============================
+Cheetah\.Tests\.xmlrunner module
+================================
.. automodule:: Cheetah.Tests.xmlrunner
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt b/docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
index 4760bfe..3e72776 100644
--- a/www/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.CGITemplate.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.CGITemplate module
-================================
+Cheetah\.Tools\.CGITemplate module
+==================================
.. automodule:: Cheetah.Tools.CGITemplate
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt b/docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
index fe75765..e875ead 100644
--- a/www/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.MondoReport.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.MondoReport module
-================================
+Cheetah\.Tools\.MondoReport module
+==================================
.. automodule:: Cheetah.Tools.MondoReport
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt b/docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
index 62053ce..eb5f72b 100644
--- a/www/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.RecursiveNull.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.RecursiveNull module
-==================================
+Cheetah\.Tools\.RecursiveNull module
+====================================
.. automodule:: Cheetah.Tools.RecursiveNull
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt b/docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
index 0289f08..9c8b983 100644
--- a/www/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.SiteHierarchy.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.SiteHierarchy module
-==================================
+Cheetah\.Tools\.SiteHierarchy module
+====================================
.. automodule:: Cheetah.Tools.SiteHierarchy
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.rst.txt b/docs/html/_sources/api/Cheetah.Tools.rst.txt
index 116b463..e5dd5a2 100644
--- a/www/html/_sources/api/Cheetah.Tools.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools package
-=====================
+Cheetah\.Tools package
+======================
.. automodule:: Cheetah.Tools
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
index 4b71db7..c488cdd 100644
--- a/www/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.cheetahsupport.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.cheetahsupport module
-================================================
+Cheetah\.Tools\.turbocheetah\.cheetahsupport module
+===================================================
.. automodule:: Cheetah.Tools.turbocheetah.cheetahsupport
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
index 6fe78ec..6ea7430 100644
--- a/www/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah package
-==================================
+Cheetah\.Tools\.turbocheetah package
+====================================
.. automodule:: Cheetah.Tools.turbocheetah
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
index a384614..a7b1e4e 100644
--- a/www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.tests package
-========================================
+Cheetah\.Tools\.turbocheetah\.tests package
+===========================================
.. automodule:: Cheetah.Tools.turbocheetah.tests
:members:
diff --git a/www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
index 2c1e38a..b04f2cf 100644
--- a/www/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Tools.turbocheetah.tests.test_template.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Tools.turbocheetah.tests.test_template module
-=====================================================
+Cheetah\.Tools\.turbocheetah\.tests\.test\_template module
+==========================================================
.. automodule:: Cheetah.Tools.turbocheetah.tests.test_template
:members:
diff --git a/www/html/_sources/api/Cheetah.Unspecified.rst.txt b/docs/html/_sources/api/Cheetah.Unspecified.rst.txt
index 7e2293e..52fc6f7 100644
--- a/www/html/_sources/api/Cheetah.Unspecified.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Unspecified.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Unspecified module
-==========================
+Cheetah\.Unspecified module
+===========================
.. automodule:: Cheetah.Unspecified
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.Indenter.rst.txt b/docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
index 7b9bce8..74c8bd6 100644
--- a/www/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.Indenter.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.Indenter module
-=============================
+Cheetah\.Utils\.Indenter module
+===============================
.. automodule:: Cheetah.Utils.Indenter
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.Misc.rst.txt b/docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
index d107724..5baddfa 100644
--- a/www/html/_sources/api/Cheetah.Utils.Misc.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.Misc.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.Misc module
-=========================
+Cheetah\.Utils\.Misc module
+===========================
.. automodule:: Cheetah.Utils.Misc
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt b/docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
index 0dc5bdc..3083ae3 100644
--- a/www/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.WebInputMixin.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.WebInputMixin module
-==================================
+Cheetah\.Utils\.WebInputMixin module
+====================================
.. automodule:: Cheetah.Utils.WebInputMixin
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt b/docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
index c762890..dc09574 100644
--- a/www/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.htmlDecode.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.htmlDecode module
-===============================
+Cheetah\.Utils\.htmlDecode module
+=================================
.. automodule:: Cheetah.Utils.htmlDecode
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt b/docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
index 0051d8a..4d8efa6 100644
--- a/www/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.htmlEncode.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.htmlEncode module
-===============================
+Cheetah\.Utils\.htmlEncode module
+=================================
.. automodule:: Cheetah.Utils.htmlEncode
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.rst.txt b/docs/html/_sources/api/Cheetah.Utils.rst.txt
index 338b4ab..54d238c 100644
--- a/www/html/_sources/api/Cheetah.Utils.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils package
-=====================
+Cheetah\.Utils package
+======================
.. automodule:: Cheetah.Utils
:members:
diff --git a/www/html/_sources/api/Cheetah.Utils.statprof.rst.txt b/docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
index 7f3e3db..30628cf 100644
--- a/www/html/_sources/api/Cheetah.Utils.statprof.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Utils.statprof.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Utils.statprof module
-=============================
+Cheetah\.Utils\.statprof module
+===============================
.. automodule:: Cheetah.Utils.statprof
:members:
diff --git a/www/html/_sources/api/Cheetah.Version.rst.txt b/docs/html/_sources/api/Cheetah.Version.rst.txt
index d9a7cfb..5560b29 100644
--- a/www/html/_sources/api/Cheetah.Version.rst.txt
+++ b/docs/html/_sources/api/Cheetah.Version.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.Version module
-======================
+Cheetah\.Version module
+=======================
.. automodule:: Cheetah.Version
:members:
diff --git a/www/html/_sources/api/Cheetah.compat.rst.txt b/docs/html/_sources/api/Cheetah.compat.rst.txt
index 00d964d..58b262c 100644
--- a/www/html/_sources/api/Cheetah.compat.rst.txt
+++ b/docs/html/_sources/api/Cheetah.compat.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.compat module
-=====================
+Cheetah\.compat module
+======================
.. automodule:: Cheetah.compat
:members:
diff --git a/www/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt b/docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
index 6cc5611..f6efa39 100644
--- a/www/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
+++ b/docs/html/_sources/api/Cheetah.convertTmplPathToModuleName.rst.txt
@@ -1,5 +1,5 @@
-Cheetah.convertTmplPathToModuleName module
-==========================================
+Cheetah\.convertTmplPathToModuleName module
+===========================================
.. automodule:: Cheetah.convertTmplPathToModuleName
:members:
diff --git a/www/html/_sources/api/Cheetah.rst.txt b/docs/html/_sources/api/Cheetah.rst.txt
index 1a39047..1a39047 100644
--- a/www/html/_sources/api/Cheetah.rst.txt
+++ b/docs/html/_sources/api/Cheetah.rst.txt
diff --git a/www/html/_sources/api/modules.rst.txt b/docs/html/_sources/api/modules.rst.txt
index 3aee30a..3aee30a 100644
--- a/www/html/_sources/api/modules.rst.txt
+++ b/docs/html/_sources/api/modules.rst.txt
diff --git a/www/html/_sources/authors.rst.txt b/docs/html/_sources/authors.rst.txt
index 5082451..9140385 100644
--- a/www/html/_sources/authors.rst.txt
+++ b/docs/html/_sources/authors.rst.txt
@@ -27,4 +27,5 @@ Contributions have been made by:
* mikola <mikola at tut.by>
* Adam Karpierz <python at python.pl>
* Jonathan Ross Rogers <jrogers at socialserve.com>
+* Mathias Stearn <redbeard0531 at gmail.com>
* Oleg Broytman <phd@phdru.name>
diff --git a/www/html/_sources/chep.rst.txt b/docs/html/_sources/chep.rst.txt
index abe8d22..abe8d22 100644
--- a/www/html/_sources/chep.rst.txt
+++ b/docs/html/_sources/chep.rst.txt
diff --git a/www/html/_sources/cheps/1_chep.rst.txt b/docs/html/_sources/cheps/1_chep.rst.txt
index 0dae336..0dae336 100644
--- a/www/html/_sources/cheps/1_chep.rst.txt
+++ b/docs/html/_sources/cheps/1_chep.rst.txt
diff --git a/www/html/_sources/cheps/2_import.rst.txt b/docs/html/_sources/cheps/2_import.rst.txt
index 25fc4b7..25fc4b7 100644
--- a/www/html/_sources/cheps/2_import.rst.txt
+++ b/docs/html/_sources/cheps/2_import.rst.txt
diff --git a/www/html/_sources/cheps/3_super.rst.txt b/docs/html/_sources/cheps/3_super.rst.txt
index 71f15f3..71f15f3 100644
--- a/www/html/_sources/cheps/3_super.rst.txt
+++ b/docs/html/_sources/cheps/3_super.rst.txt
diff --git a/www/html/_sources/dev_guide/bnf.rst.txt b/docs/html/_sources/dev_guide/bnf.rst.txt
index ef214b4..ef214b4 100644
--- a/www/html/_sources/dev_guide/bnf.rst.txt
+++ b/docs/html/_sources/dev_guide/bnf.rst.txt
diff --git a/www/html/_sources/dev_guide/cache.rst.txt b/docs/html/_sources/dev_guide/cache.rst.txt
index ce0829c..ce0829c 100644
--- a/www/html/_sources/dev_guide/cache.rst.txt
+++ b/docs/html/_sources/dev_guide/cache.rst.txt
diff --git a/www/html/_sources/dev_guide/comments.rst.txt b/docs/html/_sources/dev_guide/comments.rst.txt
index c2f9a89..c2f9a89 100644
--- a/www/html/_sources/dev_guide/comments.rst.txt
+++ b/docs/html/_sources/dev_guide/comments.rst.txt
diff --git a/www/html/_sources/dev_guide/compiler.rst.txt b/docs/html/_sources/dev_guide/compiler.rst.txt
index 33f3bcd..33f3bcd 100644
--- a/www/html/_sources/dev_guide/compiler.rst.txt
+++ b/docs/html/_sources/dev_guide/compiler.rst.txt
diff --git a/www/html/_sources/dev_guide/design.rst.txt b/docs/html/_sources/dev_guide/design.rst.txt
index 1ffabbd..1ffabbd 100644
--- a/www/html/_sources/dev_guide/design.rst.txt
+++ b/docs/html/_sources/dev_guide/design.rst.txt
diff --git a/www/html/_sources/dev_guide/errorHandling.rst.txt b/docs/html/_sources/dev_guide/errorHandling.rst.txt
index e97d1fb..e97d1fb 100644
--- a/www/html/_sources/dev_guide/errorHandling.rst.txt
+++ b/docs/html/_sources/dev_guide/errorHandling.rst.txt
diff --git a/www/html/_sources/dev_guide/files.rst.txt b/docs/html/_sources/dev_guide/files.rst.txt
index ab8d7a1..ab8d7a1 100644
--- a/www/html/_sources/dev_guide/files.rst.txt
+++ b/docs/html/_sources/dev_guide/files.rst.txt
diff --git a/www/html/_sources/dev_guide/flowControl.rst.txt b/docs/html/_sources/dev_guide/flowControl.rst.txt
index d391b2f..d391b2f 100644
--- a/www/html/_sources/dev_guide/flowControl.rst.txt
+++ b/docs/html/_sources/dev_guide/flowControl.rst.txt
diff --git a/www/html/_sources/dev_guide/history.rst.txt b/docs/html/_sources/dev_guide/history.rst.txt
index d0e1ceb..d0e1ceb 100644
--- a/www/html/_sources/dev_guide/history.rst.txt
+++ b/docs/html/_sources/dev_guide/history.rst.txt
diff --git a/www/html/_sources/dev_guide/index.rst.txt b/docs/html/_sources/dev_guide/index.rst.txt
index 83ff7d9..83ff7d9 100644
--- a/www/html/_sources/dev_guide/index.rst.txt
+++ b/docs/html/_sources/dev_guide/index.rst.txt
diff --git a/www/html/_sources/dev_guide/inheritanceEtc.rst.txt b/docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
index 0b06ab9..0b06ab9 100644
--- a/www/html/_sources/dev_guide/inheritanceEtc.rst.txt
+++ b/docs/html/_sources/dev_guide/inheritanceEtc.rst.txt
diff --git a/www/html/_sources/dev_guide/introduction.rst.txt b/docs/html/_sources/dev_guide/introduction.rst.txt
index c77e1e5..c77e1e5 100644
--- a/www/html/_sources/dev_guide/introduction.rst.txt
+++ b/docs/html/_sources/dev_guide/introduction.rst.txt
diff --git a/www/html/_sources/dev_guide/output.rst.txt b/docs/html/_sources/dev_guide/output.rst.txt
index 55172d1..55172d1 100644
--- a/www/html/_sources/dev_guide/output.rst.txt
+++ b/docs/html/_sources/dev_guide/output.rst.txt
diff --git a/www/html/_sources/dev_guide/parser.rst.txt b/docs/html/_sources/dev_guide/parser.rst.txt
index 802b43f..802b43f 100644
--- a/www/html/_sources/dev_guide/parser.rst.txt
+++ b/docs/html/_sources/dev_guide/parser.rst.txt
diff --git a/www/html/_sources/dev_guide/parserInstructions.rst.txt b/docs/html/_sources/dev_guide/parserInstructions.rst.txt
index 805df7c..805df7c 100644
--- a/www/html/_sources/dev_guide/parserInstructions.rst.txt
+++ b/docs/html/_sources/dev_guide/parserInstructions.rst.txt
diff --git a/www/html/_sources/dev_guide/patching.rst.txt b/docs/html/_sources/dev_guide/patching.rst.txt
index c82c3c7..095d9a2 100644
--- a/www/html/_sources/dev_guide/patching.rst.txt
+++ b/docs/html/_sources/dev_guide/patching.rst.txt
@@ -84,7 +84,7 @@ The general procedure for modifying Cheetah is as follows:
below.
#. When {cheetah test} runs cleanly with your regression test
- included, update the {www/news.rst} file and check in your changes. If
+ included, update the {docs/news.rst} file and check in your changes. If
you made the changes in your installed copy of Cheetah, you'll have
to copy them back into the CVS sandbox first. If you added any
files that must be distributed, { be sure to} {cvs add} them before
diff --git a/www/html/_sources/dev_guide/placeholders.rst.txt b/docs/html/_sources/dev_guide/placeholders.rst.txt
index 60aa0d2..60aa0d2 100644
--- a/www/html/_sources/dev_guide/placeholders.rst.txt
+++ b/docs/html/_sources/dev_guide/placeholders.rst.txt
diff --git a/www/html/_sources/dev_guide/pyModules.rst.txt b/docs/html/_sources/dev_guide/pyModules.rst.txt
index 86c95dc..86c95dc 100644
--- a/www/html/_sources/dev_guide/pyModules.rst.txt
+++ b/docs/html/_sources/dev_guide/pyModules.rst.txt
diff --git a/www/html/_sources/dev_guide/safeDelegation.rst.txt b/docs/html/_sources/dev_guide/safeDelegation.rst.txt
index 87f3dc1..87f3dc1 100644
--- a/www/html/_sources/dev_guide/safeDelegation.rst.txt
+++ b/docs/html/_sources/dev_guide/safeDelegation.rst.txt
diff --git a/www/html/_sources/dev_guide/template.rst.txt b/docs/html/_sources/dev_guide/template.rst.txt
index 8dd23d9..8dd23d9 100644
--- a/www/html/_sources/dev_guide/template.rst.txt
+++ b/docs/html/_sources/dev_guide/template.rst.txt
diff --git a/www/html/_sources/developers.rst.txt b/docs/html/_sources/developers.rst.txt
index 7cf96e8..7cf96e8 100644
--- a/www/html/_sources/developers.rst.txt
+++ b/docs/html/_sources/developers.rst.txt
diff --git a/www/html/_sources/documentation.rst.txt b/docs/html/_sources/documentation.rst.txt
index af5cc44..af5cc44 100644
--- a/www/html/_sources/documentation.rst.txt
+++ b/docs/html/_sources/documentation.rst.txt
diff --git a/www/html/_sources/download.rst.txt b/docs/html/_sources/download.rst.txt
index dc73d33..dc73d33 100644
--- a/www/html/_sources/download.rst.txt
+++ b/docs/html/_sources/download.rst.txt
diff --git a/www/html/_sources/index.rst.txt b/docs/html/_sources/index.rst.txt
index 2f18cb6..2f18cb6 100644
--- a/www/html/_sources/index.rst.txt
+++ b/docs/html/_sources/index.rst.txt
diff --git a/www/html/_sources/news.rst.txt b/docs/html/_sources/news.rst.txt
index 278aff1..2a6ff8c 100644
--- a/www/html/_sources/news.rst.txt
+++ b/docs/html/_sources/news.rst.txt
@@ -1,13 +1,41 @@
News
====
+Development (master)
+--------------------
+
+3.1.0 (2018-03-03)
+------------------
+
+Features:
+
+ - Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.
+
+Minor features:
+
+ - Code cleanup: fix code style to satisfy flake8 linter.
+
+Documentation:
+
+ - Rename www directory to docs.
+
+Tests:
+
+ - Run pypy tests at AppVeyor.
+ - Use remove-old-files.py from ppu to cleanup pip cache
+ at Travis and AppVeyor.
+
+
3.0.1 (2018-02-27)
+------------------
Bug fixes:
- Fix a minor bug in Compiler.
+
3.0.0 (2017-05-07)
+------------------
Major features:
diff --git a/www/html/_sources/news2.rst.txt b/docs/html/_sources/news2.rst.txt
index d295478..d295478 100644
--- a/www/html/_sources/news2.rst.txt
+++ b/docs/html/_sources/news2.rst.txt
diff --git a/www/html/_sources/recipes/inheritance.rst.txt b/docs/html/_sources/recipes/inheritance.rst.txt
index 267fa1f..267fa1f 100644
--- a/www/html/_sources/recipes/inheritance.rst.txt
+++ b/docs/html/_sources/recipes/inheritance.rst.txt
diff --git a/www/html/_sources/recipes/precompiled.rst.txt b/docs/html/_sources/recipes/precompiled.rst.txt
index 7705106..7705106 100644
--- a/www/html/_sources/recipes/precompiled.rst.txt
+++ b/docs/html/_sources/recipes/precompiled.rst.txt
diff --git a/www/html/_sources/recipes/staticmethod.rst.txt b/docs/html/_sources/recipes/staticmethod.rst.txt
index cf55ec1..cf55ec1 100644
--- a/www/html/_sources/recipes/staticmethod.rst.txt
+++ b/docs/html/_sources/recipes/staticmethod.rst.txt
diff --git a/www/html/_sources/recipes/writing_a_recipe.rst.txt b/docs/html/_sources/recipes/writing_a_recipe.rst.txt
index 73d146a..73d146a 100644
--- a/www/html/_sources/recipes/writing_a_recipe.rst.txt
+++ b/docs/html/_sources/recipes/writing_a_recipe.rst.txt
diff --git a/www/html/_sources/roadmap.rst.txt b/docs/html/_sources/roadmap.rst.txt
index 5057742..5057742 100644
--- a/www/html/_sources/roadmap.rst.txt
+++ b/docs/html/_sources/roadmap.rst.txt
diff --git a/www/html/_sources/users_guide/comments.rst.txt b/docs/html/_sources/users_guide/comments.rst.txt
index 5bd45dc..5bd45dc 100644
--- a/www/html/_sources/users_guide/comments.rst.txt
+++ b/docs/html/_sources/users_guide/comments.rst.txt
diff --git a/www/html/_sources/users_guide/comparisons.rst.txt b/docs/html/_sources/users_guide/comparisons.rst.txt
index 6886035..6886035 100644
--- a/www/html/_sources/users_guide/comparisons.rst.txt
+++ b/docs/html/_sources/users_guide/comparisons.rst.txt
diff --git a/www/html/_sources/users_guide/editors.rst.txt b/docs/html/_sources/users_guide/editors.rst.txt
index 35bf0a5..35bf0a5 100644
--- a/www/html/_sources/users_guide/editors.rst.txt
+++ b/docs/html/_sources/users_guide/editors.rst.txt
diff --git a/www/html/_sources/users_guide/errorHandling.rst.txt b/docs/html/_sources/users_guide/errorHandling.rst.txt
index 752c5b5..752c5b5 100644
--- a/www/html/_sources/users_guide/errorHandling.rst.txt
+++ b/docs/html/_sources/users_guide/errorHandling.rst.txt
diff --git a/www/html/_sources/users_guide/examples.rst.txt b/docs/html/_sources/users_guide/examples.rst.txt
index 7304cd1..7304cd1 100644
--- a/www/html/_sources/users_guide/examples.rst.txt
+++ b/docs/html/_sources/users_guide/examples.rst.txt
diff --git a/www/html/_sources/users_guide/flowControl.rst.txt b/docs/html/_sources/users_guide/flowControl.rst.txt
index dbaecd3..dbaecd3 100644
--- a/www/html/_sources/users_guide/flowControl.rst.txt
+++ b/docs/html/_sources/users_guide/flowControl.rst.txt
diff --git a/www/html/_sources/users_guide/gettingStarted.rst.txt b/docs/html/_sources/users_guide/gettingStarted.rst.txt
index de4159f..de4159f 100644
--- a/www/html/_sources/users_guide/gettingStarted.rst.txt
+++ b/docs/html/_sources/users_guide/gettingStarted.rst.txt
diff --git a/www/html/_sources/users_guide/glossary.rst.txt b/docs/html/_sources/users_guide/glossary.rst.txt
index 62e27f9..62e27f9 100644
--- a/www/html/_sources/users_guide/glossary.rst.txt
+++ b/docs/html/_sources/users_guide/glossary.rst.txt
diff --git a/www/html/_sources/users_guide/index.rst.txt b/docs/html/_sources/users_guide/index.rst.txt
index efbf343..efbf343 100644
--- a/www/html/_sources/users_guide/index.rst.txt
+++ b/docs/html/_sources/users_guide/index.rst.txt
diff --git a/www/html/_sources/users_guide/inheritanceEtc.rst.txt b/docs/html/_sources/users_guide/inheritanceEtc.rst.txt
index e0bb125..e0bb125 100644
--- a/www/html/_sources/users_guide/inheritanceEtc.rst.txt
+++ b/docs/html/_sources/users_guide/inheritanceEtc.rst.txt
diff --git a/www/html/_sources/users_guide/intro.rst.txt b/docs/html/_sources/users_guide/intro.rst.txt
index 096bdef..096bdef 100644
--- a/www/html/_sources/users_guide/intro.rst.txt
+++ b/docs/html/_sources/users_guide/intro.rst.txt
diff --git a/www/html/_sources/users_guide/language.rst.txt b/docs/html/_sources/users_guide/language.rst.txt
index 679fe7b..679fe7b 100644
--- a/www/html/_sources/users_guide/language.rst.txt
+++ b/docs/html/_sources/users_guide/language.rst.txt
diff --git a/www/html/_sources/users_guide/libraries.rst.txt b/docs/html/_sources/users_guide/libraries.rst.txt
index cbdeb14..cbdeb14 100644
--- a/www/html/_sources/users_guide/libraries.rst.txt
+++ b/docs/html/_sources/users_guide/libraries.rst.txt
diff --git a/www/html/_sources/users_guide/links.rst.txt b/docs/html/_sources/users_guide/links.rst.txt
index a8e3a83..1927ff8 100644
--- a/www/html/_sources/users_guide/links.rst.txt
+++ b/docs/html/_sources/users_guide/links.rst.txt
@@ -17,6 +17,9 @@ Home Page, issue tracker
On-line Documentation
- http://cheetahtemplate.org/
+Questions can also be asked and answered on `StackOverflow
+<https://stackoverflow.com/questions/tagged/cheetah>`_.
+
Third-party Cheetah Stuff
-------------------------
diff --git a/www/html/_sources/users_guide/nonHtml.rst.txt b/docs/html/_sources/users_guide/nonHtml.rst.txt
index 19f9667..19f9667 100644
--- a/www/html/_sources/users_guide/nonHtml.rst.txt
+++ b/docs/html/_sources/users_guide/nonHtml.rst.txt
diff --git a/www/html/_sources/users_guide/otherHtml.rst.txt b/docs/html/_sources/users_guide/otherHtml.rst.txt
index eeceaab..eeceaab 100644
--- a/www/html/_sources/users_guide/otherHtml.rst.txt
+++ b/docs/html/_sources/users_guide/otherHtml.rst.txt
diff --git a/www/html/_sources/users_guide/output.rst.txt b/docs/html/_sources/users_guide/output.rst.txt
index d7fb8e0..d7fb8e0 100644
--- a/www/html/_sources/users_guide/output.rst.txt
+++ b/docs/html/_sources/users_guide/output.rst.txt
diff --git a/www/html/_sources/users_guide/parserInstructions.rst.txt b/docs/html/_sources/users_guide/parserInstructions.rst.txt
index b187e7f..b187e7f 100644
--- a/www/html/_sources/users_guide/parserInstructions.rst.txt
+++ b/docs/html/_sources/users_guide/parserInstructions.rst.txt
diff --git a/www/html/_sources/users_guide/tipsAndTricks.rst.txt b/docs/html/_sources/users_guide/tipsAndTricks.rst.txt
index 8e06952..8e06952 100644
--- a/www/html/_sources/users_guide/tipsAndTricks.rst.txt
+++ b/docs/html/_sources/users_guide/tipsAndTricks.rst.txt
diff --git a/www/html/_sources/users_guide/webware.rst.txt b/docs/html/_sources/users_guide/webware.rst.txt
index bc36a2b..bc36a2b 100644
--- a/www/html/_sources/users_guide/webware.rst.txt
+++ b/docs/html/_sources/users_guide/webware.rst.txt
diff --git a/www/html/_static/ajax-loader.gif b/docs/html/_static/ajax-loader.gif
index 61faf8c..61faf8c 100644
--- a/www/html/_static/ajax-loader.gif
+++ b/docs/html/_static/ajax-loader.gif
Binary files differ
diff --git a/www/html/_static/basic.css b/docs/html/_static/basic.css
index 3c7223b..3c7223b 100644
--- a/www/html/_static/basic.css
+++ b/docs/html/_static/basic.css
diff --git a/www/html/_static/comment-bright.png b/docs/html/_static/comment-bright.png
index 15e27ed..15e27ed 100644
--- a/www/html/_static/comment-bright.png
+++ b/docs/html/_static/comment-bright.png
Binary files differ
diff --git a/www/html/_static/comment-close.png b/docs/html/_static/comment-close.png
index 4d91bcf..4d91bcf 100644
--- a/www/html/_static/comment-close.png
+++ b/docs/html/_static/comment-close.png
Binary files differ
diff --git a/www/html/_static/comment.png b/docs/html/_static/comment.png
index dfbc0cb..dfbc0cb 100644
--- a/www/html/_static/comment.png
+++ b/docs/html/_static/comment.png
Binary files differ
diff --git a/www/html/_static/contents.png b/docs/html/_static/contents.png
index 6c59aa1..6c59aa1 100644
--- a/www/html/_static/contents.png
+++ b/docs/html/_static/contents.png
Binary files differ
diff --git a/www/html/_static/doctools.js b/docs/html/_static/doctools.js
index 24992e6..24992e6 100644
--- a/www/html/_static/doctools.js
+++ b/docs/html/_static/doctools.js
diff --git a/www/html/_static/down-pressed.png b/docs/html/_static/down-pressed.png
index 5756c8c..5756c8c 100644
--- a/www/html/_static/down-pressed.png
+++ b/docs/html/_static/down-pressed.png
Binary files differ
diff --git a/www/html/_static/down.png b/docs/html/_static/down.png
index 1b3bdad..1b3bdad 100644
--- a/www/html/_static/down.png
+++ b/docs/html/_static/down.png
Binary files differ
diff --git a/www/html/_static/file.png b/docs/html/_static/file.png
index a858a41..a858a41 100644
--- a/www/html/_static/file.png
+++ b/docs/html/_static/file.png
Binary files differ
diff --git a/www/html/_static/jquery-3.1.0.js b/docs/html/_static/jquery-3.1.0.js
index f2fc274..f2fc274 100644
--- a/www/html/_static/jquery-3.1.0.js
+++ b/docs/html/_static/jquery-3.1.0.js
diff --git a/www/html/_static/jquery.js b/docs/html/_static/jquery.js
index f6a6a99..f6a6a99 100644
--- a/www/html/_static/jquery.js
+++ b/docs/html/_static/jquery.js
diff --git a/www/html/_static/minus.png b/docs/html/_static/minus.png
index d96755f..d96755f 100644
--- a/www/html/_static/minus.png
+++ b/docs/html/_static/minus.png
Binary files differ
diff --git a/www/html/_static/navigation.png b/docs/html/_static/navigation.png
index fda6cd2..fda6cd2 100644
--- a/www/html/_static/navigation.png
+++ b/docs/html/_static/navigation.png
Binary files differ
diff --git a/www/html/_static/plus.png b/docs/html/_static/plus.png
index 7107cec..7107cec 100644
--- a/www/html/_static/plus.png
+++ b/docs/html/_static/plus.png
Binary files differ
diff --git a/www/html/_static/pygments.css b/docs/html/_static/pygments.css
index 20c4814..20c4814 100644
--- a/www/html/_static/pygments.css
+++ b/docs/html/_static/pygments.css
diff --git a/www/html/_static/searchtools.js b/docs/html/_static/searchtools.js
index 33fedf4..33fedf4 100644
--- a/www/html/_static/searchtools.js
+++ b/docs/html/_static/searchtools.js
diff --git a/www/html/_static/sphinxdoc.css b/docs/html/_static/sphinxdoc.css
index 8876773..8876773 100644
--- a/www/html/_static/sphinxdoc.css
+++ b/docs/html/_static/sphinxdoc.css
diff --git a/www/html/_static/underscore-1.3.1.js b/docs/html/_static/underscore-1.3.1.js
index 208d4cd..208d4cd 100644
--- a/www/html/_static/underscore-1.3.1.js
+++ b/docs/html/_static/underscore-1.3.1.js
diff --git a/www/html/_static/underscore.js b/docs/html/_static/underscore.js
index 5b55f32..5b55f32 100644
--- a/www/html/_static/underscore.js
+++ b/docs/html/_static/underscore.js
diff --git a/www/html/_static/up-pressed.png b/docs/html/_static/up-pressed.png
index acee3b6..acee3b6 100644
--- a/www/html/_static/up-pressed.png
+++ b/docs/html/_static/up-pressed.png
Binary files differ
diff --git a/www/html/_static/up.png b/docs/html/_static/up.png
index 2a940a7..2a940a7 100644
--- a/www/html/_static/up.png
+++ b/docs/html/_static/up.png
Binary files differ
diff --git a/www/html/_static/websupport.js b/docs/html/_static/websupport.js
index 53f6a45..53f6a45 100644
--- a/www/html/_static/websupport.js
+++ b/docs/html/_static/websupport.js
diff --git a/www/html/api/Cheetah.CacheRegion.html b/docs/html/api/Cheetah.CacheRegion.html
index 758fbf3..a7d5106 100644
--- a/www/html/api/Cheetah.CacheRegion.html
+++ b/docs/html/api/Cheetah.CacheRegion.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -144,9 +144,9 @@ of $getArticleID().</p>
<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
<p>A <cite>CacheRegion</cite> stores some <cite>CacheItem</cite> instances.</p>
<p>This implementation stores the data in the memory of the current process.
-If you need a more advanced data store, create a cacheStore class that works
-with Cheetah’s CacheStore protocol and provide it as the cacheStore argument
-to __init__. For example you could use
+If you need a more advanced data store, create a cacheStore class that
+works with Cheetah’s CacheStore protocol and provide it as the cacheStore
+argument to __init__. For example you could use
Cheetah.CacheStore.MemcachedCacheStore, a wrapper around the Python
memcached API (<a class="reference external" href="http://www.danga.com/memcached">http://www.danga.com/memcached</a>).</p>
<dl class="method">
@@ -193,7 +193,7 @@ exist, it’s created.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.CacheStore.html b/docs/html/api/Cheetah.CacheStore.html
index 2328ef4..4ff047d 100644
--- a/www/html/api/Cheetah.CacheStore.html
+++ b/docs/html/api/Cheetah.CacheStore.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -217,7 +217,7 @@ python-memcached API, except for their return values:</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.CheetahWrapper.html b/docs/html/api/Cheetah.CheetahWrapper.html
index b1908f6..c007655 100644
--- a/www/html/api/Cheetah.CheetahWrapper.html
+++ b/docs/html/api/Cheetah.CheetahWrapper.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -195,7 +195,7 @@ false.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Compiler.html b/docs/html/api/Cheetah.Compiler.html
index 080c35b..d740150 100644
--- a/www/html/api/Cheetah.Compiler.html
+++ b/docs/html/api/Cheetah.Compiler.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -330,7 +330,8 @@ nameChunks is the list
<p>where:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>VFN = NameMapper.valueForName
VFFSL = NameMapper.valueFromFrameOrSearchList
-VFSL = NameMapper.valueFromSearchList # optionally used instead of VFFSL
+# optionally used instead of VFFSL
+VFSL = NameMapper.valueFromSearchList
SL = self.searchList()
useAC = self.setting(&#39;useAutocalling&#39;) # True in this example
@@ -349,7 +350,8 @@ A` = VFFSL(SL, name=A[0], executeCallables=(useAC and A[1]))A[2]
</div>
<p>Note, if the compiler setting useStackFrames=False (default is true)
then:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span>A` = VFSL([locals()]+SL+[globals(), builtin], name=A[0], executeCallables=(useAC and A[1]))A[2]
+<div class="highlight-default"><div class="highlight"><pre><span></span>A` = VFSL([locals()] + SL + [globals(), builtin],
+ name=A[0], executeCallables=(useAC and A[1]))A[2]
</pre></div>
</div>
<p>This option allows Cheetah to be used with Psyco, which doesn’t support
@@ -909,7 +911,7 @@ statements and Cheetah default module constants.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.DirectiveAnalyzer.html b/docs/html/api/Cheetah.DirectiveAnalyzer.html
index ba4fc31..971eddf 100644
--- a/www/html/api/Cheetah.DirectiveAnalyzer.html
+++ b/docs/html/api/Cheetah.DirectiveAnalyzer.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -131,7 +131,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Django.html b/docs/html/api/Cheetah.Django.html
index 7fd0cc3..ee62e8c 100644
--- a/www/html/api/Cheetah.Django.html
+++ b/docs/html/api/Cheetah.Django.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -98,7 +98,7 @@ template are propogated into the template’s searchList</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.DummyTransaction.html b/docs/html/api/Cheetah.DummyTransaction.html
index dae65c9..4dc3196 100644
--- a/www/html/api/Cheetah.DummyTransaction.html
+++ b/docs/html/api/Cheetah.DummyTransaction.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -176,7 +176,7 @@ attributes make no sense in this context.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.ErrorCatchers.html b/docs/html/api/Cheetah.ErrorCatchers.html
index baca63c..bd902b4 100644
--- a/www/html/api/Cheetah.ErrorCatchers.html
+++ b/docs/html/api/Cheetah.ErrorCatchers.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -155,7 +155,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.FileUtils.html b/docs/html/api/Cheetah.FileUtils.html
index 21b3661..91f8d1b 100644
--- a/www/html/api/Cheetah.FileUtils.html
+++ b/docs/html/api/Cheetah.FileUtils.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -90,7 +90,7 @@ the specified glob patterns.</p>
<dl class="method">
<dt id="Cheetah.FileUtils.FileFinder.walkDirTree">
<code class="descname">walkDirTree</code><span class="sig-paren">(</span><em>dir='.'</em>, <em>listdir=&lt;built-in function listdir&gt;</em>, <em>isdir=&lt;function isdir&gt;</em>, <em>join=&lt;function join&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.FileUtils.FileFinder.walkDirTree" title="Permalink to this definition">¶</a></dt>
-<dd><p>Recursively walk through a directory tree and find matching files.</p>
+<dd><p>Recursively walk through a directory tree and find matching files</p>
</dd></dl>
</dd></dl>
@@ -185,7 +185,7 @@ docstring for more details.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Filters.html b/docs/html/api/Cheetah.Filters.html
index 5f15258..1b33982 100644
--- a/www/html/api/Cheetah.Filters.html
+++ b/docs/html/api/Cheetah.Filters.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -73,19 +73,21 @@
<dt id="Cheetah.Filters.CodeHighlighter">
<em class="property">class </em><code class="descclassname">Cheetah.Filters.</code><code class="descname">CodeHighlighter</code><span class="sig-paren">(</span><em>template=None</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.CodeHighlighter" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#Cheetah.Filters.Filter" title="Cheetah.Filters.Filter"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Filters.Filter</span></code></a></p>
-<p>The CodeHighlighter filter depends on the “pygments†module which you can
-download and install from: <a class="reference external" href="http://pygments.org">http://pygments.org</a></p>
-<p>What the CodeHighlighter assumes the string that it’s receiving is source
-code and uses pygments.lexers.guess_lexer() to try to guess which parser
-to use when highlighting it.</p>
-<p>CodeHighlighter will return the HTML and CSS to render the code block, syntax
-highlighted, in a browser</p>
-<p>NOTE: I had an issue installing pygments on Linux/amd64/Python 2.6 dealing with
-importing of pygments.lexers, I was able to correct the failure by adding:</p>
+<p>The CodeHighlighter filter depends on the “pygments†module
+which you can download and install from: <a class="reference external" href="http://pygments.org/">http://pygments.org/</a></p>
+<p>What the CodeHighlighter assumes the string that it’s receiving
+is source code and uses pygments.lexers.guess_lexer() to try to guess
+which parser to use when highlighting it.</p>
+<p>CodeHighlighter will return the HTML and CSS to render the code block,
+syntax highlighted, in a browser</p>
+<p>NOTE: I had an issue installing pygments on Linux/amd64/Python 2.6
+dealing with importing of pygments.lexers. I was able to correct the
+failure by adding:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">raise</span> <span class="ne">ImportError</span>
</pre></div>
</div>
-<p>to line 39 of pygments/plugin.py (since importing pkg_resources was causing issues)</p>
+<p>to line 39 of pygments/plugin.py (since importing pkg_resources was
+causing issues).</p>
<dl class="method">
<dt id="Cheetah.Filters.CodeHighlighter.filter">
<code class="descname">filter</code><span class="sig-paren">(</span><em>source</em>, <em>**kwargs</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.CodeHighlighter.filter" title="Permalink to this definition">¶</a></dt>
@@ -107,7 +109,8 @@ importing of pygments.lexers, I was able to correct the failure by adding:</p>
<dl class="method">
<dt id="Cheetah.Filters.Filter.filter">
<code class="descname">filter</code><span class="sig-paren">(</span><em>val</em>, <em>encoding=None</em>, <em>str=&lt;type 'str'&gt;</em>, <em>**kw</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Filters.Filter.filter" title="Permalink to this definition">¶</a></dt>
-<dd><p>Pass Unicode strings through unmolested, unless an encoding is specified.</p>
+<dd><p>Pass Unicode strings through unmolested,
+unless an encoding is specified.</p>
</dd></dl>
</dd></dl>
@@ -162,7 +165,8 @@ best</p>
<p>Strip leading/trailing whitespace but preserve newlines.</p>
<p>This filter goes through the value line by line, removing leading and
trailing whitespace on each line. It does not strip newlines, so every
-input line corresponds to one output line, with its trailing newline intact.</p>
+input line corresponds to one output line, with its trailing newline
+intact.</p>
<p>We do not use val.split(‘n’) because that would squeeze out consecutive
blank lines. Instead, we search for each newline individually. This
makes us unable to use the fast C .split method, but it makes the filter
@@ -229,7 +233,7 @@ input is joined into one ling line with NO trailing newline.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.ImportHooks.html b/docs/html/api/Cheetah.ImportHooks.html
index bf73c37..1362940 100644
--- a/www/html/api/Cheetah.ImportHooks.html
+++ b/docs/html/api/Cheetah.ImportHooks.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -128,7 +128,7 @@ Cheetah.ImportHooks.install()</dd>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.ImportManager.html b/docs/html/api/Cheetah.ImportManager.html
index 88a78c8..603ed1b 100644
--- a/www/html/api/Cheetah.ImportManager.html
+++ b/docs/html/api/Cheetah.ImportManager.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -67,10 +67,10 @@
<div class="section" id="module-Cheetah.ImportManager">
<span id="cheetah-importmanager-module"></span><h1>Cheetah.ImportManager module<a class="headerlink" href="#module-Cheetah.ImportManager" title="Permalink to this headline">¶</a></h1>
<p>Provides an emulator/replacement for Python’s standard import system.</p>
-<p>&#64;&#64;TR: Be warned that Import Hooks are in the deepest, darkest corner of Python’s
-jungle. If you need to start hacking with this, be prepared to get lost for a
-while. Also note, this module predates the newstyle import hooks in Python 2.3
-<a class="reference external" href="http://www.python.org/peps/pep-0302.html">http://www.python.org/peps/pep-0302.html</a>.</p>
+<p>&#64;&#64;TR: Be warned that Import Hooks are in the deepest, darkest corner of
+Python’s jungle. If you need to start hacking with this, be prepared to get
+lost for a while. Also note, this module predates the newstyle import hooks in
+Python 2.3 <a class="reference external" href="http://www.python.org/peps/pep-0302.html">http://www.python.org/peps/pep-0302.html</a>.</p>
<p>This is a hacked/documented version of Gordon McMillan’s iu.py. I have:</p>
<blockquote>
<div><ul class="simple">
@@ -137,8 +137,9 @@ generalization of Owner - their concept of ‘turf’ is broader</p>
<dt id="Cheetah.ImportManager.ImportManager.importHook">
<code class="descname">importHook</code><span class="sig-paren">(</span><em>name</em>, <em>globals=None</em>, <em>locals=None</em>, <em>fromlist=None</em>, <em>level=-1</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.ImportManager.importHook" title="Permalink to this definition">¶</a></dt>
<dd><p>NOTE: Currently importHook will accept the keyword-argument “levelâ€
-but it will <em>NOT</em> use it (currently). Details about the “level†keyword
-argument can be found here: <a class="reference external" href="http://www.python.org/doc/2.5.2/lib/built-in-funcs.html">http://www.python.org/doc/2.5.2/lib/built-in-funcs.html</a></p>
+but it will <em>NOT</em> use it. Details about the “level†keyword
+argument can be found here:
+<a class="reference external" href="https://docs.python.org/2/library/functions.html#__import__">https://docs.python.org/2/library/functions.html#__import__</a></p>
</dd></dl>
<dl class="method">
@@ -165,7 +166,8 @@ argument can be found here: <a class="reference external" href="http://www.pytho
an Owner for each thing on sys.path There are owners for directories and
.pyz files. There could be owners for zip files, or even URLs. A
shadowpath (a dictionary mapping the names in sys.path to their owners) is
-used so that sys.path (or a package’s __path__) is still a bunch of strings,</p>
+used so that sys.path (or a package’s __path__) is still a bunch of
+strings.</p>
<dl class="method">
<dt id="Cheetah.ImportManager.Owner.getmod">
<code class="descname">getmod</code><span class="sig-paren">(</span><em>nm</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.ImportManager.Owner.getmod" title="Permalink to this definition">¶</a></dt>
@@ -245,7 +247,7 @@ used so that sys.path (or a package’s __path__) is still a bunch of strings,</
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Macros.I18n.html b/docs/html/api/Cheetah.Macros.I18n.html
index 4ab30a4..3cf9376 100644
--- a/www/html/api/Cheetah.Macros.I18n.html
+++ b/docs/html/api/Cheetah.Macros.I18n.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -94,7 +94,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Macros.html b/docs/html/api/Cheetah.Macros.html
index 7f32d89..1d03323 100644
--- a/www/html/api/Cheetah.Macros.html
+++ b/docs/html/api/Cheetah.Macros.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -104,7 +104,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.NameMapper.html b/docs/html/api/Cheetah.NameMapper.html
index 4584584..357ea1e 100644
--- a/www/html/api/Cheetah.NameMapper.html
+++ b/docs/html/api/Cheetah.NameMapper.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -100,9 +100,9 @@ structures behind them.</p>
use information from your system on the client’s website –AND– they want to
understand the display code and so they can maintian it themselves.</p>
<p>You write a UI class with a ‘customers’ method that returns a dictionary of all
-the customer objects. Each customer object has an ‘address’ method that returns
-the a dictionary with information about the customer’s address. The designers
-want to be able to access that information.</p>
+the customer objects. Each customer object has an ‘address’ method
+that returns the a dictionary with information about the customer’s address.
+The designers want to be able to access that information.</p>
<p>Using PSP, the display code for the website would look something like the
following, assuming your servlet subclasses the class you created for managing
customer information:</p>
@@ -125,8 +125,9 @@ $customers[$ID].address.city (27 chars)</div></blockquote>
programming experience? The last form is 15 characters shorter than the PSP
and, conceptually, is far more accessible. With PHP or ASP, the code would be
even messier than the PSP</p>
-<p>This is a rather extreme example and, of course, you could also just implement
-‘$getCustomer($ID).city’ and obey the Law of Demeter (search Google for more on that).
+<p>This is a rather extreme example and, of course,
+you could also just implement ‘$getCustomer($ID).city’
+and obey the Law of Demeter (search Google for more on that).
But good object orientated design isn’t the point here.</p>
</div>
<div class="section" id="details">
@@ -134,9 +135,9 @@ But good object orientated design isn’t the point here.</p>
<p>The parenthesized letters below correspond to the aims in the second paragraph.</p>
<div class="section" id="dictionary-access-a">
<h3>DICTIONARY ACCESS (a)<a class="headerlink" href="#dictionary-access-a" title="Permalink to this headline">¶</a></h3>
-<p>NameMapper allows access to items in a dictionary using the same dotted notation
-used to access object attributes in Python. This aspect of NameMapper is known
-as ‘Unified Dotted Notation’.</p>
+<p>NameMapper allows access to items in a dictionary
+using the same dotted notation used to access object attributes in Python.
+This aspect of NameMapper is known as ‘Unified Dotted Notation’.</p>
<p>For example, with Cheetah it is possible to write:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$customers()[&#39;kerr&#39;].address() --OR-- $customers().kerr.address()
</pre></div>
@@ -149,8 +150,8 @@ as ‘Unified Dotted Notation’.</p>
</div>
<div class="section" id="autocalling-b-d">
<h3>AUTOCALLING (b,d)<a class="headerlink" href="#autocalling-b-d" title="Permalink to this headline">¶</a></h3>
-<p>NameMapper automatically detects functions and methods in Cheetah $vars and calls
-them if the parentheses have been left off.</p>
+<p>NameMapper automatically detects functions and methods in Cheetah $vars
+and calls them if the parentheses have been left off.</p>
<p>For example if ‘a’ is an object, ‘b’ is a method:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>$a.b
</pre></div>
@@ -169,8 +170,8 @@ them if the parentheses have been left off.</p>
<li>NameMapper autocalls the function or method without any arguments. Thus
autocalling can only be used with functions or methods that either have no
arguments or have default values for all arguments.</li>
-<li>NameMapper only autocalls functions and methods. Classes and callable object instances
-will not be autocalled.</li>
+<li>NameMapper only autocalls functions and methods.
+Classes and callable object instances will not be autocalled.</li>
<li>Autocalling can be disabled using Cheetah’s ‘useAutocalling’ setting.</li>
</ul>
</div>
@@ -260,7 +261,7 @@ been compiled or falls back to the Python version if not.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Parser.html b/docs/html/api/Cheetah.Parser.html
index 03007c9..d730e09 100644
--- a/www/html/api/Cheetah.Parser.html
+++ b/docs/html/api/Cheetah.Parser.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -211,7 +211,7 @@ Parser === _HighLevelParser (an alias)</dd>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Servlet.html b/docs/html/api/Cheetah.Servlet.html
index 5656fe8..f612280 100644
--- a/www/html/api/Cheetah.Servlet.html
+++ b/docs/html/api/Cheetah.Servlet.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -136,7 +136,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.SettingsManager.html b/docs/html/api/Cheetah.SettingsManager.html
index e7b38d2..4eae087 100644
--- a/www/html/api/Cheetah.SettingsManager.html
+++ b/docs/html/api/Cheetah.SettingsManager.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -125,7 +125,7 @@ of any depth.</p>
<dl class="method">
<dt id="Cheetah.SettingsManager.SettingsManager.setting">
<code class="descname">setting</code><span class="sig-paren">(</span><em>name</em>, <em>default=&lt;class 'Cheetah.SettingsManager.NoDefault'&gt;</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.setting" title="Permalink to this definition">¶</a></dt>
-<dd><p>Get a setting from self._settings, with or without a default value.</p>
+<dd><p>Get a setting from self._settings, with or without a default value</p>
</dd></dl>
<dl class="method">
@@ -137,7 +137,7 @@ of any depth.</p>
<dl class="method">
<dt id="Cheetah.SettingsManager.SettingsManager.updateSettings">
<code class="descname">updateSettings</code><span class="sig-paren">(</span><em>newSettings</em>, <em>merge=True</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.SettingsManager.SettingsManager.updateSettings" title="Permalink to this definition">¶</a></dt>
-<dd><p>Update the settings with a selective merge or a complete overwrite.</p>
+<dd><p>Update the settings with a selective merge or a complete overwrite</p>
</dd></dl>
<dl class="method">
@@ -205,7 +205,7 @@ This also works for complex numbers and numbers with +/- in front.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.SourceReader.html b/docs/html/api/Cheetah.SourceReader.html
index 5fed465..dfb5ee2 100644
--- a/www/html/api/Cheetah.SourceReader.html
+++ b/docs/html/api/Cheetah.SourceReader.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -294,7 +294,7 @@ match object instance. Return None if no position in the string matches.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Template.html b/docs/html/api/Cheetah.Template.html
index 490f0d9..30f894b 100644
--- a/www/html/api/Cheetah.Template.html
+++ b/docs/html/api/Cheetah.Template.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -66,8 +66,9 @@
<div class="section" id="module-Cheetah.Template">
<span id="cheetah-template-module"></span><h1>Cheetah.Template module<a class="headerlink" href="#module-Cheetah.Template" title="Permalink to this headline">¶</a></h1>
-<p>Provides the core API for Cheetah.</p>
-<p>See the docstring in the Template class and the Users’ Guide for more information</p>
+<p>Provides the core API for Cheetah</p>
+<p>See the docstring in the Template class and the Users’ Guide
+for more information.</p>
<dl class="class">
<dt id="Cheetah.Template.CompileCacheItem">
<em class="property">class </em><code class="descclassname">Cheetah.Template.</code><code class="descname">CompileCacheItem</code><a class="headerlink" href="#Cheetah.Template.CompileCacheItem" title="Permalink to this definition">¶</a></dt>
@@ -102,14 +103,14 @@ methods for compiling Cheetah source code into template classes.</p>
oriented programming. If you don’t know Python, see the sections of the
Cheetah Users’ Guide for non-programmers. It also assumes you have read
about Cheetah’s syntax in the Users’ Guide.</p>
-<p>The following explains how to use Cheetah from within Python programs or via
-the interpreter. If you statically compile your templates on the command
-line using the ‘cheetah’ script, this is not relevant to you. Statically
-compiled Cheetah template modules/classes (e.g. myTemplate.py:
-MyTemplateClasss) are just like any other Python module or class. Also note,
-most Python web frameworks (Webware, Aquarium, mod_python, Turbogears,
-CherryPy, Quixote, etc.) provide plugins that handle Cheetah compilation for
-you.</p>
+<p>The following explains how to use Cheetah from within Python programs or
+via the interpreter. If you statically compile your templates on the
+command line using the ‘cheetah’ script, this is not relevant to you.
+Statically compiled Cheetah template modules/classes (e.g. myTemplate.py:
+MyTemplateClasss) are just like any other Python module or class. Also
+note, most Python web frameworks (Webware, Aquarium, mod_python,
+Turbogears, CherryPy, Quixote, etc.) provide plugins that handle Cheetah
+compilation for you.</p>
<p>There are several possible usage patterns:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="mi">1</span><span class="p">)</span> <span class="n">tclass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
<span class="n">t1</span> <span class="o">=</span> <span class="n">tclass</span><span class="p">()</span> <span class="c1"># or tclass(namespaces=[namespace,...])</span>
@@ -119,13 +120,15 @@ you.</p>
<span class="n">Template</span><span class="o">.</span><span class="n">compile</span> <span class="n">provides</span> <span class="n">a</span> <span class="n">rich</span> <span class="ow">and</span> <span class="n">very</span> <span class="n">flexible</span> <span class="n">API</span> <span class="n">via</span> <span class="n">its</span>
<span class="n">optional</span> <span class="n">arguments</span> <span class="n">so</span> <span class="n">there</span> <span class="n">are</span> <span class="n">many</span> <span class="n">possible</span> <span class="n">variations</span> <span class="n">of</span> <span class="n">this</span>
<span class="n">pattern</span><span class="o">.</span> <span class="n">One</span> <span class="n">example</span> <span class="ow">is</span><span class="p">:</span>
- <span class="n">tclass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;hello $name from $caller&#39;</span><span class="p">,</span> <span class="n">baseclass</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
+ <span class="n">tclass</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;hello $name from $caller&#39;</span><span class="p">,</span>
+ <span class="n">baseclass</span><span class="o">=</span><span class="nb">dict</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">tclass</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="s1">&#39;world&#39;</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="s1">&#39;me&#39;</span><span class="p">))</span>
<span class="n">See</span> <span class="n">the</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">()</span> <span class="n">docstring</span> <span class="k">for</span> <span class="n">more</span> <span class="n">details</span><span class="o">.</span>
<span class="mi">2</span><span class="p">)</span> <span class="n">tmplInstance</span> <span class="o">=</span> <span class="n">Template</span><span class="p">(</span><span class="n">src</span><span class="p">)</span>
<span class="c1"># or Template(src, namespaces=[namespace,...])</span>
- <span class="n">outputStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmplInstance</span><span class="p">)</span> <span class="c1"># or outputStr = tmplInstance.aMethodYouDefined(...args...)</span>
+ <span class="n">outputStr</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">tmplInstance</span><span class="p">)</span>
+ <span class="c1"># or outputStr = tmplInstance.aMethodYouDefined(...args...)</span>
</pre></div>
</div>
<p>Notes on the usage patterns:</p>
@@ -149,14 +152,16 @@ you.</p>
<span class="n">new</span><span class="o">-</span><span class="n">style</span> <span class="s1">&#39;object&#39;</span> <span class="n">baseclass</span><span class="o">.</span> <span class="n">Cheetah</span><span class="o">.</span><span class="n">Template</span> <span class="ow">is</span> <span class="n">a</span> <span class="n">subclass</span> <span class="n">of</span>
<span class="s1">&#39;object&#39;</span><span class="o">.</span> <span class="n">You</span> <span class="n">also</span> <span class="n">can</span> <span class="ow">not</span> <span class="c1">#extend dict, list, or other builtin</span>
<span class="n">types</span><span class="o">.</span>
- <span class="o">-</span> <span class="n">If</span> <span class="n">your</span> <span class="n">template</span> <span class="n">baseclass</span><span class="s1">&#39; __init__ constructor expects args there</span>
- <span class="ow">is</span> <span class="n">currently</span> <span class="n">no</span> <span class="n">way</span> <span class="n">to</span> <span class="k">pass</span> <span class="n">them</span> <span class="ow">in</span><span class="o">.</span>
+ <span class="o">-</span> <span class="n">If</span> <span class="n">your</span> <span class="n">template</span> <span class="n">baseclass</span><span class="s1">&#39; __init__ constructor expects args</span>
+ <span class="n">there</span> <span class="ow">is</span> <span class="n">currently</span> <span class="n">no</span> <span class="n">way</span> <span class="n">to</span> <span class="k">pass</span> <span class="n">them</span> <span class="ow">in</span><span class="o">.</span>
</pre></div>
</div>
-<p>If you need to subclass a dynamically compiled Cheetah class, do something like this:</p>
+<p>If you need to subclass a dynamically compiled Cheetah class, do something
+like this:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">Cheetah.Template</span> <span class="k">import</span> <span class="n">Template</span>
<span class="n">T1</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;$meth1 #def meth1: this is meth1 in T1&#39;</span><span class="p">)</span>
-<span class="n">T2</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="s1">&#39;#implements meth1</span><span class="se">\n</span><span class="s1">this is meth1 redefined in T2&#39;</span><span class="p">,</span> <span class="n">baseclass</span><span class="o">=</span><span class="n">T1</span><span class="p">)</span>
+<span class="n">T2</span> <span class="o">=</span> <span class="n">Template</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
+ <span class="s1">&#39;#implements meth1</span><span class="se">\n</span><span class="s1">this is meth1 redefined in T2&#39;</span><span class="p">,</span> <span class="n">baseclass</span><span class="o">=</span><span class="n">T1</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="n">T1</span><span class="p">,</span> <span class="n">T1</span><span class="p">())</span>
<span class="nb">print</span><span class="p">(</span><span class="n">T2</span><span class="p">,</span> <span class="n">T2</span><span class="p">())</span>
</pre></div>
@@ -196,21 +201,21 @@ Cheetah’s other compilation API’s use this method under the hood.</p>
<p>Internally, this method a) parses the Cheetah source code and generates
Python code defining a module with a single class in it, b) dynamically
creates a module object with a unique name, c) execs the generated code
-in that module’s namespace then inserts the module into sys.modules, and
-d) returns a reference to the generated class. If you want to get the
-generated python source code instead, pass the argument
+in that module’s namespace then inserts the module into sys.modules,
+and d) returns a reference to the generated class. If you want to get
+the generated python source code instead, pass the argument
returnAClass=False.</p>
<p>It caches generated code and classes. See the descriptions of the
arguments’cacheCompilationResults’ and ‘useCache’ for details. This
-doesn’t mean that templates will automatically recompile themselves when
-the source file changes. Rather, if you call Template.compile(src) or
-Template.compile(file=path) repeatedly it will attempt to return a
+doesn’t mean that templates will automatically recompile themselves
+when the source file changes. Rather, if you call Template.compile(src)
+or Template.compile(file=path) repeatedly it will attempt to return a
cached class definition instead of recompiling.</p>
<p>Hooks are provided template source preprocessing. See the notes on the
‘preprocessors’ arg.</p>
-<p>If you are an advanced user and need to customize the way Cheetah parses
-source code or outputs Python code, you should check out the
-compilerSettings argument.</p>
+<p>If you are an advanced user and need to customize the way Cheetah
+parses source code or outputs Python code, you should check out
+the compilerSettings argument.</p>
<p>Arguments:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>You must provide either a &#39;source&#39; or &#39;file&#39; arg, but not both::
@@ -219,8 +224,8 @@ compilerSettings argument.</p>
The rest of the arguments are strictly optional. All but the first
have defaults in attributes of the Template class which can be
-overridden in subclasses of this class. Working with most of these is
-an advanced topic.
+overridden in subclasses of this class. Working with most of these
+is an advanced topic.
::
@@ -246,18 +251,17 @@ an advanced topic.
Template._CHEETAH_defaultModuleNameForTemplates
=&#39;DynamicallyCompiledCheetahTemplate&#39;
- What to name the generated Python module. If the provided value is
- None and a file arg was given, the moduleName is created from the
- file path. In all cases if the moduleName provided is already in
- sys.modules it is passed through a filter that generates a unique
- variant of the name.
-
+ What to name the generated Python module. If the provided value
+ is None and a file arg was given, the moduleName is created from
+ the file path. In all cases if the moduleName provided is
+ already in sys.modules it is passed through a filter that
+ generates a unique variant of the name.
- className (a string)
Default: Template._CHEETAH_defaultClassNameForTemplates=None
- What to name the generated Python class. If the provided value is
- None, the moduleName is use as the class name.
+ What to name the generated Python class. If the provided value
+ is None, the moduleName is use as the class name.
- mainMethodName (a string)
Default:
@@ -292,9 +296,9 @@ an advanced topic.
- cacheCompilationResults (True/False)
Default: Template._CHEETAH_cacheCompilationResults=True
- Tells Cheetah to cache the generated code and classes so that they
- can be reused if Template.compile() is called multiple times with
- the same source and options.
+ Tells Cheetah to cache the generated code and classes so that
+ they can be reused if Template.compile() is called multiple times
+ with the same source and options.
- useCache (True/False)
Default: Template._CHEETAH_useCompilationCache=True
@@ -409,19 +413,22 @@ an advanced topic.
happen if you don&#39;t provide at least one):
- tokens: same as the single string described above. You can
also provide a tuple of 2 strings.
- - searchList: the searchList used for preprocess $placeholders
- - compilerSettings: used in the compilation of the intermediate
- template
+ - searchList: the searchList used
+ for preprocess $placeholders
+ - compilerSettings: used in the compilation
+ of the intermediate template
- templateAPIClass: an optional subclass of `Template`
- outputTransformer: a simple hook for passing in a callable
which can do further transformations of the preprocessor
output, or do something else like debug logging. The
default is str().
- + any keyword arguments to Template.compile which you want to
- provide for the compilation of the intermediate template.
+ + any keyword arguments to Template.compile which you want
+ to provide for the compilation
+ of the intermediate template.
- klass = Template.compile(src,
- preprocessors=[ dict(tokens=&#39;@ %&#39;, searchList=[...]) ] )
+ klass = Template.compile(
+ src,
+ preprocessors=[dict(tokens=&#39;@ %&#39;, searchList=[...])])
</pre></div>
</div>
</dd></dl>
@@ -464,9 +471,10 @@ region’.</p>
<dt id="Cheetah.Template.Template.getFileContents">
<code class="descname">getFileContents</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.getFileContents" title="Permalink to this definition">¶</a></dt>
<dd><p>A hook for getting the contents of a file. The default
-implementation just uses the Python open() function to load local files.
-This method could be reimplemented to allow reading of remote files via
-various protocols, as PHP allows with its ‘URL fopen wrapper’</p>
+implementation just uses the Python open() function
+to load local files. This method could be reimplemented
+to allow reading of remote files via various protocols,
+as PHP allows with its ‘URL fopen wrapper’.</p>
</dd></dl>
<dl class="method">
@@ -489,7 +497,8 @@ raises NameMapper.NotFound.</p>
<dd><p>This is just a stub at this time.</p>
<blockquote>
<div><div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">plural</span> <span class="o">=</span> <span class="n">the</span> <span class="n">plural</span> <span class="n">form</span> <span class="n">of</span> <span class="n">the</span> <span class="n">message</span>
-<span class="n">n</span> <span class="o">=</span> <span class="n">a</span> <span class="n">sized</span> <span class="n">argument</span> <span class="n">to</span> <span class="n">distinguish</span> <span class="n">between</span> <span class="n">single</span> <span class="ow">and</span> <span class="n">plural</span> <span class="n">forms</span>
+<span class="n">n</span> <span class="o">=</span> <span class="n">a</span> <span class="n">sized</span> <span class="n">argument</span> <span class="n">to</span> <span class="n">distinguish</span>
+ <span class="n">between</span> <span class="n">single</span> <span class="ow">and</span> <span class="n">plural</span> <span class="n">forms</span>
<span class="nb">id</span> <span class="o">=</span> <span class="n">msgid</span> <span class="ow">in</span> <span class="n">the</span> <span class="n">translation</span> <span class="n">catalog</span>
<span class="n">domain</span> <span class="o">=</span> <span class="n">translation</span> <span class="n">domain</span>
<span class="n">source</span> <span class="o">=</span> <span class="n">source</span> <span class="n">lang</span>
@@ -501,8 +510,8 @@ raises NameMapper.NotFound.</p>
<p>See the following for some ideas
<a class="reference external" href="http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport">http://www.zope.org/DevHome/Wikis/DevSite/Projects/ComponentArchitecture/ZPTInternationalizationSupport</a></p>
<p>Other notes:</p>
-<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">There</span> <span class="ow">is</span> <span class="n">no</span> <span class="n">need</span> <span class="n">to</span> <span class="n">replicate</span> <span class="n">the</span> <span class="n">i18n</span><span class="p">:</span><span class="n">name</span> <span class="n">attribute</span> <span class="kn">from</span> <span class="nn">plone</span> <span class="o">/</span> <span class="n">PTL</span><span class="p">,</span>
- <span class="k">as</span> <span class="n">cheetah</span> <span class="n">placeholders</span> <span class="n">serve</span> <span class="n">the</span> <span class="n">same</span> <span class="n">purpose</span>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">-</span> <span class="n">There</span> <span class="ow">is</span> <span class="n">no</span> <span class="n">need</span> <span class="n">to</span> <span class="n">replicate</span> <span class="n">the</span> <span class="n">i18n</span><span class="p">:</span><span class="n">name</span> <span class="n">attribute</span>
+ <span class="kn">from</span> <span class="nn">plone</span> <span class="o">/</span> <span class="n">PTL</span><span class="p">,</span> <span class="k">as</span> <span class="n">cheetah</span> <span class="n">placeholders</span> <span class="n">serve</span> <span class="n">the</span> <span class="n">same</span> <span class="n">purpose</span><span class="o">.</span>
</pre></div>
</div>
</dd></dl>
@@ -538,8 +547,11 @@ for static page generation.</p>
<em class="property">classmethod </em><code class="descname">subclass</code><span class="sig-paren">(</span><em>klass</em>, <em>*args</em>, <em>**kws</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.subclass" title="Permalink to this definition">¶</a></dt>
<dd><p>Takes the same args as the .compile() classmethod and returns a
template that is a subclass of the template this method is called from.</p>
-<p>T1 = Template.compile(‘foo - $meth1 - barn#def meth1: this is T1.meth1’)
-T2 = T1.subclass(‘#implements meth1n this is T2.meth1’)</p>
+<dl class="docutils">
+<dt>T1 = Template.compile(</dt>
+<dd>‘foo - $meth1 - barn#def meth1: this is T1.meth1’)</dd>
+</dl>
+<p>T2 = T1.subclass(‘#implements meth1n this is T2.meth1’)</p>
</dd></dl>
<dl class="method">
@@ -553,14 +565,15 @@ T2 = T1.subclass(‘#implements meth1n this is T2.meth1’)</p>
<code class="descname">webInput</code><span class="sig-paren">(</span><em>names</em>, <em>namesMulti=()</em>, <em>default=''</em>, <em>src='f'</em>, <em>defaultInt=0</em>, <em>defaultFloat=0.0</em>, <em>badInt=0</em>, <em>badFloat=0.0</em>, <em>debug=False</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Template.Template.webInput" title="Permalink to this definition">¶</a></dt>
<dd><p>Method for importing web transaction variables in bulk.</p>
<p>This works for GET/POST fields both in Webware servlets and in CGI
-scripts, and for cookies and session variables in Webware servlets. If
-you try to read a cookie or session variable in a CGI script, you’ll get
-a RuntimeError. ‘In a CGI script’ here means ‘not running as a Webware
-servlet’. If the CGI environment is not properly set up, Cheetah will
-act like there’s no input.</p>
+scripts, and for cookies and session variables in Webware servlets.
+If you try to read a cookie or session variable in a CGI script,
+you’ll get a RuntimeError. ‘In a CGI script’ here means
+‘not running as a Webware servlet’. If the CGI environment
+is not properly set up, Cheetah will act like there’s no input.</p>
<p>The public method provided is:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">webInput</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">names</span><span class="p">,</span> <span class="n">namesMulti</span><span class="o">=</span><span class="p">(),</span> <span class="n">default</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">src</span><span class="o">=</span><span class="s1">&#39;f&#39;</span><span class="p">,</span>
- <span class="n">defaultInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">defaultFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span> <span class="n">badInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">badFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
+ <span class="n">defaultInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">defaultFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span>
+ <span class="n">badInt</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">badFloat</span><span class="o">=</span><span class="mf">0.00</span><span class="p">,</span> <span class="n">debug</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
</pre></div>
</div>
<p>This method places the specified GET/POST fields, cookies or session
@@ -585,22 +598,25 @@ write(dic[&#39;choice&#39;])
</pre></div>
</div>
<p>Both these examples retrieves the GET/POST field ‘choice’ and print it.
-If you leave off the’#silent’, all the values would be printed too. But
-a better way to preview the values is:</p>
+If you leave off the’#silent’, all the values would be printed too.
+But a better way to preview the values is:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="c1">#silent $webInput([&#39;name&#39;], $debug=1)</span>
</pre></div>
</div>
<p>because this pretty-prints all the values inside HTML &lt;PRE&gt; tags.</p>
-<p>** KLUDGE: ‘debug’ is supposed to insert into the template output, but it
-wasn’t working so I changed it to a’print’ statement. So the debugging
-output will appear wherever standard output is pointed, whether at the
-terminal, in a Webware log file, or whatever. ***</p>
+<p>*** KLUDGE: ‘debug’ is supposed to insert into the template output,
+but it wasn’t working so I changed it to a’print’ statement.
+So the debugging output will appear wherever standard output
+is pointed, whether at the terminal, in a Webware log file,
+or whatever. ***</p>
<p>Since we didn’t specify any coversions, the value is a string. It’s a
‘single’ value because we specified it in ‘names’ rather than
‘namesMulti’. Single values work like this:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="o">*</span> <span class="n">If</span> <span class="n">one</span> <span class="n">value</span> <span class="ow">is</span> <span class="n">found</span><span class="p">,</span> <span class="n">take</span> <span class="n">it</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">several</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">choose</span> <span class="n">one</span> <span class="n">arbitrarily</span> <span class="ow">and</span> <span class="n">ignore</span> <span class="n">the</span> <span class="n">rest</span><span class="o">.</span>
-<span class="o">*</span> <span class="n">If</span> <span class="n">no</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">use</span> <span class="ow">or</span> <span class="k">raise</span> <span class="n">the</span> <span class="n">appropriate</span> <span class="s1">&#39;default*&#39;</span> <span class="n">value</span><span class="o">.</span>
+<span class="o">*</span> <span class="n">If</span> <span class="n">several</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">choose</span> <span class="n">one</span> <span class="n">arbitrarily</span>
+ <span class="ow">and</span> <span class="n">ignore</span> <span class="n">the</span> <span class="n">rest</span><span class="o">.</span>
+<span class="o">*</span> <span class="n">If</span> <span class="n">no</span> <span class="n">values</span> <span class="n">are</span> <span class="n">found</span><span class="p">,</span> <span class="n">use</span> <span class="ow">or</span> <span class="k">raise</span>
+ <span class="n">the</span> <span class="n">appropriate</span> <span class="s1">&#39;default*&#39;</span> <span class="n">value</span><span class="o">.</span>
</pre></div>
</div>
<p>Multi values work like this:</p>
@@ -610,8 +626,9 @@ terminal, in a Webware log file, or whatever. ***</p>
<span class="n">arguments</span> <span class="n">are</span> <span class="o">*</span><span class="ow">not</span><span class="o">*</span> <span class="n">consulted</span> <span class="ow">in</span> <span class="n">this</span> <span class="n">case</span><span class="o">.</span>
</pre></div>
</div>
-<p>Example: assume ‘days’ came from a set of checkboxes or a multiple combo
-box on a form, and the user chose’Monday’, ‘Tuesday’ and ‘Thursday’:</p>
+<p>Example: assume ‘days’ came from a set of checkboxes
+or a multiple combo box on a form, and the user chose’Monday’,
+‘Tuesday’ and ‘Thursday’:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span>#silent $webInput([], [&#39;days&#39;])
The days you chose are: #slurp
#for $day in $days
@@ -624,7 +641,8 @@ for day in dic[&#39;days&#39;]:
write(day + &#39; &#39;)
</pre></div>
</div>
-<p>Both these examples print: ‘The days you chose are: Monday Tuesday Thursday’.</p>
+<p>Both these examples print: ‘The days you chose are:
+Monday Tuesday Thursday’.</p>
<p>By default, missing strings are replaced by ‘’ and missing/bad numbers
by zero. (A’bad number’ means the converter raised an exception for
it, usually because of non-numeric characters in the value.) This
@@ -645,11 +663,11 @@ some other rason.)</p>
<p>Here’s an example using multiple values to schedule newspaper
deliveries. ‘checkboxes’ comes from a form with checkboxes for all the
days of the week. The days the user previously chose are preselected.
-The user checks/unchecks boxes as desired and presses Submit. The value
-of ‘checkboxes’ is a list of checkboxes that were checked when Submit
-was pressed. Our task now is to turn on the days the user checked, turn
-off the days he unchecked, and leave on or off the days he didn’t
-change.</p>
+The user checks/unchecks boxes as desired and presses Submit.
+The value of ‘checkboxes’ is a list of checkboxes that were checked
+when Submit was pressed. Our task now is to turn on the days
+the user checked, turn off the days he unchecked, and leave on or off
+the days he didn’t change.</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">dic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">webInput</span><span class="p">([],</span> <span class="p">[</span><span class="s1">&#39;dayCheckboxes&#39;</span><span class="p">])</span>
<span class="n">wantedDays</span> <span class="o">=</span> <span class="n">dic</span><span class="p">[</span><span class="s1">&#39;dayCheckboxes&#39;</span><span class="p">]</span> <span class="c1"># The days the user checked.</span>
<span class="k">for</span> <span class="n">day</span><span class="p">,</span> <span class="n">on</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">getAllValues</span><span class="p">():</span>
@@ -693,15 +711,16 @@ else:
</pre></div>
</div>
<p>To convert a value to a number, suffix ‘:int’ or ‘:float’ to the name.
-The method will search first for a ‘height:int’ variable and then for a
-‘height’ variable. (It will be called ‘height’ in the final
-dictionary.) If a numeric conversion fails, use or raise ‘badInt’ or
-‘badFloat’. Missing values work the same way as for strings, except the
-default is ‘defaultInt’ or ‘defaultFloat’ instead of ‘default’.</p>
-<p>If a name represents an uploaded file, the entire file will be read into
-memory. For more sophistocated file-upload handling, leave that name
-out of the list and do your own handling, or wait for
-Cheetah.Utils.UploadFileMixin.</p>
+The method will search first for a ‘height:int’ variable
+and then for a ‘height’ variable. (It will be called ‘height’
+in the final dictionary.) If a numeric conversion fails,
+use or raise ‘badInt’ or ‘badFloat’. Missing values work the same way
+as for strings, except the default is ‘defaultInt’
+or ‘defaultFloat’ instead of ‘default’.</p>
+<p>If a name represents an uploaded file, the entire file will be read
+into memory. For more sophistocated file-upload handling,
+leave that name out of the list and do your own handling,
+or wait for Cheetah.Utils.UploadFileMixin.</p>
<p>This only in a subclass that also inherits from Webware’s Servlet or
HTTPServlet. Otherwise you’ll get an AttributeError on ‘self.request’.</p>
<p>EXCEPTIONS: ValueError if ‘source’ is not one of the stated characters.
@@ -711,8 +730,8 @@ cascading; e.g., ‘vs’ would look first in ‘values’ and then in session
variables.</p>
<p>Meta-Data:</p>
<div class="highlight-default"><div class="highlight"><pre><span></span><span class="n">Author</span><span class="p">:</span> <span class="n">Mike</span> <span class="n">Orr</span> <span class="o">&lt;</span><span class="n">iron</span><span class="nd">@mso</span><span class="o">.</span><span class="n">oz</span><span class="o">.</span><span class="n">net</span><span class="o">&gt;</span>
-<span class="n">License</span><span class="p">:</span> <span class="n">This</span> <span class="n">software</span> <span class="ow">is</span> <span class="n">released</span> <span class="k">for</span> <span class="n">unlimited</span> <span class="n">distribution</span> <span class="n">under</span> <span class="n">the</span>
- <span class="n">terms</span> <span class="n">of</span> <span class="n">the</span> <span class="n">MIT</span> <span class="n">license</span><span class="o">.</span> <span class="n">See</span> <span class="n">the</span> <span class="n">LICENSE</span> <span class="n">file</span><span class="o">.</span>
+<span class="n">License</span><span class="p">:</span> <span class="n">This</span> <span class="n">software</span> <span class="ow">is</span> <span class="n">released</span> <span class="k">for</span> <span class="n">unlimited</span> <span class="n">distribution</span>
+<span class="n">under</span> <span class="n">the</span> <span class="n">terms</span> <span class="n">of</span> <span class="n">the</span> <span class="n">MIT</span> <span class="n">license</span><span class="o">.</span> <span class="n">See</span> <span class="n">the</span> <span class="n">LICENSE</span> <span class="n">file</span><span class="o">.</span>
<span class="n">Version</span><span class="p">:</span> <span class="mf">1.186</span>
<span class="n">Start</span> <span class="n">Date</span><span class="p">:</span> <span class="mi">2002</span><span class="o">/</span><span class="mi">03</span><span class="o">/</span><span class="mi">17</span>
<span class="n">Last</span> <span class="n">Revision</span> <span class="n">Date</span><span class="p">:</span> <span class="mi">2008</span><span class="o">/</span><span class="mi">03</span><span class="o">/</span><span class="mi">10</span> <span class="mi">04</span><span class="p">:</span><span class="mi">48</span><span class="p">:</span><span class="mi">11</span>
@@ -790,7 +809,7 @@ it outputs</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.TemplateCmdLineIface.html b/docs/html/api/Cheetah.TemplateCmdLineIface.html
index a03e12c..40d0691 100644
--- a/www/html/api/Cheetah.TemplateCmdLineIface.html
+++ b/docs/html/api/Cheetah.TemplateCmdLineIface.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -111,7 +111,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Templates.SkeletonPage.html b/docs/html/api/Cheetah.Templates.SkeletonPage.html
index a556fce..b2a0e29 100644
--- a/www/html/api/Cheetah.Templates.SkeletonPage.html
+++ b/docs/html/api/Cheetah.Templates.SkeletonPage.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -110,7 +110,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Templates.html b/docs/html/api/Cheetah.Templates.html
index c4770c9..0be728f 100644
--- a/www/html/api/Cheetah.Templates.html
+++ b/docs/html/api/Cheetah.Templates.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -104,7 +104,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Analyzer.html b/docs/html/api/Cheetah.Tests.Analyzer.html
index a438897..112382b 100644
--- a/www/html/api/Cheetah.Tests.Analyzer.html
+++ b/docs/html/api/Cheetah.Tests.Analyzer.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -104,7 +104,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Boinker.html b/docs/html/api/Cheetah.Tests.Boinker.html
index 7eeae75..1a3cedb 100644
--- a/www/html/api/Cheetah.Tests.Boinker.html
+++ b/docs/html/api/Cheetah.Tests.Boinker.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -99,7 +99,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.CheetahWrapper.html b/docs/html/api/Cheetah.Tests.CheetahWrapper.html
index 883dfef..8751ff1 100644
--- a/www/html/api/Cheetah.Tests.CheetahWrapper.html
+++ b/docs/html/api/Cheetah.Tests.CheetahWrapper.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -631,7 +631,7 @@ files.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Cheps.html b/docs/html/api/Cheetah.Tests.Cheps.html
index ad001e6..c78f562 100644
--- a/www/html/api/Cheetah.Tests.Cheps.html
+++ b/docs/html/api/Cheetah.Tests.Cheps.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -112,7 +112,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Filters.html b/docs/html/api/Cheetah.Tests.Filters.html
index df86502..51a6d02 100644
--- a/www/html/api/Cheetah.Tests.Filters.html
+++ b/docs/html/api/Cheetah.Tests.Filters.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -117,7 +117,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Misc.html b/docs/html/api/Cheetah.Tests.Misc.html
index e4fb32a..d07d9bd 100644
--- a/www/html/api/Cheetah.Tests.Misc.html
+++ b/docs/html/api/Cheetah.Tests.Misc.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -99,7 +99,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.NameMapper.html b/docs/html/api/Cheetah.Tests.NameMapper.html
index 1de6c8e..a868803 100644
--- a/www/html/api/Cheetah.Tests.NameMapper.html
+++ b/docs/html/api/Cheetah.Tests.NameMapper.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -282,7 +282,7 @@
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test19">
<code class="descname">test19</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test19" title="Permalink to this definition">¶</a></dt>
-<dd><p>aClass.classVar1 in dict lookup</p>
+<dd><p>aDict in dict lookup</p>
</dd></dl>
<dl class="method">
@@ -294,6 +294,18 @@
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test20">
<code class="descname">test20</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test20" title="Permalink to this definition">¶</a></dt>
+<dd><p>aDict in dict lookup in a loop</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="Cheetah.Tests.NameMapper.VFN.test21">
+<code class="descname">test21</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test21" title="Permalink to this definition">¶</a></dt>
+<dd><p>aClass.classVar1 in dict lookup</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="Cheetah.Tests.NameMapper.VFN.test22">
+<code class="descname">test22</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test22" title="Permalink to this definition">¶</a></dt>
<dd><p>aClass.classVar1 in dict lookup in a loop</p>
</dd></dl>
@@ -516,13 +528,15 @@
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test58">
<code class="descname">test58</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test58" title="Permalink to this definition">¶</a></dt>
-<dd><p>aDict.nestedDict.aClass in dict lookup in a loop - without autocalling</p>
+<dd><p>aDict.nestedDict.aClass in dict lookup in a loop - without
+autocalling</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test59">
<code class="descname">test59</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test59" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test – but without autocalling shouldn’t raise</p>
+<dd><p>Other exception from func test – but without autocalling shouldn’t
+raise</p>
</dd></dl>
<dl class="method">
@@ -534,13 +548,15 @@
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test60">
<code class="descname">test60</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test60" title="Permalink to this definition">¶</a></dt>
-<dd><p>Other exception from func test in a loop – but without autocalling shouldn’t raise</p>
+<dd><p>Other exception from func test in a loop – but without autocalling
+shouldn’t raise</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.NameMapper.VFN.test61">
<code class="descname">test61</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper.VFN.test61" title="Permalink to this definition">¶</a></dt>
-<dd><p>Accessing attribute where __getattr__ raises shouldn’t segfault if something follows it</p>
+<dd><p>Accessing attribute where __getattr__ raises shouldn’t segfault
+if something follows it</p>
</dd></dl>
<dl class="method">
@@ -645,7 +661,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/docs/html/api/Cheetah.Tests.NameMapper_pure.html b/docs/html/api/Cheetah.Tests.NameMapper_pure.html
new file mode 100644
index 0000000..5b31c68
--- /dev/null
+++ b/docs/html/api/Cheetah.Tests.NameMapper_pure.html
@@ -0,0 +1,116 @@
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <title>Cheetah.Tests.NameMapper_pure module &#8212; Cheetah3 - The Python-Powered Template Engine</title>
+ <link rel="stylesheet" href="../_static/sphinxdoc.css" type="text/css" />
+ <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
+ <script type="text/javascript">
+ var DOCUMENTATION_OPTIONS = {
+ URL_ROOT: '../',
+ VERSION: '3.1.0',
+ COLLAPSE_INDEX: false,
+ FILE_SUFFIX: '.html',
+ HAS_SOURCE: true,
+ SOURCELINK_SUFFIX: '.txt'
+ };
+ </script>
+ <script type="text/javascript" src="../_static/jquery.js"></script>
+ <script type="text/javascript" src="../_static/underscore.js"></script>
+ <script type="text/javascript" src="../_static/doctools.js"></script>
+ <link rel="index" title="Index" href="../genindex.html" />
+ <link rel="search" title="Search" href="../search.html" />
+ </head>
+ <body>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ accesskey="I">index</a></li>
+ <li class="right" >
+ <a href="../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
+ <div class="sphinxsidebarwrapper">
+ <div role="note" aria-label="source link">
+ <h3>This Page</h3>
+ <ul class="this-page-menu">
+ <li><a href="../_sources/api/Cheetah.Tests.NameMapper_pure.rst.txt"
+ rel="nofollow">Show Source</a></li>
+ </ul>
+ </div>
+<div id="searchbox" style="display: none" role="search">
+ <h3>Quick search</h3>
+ <form class="search" action="../search.html" method="get">
+ <div><input type="text" name="q" /></div>
+ <div><input type="submit" value="Go" /></div>
+ <input type="hidden" name="check_keywords" value="yes" />
+ <input type="hidden" name="area" value="default" />
+ </form>
+</div>
+<script type="text/javascript">$('#searchbox').show(0);</script>
+ </div>
+ </div>
+
+ <div class="document">
+ <div class="documentwrapper">
+ <div class="bodywrapper">
+ <div class="body" role="main">
+
+ <div class="section" id="module-Cheetah.Tests.NameMapper_pure">
+<span id="cheetah-tests-namemapper-pure-module"></span><h1>Cheetah.Tests.NameMapper_pure module<a class="headerlink" href="#module-Cheetah.Tests.NameMapper_pure" title="Permalink to this headline">¶</a></h1>
+<dl class="class">
+<dt id="Cheetah.Tests.NameMapper_pure.NameMapperTest">
+<em class="property">class </em><code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">NameMapperTest</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.NameMapperTest" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">unittest.case.TestCase</span></code></p>
+<dl class="method">
+<dt id="Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName">
+<code class="descname">test_valueForName</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</dd></dl>
+
+<dl class="function">
+<dt id="Cheetah.Tests.NameMapper_pure.setUpModule">
+<code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">setUpModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.setUpModule" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+<dl class="function">
+<dt id="Cheetah.Tests.NameMapper_pure.tearDownModule">
+<code class="descclassname">Cheetah.Tests.NameMapper_pure.</code><code class="descname">tearDownModule</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.NameMapper_pure.tearDownModule" title="Permalink to this definition">¶</a></dt>
+<dd></dd></dl>
+
+</div>
+
+
+ </div>
+ </div>
+ </div>
+ <div class="clearer"></div>
+ </div>
+ <div class="related" role="navigation" aria-label="related navigation">
+ <h3>Navigation</h3>
+ <ul>
+ <li class="right" style="margin-right: 10px">
+ <a href="../genindex.html" title="General Index"
+ >index</a></li>
+ <li class="right" >
+ <a href="../py-modindex.html" title="Python Module Index"
+ >modules</a> |</li>
+ <li class="nav-item nav-item-0"><a href="../index.html">Cheetah3 - The Python-Powered Template Engine</a> &#187;</li>
+ </ul>
+ </div>
+ <div class="footer" role="contentinfo">
+ &#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
+ Last updated on Mar 03, 2018.
+ Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
+ </div>
+ </body>
+</html> \ No newline at end of file
diff --git a/www/html/api/Cheetah.Tests.Parser.html b/docs/html/api/Cheetah.Tests.Parser.html
index 1c817b2..127e596 100644
--- a/www/html/api/Cheetah.Tests.Parser.html
+++ b/docs/html/api/Cheetah.Tests.Parser.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -78,19 +78,22 @@
<dl class="method">
<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge1">
<code class="descname">test_merge1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge1" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from Template.Preprocessors.test_complexUsage</p>
+<dd><p>Testing the ArgList case results from
+Template.Preprocessors.test_complexUsage</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge2">
<code class="descname">test_merge2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge2" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from SyntaxAndOutput.BlockDirective.test4</p>
+<dd><p>Testing the ArgList case results from
+SyntaxAndOutput.BlockDirective.test4</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.Parser.ArgListTest.test_merge3">
<code class="descname">test_merge3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.Parser.ArgListTest.test_merge3" title="Permalink to this definition">¶</a></dt>
-<dd><p>Testing the ArgList case results from SyntaxAndOutput.BlockDirective.test13</p>
+<dd><p>Testing the ArgList case results from
+SyntaxAndOutput.BlockDirective.test13</p>
</dd></dl>
</dd></dl>
@@ -117,7 +120,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Performance.html b/docs/html/api/Cheetah.Tests.Performance.html
index 2984d05..62e0e65 100644
--- a/www/html/api/Cheetah.Tests.Performance.html
+++ b/docs/html/api/Cheetah.Tests.Performance.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -243,7 +243,7 @@ decorator found in this Active State recipe:</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Pinger.html b/docs/html/api/Cheetah.Tests.Pinger.html
index 0438d9f..9c0318c 100644
--- a/www/html/api/Cheetah.Tests.Pinger.html
+++ b/docs/html/api/Cheetah.Tests.Pinger.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -99,7 +99,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Regressions.html b/docs/html/api/Cheetah.Tests.Regressions.html
index 6160037..3bbf163 100644
--- a/www/html/api/Cheetah.Tests.Regressions.html
+++ b/docs/html/api/Cheetah.Tests.Regressions.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -221,7 +221,7 @@ on the <cite>self</cite> local, breaking the function</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.SyntaxAndOutput.html b/docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
index ced0794..f68dc7c 100644
--- a/www/html/api/Cheetah.Tests.SyntaxAndOutput.html
+++ b/docs/html/api/Cheetah.Tests.SyntaxAndOutput.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -264,8 +264,8 @@ shorter strings with only a few newlines.</p>
<dt id="Cheetah.Tests.SyntaxAndOutput.BlockDirective.test3">
<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test3" title="Permalink to this definition">¶</a></dt>
<dd><p>#block with argstring, gobble WS</p>
-<p>Because blocks can be reused in multiple parts of the template arguments
-(!!with defaults!!) can be given.</p>
+<p>Because blocks can be reused in multiple parts of the template
+arguments (!!with defaults!!) can be given.</p>
</dd></dl>
<dl class="method">
@@ -378,7 +378,8 @@ for the #end block part: #end block OR #end block [name]</p>
<dd><p>A (pseudo) Webware servlet.</p>
<p>This uses the Python syntax escape to set
self._CHEETAH__isControlledByWebKit.
-We could instead do ‘#silent self._CHEETAH__isControlledByWebKit = True’,
+We could instead do
+‘#silent self._CHEETAH__isControlledByWebKit = True’,
taking advantage of the fact that it will compile unchanged as long
as there’s no ‘$’ in the statement. (It won’t compile with an ‘$’
because that would convert to a function call, and you can’t assign
@@ -532,60 +533,66 @@ Should gobble WS</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test10">
<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>text around #* <a href="#id3"><span class="problematic" id="id4">*</span></a># containing #for directive and newlines: trailing whitespace
-which should be gobbled.</p>
+<dd><p>text around #* <a href="#id3"><span class="problematic" id="id4">*</span></a># containing #for directive and trailing whitespace
+which should be gobbled</p>
+</dd></dl>
+
+<dl class="method">
+<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11">
+<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11" title="Permalink to this definition">¶</a></dt>
+<dd><p>Text around #* <a href="#id5"><span class="problematic" id="id6">*</span></a># containing #for directive and newlines:
+trailing whitespace which should be gobbled.</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test2">
<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id5"><span class="problematic" id="id6">*</span></a># preceded and followed by WS
+<dd><p>#* <a href="#id7"><span class="problematic" id="id8">*</span></a># preceded and followed by WS
Should gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test3">
<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id7"><span class="problematic" id="id8">*</span></a># followed by WS, with NEWLINE
+<dd><p>#* <a href="#id9"><span class="problematic" id="id10">*</span></a># followed by WS, with NEWLINE
Shouldn’t gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test4">
<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id9"><span class="problematic" id="id10">*</span></a># preceded and followed by WS, with NEWLINE
+<dd><p>#* <a href="#id11"><span class="problematic" id="id12">*</span></a># preceded and followed by WS, with NEWLINE
Shouldn’t gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test5">
<code class="descname">test5</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test5" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id11"><span class="problematic" id="id12">*</span></a># containing nothing</p>
+<dd><p>#* <a href="#id13"><span class="problematic" id="id14">*</span></a># containing nothing</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test6">
<code class="descname">test6</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test6" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id13"><span class="problematic" id="id14">*</span></a># containing only NEWLINES</p>
+<dd><p>#* <a href="#id15"><span class="problematic" id="id16">*</span></a># containing only NEWLINES</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test7">
<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id15"><span class="problematic" id="id16">*</span></a># containing $placeholders</p>
+<dd><p>#* <a href="#id17"><span class="problematic" id="id18">*</span></a># containing $placeholders</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test8">
<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id17"><span class="problematic" id="id18">*</span></a># containing #for directive</p>
+<dd><p>#* <a href="#id19"><span class="problematic" id="id20">*</span></a># containing #for directive</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test9">
<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>text around #* <a href="#id19"><span class="problematic" id="id20">*</span></a># containing #for directive and trailing whitespace
-which should be gobbled</p>
+<dd><p>text around #* <a href="#id21"><span class="problematic" id="id22">*</span></a># containing #for directive</p>
</dd></dl>
</dd></dl>
@@ -594,33 +601,33 @@ which should be gobbled</p>
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble">
<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">Comments_MultiLine_NoGobble</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
-<p>Multiline comments used to not gobble whitespace. They do now, but this can
-be turned off with a compilerSetting</p>
+<p>Multiline comments used to not gobble whitespace</p>
+<p>They do now, but this can be turned off with a compilerSetting.</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test1">
<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test1" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id21"><span class="problematic" id="id22">*</span></a># followed by WS
+<dd><p>#* <a href="#id23"><span class="problematic" id="id24">*</span></a># followed by WS
Shouldn’t gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test2">
<code class="descname">test2</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test2" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id23"><span class="problematic" id="id24">*</span></a># preceded and followed by WS
+<dd><p>#* <a href="#id25"><span class="problematic" id="id26">*</span></a># preceded and followed by WS
Shouldn’t gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test3">
<code class="descname">test3</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test3" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id25"><span class="problematic" id="id26">*</span></a># followed by WS, with NEWLINE
+<dd><p>#* <a href="#id27"><span class="problematic" id="id28">*</span></a># followed by WS, with NEWLINE
Shouldn’t gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test4">
<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble.test4" title="Permalink to this definition">¶</a></dt>
-<dd><p>#* <a href="#id27"><span class="problematic" id="id28">*</span></a># preceded and followed by WS, with NEWLINE
+<dd><p>#* <a href="#id29"><span class="problematic" id="id30">*</span></a># preceded and followed by WS, with NEWLINE
Shouldn’t gobble WS</p>
</dd></dl>
@@ -791,7 +798,7 @@ with text on previous and following lines</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test10">
<code class="descname">test10</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test10" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id29"><span class="problematic" id="id30">*</span></a>args + <a href="#id31"><span class="problematic" id="id32">**</span></a>KWs, gobble WS</p>
+<dd><p>#def with <a href="#id31"><span class="problematic" id="id32">*</span></a>args + <a href="#id33"><span class="problematic" id="id34">**</span></a>KWs, gobble WS</p>
</dd></dl>
<dl class="method">
@@ -881,19 +888,19 @@ with text on previous and following lines</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test7">
<code class="descname">test7</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test7" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id33"><span class="problematic" id="id34">*</span></a>args, gobble WS</p>
+<dd><p>#def with <a href="#id35"><span class="problematic" id="id36">*</span></a>args, gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test8">
<code class="descname">test8</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test8" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id35"><span class="problematic" id="id36">**</span></a>KWs, gobble WS</p>
+<dd><p>#def with <a href="#id37"><span class="problematic" id="id38">**</span></a>KWs, gobble WS</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.DefDirective.test9">
<code class="descname">test9</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.DefDirective.test9" title="Permalink to this definition">¶</a></dt>
-<dd><p>#def with <a href="#id37"><span class="problematic" id="id38">*</span></a>args + <a href="#id39"><span class="problematic" id="id40">**</span></a>KWs, gobble WS</p>
+<dd><p>#def with <a href="#id39"><span class="problematic" id="id40">*</span></a>args + <a href="#id41"><span class="problematic" id="id42">**</span></a>KWs, gobble WS</p>
</dd></dl>
</dd></dl>
@@ -1704,7 +1711,8 @@ $c</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.NameMapper.test16">
<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.NameMapper.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>nested dictionary access - NameMapper style - followed by method, then slice</p>
+<dd><p>Nested dictionary access - NameMapper style - followed by method,
+then slice.</p>
</dd></dl>
<dl class="method">
@@ -2030,49 +2038,49 @@ for.</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test11">
<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id41"><span class="problematic" id="id42">*</span></a>cache</p>
+<dd><p>1 placeholder enclosed in {} + WS + <a href="#id43"><span class="problematic" id="id44">*</span></a>cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test12">
<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id43"><span class="problematic" id="id44">*</span></a>cache</p>
+<dd><p>1 placeholder enclosed in [] + WS + <a href="#id45"><span class="problematic" id="id46">*</span></a>cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test13">
<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id45"><span class="problematic" id="id46">*</span></a>&lt;int&gt;*cache</p>
+<dd><p>1 placeholder enclosed in {} + WS + <a href="#id47"><span class="problematic" id="id48">*</span></a>&lt;int&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test14">
<code class="descname">test14</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test14" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id47"><span class="problematic" id="id48">*</span></a>&lt;int&gt;*cache</p>
+<dd><p>1 placeholder enclosed in [] + WS + <a href="#id49"><span class="problematic" id="id50">*</span></a>&lt;int&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test15">
<code class="descname">test15</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test15" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in {} + WS + <a href="#id49"><span class="problematic" id="id50">*</span></a>&lt;float&gt;*cache</p>
+<dd><p>1 placeholder enclosed in {} + WS + <a href="#id51"><span class="problematic" id="id52">*</span></a>&lt;float&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test16">
<code class="descname">test16</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test16" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder enclosed in [] + WS + <a href="#id51"><span class="problematic" id="id52">*</span></a>&lt;float&gt;*cache</p>
+<dd><p>1 placeholder enclosed in [] + WS + <a href="#id53"><span class="problematic" id="id54">*</span></a>&lt;float&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test17">
<code class="descname">test17</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test17" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder + <a href="#id53"><span class="problematic" id="id54">*</span></a>&lt;int&gt;*cache</p>
+<dd><p>1 placeholder + <a href="#id55"><span class="problematic" id="id56">*</span></a>&lt;int&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders.test18">
<code class="descname">test18</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders.test18" title="Permalink to this definition">¶</a></dt>
-<dd><p>1 placeholder <a href="#id55"><span class="problematic" id="id56">*</span></a>&lt;float&gt;*cache</p>
+<dd><p>1 placeholder <a href="#id57"><span class="problematic" id="id58">*</span></a>&lt;float&gt;*cache</p>
</dd></dl>
<dl class="method">
@@ -2247,13 +2255,13 @@ for.</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test24">
<code class="descname">test24</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test24" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, () enclosure + <a href="#id57"><span class="problematic" id="id58">*</span></a>cache</p>
+<dd><p>deeply nested argstring, () enclosure + <a href="#id59"><span class="problematic" id="id60">*</span></a>cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test25">
<code class="descname">test25</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test25" title="Permalink to this definition">¶</a></dt>
-<dd><p>deeply nested argstring, () enclosure + <a href="#id59"><span class="problematic" id="id60">*</span></a>15*cache</p>
+<dd><p>deeply nested argstring, () enclosure + <a href="#id61"><span class="problematic" id="id62">*</span></a>15*cache</p>
</dd></dl>
<dl class="method">
@@ -2568,7 +2576,7 @@ Shouldn’t gobble</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test11">
<code class="descname">test11</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test11" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global with a list and <a href="#id61"><span class="problematic" id="id62">*</span></a>cache</p>
+<dd><p>simple #set global with a list and <a href="#id63"><span class="problematic" id="id64">*</span></a>cache</p>
<p>Caching only works with global #set vars. Local vars are not accesible
to the cache namespace.</p>
</dd></dl>
@@ -2576,13 +2584,13 @@ to the cache namespace.</p>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test12">
<code class="descname">test12</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test12" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set global with a list and <a href="#id63"><span class="problematic" id="id64">*</span></a>&lt;int&gt;*cache</p>
+<dd><p>simple #set global with a list and <a href="#id65"><span class="problematic" id="id66">*</span></a>&lt;int&gt;*cache</p>
</dd></dl>
<dl class="method">
<dt id="Cheetah.Tests.SyntaxAndOutput.SetDirective.test13">
<code class="descname">test13</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SetDirective.test13" title="Permalink to this definition">¶</a></dt>
-<dd><p>simple #set with a list and <a href="#id65"><span class="problematic" id="id66">*</span></a>&lt;float&gt;*cache</p>
+<dd><p>simple #set with a list and <a href="#id67"><span class="problematic" id="id68">*</span></a>&lt;float&gt;*cache</p>
</dd></dl>
<dl class="method">
@@ -2682,8 +2690,8 @@ to the cache namespace.</p>
<em class="property">class </em><code class="descclassname">Cheetah.Tests.SyntaxAndOutput.</code><code class="descname">SilentDirective</code><span class="sig-paren">(</span><em>methodName='runTest'</em><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SilentDirective" title="Permalink to this definition">¶</a></dt>
<dd><p>Bases: <a class="reference internal" href="#Cheetah.Tests.SyntaxAndOutput.OutputTest" title="Cheetah.Tests.SyntaxAndOutput.OutputTest"><code class="xref py py-class docutils literal"><span class="pre">Cheetah.Tests.SyntaxAndOutput.OutputTest</span></code></a></p>
<dl class="method">
-<dt id="Cheetah.Tests.SyntaxAndOutput.SilentDirective.test1">
-<code class="descname">test1</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test1" title="Permalink to this definition">¶</a></dt>
+<dt id="Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4">
+<code class="descname">test4</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4" title="Permalink to this definition">¶</a></dt>
<dd><p>#silent 1234</p>
</dd></dl>
@@ -3005,7 +3013,7 @@ Should eat the garbage</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Template.html b/docs/html/api/Cheetah.Tests.Template.html
index 2828478..001f7bc 100644
--- a/www/html/api/Cheetah.Tests.Template.html
+++ b/docs/html/api/Cheetah.Tests.Template.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -242,7 +242,7 @@ use attributes on that subclass in the searchList</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Test.html b/docs/html/api/Cheetah.Tests.Test.html
index 99099ce..6014342 100644
--- a/www/html/api/Cheetah.Tests.Test.html
+++ b/docs/html/api/Cheetah.Tests.Test.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -80,7 +80,8 @@
<p># combo tests
# negative test cases for expected exceptions
# black-box vs clear-box testing
-# do some tests that run the Template for long enough to check that the refresh code works</p>
+# do some tests that run the Template for long enough to check
+# that the refresh code works</p>
</div>
</div>
@@ -104,7 +105,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.Unicode.html b/docs/html/api/Cheetah.Tests.Unicode.html
index 1d12dfe..06c3a76 100644
--- a/www/html/api/Cheetah.Tests.Unicode.html
+++ b/docs/html/api/Cheetah.Tests.Unicode.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -254,7 +254,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.html b/docs/html/api/Cheetah.Tests.html
index 0f6bdfb..ed1dd17 100644
--- a/www/html/api/Cheetah.Tests.html
+++ b/docs/html/api/Cheetah.Tests.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -85,6 +85,7 @@
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Filters.html">Cheetah.Tests.Filters module</a></li>
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Misc.html">Cheetah.Tests.Misc module</a></li>
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.NameMapper.html">Cheetah.Tests.NameMapper module</a></li>
+<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.NameMapper_pure.html">Cheetah.Tests.NameMapper_pure module</a></li>
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Parser.html">Cheetah.Tests.Parser module</a></li>
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Performance.html">Cheetah.Tests.Performance module</a></li>
<li class="toctree-l1"><a class="reference internal" href="Cheetah.Tests.Pinger.html">Cheetah.Tests.Pinger module</a></li>
@@ -122,7 +123,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tests.xmlrunner.html b/docs/html/api/Cheetah.Tests.xmlrunner.html
index 32709cf..6e12107 100644
--- a/www/html/api/Cheetah.Tests.xmlrunner.html
+++ b/docs/html/api/Cheetah.Tests.xmlrunner.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -91,9 +91,8 @@ where &lt;module&gt; and &lt;class&gt; are the module and class name of the test
<dl class="attribute">
<dt id="Cheetah.Tests.xmlrunner.XMLTestRunner.path">
<code class="descname">path</code><a class="headerlink" href="#Cheetah.Tests.xmlrunner.XMLTestRunner.path" title="Permalink to this definition">¶</a></dt>
-<dd><p>The path where the XML files are stored.</p>
-<p>This property is ignored when the XML file is written to a file
-stream.</p>
+<dd><p>The path where the XML files are stored</p>
+<p>This property is ignored when the XML file is written to a file stream.</p>
</dd></dl>
<dl class="method">
@@ -229,7 +228,7 @@ that change stdout, but don’t change it back properly.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.CGITemplate.html b/docs/html/api/Cheetah.Tools.CGITemplate.html
index 72ec5a7..1ee292f 100644
--- a/www/html/api/Cheetah.Tools.CGITemplate.html
+++ b/docs/html/api/Cheetah.Tools.CGITemplate.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -151,7 +151,7 @@ Override .cgiHeadersHook() if you want to customize the headers.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.MondoReport.html b/docs/html/api/Cheetah.Tools.MondoReport.html
index 0f33ed9..ba59b3b 100644
--- a/www/html/api/Cheetah.Tools.MondoReport.html
+++ b/docs/html/api/Cheetah.Tools.MondoReport.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -398,7 +398,7 @@ next.query.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.RecursiveNull.html b/docs/html/api/Cheetah.Tools.RecursiveNull.html
index 94a0cbd..49145b5 100644
--- a/www/html/api/Cheetah.Tools.RecursiveNull.html
+++ b/docs/html/api/Cheetah.Tools.RecursiveNull.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -98,7 +98,7 @@ $form.f1.anything[“youâ€].might(“useâ€) will resolve to the empty string.<
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.SiteHierarchy.html b/docs/html/api/Cheetah.Tools.SiteHierarchy.html
index ab391cb..ea5d9d7 100644
--- a/www/html/api/Cheetah.Tools.SiteHierarchy.html
+++ b/docs/html/api/Cheetah.Tools.SiteHierarchy.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -73,8 +73,8 @@ position, and all the children coming after it. Any child can be a list,
representing further depth to the hierarchy. See the end of the file for an
example hierarchy.</p>
<p>Use Hierarchy(contents, currentURL), where contents is this hierarchy, and
-currentURL is the position you are currently in. The menubar and crumbs methods
-give you the HTML output.</p>
+currentURL is the position you are currently in.
+The menubar and crumbs methods give you the HTML output.</p>
<p>There are methods you can override to customize the HTML output.</p>
<dl class="class">
<dt id="Cheetah.Tools.SiteHierarchy.Hierarchy">
@@ -141,7 +141,7 @@ give you the HTML output.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.html b/docs/html/api/Cheetah.Tools.html
index 8f4c29a..13364e9 100644
--- a/www/html/api/Cheetah.Tools.html
+++ b/docs/html/api/Cheetah.Tools.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -137,7 +137,7 @@ backward-compatible.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html b/docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
index 431f9dc..b714196 100644
--- a/www/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
+++ b/docs/html/api/Cheetah.Tools.turbocheetah.cheetahsupport.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -126,7 +126,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.turbocheetah.html b/docs/html/api/Cheetah.Tools.turbocheetah.html
index 91ca55b..87e9cc5 100644
--- a/www/html/api/Cheetah.Tools.turbocheetah.html
+++ b/docs/html/api/Cheetah.Tools.turbocheetah.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -156,7 +156,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.turbocheetah.tests.html b/docs/html/api/Cheetah.Tools.turbocheetah.tests.html
index 0044073..f14e7a6 100644
--- a/www/html/api/Cheetah.Tools.turbocheetah.tests.html
+++ b/docs/html/api/Cheetah.Tools.turbocheetah.tests.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -104,7 +104,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html b/docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
index f4109af..fdb5562 100644
--- a/www/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
+++ b/docs/html/api/Cheetah.Tools.turbocheetah.tests.test_template.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -108,7 +108,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Unspecified.html b/docs/html/api/Cheetah.Unspecified.html
index 025b9f6..82e78cd 100644
--- a/www/html/api/Cheetah.Unspecified.html
+++ b/docs/html/api/Cheetah.Unspecified.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -88,7 +88,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.Indenter.html b/docs/html/api/Cheetah.Utils.Indenter.html
index dd4a5e2..aa7dbe8 100644
--- a/www/html/api/Cheetah.Utils.Indenter.html
+++ b/docs/html/api/Cheetah.Utils.Indenter.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -262,7 +262,7 @@ sets the level automatically to zero!</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.Misc.html b/docs/html/api/Cheetah.Utils.Misc.html
index 93ec83e..a400c9a 100644
--- a/www/html/api/Cheetah.Utils.Misc.html
+++ b/docs/html/api/Cheetah.Utils.Misc.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -131,7 +131,7 @@ element is missing. Modifies ‘<a href="#id5"><span class="problematic" id="id
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.WebInputMixin.html b/docs/html/api/Cheetah.Utils.WebInputMixin.html
index 22646cb..f40946d 100644
--- a/www/html/api/Cheetah.Utils.WebInputMixin.html
+++ b/docs/html/api/Cheetah.Utils.WebInputMixin.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -96,7 +96,7 @@ transaction variables in bulk. See the docstring of webInput for full details.<
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.html b/docs/html/api/Cheetah.Utils.html
index e44b74d..c45e00b 100644
--- a/www/html/api/Cheetah.Utils.html
+++ b/docs/html/api/Cheetah.Utils.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -109,7 +109,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.htmlDecode.html b/docs/html/api/Cheetah.Utils.htmlDecode.html
index 72ae99a..3b0113f 100644
--- a/www/html/api/Cheetah.Utils.htmlDecode.html
+++ b/docs/html/api/Cheetah.Utils.htmlDecode.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -97,7 +97,7 @@ NOT remove normal HTML tags like &lt;p&gt;. It is the inverse of htmlEncode().</
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.htmlEncode.html b/docs/html/api/Cheetah.Utils.htmlEncode.html
index 84740d5..9734d25 100644
--- a/www/html/api/Cheetah.Utils.htmlEncode.html
+++ b/docs/html/api/Cheetah.Utils.htmlEncode.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -97,7 +97,7 @@ display a plain ASCII text string on a web page.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Utils.statprof.html b/docs/html/api/Cheetah.Utils.statprof.html
index 0f54306..c715bcc 100644
--- a/www/html/api/Cheetah.Utils.statprof.html
+++ b/docs/html/api/Cheetah.Utils.statprof.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -88,7 +88,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.Version.html b/docs/html/api/Cheetah.Version.html
index 31a3968..9bc76ab 100644
--- a/www/html/api/Cheetah.Version.html
+++ b/docs/html/api/Cheetah.Version.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -93,7 +93,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.compat.html b/docs/html/api/Cheetah.compat.html
index 83c5028..0a7502f 100644
--- a/www/html/api/Cheetah.compat.html
+++ b/docs/html/api/Cheetah.compat.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -88,7 +88,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.convertTmplPathToModuleName.html b/docs/html/api/Cheetah.convertTmplPathToModuleName.html
index 16da730..20fc0b8 100644
--- a/www/html/api/Cheetah.convertTmplPathToModuleName.html
+++ b/docs/html/api/Cheetah.convertTmplPathToModuleName.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -93,7 +93,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/Cheetah.html b/docs/html/api/Cheetah.html
index 1ff0011..61d0b49 100644
--- a/www/html/api/Cheetah.html
+++ b/docs/html/api/Cheetah.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -77,8 +77,9 @@
<span id="cheetah-package"></span><h1>Cheetah package<a class="headerlink" href="#module-Cheetah" title="Permalink to this headline">¶</a></h1>
<p>Cheetah is an open source template engine and code generation tool.</p>
<p>It can be used standalone or combined with other tools and frameworks. Web
-development is its principle use, but Cheetah is very flexible and is also being
-used to generate C++ game code, Java, sql, form emails and even Python code.</p>
+development is its principle use, but Cheetah is very flexible and is also
+being used to generate C++ game code, Java, sql, form emails and even Python
+code.</p>
<dl class="docutils">
<dt>Homepage, issue tracker</dt>
<dd><a class="reference external" href="https://github.com/CheetahTemplate3/cheetah3">https://github.com/CheetahTemplate3/cheetah3</a></dd>
@@ -112,6 +113,7 @@ used to generate C++ game code, Java, sql, form emails and even Python code.</p>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Filters.html">Cheetah.Tests.Filters module</a></li>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Misc.html">Cheetah.Tests.Misc module</a></li>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.NameMapper.html">Cheetah.Tests.NameMapper module</a></li>
+<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.NameMapper_pure.html">Cheetah.Tests.NameMapper_pure module</a></li>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Parser.html">Cheetah.Tests.Parser module</a></li>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Performance.html">Cheetah.Tests.Performance module</a></li>
<li class="toctree-l3"><a class="reference internal" href="Cheetah.Tests.Pinger.html">Cheetah.Tests.Pinger module</a></li>
@@ -237,7 +239,7 @@ used to generate C++ game code, Java, sql, form emails and even Python code.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/api/modules.html b/docs/html/api/modules.html
index 2bcdd26..7379aa6 100644
--- a/www/html/api/modules.html
+++ b/docs/html/api/modules.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -151,7 +151,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/authors.html b/docs/html/authors.html
index 0fdb3fe..74f1de5 100644
--- a/www/html/authors.html
+++ b/docs/html/authors.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -105,6 +105,7 @@
<li>mikola &lt;mikola at tut.by&gt;</li>
<li>Adam Karpierz &lt;python at python.pl&gt;</li>
<li>Jonathan Ross Rogers &lt;jrogers at socialserve.com&gt;</li>
+<li>Mathias Stearn &lt;redbeard0531 at gmail.com&gt;</li>
<li>Oleg Broytman &lt;<a class="reference external" href="mailto:phd&#37;&#52;&#48;phdru&#46;name">phd<span>&#64;</span>phdru<span>&#46;</span>name</a>&gt;</li>
</ul>
</div>
@@ -135,7 +136,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/chep.html b/docs/html/chep.html
index 68600ce..140ce1c 100644
--- a/www/html/chep.html
+++ b/docs/html/chep.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -130,7 +130,7 @@ language and a framework.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/cheps/1_chep.html b/docs/html/cheps/1_chep.html
index cb09850..8536b02 100644
--- a/www/html/cheps/1_chep.html
+++ b/docs/html/cheps/1_chep.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -154,7 +154,7 @@ enumerated here (and duplicated).</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/cheps/2_import.html b/docs/html/cheps/2_import.html
index 78933a7..44b8874 100644
--- a/www/html/cheps/2_import.html
+++ b/docs/html/cheps/2_import.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -247,7 +247,7 @@ that they’re declared in.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/cheps/3_super.html b/docs/html/cheps/3_super.html
index 4973f84..d47d912 100644
--- a/www/html/cheps/3_super.html
+++ b/docs/html/cheps/3_super.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -159,7 +159,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/bnf.html b/docs/html/dev_guide/bnf.html
index b8dfdb7..2a54320 100644
--- a/www/html/dev_guide/bnf.html
+++ b/docs/html/dev_guide/bnf.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -111,7 +111,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/cache.html b/docs/html/dev_guide/cache.html
index 938c680..47cfc8e 100644
--- a/www/html/dev_guide/cache.html
+++ b/docs/html/dev_guide/cache.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -444,7 +444,7 @@ implemented yet, I cannot provide examples here.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/comments.html b/docs/html/dev_guide/comments.html
index 181b394..7a9eba0 100644
--- a/www/html/dev_guide/comments.html
+++ b/docs/html/dev_guide/comments.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -196,7 +196,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/compiler.html b/docs/html/dev_guide/compiler.html
index f304e09..e02155d 100644
--- a/www/html/dev_guide/compiler.html
+++ b/docs/html/dev_guide/compiler.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -112,7 +112,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/design.html b/docs/html/dev_guide/design.html
index b4a244b..717174e 100644
--- a/www/html/dev_guide/design.html
+++ b/docs/html/dev_guide/design.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -207,7 +207,7 @@ goals are unattainable due to performance considerations.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/errorHandling.html b/docs/html/dev_guide/errorHandling.html
index 5eb439a..ccb0085 100644
--- a/www/html/dev_guide/errorHandling.html
+++ b/docs/html/dev_guide/errorHandling.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -408,7 +408,7 @@ system!</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/files.html b/docs/html/dev_guide/files.html
index f6fedd4..1dc4654 100644
--- a/www/html/dev_guide/files.html
+++ b/docs/html/dev_guide/files.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -115,7 +115,7 @@ don’t get copied into the package.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/flowControl.html b/docs/html/dev_guide/flowControl.html
index 2b4014c..8ad2a10 100644
--- a/www/html/dev_guide/flowControl.html
+++ b/docs/html/dev_guide/flowControl.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -448,7 +448,7 @@ $test[1]
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/history.html b/docs/html/dev_guide/history.html
index 94d0bf6..1fa2f3a 100644
--- a/www/html/dev_guide/history.html
+++ b/docs/html/dev_guide/history.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -186,7 +186,7 @@ week’s warning about any significant changes.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/index.html b/docs/html/dev_guide/index.html
index fcd9363..3988a4a 100644
--- a/www/html/dev_guide/index.html
+++ b/docs/html/dev_guide/index.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -143,7 +143,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/inheritanceEtc.html b/docs/html/dev_guide/inheritanceEtc.html
index 19fc815..e2b24cd 100644
--- a/www/html/dev_guide/inheritanceEtc.html
+++ b/docs/html/dev_guide/inheritanceEtc.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -320,7 +320,7 @@ the method.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/introduction.html b/docs/html/dev_guide/introduction.html
index 7069d1d..b9c0ef9 100644
--- a/www/html/dev_guide/introduction.html
+++ b/docs/html/dev_guide/introduction.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -140,7 +140,7 @@ language.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/output.html b/docs/html/dev_guide/output.html
index faf18a7..bcc67f0 100644
--- a/www/html/dev_guide/output.html
+++ b/docs/html/dev_guide/output.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -368,7 +368,7 @@ happens although the default filter ignores the argument.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/parser.html b/docs/html/dev_guide/parser.html
index 20c8562..7bc796f 100644
--- a/www/html/dev_guide/parser.html
+++ b/docs/html/dev_guide/parser.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -113,7 +113,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/parserInstructions.html b/docs/html/dev_guide/parserInstructions.html
index c71cfea..0095827 100644
--- a/www/html/dev_guide/parserInstructions.html
+++ b/docs/html/dev_guide/parserInstructions.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -165,7 +165,7 @@ the template definition was read.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/patching.html b/docs/html/dev_guide/patching.html
index eb3f04c..ca1b576 100644
--- a/www/html/dev_guide/patching.html
+++ b/docs/html/dev_guide/patching.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -155,7 +155,7 @@ your little test program.</li>
<li>Turn your little program into a regression test as described
below.</li>
<li>When {cheetah test} runs cleanly with your regression test
-included, update the {www/news.rst} file and check in your changes. If
+included, update the {docs/news.rst} file and check in your changes. If
you made the changes in your installed copy of Cheetah, you’ll have
to copy them back into the CVS sandbox first. If you added any
files that must be distributed, { be sure to} {cvs add} them before
@@ -236,7 +236,7 @@ module.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/placeholders.html b/docs/html/dev_guide/placeholders.html
index 4def3f8..b363c38 100644
--- a/www/html/dev_guide/placeholders.html
+++ b/docs/html/dev_guide/placeholders.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -575,7 +575,7 @@ way of this.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/pyModules.html b/docs/html/dev_guide/pyModules.html
index 40e9751..b238ccf 100644
--- a/www/html/dev_guide/pyModules.html
+++ b/docs/html/dev_guide/pyModules.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -339,7 +339,7 @@ the template fill itself.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/safeDelegation.html b/docs/html/dev_guide/safeDelegation.html
index 6eb2f46..fd37878 100644
--- a/www/html/dev_guide/safeDelegation.html
+++ b/docs/html/dev_guide/safeDelegation.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -138,7 +138,7 @@ disallow ‘__’ in $placeholders so that tricks like
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/dev_guide/template.html b/docs/html/dev_guide/template.html
index 9e58d71..4a71d9d 100644
--- a/www/html/dev_guide/template.html
+++ b/docs/html/dev_guide/template.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -114,7 +114,7 @@ constructor and not at what point the template is compiled.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/developers.html b/docs/html/developers.html
index a44e97c..5ac6661 100644
--- a/www/html/developers.html
+++ b/docs/html/developers.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -160,7 +160,7 @@ new feature, we kindly ask that you create an issue in the <a class="reference e
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/documentation.html b/docs/html/documentation.html
index dfaba63..791ddfe 100644
--- a/www/html/documentation.html
+++ b/docs/html/documentation.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -125,7 +125,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/download.html b/docs/html/download.html
index 9ac1751..0e0ad6d 100644
--- a/www/html/download.html
+++ b/docs/html/download.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -116,7 +116,7 @@ precompiled NameMapper extension.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/genindex.html b/docs/html/genindex.html
index 3d46fd4..4e6e83e 100644
--- a/www/html/genindex.html
+++ b/docs/html/genindex.html
@@ -12,7 +12,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -428,6 +428,8 @@
</li>
<li><a href="api/Cheetah.Tests.NameMapper.html#module-Cheetah.Tests.NameMapper">Cheetah.Tests.NameMapper (module)</a>
</li>
+ <li><a href="api/Cheetah.Tests.NameMapper_pure.html#module-Cheetah.Tests.NameMapper_pure">Cheetah.Tests.NameMapper_pure (module)</a>
+</li>
<li><a href="api/Cheetah.Tests.Parser.html#module-Cheetah.Tests.Parser">Cheetah.Tests.Parser (module)</a>
</li>
<li><a href="api/Cheetah.Tests.Performance.html#module-Cheetah.Tests.Performance">Cheetah.Tests.Performance (module)</a>
@@ -462,10 +464,10 @@
</li>
<li><a href="api/Cheetah.Tools.turbocheetah.tests.html#module-Cheetah.Tools.turbocheetah.tests">Cheetah.Tools.turbocheetah.tests (module)</a>
</li>
- <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#module-Cheetah.Tools.turbocheetah.tests.test_template">Cheetah.Tools.turbocheetah.tests.test_template (module)</a>
-</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="api/Cheetah.Tools.turbocheetah.tests.test_template.html#module-Cheetah.Tools.turbocheetah.tests.test_template">Cheetah.Tools.turbocheetah.tests.test_template (module)</a>
+</li>
<li><a href="api/Cheetah.Unspecified.html#module-Cheetah.Unspecified">Cheetah.Unspecified (module)</a>
</li>
<li><a href="api/Cheetah.Utils.html#module-Cheetah.Utils">Cheetah.Utils (module)</a>
@@ -1347,7 +1349,11 @@
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper">NameMapper (class in Cheetah.Tests.SyntaxAndOutput)</a>
</li>
<li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest">NameMapperTest (class in Cheetah.Tests.NameMapper)</a>
+
+ <ul>
+ <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.NameMapperTest">(class in Cheetah.Tests.NameMapper_pure)</a>
</li>
+ </ul></li>
<li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.NameMapperTest.namespace">namespace() (Cheetah.Tests.NameMapper.NameMapperTest method)</a>
</li>
<li><a href="api/Cheetah.ImportManager.html#Cheetah.ImportManager.nameSplit">nameSplit() (in module Cheetah.ImportManager)</a>
@@ -1794,6 +1800,8 @@
</ul></li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
+ <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.setUpModule">setUpModule() (in module Cheetah.Tests.NameMapper_pure)</a>
+</li>
<li><a href="api/Cheetah.Servlet.html#Cheetah.Servlet.Servlet.shutdown">shutdown() (Cheetah.Servlet.Servlet method)</a>
<ul>
@@ -1912,6 +1920,8 @@
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.IncludeDirective.tearDown">(Cheetah.Tests.SyntaxAndOutput.IncludeDirective method)</a>
</li>
</ul></li>
+ <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.tearDownModule">tearDownModule() (in module Cheetah.Tests.NameMapper_pure)</a>
+</li>
<li><a href="api/Cheetah.Tests.Performance.html#Cheetah.Tests.Performance.FilterTest.template">template (Cheetah.Tests.Performance.FilterTest attribute)</a>
</li>
<li><a href="api/Cheetah.Template.html#Cheetah.Template.Template">Template (class in Cheetah.Template)</a>
@@ -2029,8 +2039,6 @@
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
</li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SilentDirective method)</a>
-</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test1">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test1">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
@@ -2091,6 +2099,8 @@
<ul>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.BlockDirective.test11">(Cheetah.Tests.SyntaxAndOutput.BlockDirective method)</a>
</li>
+ <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine.test11">(Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine method)</a>
+</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine.test11">(Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine method)</a>
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.DefDirective.test11">(Cheetah.Tests.SyntaxAndOutput.DefDirective method)</a>
@@ -2372,16 +2382,22 @@
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test20">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
</li>
</ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test21">test21() (Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
+ <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test21">test21() (Cheetah.Tests.NameMapper.VFN method)</a>
<ul>
+ <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.NameMapper.test21">(Cheetah.Tests.SyntaxAndOutput.NameMapper method)</a>
+</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders.test21">(Cheetah.Tests.SyntaxAndOutput.Placeholders method)</a>
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test21">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
</li>
</ul></li>
- <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test22">test22() (Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
+ <li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test22">test22() (Cheetah.Tests.NameMapper.VFN method)</a>
+
+ <ul>
+ <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls.test22">(Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls method)</a>
</li>
+ </ul></li>
<li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFN.test23">test23() (Cheetah.Tests.NameMapper.VFN method)</a>
<ul>
@@ -2571,6 +2587,8 @@
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SetDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SetDirective method)</a>
</li>
+ <li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SilentDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SilentDirective method)</a>
+</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.SlurpDirective.test4">(Cheetah.Tests.SyntaxAndOutput.SlurpDirective method)</a>
</li>
<li><a href="api/Cheetah.Tests.SyntaxAndOutput.html#Cheetah.Tests.SyntaxAndOutput.StopDirective.test4">(Cheetah.Tests.SyntaxAndOutput.StopDirective method)</a>
@@ -2988,6 +3006,8 @@
</li>
<li><a href="api/Cheetah.Tests.Regressions.html#Cheetah.Tests.Regressions.GetAttrTest.test_ValidException">test_ValidException() (Cheetah.Tests.Regressions.GetAttrTest method)</a>
</li>
+ <li><a href="api/Cheetah.Tests.NameMapper_pure.html#Cheetah.Tests.NameMapper_pure.NameMapperTest.test_valueForName">test_valueForName() (Cheetah.Tests.NameMapper_pure.NameMapperTest method)</a>
+</li>
<li><a href="api/Cheetah.Tests.NameMapper.html#Cheetah.Tests.NameMapper.VFF.test_VFF_1">test_VFF_1() (Cheetah.Tests.NameMapper.VFF method)</a>
</li>
<li><a href="api/Cheetah.Tests.CheetahWrapper.html#Cheetah.Tests.CheetahWrapper.Flat.testCompile">testCompile() (Cheetah.Tests.CheetahWrapper.Flat method)</a>
@@ -3346,7 +3366,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/index.html b/docs/html/index.html
index a2d178e..b475d4e 100644
--- a/www/html/index.html
+++ b/docs/html/index.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -109,7 +109,13 @@ tracker</a>.</p>
<div class="toctree-wrapper compound">
<ul>
<li class="toctree-l1"><a class="reference internal" href="authors.html">Authors and contributors</a></li>
-<li class="toctree-l1"><a class="reference internal" href="news.html">News</a></li>
+<li class="toctree-l1"><a class="reference internal" href="news.html">News</a><ul>
+<li class="toctree-l2"><a class="reference internal" href="news.html#development-master">Development (master)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="news.html#id1">3.1.0 (2018-03-03)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="news.html#id2">3.0.1 (2018-02-27)</a></li>
+<li class="toctree-l2"><a class="reference internal" href="news.html#id3">3.0.0 (2017-05-07)</a></li>
+</ul>
+</li>
<li class="toctree-l1"><a class="reference internal" href="developers.html">Contributing to Cheetah</a><ul>
<li class="toctree-l2"><a class="reference internal" href="developers.html#getting-the-code">Getting the Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="developers.html#development-process">Development Process</a></li>
@@ -233,7 +239,7 @@ module, since that’s what your Cheetah templates are compiled to :)</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/news.html b/docs/html/news.html
index e836346..1ea6032 100644
--- a/www/html/news.html
+++ b/docs/html/news.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -47,6 +47,17 @@
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
+ <h3><a href="index.html">Table Of Contents</a></h3>
+ <ul>
+<li><a class="reference internal" href="#">News</a><ul>
+<li><a class="reference internal" href="#development-master">Development (master)</a></li>
+<li><a class="reference internal" href="#id1">3.1.0 (2018-03-03)</a></li>
+<li><a class="reference internal" href="#id2">3.0.1 (2018-02-27)</a></li>
+<li><a class="reference internal" href="#id3">3.0.0 (2017-05-07)</a></li>
+</ul>
+</li>
+</ul>
+
<h4>Previous topic</h4>
<p class="topless"><a href="authors.html"
title="previous chapter">Authors and contributors</a></p>
@@ -80,14 +91,49 @@
<div class="section" id="news">
<h1>News<a class="headerlink" href="#news" title="Permalink to this headline">¶</a></h1>
-<p>3.0.1 (2018-02-27)</p>
+<div class="section" id="development-master">
+<h2>Development (master)<a class="headerlink" href="#development-master" title="Permalink to this headline">¶</a></h2>
+</div>
+<div class="section" id="id1">
+<h2>3.1.0 (2018-03-03)<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h2>
+<p>Features:</p>
+<blockquote>
+<div><ul class="simple">
+<li>Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.</li>
+</ul>
+</div></blockquote>
+<p>Minor features:</p>
+<blockquote>
+<div><ul class="simple">
+<li>Code cleanup: fix code style to satisfy flake8 linter.</li>
+</ul>
+</div></blockquote>
+<p>Documentation:</p>
+<blockquote>
+<div><ul class="simple">
+<li>Rename www directory to docs.</li>
+</ul>
+</div></blockquote>
+<p>Tests:</p>
+<blockquote>
+<div><ul class="simple">
+<li>Run pypy tests at AppVeyor.</li>
+<li>Use remove-old-files.py from ppu to cleanup pip cache
+at Travis and AppVeyor.</li>
+</ul>
+</div></blockquote>
+</div>
+<div class="section" id="id2">
+<h2>3.0.1 (2018-02-27)<a class="headerlink" href="#id2" title="Permalink to this headline">¶</a></h2>
<p>Bug fixes:</p>
<blockquote>
<div><ul class="simple">
<li>Fix a minor bug in Compiler.</li>
</ul>
</div></blockquote>
-<p>3.0.0 (2017-05-07)</p>
+</div>
+<div class="section" id="id3">
+<h2>3.0.0 (2017-05-07)<a class="headerlink" href="#id3" title="Permalink to this headline">¶</a></h2>
<p>Major features:</p>
<blockquote>
<div><ul class="simple">
@@ -122,6 +168,7 @@ patches by Adam Karpierz, tests by Oleg Broytman.</li>
</div></blockquote>
<p><a class="reference external" href="news2.html">Older news</a></p>
</div>
+</div>
</div>
@@ -149,7 +196,7 @@ patches by Adam Karpierz, tests by Oleg Broytman.</li>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/news2.html b/docs/html/news2.html
index 3aad594..1a570c9 100644
--- a/www/html/news2.html
+++ b/docs/html/news2.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -2143,7 +2143,7 @@ with large blocks. (TR)</li>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/py-modindex.html b/docs/html/py-modindex.html
index 3d4cd5b..acf8834 100644
--- a/www/html/py-modindex.html
+++ b/docs/html/py-modindex.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -245,6 +245,11 @@
<tr class="cg-1">
<td></td>
<td>&#160;&#160;&#160;
+ <a href="api/Cheetah.Tests.NameMapper_pure.html#module-Cheetah.Tests.NameMapper_pure"><code class="xref">Cheetah.Tests.NameMapper_pure</code></a></td><td>
+ <em></em></td></tr>
+ <tr class="cg-1">
+ <td></td>
+ <td>&#160;&#160;&#160;
<a href="api/Cheetah.Tests.Parser.html#module-Cheetah.Tests.Parser"><code class="xref">Cheetah.Tests.Parser</code></a></td><td>
<em></em></td></tr>
<tr class="cg-1">
@@ -394,7 +399,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/recipes/inheritance.html b/docs/html/recipes/inheritance.html
index d15b103..5c0a119 100644
--- a/www/html/recipes/inheritance.html
+++ b/docs/html/recipes/inheritance.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -172,7 +172,7 @@ implicitly subclassing from <cite>Cheetah.Template.Template</cite>:</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/recipes/precompiled.html b/docs/html/recipes/precompiled.html
index 3d4dfe4..06f0ce1 100644
--- a/www/html/recipes/precompiled.html
+++ b/docs/html/recipes/precompiled.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -173,7 +173,7 @@ method†for executing the Cheetah template. You can adjust the example above i
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/recipes/staticmethod.html b/docs/html/recipes/staticmethod.html
index f68ddc7..d366e52 100644
--- a/www/html/recipes/staticmethod.html
+++ b/docs/html/recipes/staticmethod.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -156,7 +156,7 @@ banners, etc).</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/recipes/writing_a_recipe.html b/docs/html/recipes/writing_a_recipe.html
index 0971a9f..91d9f26 100644
--- a/www/html/recipes/writing_a_recipe.html
+++ b/docs/html/recipes/writing_a_recipe.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -111,7 +111,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/roadmap.html b/docs/html/roadmap.html
index 06fc5d0..d6465d9 100644
--- a/www/html/roadmap.html
+++ b/docs/html/roadmap.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -126,7 +126,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/search.html b/docs/html/search.html
index 360fdbc..7bd82c3 100644
--- a/www/html/search.html
+++ b/docs/html/search.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: './',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -98,7 +98,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js
new file mode 100644
index 0000000..c6a7718
--- /dev/null
+++ b/docs/html/searchindex.js
@@ -0,0 +1 @@
+Search.setIndex({docnames:["api/Cheetah","api/Cheetah.CacheRegion","api/Cheetah.CacheStore","api/Cheetah.CheetahWrapper","api/Cheetah.Compiler","api/Cheetah.DirectiveAnalyzer","api/Cheetah.Django","api/Cheetah.DummyTransaction","api/Cheetah.ErrorCatchers","api/Cheetah.FileUtils","api/Cheetah.Filters","api/Cheetah.ImportHooks","api/Cheetah.ImportManager","api/Cheetah.Macros","api/Cheetah.Macros.I18n","api/Cheetah.NameMapper","api/Cheetah.Parser","api/Cheetah.Servlet","api/Cheetah.SettingsManager","api/Cheetah.SourceReader","api/Cheetah.Template","api/Cheetah.TemplateCmdLineIface","api/Cheetah.Templates","api/Cheetah.Templates.SkeletonPage","api/Cheetah.Tests","api/Cheetah.Tests.Analyzer","api/Cheetah.Tests.Boinker","api/Cheetah.Tests.CheetahWrapper","api/Cheetah.Tests.Cheps","api/Cheetah.Tests.Filters","api/Cheetah.Tests.Misc","api/Cheetah.Tests.NameMapper","api/Cheetah.Tests.NameMapper_pure","api/Cheetah.Tests.Parser","api/Cheetah.Tests.Performance","api/Cheetah.Tests.Pinger","api/Cheetah.Tests.Regressions","api/Cheetah.Tests.SyntaxAndOutput","api/Cheetah.Tests.Template","api/Cheetah.Tests.Test","api/Cheetah.Tests.Unicode","api/Cheetah.Tests.xmlrunner","api/Cheetah.Tools","api/Cheetah.Tools.CGITemplate","api/Cheetah.Tools.MondoReport","api/Cheetah.Tools.RecursiveNull","api/Cheetah.Tools.SiteHierarchy","api/Cheetah.Tools.turbocheetah","api/Cheetah.Tools.turbocheetah.cheetahsupport","api/Cheetah.Tools.turbocheetah.tests","api/Cheetah.Tools.turbocheetah.tests.test_template","api/Cheetah.Unspecified","api/Cheetah.Utils","api/Cheetah.Utils.Indenter","api/Cheetah.Utils.Misc","api/Cheetah.Utils.WebInputMixin","api/Cheetah.Utils.htmlDecode","api/Cheetah.Utils.htmlEncode","api/Cheetah.Utils.statprof","api/Cheetah.Version","api/Cheetah.compat","api/Cheetah.convertTmplPathToModuleName","api/modules","authors","chep","cheps/1_chep","cheps/2_import","cheps/3_super","dev_guide/bnf","dev_guide/cache","dev_guide/comments","dev_guide/compiler","dev_guide/design","dev_guide/errorHandling","dev_guide/files","dev_guide/flowControl","dev_guide/history","dev_guide/index","dev_guide/inheritanceEtc","dev_guide/introduction","dev_guide/output","dev_guide/parser","dev_guide/parserInstructions","dev_guide/patching","dev_guide/placeholders","dev_guide/pyModules","dev_guide/safeDelegation","dev_guide/template","developers","documentation","download","index","news","news2","recipes/inheritance","recipes/precompiled","recipes/staticmethod","recipes/writing_a_recipe","roadmap","users_guide/comments","users_guide/comparisons","users_guide/editors","users_guide/errorHandling","users_guide/examples","users_guide/flowControl","users_guide/gettingStarted","users_guide/glossary","users_guide/index","users_guide/inheritanceEtc","users_guide/intro","users_guide/language","users_guide/libraries","users_guide/links","users_guide/nonHtml","users_guide/otherHtml","users_guide/output","users_guide/parserInstructions","users_guide/tipsAndTricks","users_guide/webware"],envversion:52,filenames:["api/Cheetah.rst","api/Cheetah.CacheRegion.rst","api/Cheetah.CacheStore.rst","api/Cheetah.CheetahWrapper.rst","api/Cheetah.Compiler.rst","api/Cheetah.DirectiveAnalyzer.rst","api/Cheetah.Django.rst","api/Cheetah.DummyTransaction.rst","api/Cheetah.ErrorCatchers.rst","api/Cheetah.FileUtils.rst","api/Cheetah.Filters.rst","api/Cheetah.ImportHooks.rst","api/Cheetah.ImportManager.rst","api/Cheetah.Macros.rst","api/Cheetah.Macros.I18n.rst","api/Cheetah.NameMapper.rst","api/Cheetah.Parser.rst","api/Cheetah.Servlet.rst","api/Cheetah.SettingsManager.rst","api/Cheetah.SourceReader.rst","api/Cheetah.Template.rst","api/Cheetah.TemplateCmdLineIface.rst","api/Cheetah.Templates.rst","api/Cheetah.Templates.SkeletonPage.rst","api/Cheetah.Tests.rst","api/Cheetah.Tests.Analyzer.rst","api/Cheetah.Tests.Boinker.rst","api/Cheetah.Tests.CheetahWrapper.rst","api/Cheetah.Tests.Cheps.rst","api/Cheetah.Tests.Filters.rst","api/Cheetah.Tests.Misc.rst","api/Cheetah.Tests.NameMapper.rst","api/Cheetah.Tests.NameMapper_pure.rst","api/Cheetah.Tests.Parser.rst","api/Cheetah.Tests.Performance.rst","api/Cheetah.Tests.Pinger.rst","api/Cheetah.Tests.Regressions.rst","api/Cheetah.Tests.SyntaxAndOutput.rst","api/Cheetah.Tests.Template.rst","api/Cheetah.Tests.Test.rst","api/Cheetah.Tests.Unicode.rst","api/Cheetah.Tests.xmlrunner.rst","api/Cheetah.Tools.rst","api/Cheetah.Tools.CGITemplate.rst","api/Cheetah.Tools.MondoReport.rst","api/Cheetah.Tools.RecursiveNull.rst","api/Cheetah.Tools.SiteHierarchy.rst","api/Cheetah.Tools.turbocheetah.rst","api/Cheetah.Tools.turbocheetah.cheetahsupport.rst","api/Cheetah.Tools.turbocheetah.tests.rst","api/Cheetah.Tools.turbocheetah.tests.test_template.rst","api/Cheetah.Unspecified.rst","api/Cheetah.Utils.rst","api/Cheetah.Utils.Indenter.rst","api/Cheetah.Utils.Misc.rst","api/Cheetah.Utils.WebInputMixin.rst","api/Cheetah.Utils.htmlDecode.rst","api/Cheetah.Utils.htmlEncode.rst","api/Cheetah.Utils.statprof.rst","api/Cheetah.Version.rst","api/Cheetah.compat.rst","api/Cheetah.convertTmplPathToModuleName.rst","api/modules.rst","authors.rst","chep.rst","cheps/1_chep.rst","cheps/2_import.rst","cheps/3_super.rst","dev_guide/bnf.rst","dev_guide/cache.rst","dev_guide/comments.rst","dev_guide/compiler.rst","dev_guide/design.rst","dev_guide/errorHandling.rst","dev_guide/files.rst","dev_guide/flowControl.rst","dev_guide/history.rst","dev_guide/index.rst","dev_guide/inheritanceEtc.rst","dev_guide/introduction.rst","dev_guide/output.rst","dev_guide/parser.rst","dev_guide/parserInstructions.rst","dev_guide/patching.rst","dev_guide/placeholders.rst","dev_guide/pyModules.rst","dev_guide/safeDelegation.rst","dev_guide/template.rst","developers.rst","documentation.rst","download.rst","index.rst","news.rst","news2.rst","recipes/inheritance.rst","recipes/precompiled.rst","recipes/staticmethod.rst","recipes/writing_a_recipe.rst","roadmap.rst","users_guide/comments.rst","users_guide/comparisons.rst","users_guide/editors.rst","users_guide/errorHandling.rst","users_guide/examples.rst","users_guide/flowControl.rst","users_guide/gettingStarted.rst","users_guide/glossary.rst","users_guide/index.rst","users_guide/inheritanceEtc.rst","users_guide/intro.rst","users_guide/language.rst","users_guide/libraries.rst","users_guide/links.rst","users_guide/nonHtml.rst","users_guide/otherHtml.rst","users_guide/output.rst","users_guide/parserInstructions.rst","users_guide/tipsAndTricks.rst","users_guide/webware.rst"],objects:{"":{Cheetah:[0,0,0,"-"]},"Cheetah.CacheRegion":{CacheItem:[1,1,1,""],CacheRegion:[1,1,1,""]},"Cheetah.CacheRegion.CacheItem":{clear:[1,2,1,""],getData:[1,2,1,""],getExpiryTime:[1,2,1,""],getRefreshTime:[1,2,1,""],hasExpired:[1,2,1,""],renderOutput:[1,2,1,""],setData:[1,2,1,""],setExpiryTime:[1,2,1,""]},"Cheetah.CacheRegion.CacheRegion":{clear:[1,2,1,""],getCacheItem:[1,2,1,""],isNew:[1,2,1,""]},"Cheetah.CacheStore":{AbstractCacheStore:[2,1,1,""],Error:[2,3,1,""],MemcachedCacheStore:[2,1,1,""],MemoryCacheStore:[2,1,1,""]},"Cheetah.CacheStore.AbstractCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemcachedCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],servers:[2,4,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemoryCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CheetahWrapper":{Bundle:[3,1,1,""],CheetahWrapper:[3,1,1,""],Error:[3,3,1,""],fprintfMessage:[3,5,1,""],usage:[3,5,1,""]},"Cheetah.CheetahWrapper.CheetahWrapper":{BACKUP_SUFFIX:[3,4,1,""],MAKE_BACKUPS:[3,4,1,""],chatter:[3,2,1,""],compile:[3,2,1,""],debug:[3,2,1,""],error:[3,2,1,""],fill:[3,2,1,""],help:[3,2,1,""],main:[3,2,1,""],options:[3,2,1,""],parseOpts:[3,2,1,""],test:[3,2,1,""],version:[3,2,1,""],warn:[3,2,1,""]},"Cheetah.Compiler":{AutoClassCompiler:[4,1,1,""],AutoMethodCompiler:[4,1,1,""],ClassCompiler:[4,1,1,""],Compiler:[4,4,1,""],Error:[4,3,1,""],GenUtils:[4,1,1,""],MethodCompiler:[4,1,1,""],ModuleCompiler:[4,1,1,""]},"Cheetah.Compiler.AutoMethodCompiler":{addMethArg:[4,2,1,""],addStop:[4,2,1,""],cleanupState:[4,2,1,""],isClassMethod:[4,2,1,""],isStaticMethod:[4,2,1,""],methodSignature:[4,2,1,""]},"Cheetah.Compiler.ClassCompiler":{addAttribute:[4,2,1,""],addChunkToInit:[4,2,1,""],addClassDocString:[4,2,1,""],addDecorator:[4,2,1,""],addErrorCatcherCall:[4,2,1,""],addSuper:[4,2,1,""],attributes:[4,2,1,""],classDef:[4,2,1,""],classDocstring:[4,2,1,""],className:[4,2,1,""],classSignature:[4,2,1,""],cleanupState:[4,2,1,""],closeBlock:[4,2,1,""],closeDef:[4,2,1,""],methodCompilerClass:[4,4,1,""],methodCompilerClassForInit:[4,4,1,""],methodDefs:[4,2,1,""],setBaseClass:[4,2,1,""],setClassName:[4,2,1,""],setMainMethodArgs:[4,2,1,""],setMainMethodName:[4,2,1,""],setting:[4,2,1,""],startMethodDef:[4,2,1,""],wrapClassDef:[4,2,1,""]},"Cheetah.Compiler.GenUtils":{addGetTextVar:[4,2,1,""],genCacheInfo:[4,2,1,""],genCacheInfoFromArgList:[4,2,1,""],genCheetahVar:[4,2,1,""],genNameMapperVar:[4,2,1,""],genPlainVar:[4,2,1,""],genTimeInterval:[4,2,1,""]},"Cheetah.Compiler.MethodCompiler":{addAssert:[4,2,1,""],addBreak:[4,2,1,""],addChunk:[4,2,1,""],addClosure:[4,2,1,""],addContinue:[4,2,1,""],addDel:[4,2,1,""],addEcho:[4,2,1,""],addElif:[4,2,1,""],addElse:[4,2,1,""],addExcept:[4,2,1,""],addFilteredChunk:[4,2,1,""],addFinally:[4,2,1,""],addFor:[4,2,1,""],addIf:[4,2,1,""],addInclude:[4,2,1,""],addIndentingDirective:[4,2,1,""],addMethComment:[4,2,1,""],addMethDocString:[4,2,1,""],addOneLineIf:[4,2,1,""],addPSP:[4,2,1,""],addPass:[4,2,1,""],addPlaceholder:[4,2,1,""],addRaise:[4,2,1,""],addRawText:[4,2,1,""],addReIndentingDirective:[4,2,1,""],addRepeat:[4,2,1,""],addReturn:[4,2,1,""],addSet:[4,2,1,""],addSilent:[4,2,1,""],addStrConst:[4,2,1,""],addTernaryExpr:[4,2,1,""],addTry:[4,2,1,""],addUnless:[4,2,1,""],addWhile:[4,2,1,""],addWriteChunk:[4,2,1,""],addYield:[4,2,1,""],appendToPrevChunk:[4,2,1,""],cleanupState:[4,2,1,""],closeFilterBlock:[4,2,1,""],commitStrConst:[4,2,1,""],dedent:[4,2,1,""],docString:[4,2,1,""],endCacheRegion:[4,2,1,""],endCallRegion:[4,2,1,""],endCaptureRegion:[4,2,1,""],handleWSBeforeDirective:[4,2,1,""],indent:[4,2,1,""],indentation:[4,2,1,""],isErrorCatcherOn:[4,2,1,""],methodBody:[4,2,1,""],methodDef:[4,2,1,""],methodName:[4,2,1,""],methodSignature:[4,2,1,""],nextCacheID:[4,2,1,""],nextCallRegionID:[4,2,1,""],nextCaptureRegionID:[4,2,1,""],nextFilterRegionID:[4,2,1,""],setCallArg:[4,2,1,""],setErrorCatcher:[4,2,1,""],setFilter:[4,2,1,""],setMethodName:[4,2,1,""],setMethodSignature:[4,2,1,""],setTransform:[4,2,1,""],setting:[4,2,1,""],startCacheRegion:[4,2,1,""],startCallRegion:[4,2,1,""],startCaptureRegion:[4,2,1,""],turnErrorCatcherOff:[4,2,1,""],turnErrorCatcherOn:[4,2,1,""],wrapCode:[4,2,1,""]},"Cheetah.Compiler.ModuleCompiler":{addAttribute:[4,2,1,""],addComment:[4,2,1,""],addImportStatement:[4,2,1,""],addImportedVarNames:[4,2,1,""],addModuleDocString:[4,2,1,""],addModuleGlobal:[4,2,1,""],addModuleHeader:[4,2,1,""],addSpecialVar:[4,2,1,""],classCompilerClass:[4,4,1,""],classDefs:[4,2,1,""],compile:[4,2,1,""],getModuleCode:[4,2,1,""],getModuleEncoding:[4,2,1,""],importStatements:[4,2,1,""],importedVarNames:[4,2,1,""],moduleConstants:[4,2,1,""],moduleDocstring:[4,2,1,""],moduleFooter:[4,2,1,""],moduleHeader:[4,2,1,""],parserClass:[4,4,1,""],setBaseClass:[4,2,1,""],setCompilerSetting:[4,2,1,""],setCompilerSettings:[4,2,1,""],setModuleEncoding:[4,2,1,""],setShBang:[4,2,1,""],specialVars:[4,2,1,""],timestamp:[4,2,1,""],wrapModuleDef:[4,2,1,""]},"Cheetah.DirectiveAnalyzer":{AnalysisCompiler:[5,1,1,""],Analyzer:[5,1,1,""],analyze:[5,5,1,""],main:[5,5,1,""],main_dir:[5,5,1,""],main_file:[5,5,1,""]},"Cheetah.DirectiveAnalyzer.AnalysisCompiler":{parserClass:[5,4,1,""]},"Cheetah.DirectiveAnalyzer.Analyzer":{eatDirective:[5,2,1,""]},"Cheetah.Django":{render:[6,5,1,""]},"Cheetah.DummyTransaction":{DummyResponse:[7,1,1,""],DummyResponseFailure:[7,3,1,""],DummyTransaction:[7,1,1,""],TransformerResponse:[7,1,1,""],TransformerTransaction:[7,1,1,""]},"Cheetah.DummyTransaction.DummyResponse":{flush:[7,2,1,""],getvalue:[7,2,1,""],safeConvert:[7,2,1,""],write:[7,2,1,""],writelines:[7,2,1,""],writeln:[7,2,1,""]},"Cheetah.DummyTransaction.DummyTransaction":{response:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerResponse":{getvalue:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerTransaction":{response:[7,2,1,""]},"Cheetah.ErrorCatchers":{BigEcho:[8,1,1,""],Echo:[8,4,1,""],Error:[8,3,1,""],ErrorCatcher:[8,1,1,""],KeyError:[8,1,1,""],ListErrors:[8,1,1,""]},"Cheetah.ErrorCatchers.BigEcho":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ErrorCatcher":{exceptions:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.ErrorCatchers.KeyError":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ListErrors":{listErrors:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.FileUtils":{FileFinder:[9,1,1,""],FindAndReplace:[9,1,1,""],SourceFileStats:[9,1,1,""],findFiles:[9,5,1,""],replaceRegexInFiles:[9,5,1,""],replaceStrInFiles:[9,5,1,""]},"Cheetah.FileUtils.FileFinder":{files:[9,2,1,""],filterDir:[9,2,1,""],processDir:[9,2,1,""],walkDirTree:[9,2,1,""]},"Cheetah.FileUtils.FindAndReplace":{results:[9,2,1,""]},"Cheetah.FileUtils.SourceFileStats":{getFileStats:[9,2,1,""],printStats:[9,2,1,""],rawStats:[9,2,1,""],summary:[9,2,1,""]},"Cheetah.Filters":{CodeHighlighter:[10,1,1,""],EncodeUnicode:[10,4,1,""],Filter:[10,1,1,""],Markdown:[10,1,1,""],MaxLen:[10,1,1,""],RawOrEncodedUnicode:[10,4,1,""],Strip:[10,1,1,""],StripSqueeze:[10,1,1,""],WebSafe:[10,1,1,""],test:[10,5,1,""]},"Cheetah.Filters.CodeHighlighter":{filter:[10,2,1,""]},"Cheetah.Filters.Filter":{filter:[10,2,1,""]},"Cheetah.Filters.Markdown":{filter:[10,2,1,""]},"Cheetah.Filters.MaxLen":{filter:[10,2,1,""]},"Cheetah.Filters.Strip":{filter:[10,2,1,""]},"Cheetah.Filters.StripSqueeze":{filter:[10,2,1,""]},"Cheetah.Filters.WebSafe":{filter:[10,2,1,""]},"Cheetah.ImportHooks":{CheetahDirOwner:[11,1,1,""],install:[11,5,1,""],setCacheDir:[11,5,1,""],uninstall:[11,5,1,""]},"Cheetah.ImportHooks.CheetahDirOwner":{getmod:[11,2,1,""],templateFileExtensions:[11,4,1,""]},"Cheetah.ImportManager":{BuiltinImportDirector:[12,1,1,""],DirOwner:[12,1,1,""],FrozenImportDirector:[12,1,1,""],ImportDirector:[12,1,1,""],ImportManager:[12,1,1,""],Owner:[12,1,1,""],PathImportDirector:[12,1,1,""],RegistryImportDirector:[12,1,1,""],getDescr:[12,5,1,""],getPathExt:[12,5,1,""],nameSplit:[12,5,1,""],packageName:[12,5,1,""],pathIsDir:[12,5,1,""]},"Cheetah.ImportManager.BuiltinImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.DirOwner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.FrozenImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.ImportManager":{doimport:[12,2,1,""],importHook:[12,2,1,""],install:[12,2,1,""],reloadHook:[12,2,1,""],setThreaded:[12,2,1,""]},"Cheetah.ImportManager.Owner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.PathImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.RegistryImportDirector":{getmod:[12,2,1,""]},"Cheetah.Macros":{I18n:[14,0,0,"-"]},"Cheetah.Macros.I18n":{I18n:[14,1,1,""]},"Cheetah.NameMapper":{NotFound:[15,3,1,""],hasKey:[15,5,1,""],valueForKey:[15,5,1,""],valueForName:[15,5,1,""],valueFromFrame:[15,5,1,""],valueFromFrameOrSearchList:[15,5,1,""],valueFromSearchList:[15,5,1,""]},"Cheetah.Parser":{ArgList:[16,1,1,""],CheetahVariable:[16,1,1,""],ForbiddenDirective:[16,3,1,""],ForbiddenExpression:[16,3,1,""],ForbiddenSyntax:[16,3,1,""],ParseError:[16,3,1,""],Parser:[16,4,1,""],Placeholder:[16,1,1,""],any:[16,5,1,""],cachedRegex:[16,5,1,""],escapeRegexChars:[16,5,1,""],group:[16,5,1,""],makeTripleQuoteRe:[16,5,1,""],maybe:[16,5,1,""],namedGroup:[16,5,1,""],nongroup:[16,5,1,""]},"Cheetah.Parser.ArgList":{add_argument:[16,2,1,""],add_default:[16,2,1,""],merge:[16,2,1,""],next:[16,2,1,""]},"Cheetah.Parser.ParseError":{report:[16,2,1,""]},"Cheetah.Servlet":{Servlet:[17,1,1,""]},"Cheetah.Servlet.Servlet":{application:[17,4,1,""],request:[17,4,1,""],respond:[17,2,1,""],serverSidePath:[17,2,1,""],session:[17,4,1,""],shutdown:[17,2,1,""],sleep:[17,2,1,""],transaction:[17,4,1,""]},"Cheetah.SettingsManager":{ConfigParserCaseSensitive:[18,1,1,""],Error:[18,3,1,""],NoDefault:[18,1,1,""],SettingsManager:[18,1,1,""],convStringToNum:[18,5,1,""],mergeNestedDictionaries:[18,5,1,""],stringIsNumber:[18,5,1,""]},"Cheetah.SettingsManager.ConfigParserCaseSensitive":{optionxform:[18,2,1,""]},"Cheetah.SettingsManager.SettingsManager":{copySettings:[18,2,1,""],deepcopySettings:[18,2,1,""],hasSetting:[18,2,1,""],setSetting:[18,2,1,""],setting:[18,2,1,""],settings:[18,2,1,""],updateSettings:[18,2,1,""],updateSettingsFromConfigFileObj:[18,2,1,""],updateSettingsFromConfigStr:[18,2,1,""],updateSettingsFromPySrcStr:[18,2,1,""]},"Cheetah.SourceReader":{ENCODINGsearch:[19,5,1,""],Error:[19,3,1,""],SourceReader:[19,1,1,""]},"Cheetah.SourceReader.SourceReader":{advance:[19,2,1,""],atEnd:[19,2,1,""],atStart:[19,2,1,""],breakPoint:[19,2,1,""],checkPos:[19,2,1,""],filename:[19,2,1,""],find:[19,2,1,""],findBOL:[19,2,1,""],findEOL:[19,2,1,""],getLine:[19,2,1,""],getNonWhiteSpace:[19,2,1,""],getRowCol:[19,2,1,""],getRowColLine:[19,2,1,""],getWhiteSpace:[19,2,1,""],getc:[19,2,1,""],gotoBookmark:[19,2,1,""],hasBookmark:[19,2,1,""],isLineClearToPos:[19,2,1,""],lineNum:[19,2,1,""],matchNonWhiteSpace:[19,2,1,""],matchWhiteSpace:[19,2,1,""],matches:[19,2,1,""],peek:[19,2,1,""],pos:[19,2,1,""],read:[19,2,1,""],readTo:[19,2,1,""],readToEOL:[19,2,1,""],rev:[19,2,1,""],rfind:[19,2,1,""],setBookmark:[19,2,1,""],setBreakPoint:[19,2,1,""],setPos:[19,2,1,""],splitlines:[19,2,1,""],src:[19,2,1,""],startswith:[19,2,1,""],ungetc:[19,2,1,""],validPos:[19,2,1,""]},"Cheetah.Template":{CompileCacheItem:[20,1,1,""],Error:[20,3,1,""],PreprocessError:[20,3,1,""],T:[20,4,1,""],Template:[20,1,1,""],TemplatePreprocessor:[20,1,1,""],checkFileMtime:[20,5,1,""],createMethod:[20,5,1,""],genParserErrorFromPythonException:[20,5,1,""],hashDict:[20,5,1,""],hashList:[20,5,1,""],updateLinecache:[20,5,1,""]},"Cheetah.Template.Template":{NonNumericInputError:[20,3,1,""],Reserved_SearchList:[20,4,1,""],compile:[20,6,1,""],errorCatcher:[20,2,1,""],generatedClassCode:[20,2,1,""],generatedModuleCode:[20,2,1,""],getCacheRegion:[20,2,1,""],getCacheRegions:[20,2,1,""],getFileContents:[20,2,1,""],getVar:[20,2,1,""],hasVar:[20,2,1,""],i18n:[20,2,1,""],refreshCache:[20,2,1,""],runAsMainProgram:[20,2,1,""],searchList:[20,2,1,""],shutdown:[20,2,1,""],subclass:[20,6,1,""],varExists:[20,2,1,""],webInput:[20,2,1,""]},"Cheetah.Template.TemplatePreprocessor":{preprocess:[20,2,1,""]},"Cheetah.TemplateCmdLineIface":{CmdLineIface:[21,1,1,""],Error:[21,3,1,""]},"Cheetah.TemplateCmdLineIface.CmdLineIface":{run:[21,2,1,""],usage:[21,2,1,""]},"Cheetah.Templates":{SkeletonPage:[23,0,0,"-"]},"Cheetah.Templates.SkeletonPage":{SkeletonPage:[23,1,1,""]},"Cheetah.Templates.SkeletonPage.SkeletonPage":{respond:[23,2,1,""],writeBody:[23,2,1,""],writeHeadTag:[23,2,1,""]},"Cheetah.Tests":{Analyzer:[25,0,0,"-"],Boinker:[26,0,0,"-"],CheetahWrapper:[27,0,0,"-"],Cheps:[28,0,0,"-"],Filters:[29,0,0,"-"],Misc:[30,0,0,"-"],NameMapper:[31,0,0,"-"],NameMapper_pure:[32,0,0,"-"],Parser:[33,0,0,"-"],Performance:[34,0,0,"-"],Pinger:[35,0,0,"-"],Regressions:[36,0,0,"-"],SyntaxAndOutput:[37,0,0,"-"],Template:[38,0,0,"-"],Test:[39,0,0,"-"],Unicode:[40,0,0,"-"],xmlrunner:[41,0,0,"-"]},"Cheetah.Tests.Analyzer":{AnalyzerTests:[25,1,1,""]},"Cheetah.Tests.Analyzer.AnalyzerTests":{test_compilersettings:[25,2,1,""],test_set:[25,2,1,""]},"Cheetah.Tests.Boinker":{Boinker:[26,1,1,""]},"Cheetah.Tests.Boinker.Boinker":{boink:[26,2,1,""]},"Cheetah.Tests.CheetahWrapper":{CFBase:[27,1,1,""],CFIdirBase:[27,1,1,""],Flat:[27,1,1,""],FlatRecurseCollision:[27,1,1,""],IdirFlatRecurseCollision:[27,1,1,""],IdirOdirRecurse:[27,1,1,""],IdirRecurse:[27,1,1,""],NoBackup:[27,1,1,""],OneFile:[27,1,1,""],OneFileNoExtension:[27,1,1,""],OneFileWithOdir:[27,1,1,""],Popen4:[27,1,1,""],RecurseExplicit:[27,1,1,""],RecurseExplicitWIthOdir:[27,1,1,""],RecurseImplicit:[27,1,1,""],SplatTmpl:[27,1,1,""],SplatTmplWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectoriesNoExtension:[27,1,1,""],VarietyWithOdir:[27,1,1,""],listTests:[27,5,1,""],main:[27,5,1,""],warn:[27,5,1,""]},"Cheetah.Tests.CheetahWrapper.CFBase":{assertPosixSubprocess:[27,2,1,""],assertSubprocess:[27,2,1,""],assertWin32Subprocess:[27,2,1,""],checkCompile:[27,2,1,""],checkFill:[27,2,1,""],checkNoBackup:[27,2,1,""],checkSubdirPyInit:[27,2,1,""],expectError:[27,4,1,""],go:[27,2,1,""],inform:[27,2,1,""],locate_cheetah:[27,2,1,""],setUp:[27,2,1,""],srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""],tearDown:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.CFIdirBase":{srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""]},"Cheetah.Tests.CheetahWrapper.Flat":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.FlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirOdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.NoBackup":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFile":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseImplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmpl":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.VarietyWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.Cheps":{Chep_2_Conditionalized_Import_Behavior:[28,1,1,""]},"Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior":{test_InlineImport:[28,2,1,""],test_LegacyMode:[28,2,1,""],test_ModuleLevelImport:[28,2,1,""]},"Cheetah.Tests.Filters":{BasicCodeHighlighterFilterTest:[29,1,1,""],BasicMarkdownFilterTest:[29,1,1,""]},"Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest":{test_Html:[29,2,1,""],test_Python:[29,2,1,""]},"Cheetah.Tests.Filters.BasicMarkdownFilterTest":{test_BasicHeader:[29,2,1,""]},"Cheetah.Tests.Misc":{SettingsManagerTests:[30,1,1,""]},"Cheetah.Tests.Misc.SettingsManagerTests":{test_mergeDictionaries:[30,2,1,""]},"Cheetah.Tests.NameMapper":{DummyClass:[31,1,1,""],DummyClassGetAttrRaises:[31,1,1,""],MapBuiltins:[31,1,1,""],NameMapperTest:[31,1,1,""],VFF:[31,1,1,""],VFFSL:[31,1,1,""],VFFSL_2:[31,1,1,""],VFFSL_3:[31,1,1,""],VFFSL_4:[31,1,1,""],VFN:[31,1,1,""],VFS:[31,1,1,""],VFS_2namespaces:[31,1,1,""],VFS_3namespaces:[31,1,1,""],VFS_4namespaces:[31,1,1,""],aClass:[31,4,1,""],aFunc:[31,5,1,""],dummyFunc:[31,5,1,""],funcThatRaises:[31,5,1,""]},"Cheetah.Tests.NameMapper.DummyClass":{classVar1:[31,4,1,""],meth1:[31,2,1,""],meth2:[31,2,1,""],meth3:[31,2,1,""],meth:[31,2,1,""]},"Cheetah.Tests.NameMapper.MapBuiltins":{test_int:[31,2,1,""]},"Cheetah.Tests.NameMapper.NameMapperTest":{VFN:[31,2,1,""],VFS:[31,2,1,""],check:[31,2,1,""],failureException:[31,4,1,""],get:[31,2,1,""],namespace:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFF":{get:[31,2,1,""],setUp:[31,2,1,""],test_VFF_1:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFFSL":{VFFSL:[31,2,1,""],get:[31,2,1,""],setUp:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFN":{test10:[31,2,1,""],test11:[31,2,1,""],test12:[31,2,1,""],test13:[31,2,1,""],test14:[31,2,1,""],test15:[31,2,1,""],test16:[31,2,1,""],test17:[31,2,1,""],test18:[31,2,1,""],test19:[31,2,1,""],test1:[31,2,1,""],test20:[31,2,1,""],test21:[31,2,1,""],test22:[31,2,1,""],test23:[31,2,1,""],test24:[31,2,1,""],test27:[31,2,1,""],test28:[31,2,1,""],test29:[31,2,1,""],test2:[31,2,1,""],test30:[31,2,1,""],test31:[31,2,1,""],test32:[31,2,1,""],test33:[31,2,1,""],test34:[31,2,1,""],test35:[31,2,1,""],test36:[31,2,1,""],test37:[31,2,1,""],test38:[31,2,1,""],test39:[31,2,1,""],test3:[31,2,1,""],test40:[31,2,1,""],test41:[31,2,1,""],test42:[31,2,1,""],test43:[31,2,1,""],test44:[31,2,1,""],test45:[31,2,1,""],test46:[31,2,1,""],test47:[31,2,1,""],test48:[31,2,1,""],test49:[31,2,1,""],test4:[31,2,1,""],test50:[31,2,1,""],test51:[31,2,1,""],test52:[31,2,1,""],test53:[31,2,1,""],test54:[31,2,1,""],test55:[31,2,1,""],test56:[31,2,1,""],test57:[31,2,1,""],test58:[31,2,1,""],test59:[31,2,1,""],test5:[31,2,1,""],test60:[31,2,1,""],test61:[31,2,1,""],test6:[31,2,1,""],test7:[31,2,1,""],test8:[31,2,1,""],test9:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFS":{get:[31,2,1,""],searchList:[31,2,1,""],searchListGenerator:[31,2,1,""]},"Cheetah.Tests.NameMapper_pure":{NameMapperTest:[32,1,1,""],setUpModule:[32,5,1,""],tearDownModule:[32,5,1,""]},"Cheetah.Tests.NameMapper_pure.NameMapperTest":{test_valueForName:[32,2,1,""]},"Cheetah.Tests.Parser":{ArgListTest:[33,1,1,""]},"Cheetah.Tests.Parser.ArgListTest":{setUp:[33,2,1,""],test_merge1:[33,2,1,""],test_merge2:[33,2,1,""],test_merge3:[33,2,1,""]},"Cheetah.Tests.Performance":{BunchOfWriteCalls:[34,1,1,""],DurationError:[34,3,1,""],DynamicMethodCompilationTest:[34,1,1,""],DynamicSimpleCompilationTest:[34,1,1,""],DynamicTemplatePerformanceTest:[34,1,1,""],FilterTest:[34,1,1,""],LongCompileAndRun:[34,1,1,""],LongCompileTest:[34,1,1,""],LongCompile_CompilerSettingsTest:[34,1,1,""],PerformanceTest:[34,1,1,""],perftest:[34,5,1,""]},"Cheetah.Tests.Performance.BunchOfWriteCalls":{iterations:[34,4,1,""],performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicMethodCompilationTest":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicSimpleCompilationTest":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.DynamicTemplatePerformanceTest":{loops:[34,4,1,""],test_BasicDynamic:[34,2,1,""]},"Cheetah.Tests.Performance.FilterTest":{performanceSample:[34,2,1,""],setUp:[34,2,1,""],template:[34,4,1,""]},"Cheetah.Tests.Performance.LongCompileAndRun":{performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.LongCompileTest":{compile:[34,2,1,""],performanceSample:[34,2,1,""]},"Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest":{compile:[34,2,1,""]},"Cheetah.Tests.Performance.PerformanceTest":{display:[34,4,1,""],iterations:[34,4,1,""],runTest:[34,2,1,""],save:[34,4,1,""]},"Cheetah.Tests.Pinger":{Pinger:[35,1,1,""]},"Cheetah.Tests.Pinger.Pinger":{ping:[35,2,1,""]},"Cheetah.Tests.Regressions":{CustomGetAttrClass:[36,1,1,""],GetAttrException:[36,3,1,""],GetAttrTest:[36,1,1,""],InlineImportTest:[36,1,1,""],Mantis_Issue_11_Regression_Test:[36,1,1,""],Mantis_Issue_21_Regression_Test:[36,1,1,""],Mantis_Issue_22_Regression_Test:[36,1,1,""]},"Cheetah.Tests.Regressions.GetAttrTest":{test_NotFoundException:[36,2,1,""],test_ValidException:[36,2,1,""]},"Cheetah.Tests.Regressions.InlineImportTest":{test_AutoImporting:[36,2,1,""],test_FromFooImportThing:[36,2,1,""],test_ImportFailModule:[36,2,1,""],test_ProperImportOfBadModule:[36,2,1,""],test_StuffBeforeImport_Legacy:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test":{test_FailingBehavior:[36,2,1,""],test_FailingBehaviorWithSetting:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test":{runTest:[36,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test":{test_DefinedFilter:[36,2,1,""],test_NoneFilter:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput":{AssertDirective:[37,1,1,""],AttrDirective:[37,1,1,""],Backslashes:[37,1,1,""],BlockDirective:[37,1,1,""],BreakDirective:[37,1,1,""],BreakpointDirective:[37,1,1,""],CGI:[37,1,1,""],CacheDirective:[37,1,1,""],CallDirective:[37,1,1,""],CaptureDirective:[37,1,1,""],Comments_MultiLine:[37,1,1,""],Comments_MultiLine_NoGobble:[37,1,1,""],Comments_SingleLine:[37,1,1,""],CompilerDirective:[37,1,1,""],CompilerSettingsDirective:[37,1,1,""],ContinueDirective:[37,1,1,""],DecoratorDirective:[37,1,1,""],DefDirective:[37,1,1,""],DefmacroDirective:[37,1,1,""],DummyClass:[37,1,1,""],EOLSlurpToken:[37,1,1,""],EchoDirective:[37,1,1,""],EmptyTemplate:[37,1,1,""],EncodingDirective:[37,1,1,""],ErrorCatcherDirective:[37,1,1,""],ExtendsDirective:[37,1,1,""],FilterDirective:[37,1,1,""],ForDirective:[37,1,1,""],GetVar:[37,1,1,""],I18nDirective:[37,1,1,""],IfDirective:[37,1,1,""],ImportDirective:[37,1,1,""],ImportantExampleCases:[37,1,1,""],IncludeDirective:[37,1,1,""],Indenter:[37,1,1,""],MiscComplexSyntax:[37,1,1,""],NameMapper:[37,1,1,""],NonTokens:[37,1,1,""],OutputTest:[37,1,1,""],PSP:[37,1,1,""],PassDirective:[37,1,1,""],PlaceholderStrings:[37,1,1,""],Placeholders:[37,1,1,""],Placeholders_Calls:[37,1,1,""],Placeholders_Esc:[37,1,1,""],Placeholders_Vals:[37,1,1,""],RaiseDirective:[37,1,1,""],RawDirective:[37,1,1,""],RepeatDirective:[37,1,1,""],ReturnDirective:[37,1,1,""],SetDirective:[37,1,1,""],SilentDirective:[37,1,1,""],SlurpDirective:[37,1,1,""],StopDirective:[37,1,1,""],SuperDirective:[37,1,1,""],TryDirective:[37,1,1,""],UnicodeDirective:[37,1,1,""],UnicodeStrings:[37,1,1,""],UnlessDirective:[37,1,1,""],Unspecified:[37,1,1,""],VarExists:[37,1,1,""],WhileDirective:[37,1,1,""],WhitespaceAfterDirectiveTokens:[37,1,1,""],YieldDirective:[37,1,1,""],dummyFunc:[37,5,1,""],install_eols:[37,5,1,""],testdecorator:[37,5,1,""]},"Cheetah.Tests.SyntaxAndOutput.AssertDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.AttrDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Backslashes":{convertEOLs:[37,4,1,""],setUp:[37,2,1,""],tearDown:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BlockDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakpointDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CGI":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CacheDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CallDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CaptureDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ContinueDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DecoratorDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefmacroDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DummyClass":{callIt:[37,2,1,""],meth1:[37,2,1,""],meth2:[37,2,1,""],meth:[37,2,1,""],methWithPercentSignDefaultArg:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EchoDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EmptyTemplate":{convertEOLs:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EncodingDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ExtendsDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.FilterDirective":{convertEOLs:[37,4,1,""],test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ForDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.GetVar":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.I18nDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IfDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IncludeDirective":{setUp:[37,2,1,""],tearDown:[37,2,1,""],test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Indenter":{control:[37,4,1,""],convertEOLs:[37,4,1,""],searchList:[37,2,1,""],source:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NameMapper":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NonTokens":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.OutputTest":{DEBUGLEV:[37,4,1,""],convertEOLs:[37,4,1,""],genClassCode:[37,2,1,""],genModuleCode:[37,2,1,""],report:[37,4,1,""],searchList:[37,2,1,""],verify:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PSP":{searchList:[37,2,1,""],test10:[37,2,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PassDirective":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test21:[37,2,1,""],test22:[37,2,1,""],test23:[37,2,1,""],test24:[37,2,1,""],test25:[37,2,1,""],test26:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals":{convertEOLs:[37,4,1,""],test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RaiseDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RawDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RepeatDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ReturnDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SetDirective":{test10:[37,2,1,""],test11:[37,2,1,""],test12:[37,2,1,""],test13:[37,2,1,""],test14:[37,2,1,""],test15:[37,2,1,""],test16:[37,2,1,""],test17:[37,2,1,""],test18:[37,2,1,""],test19:[37,2,1,""],test1:[37,2,1,""],test20:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""],test7:[37,2,1,""],test8:[37,2,1,""],test9:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SilentDirective":{test4:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SlurpDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.StopDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SuperDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.TryDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeStrings":{test1:[37,2,1,""],test2:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnlessDirective":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""],test6:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.VarExists":{test1:[37,2,1,""],test2:[37,2,1,""],test3:[37,2,1,""],test4:[37,2,1,""],test5:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhileDirective":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens":{test1:[37,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.YieldDirective":{convertEOLs:[37,4,1,""],test1:[37,2,1,""]},"Cheetah.Tests.Template":{ClassMethodSupport:[38,1,1,""],ClassMethods_compile:[38,1,1,""],ClassMethods_subclass:[38,1,1,""],MultipleInheritanceSupport:[38,1,1,""],Preprocessors:[38,1,1,""],StaticMethodSupport:[38,1,1,""],SubclassSearchListTest:[38,1,1,""],TemplateTest:[38,1,1,""],TryExceptImportTest:[38,1,1,""]},"Cheetah.Tests.Template.ClassMethodSupport":{test_BasicDecorator:[38,2,1,""]},"Cheetah.Tests.Template.ClassMethods_compile":{test_baseclassArg:[38,2,1,""],test_basicUsage:[38,2,1,""],test_classNameArg:[38,2,1,""],test_compilationCache:[38,2,1,""],test_keepRefToGeneratedCodeArg:[38,2,1,""],test_mainMethodNameArg:[38,2,1,""],test_moduleFileCaching:[38,2,1,""],test_moduleGlobalsArg:[38,2,1,""],test_moduleNameArg:[38,2,1,""]},"Cheetah.Tests.Template.ClassMethods_subclass":{test_basicUsage:[38,2,1,""]},"Cheetah.Tests.Template.MultipleInheritanceSupport":{runTest:[38,2,1,""]},"Cheetah.Tests.Template.Preprocessors":{test_basicUsage1:[38,2,1,""],test_complexUsage:[38,2,1,""],test_i18n:[38,2,1,""],test_normalizePreprocessorArgVariants:[38,2,1,""]},"Cheetah.Tests.Template.StaticMethodSupport":{test_BasicDecorator:[38,2,1,""]},"Cheetah.Tests.Template.SubclassSearchListTest":{runTest:[38,2,1,""]},"Cheetah.Tests.Template.TryExceptImportTest":{test_FailCase:[38,2,1,""]},"Cheetah.Tests.Unicode":{CommandLineTest:[40,1,1,""],EncodeUnicodeCompatTest:[40,1,1,""],InlineSpanishTest:[40,1,1,""],JBQ_UTF8_Test1:[40,1,1,""],JBQ_UTF8_Test2:[40,1,1,""],JBQ_UTF8_Test3:[40,1,1,""],JBQ_UTF8_Test4:[40,1,1,""],JBQ_UTF8_Test5:[40,1,1,""],JBQ_UTF8_Test6:[40,1,1,""],JBQ_UTF8_Test7:[40,1,1,""],JBQ_UTF8_Test8:[40,1,1,""],Unicode_in_SearchList_Test:[40,1,1,""],loadModule:[40,5,1,""]},"Cheetah.Tests.Unicode.CommandLineTest":{createAndCompile:[40,2,1,""]},"Cheetah.Tests.Unicode.EncodeUnicodeCompatTest":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.InlineSpanishTest":{setUp:[40,2,1,""],test_failure:[40,2,1,""],test_success:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test1":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test2":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test3":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test4":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test5":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test6":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test7":{runTest:[40,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test8":{testDynamicCompile:[40,2,1,""],testStaticCompile:[40,2,1,""]},"Cheetah.Tests.Unicode.Unicode_in_SearchList_Test":{test_BasicASCII:[40,2,1,""],test_Thai:[40,2,1,""],test_Thai_utf8:[40,2,1,""]},"Cheetah.Tests.xmlrunner":{XMLTestProgram:[41,1,1,""],XMLTestRunner:[41,1,1,""],XMLTestRunnerTest:[41,1,1,""],create_error:[41,5,1,""],create_failure:[41,5,1,""],create_success:[41,5,1,""],main:[41,4,1,""]},"Cheetah.Tests.xmlrunner.XMLTestProgram":{runTests:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunner":{path:[41,4,1,""],run:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest":{NullStream:[41,1,1,""],setUp:[41,2,1,""],test_error:[41,2,1,""],test_failure:[41,2,1,""],test_no_tests:[41,2,1,""],test_stderr_capture:[41,2,1,""],test_stdout_capture:[41,2,1,""],test_success:[41,2,1,""],test_unittests_changing_stderr:[41,2,1,""],test_unittests_changing_stdout:[41,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream":{write:[41,2,1,""]},"Cheetah.Tools":{CGITemplate:[43,0,0,"-"],MondoReport:[44,0,0,"-"],RecursiveNull:[45,0,0,"-"],SiteHierarchy:[46,0,0,"-"],turbocheetah:[47,0,0,"-"]},"Cheetah.Tools.CGITemplate":{CGITemplate:[43,1,1,""]},"Cheetah.Tools.CGITemplate.CGITemplate":{cgiHeaders:[43,2,1,""],cgiHeadersHook:[43,2,1,""],isCgi:[43,2,1,""]},"Cheetah.Tools.MondoReport":{IndexFormats:[44,1,1,""],MondoReport:[44,1,1,""],NegativeError:[44,3,1,""],PrevNextPage:[44,1,1,""],RecordStats:[44,1,1,""],Roman:[44,5,1,""],Summary:[44,1,1,""],ValuesGetterMixin:[44,1,1,""],isNonNegative:[44,5,1,""],isNotNone:[44,5,1,""],isNumeric:[44,5,1,""],mean:[44,5,1,""],median:[44,5,1,""],standardDeviation:[44,5,1,""],standardDeviation_n:[44,5,1,""],sum:[44,5,1,""],variance:[44,5,1,""],variance_n:[44,5,1,""]},"Cheetah.Tools.MondoReport.IndexFormats":{Letter:[44,2,1,""],Roman:[44,2,1,""],even:[44,2,1,""],even_i:[44,2,1,""],index:[44,2,1,""],item:[44,2,1,""],letter:[44,2,1,""],number:[44,2,1,""],odd:[44,2,1,""],odd_i:[44,2,1,""],roman:[44,2,1,""]},"Cheetah.Tools.MondoReport.MondoReport":{all:[44,2,1,""],batch:[44,2,1,""],page:[44,2,1,""],summary:[44,2,1,""]},"Cheetah.Tools.MondoReport.RecordStats":{first:[44,2,1,""],firstValue:[44,2,1,""],last:[44,2,1,""],lastValue:[44,2,1,""],length:[44,2,1,""],next:[44,2,1,""],nextPages:[44,2,1,""],next_batches:[44,2,1,""],percentOfTotal:[44,2,1,""],prev:[44,2,1,""],prevPages:[44,2,1,""],prev_batches:[44,2,1,""],summary:[44,2,1,""]},"Cheetah.Tools.MondoReport.Summary":{average:[44,2,1,""],count:[44,2,1,""],max:[44,2,1,""],mean:[44,2,1,""],median:[44,2,1,""],min:[44,2,1,""],standardDeviation:[44,2,1,""],standardDeviation_n:[44,2,1,""],sum:[44,2,1,""],total:[44,2,1,""],variance:[44,2,1,""],variance_n:[44,2,1,""]},"Cheetah.Tools.RecursiveNull":{RecursiveNull:[45,1,1,""]},"Cheetah.Tools.SiteHierarchy":{Hierarchy:[46,1,1,""]},"Cheetah.Tools.SiteHierarchy.Hierarchy":{crumbLink:[46,2,1,""],crumbSeperator:[46,2,1,""],crumbTerminator:[46,2,1,""],crumbs:[46,2,1,""],emptyCrumb:[46,2,1,""],menuLink:[46,2,1,""],menuList:[46,2,1,""]},"Cheetah.Tools.turbocheetah":{TurboCheetah:[47,1,1,""],cheetahsupport:[48,0,0,"-"],tests:[49,0,0,"-"]},"Cheetah.Tools.turbocheetah.TurboCheetah":{extension:[47,4,1,""],load_template:[47,2,1,""],load_template_file:[47,2,1,""],load_template_module:[47,2,1,""],load_template_string:[47,2,1,""],render:[47,2,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport":{TurboCheetah:[48,1,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah":{extension:[48,4,1,""],load_template:[48,2,1,""],load_template_file:[48,2,1,""],load_template_module:[48,2,1,""],load_template_string:[48,2,1,""],render:[48,2,1,""]},"Cheetah.Tools.turbocheetah.tests":{test_template:[50,0,0,"-"]},"Cheetah.Tools.turbocheetah.tests.test_template":{test_normal:[50,5,1,""],test_path:[50,5,1,""],test_search:[50,5,1,""],test_string:[50,5,1,""]},"Cheetah.Utils":{Indenter:[53,0,0,"-"],Misc:[54,0,0,"-"],WebInputMixin:[55,0,0,"-"],htmlDecode:[56,0,0,"-"],htmlEncode:[57,0,0,"-"]},"Cheetah.Utils.Indenter":{IndentProcessor:[53,1,1,""],Indenter:[53,1,1,""],indentize:[53,5,1,""]},"Cheetah.Utils.Indenter.IndentProcessor":{ARGS:[53,4,1,""],CHAR:[53,4,1,""],DEC:[53,4,1,""],DIRECTIVE:[53,4,1,""],INC:[53,4,1,""],INDENT_DIR:[53,4,1,""],LINE_SEP:[53,4,1,""],OFF:[53,4,1,""],ON:[53,4,1,""],POP:[53,4,1,""],PUSH:[53,4,1,""],SET:[53,4,1,""],WHITESPACES:[53,4,1,""],WS:[53,4,1,""],process:[53,2,1,""]},"Cheetah.Utils.Indenter.Indenter":{Chars:[53,4,1,""],Level:[53,4,1,""],LevelStack:[53,4,1,""],On:[53,4,1,""],dec:[53,2,1,""],inc:[53,2,1,""],indent:[53,2,1,""],off:[53,2,1,""],on:[53,2,1,""],pop:[53,2,1,""],push:[53,2,1,""],setChar:[53,2,1,""],setLevel:[53,2,1,""]},"Cheetah.Utils.Misc":{checkKeywords:[54,5,1,""],die:[54,5,1,""],mkdirsWithPyInitFiles:[54,5,1,""],removeFromList:[54,5,1,""],useOrRaise:[54,5,1,""]},"Cheetah.Utils.WebInputMixin":{NonNumericInputError:[55,3,1,""]},"Cheetah.Utils.htmlDecode":{htmlDecode:[56,5,1,""]},"Cheetah.Utils.htmlEncode":{htmlEncode:[57,5,1,""]},"Cheetah.Version":{convertVersionStringToTuple:[59,5,1,""]},"Cheetah.convertTmplPathToModuleName":{convertTmplPathToModuleName:[61,5,1,""]},Cheetah:{CacheRegion:[1,0,0,"-"],CacheStore:[2,0,0,"-"],CheetahWrapper:[3,0,0,"-"],Compiler:[4,0,0,"-"],DirectiveAnalyzer:[5,0,0,"-"],Django:[6,0,0,"-"],DummyTransaction:[7,0,0,"-"],ErrorCatchers:[8,0,0,"-"],FileUtils:[9,0,0,"-"],Filters:[10,0,0,"-"],ImportHooks:[11,0,0,"-"],ImportManager:[12,0,0,"-"],Macros:[13,0,0,"-"],NameMapper:[15,0,0,"-"],Parser:[16,0,0,"-"],Servlet:[17,0,0,"-"],SettingsManager:[18,0,0,"-"],SourceReader:[19,0,0,"-"],Template:[20,0,0,"-"],TemplateCmdLineIface:[21,0,0,"-"],Templates:[22,0,0,"-"],Tests:[24,0,0,"-"],Tools:[42,0,0,"-"],Unspecified:[51,0,0,"-"],Utils:[52,0,0,"-"],Version:[59,0,0,"-"],compat:[60,0,0,"-"],convertTmplPathToModuleName:[61,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:attribute","5":"py:function","6":"py:classmethod"},terms:{"0b1":93,"0b2":93,"0b3":93,"0b4":93,"0b5":93,"0rc1":93,"0rc2":93,"0rc3":93,"0rc4":93,"0rc5":93,"0rc6":93,"0rc7":93,"0rc8":93,"0x816d0fc":73,"0x8170ecc":73,"10th":93,"12b1":93,"12b2":93,"12th":93,"13a1":70,"13b1":93,"13b2":93,"13th":93,"14b1":93,"15a1":93,"15a2":93,"15a3":93,"15b1":93,"15m":115,"15rc1":93,"15rc2":93,"16a1":93,"16b1":93,"17rc1":93,"17th":93,"18rc1":93,"19th":93,"1st":93,"20notat":93,"20refer":93,"24th":93,"25th":93,"29th":93,"30m":[69,115],"30th":93,"4ism":93,"4th":93,"6th":93,"8a1":93,"8a2":93,"8a3":[72,93],"8a4":93,"8th":93,"9a1":93,"9a2":93,"9a3":93,"9a4":93,"9a5":93,"9a6":93,"9b1":93,"9th":93,"abstract":[4,17],"boolean":[84,93,104,105,115],"break":[20,36,37,76,83,93,107,108,110,115,117],"byte":[93,95],"case":[18,20,25,27,28,29,30,31,32,33,34,36,37,38,39,40,41,72,86,93,100,103,108,110,111,115,117,118],"catch":[102,111],"char":[15,16,37,53,93,110],"class":[1,2,3,4,5,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,42,43,44,45,46,47,48,53,66,70,73,78,80,83,84,85,91,93,94,96,99,102,105,106,107,108,109,110,111,114,115,117,118],"default":[1,4,15,18,20,37,44,66,78,80,83,84,93,94,100,102,104,108,110,111,114,115,116,117,118],"final":[20,37,72,73,76,79,93,100,101,106,107,109,110,114,118],"float":[20,31,37,44,84,100,118],"function":[4,9,12,15,17,18,20,36,37,42,54,56,57,61,66,69,72,80,84,85,91,93,94,96,100,104,105,106,110,111,114,115,117],"import":[4,10,11,12,20,28,36,37,38,43,55,64,73,77,83,84,85,89,91,93,94,96,100,105,107,110,111,114,117,118],"int":[20,27,31,37,84,118],"long":[37,39,69,83,85,93,105,108,110,115,117,118],"new":[1,20,28,66,73,75,76,83,88,91,93,100,104,107,108,111,116,117,118],"public":[20,37,65,66,67],"return":[1,2,4,8,9,10,15,16,18,19,20,37,43,44,53,54,56,57,66,73,78,80,84,85,93,94,100,102,107,110,111,114,115,117,118],"short":[20,37,93,105,106,108,110,115,117,118],"static":[20,72,91,93,107,115,118],"super":[64,93,94,100,117],"switch":[66,80,93,115],"throw":[86,111],"true":[3,4,9,16,18,19,20,27,31,37,41,65,69,73,75,78,84,85,93,100,104,108,109,110,115,117],"try":[1,4,10,20,37,66,69,76,84,85,86,88,93,105,107,109,110,111,114,117,118],"var":[4,15,20,37,84,93,99,100,104,108,110,115,117,118],"void":37,"while":[12,37,66,72,76,93,94,100,102,107,109,110,111,116,117],AND:[15,37,93,110],Added:93,And:[84,104,108,110,115,117],Are:107,BUT:[100,110],Being:114,But:[3,15,20,76,84,110,115,117,118],CVS:[9,76,83,85,93,117],Das:63,Doing:[72,111],FOR:[93,110],For:[1,4,15,20,66,72,84,85,93,94,96,100,103,105,108,109,110,111,115,117,118],Its:[15,108,111],KWS:[23,93],KWs:[23,37,84,85],NOT:[12,15,37,56],Not:[82,100,111],One:[20,65,72,84,91,93,107,109,110,117,118],Such:[10,106],THAT:110,THE:93,That:[12,69,80,83,85,93,94,96,101,108,110,111,115,117,118],The:[1,2,3,10,15,18,20,21,27,37,41,43,44,46,53,64,66,69,70,72,73,75,76,77,78,79,80,82,83,84,85,86,88,93,94,95,100,101,102,103,104,106,107,108,109,110,111,112,114,115,116,117],Then:[73,79,83,100,105,114,115],There:[12,20,42,46,75,93,95,99,100,102,105,106,108,109,110,114,115,117,118],These:[4,20,66,93,96,102,104,106,110,111,117,118],USED:93,Use:[46,86,92,93,100,108,115,117],Used:[3,16,117],Useful:[91,107,111],Using:[15,37,91,96,107,110],VFS:[31,69,70,73,75,78,80,84,85],WILL:93,Was:93,Will:[66,93],With:[15,96,110,116],_1var:110,________________________________________________0123456789_______abcdefghijklmnopqrstuvwxyz______abcdefghijklmnopqrstuvwxyz_____________________________________________________________________________________________________________________________________:61,__builtin__:93,__builtins__:93,__cach:69,__cache13925129__refreshtim:69,__cache55048032__refreshtim:69,__cache88939345__refreshtim:69,__call__:110,__cheetah_gentime__:[84,85],__cheetah_src__:85,__cheetah_version__:[84,85],__class__:[20,86,93,95],__delattr__:20,__dict__:[20,86],__doc__:20,__eq__:93,__errorcatcher1:73,__errorcatcher2:73,__errorcatcher3:73,__format__:20,__getattr__:[4,31,93],__getattribute__:20,__getatttr__:36,__hash__:20,__i0:75,__i:[75,93],__import__:12,__init__:[1,4,20,27,54,84,85,93,102,108,117],__main__:[41,84,85],__metaclass__:93,__module__:20,__modulevars__:93,__name__:[84,85,93,95],__ne__:93,__new__:20,__path__:12,__reduce__:20,__reduce_ex__:20,__refreshtim:69,__repr__:20,__setattr__:20,__sizeof__:20,__specialconstant__:4,__str__:[20,84,85,93,108,110,118],__subclasshook__:20,__v:[20,93],__weakref__:20,_addcheetahplumbingcodetoclass:20,_assignrequiredmethodstoclass:93,_bodytagattrib:111,_build:21,_cachedata:69,_cacheindex:69,_call:84,_callarg:84,_char:53,_cheetah_:93,_cheetah__globalsetvar:20,_cheetah__indent:53,_cheetah__iscontrolledbywebkit:37,_cheetah__xxx:20,_cheetah_cachecompilationresult:20,_cheetah_cachedirformodulefil:[20,93],_cheetah_cachemodulefilesfortraceback:[20,93],_cheetah_cacheregionclass:20,_cheetah_cachestor:20,_cheetah_cachestoreclass:20,_cheetah_cachestoreidprefix:20,_cheetah_compilecach:20,_cheetah_compilelock:20,_cheetah_compilerclass:20,_cheetah_compilerinst:20,_cheetah_compilerset:20,_cheetah_defaultbaseclassfortempl:20,_cheetah_defaultclassnamefortempl:20,_cheetah_defaultmainmethodnam:20,_cheetah_defaultmainmethodnamefortempl:20,_cheetah_defaultmoduleglobalsfortempl:20,_cheetah_defaultmodulenamefortempl:20,_cheetah_defaultpreprocessorclass:20,_cheetah_generatedmodulecod:20,_cheetah_keepreftogeneratedcod:20,_cheetah_preprocessor:20,_cheetah_requiredcheetahclassattribut:20,_cheetah_requiredcheetahclassmethod:20,_cheetah_requiredcheetahmethod:20,_cheetah_usecompilationcach:20,_cheetah_xxx:20,_compil:20,_createcacheregion:20,_createconfigfil:93,_currentfilt:[73,75,78,80,84,85],_default:53,_eatmultilinedef:93,_errorcatch:73,_exceptionstocatch:102,_filedirnam:93,_filemtim:[73,84,85,93],_filenam:93,_filepath:[73,84,85,93],_filter:[36,80,93],_filterslib:80,_getcachestor:20,_getcachestoreidprefix:20,_getcompilerclass:20,_getcompilerset:20,_gettemplateapiclassforincludedirectivecompil:20,_getvaluefornam:93,_globalsetvar:[20,26,35,43,73,75,78,84,85],_handlecheetahinclud:20,_highlevelpars:[4,5,16],_includecheetahsourc:[80,93],_indent:53,_initcheetahattribut:93,_initcheetahinst:20,_initialfilt:80,_input:37,_javascriptlib:111,_javascripttag:111,_legalkw:93,_level:53,_lowlevelpars:16,_lowlevelsemanticspars:93,_maincheetahmethod_for_:95,_maincheetahmethod_for_gentempl:84,_maincheetahmethod_for_x2:78,_maincheetahmethod_for_x:[73,85],_makedummypackagefordir:93,_metatag:111,_namemapp:[15,93,105],_normalizepreprocessor:20,_normalizepreprocessorarg:20,_normalizepreprocessorset:20,_output:37,_page:94,_pathnametranschar:61,_prebuiltsearchlist:[20,26,35,43],_preprocesssourc:20,_searchlist:[73,75,78,84,85,93],_set:18,_settingscollector:18,_sin:108,_skeletonpag:[23,37,111,118],_spawnmethodcompil:4,_sre:[16,53],_str1:37,_str3:37,_stylesheet:111,_stylesheetlib:111,_stylesheetsord:111,_templat:73,_testinfo:41,_txt:53,_underscor:93,_updatesettingswithpreprocesstoken:20,_var:110,a2p:117,aaa:20,aaron:109,abandon:[93,118],abbatiello:63,abbeyj:[63,93],abbrevi:93,abc:110,abil:[66,85,93,100],abitrari:93,abl:[10,15,72,109,110],abort:[3,93],about:[9,12,15,20,44,72,76,93,101,102,105,106,108,109,110,111,114,117,118],abov:[1,4,20,78,93,95,99,100,102,105,108,115,117,118],abramowitz:63,absenc:118,absolut:[93,118],absolute_url:100,abspath:17,abstractcachestor:2,accept:[9,12,20,93,100,104,117],acces:[37,99],access:[0,1,20,31,37,85,86,91,93,102,109,115,117,118],accessor:93,accident:93,accompani:117,accomplish:94,accord:[76,93,115],accumul:[8,85],acheiv:94,achiev:105,acknowledg:107,aclass:31,acompiletimecondit:20,across:115,act:20,action:[93,104,109],activ:[34,65,73,91],activest:[34,112],actual:[20,37,69,80,88,93,106,117],adam:[63,92],add:[1,2,4,37,69,79,83,84,93,100,101,105,108,110,114,115,118],add_argu:16,add_default:16,addassert:4,addattribut:4,addbreak:4,addchunk:4,addchunktoinit:4,addclassdocstr:4,addclosur:4,addcom:4,addcontinu:4,adddecor:4,adddel:4,addecho:4,added:[12,20,76,83,84,85,93,95,99,100],addelif:4,addels:4,adderrorcatchercal:4,addexcept:4,addfilteredchunk:4,addfin:4,addfor:4,addgettextvar:4,addheaderfoot:93,addif:4,addimportedvarnam:4,addimportstat:4,addinclud:4,addindentingdirect:4,adding:[10,20,93,99,117],addit:[6,85,88,93,96,105,114,115],addmetharg:4,addmethcom:4,addmethdocstr:4,addmoduledocstr:4,addmoduleglob:4,addmodulehead:4,addonelineif:4,addpass:4,addplacehold:4,addpsp:4,addrais:4,addrawtext:4,addreindentingdirect:4,addrepeat:4,address:[15,104,108,110,118],addreturn:4,addset:[4,93],addsil:4,addspecialvar:4,addstop:4,addstrconst:4,addsup:4,addternaryexpr:4,addtimestampstocompileroutput:93,addtosearchlist:93,addtri:4,addunless:4,addwhil:4,addwritechunk:4,addyield:4,adecor:93,adequ:117,adict:[31,84],adition:117,adj:[93,108],adjac:[80,117],adjust:95,administr:[91,105,108,114],adsens:96,advanc:[1,19,20,93,100,110],advantag:[37,78,100,108,109,117,118],advic:[84,85,109],affect:[82,85,93,110,115,117],afloat:84,after:[4,46,65,70,72,76,80,82,93,99,104,105,106,108,110,115,117,118],afunc:[31,84],afunct:66,again:[72,83,84,93,100,108,109,114,115,118],against:93,agre:[83,114],ahead:72,aim:[15,86,93,110],aix:105,aka:[4,20,83,93,99,110,118],akei:93,akin:115,alcatraz:86,alejandro:93,algorithm:118,alia:[4,5,8,10,16,20,31,41,80,85,93,102,108],alist:84,aliv:[75,104],all:[1,7,9,10,15,16,20,27,37,43,44,46,53,54,65,66,69,76,80,83,84,85,86,88,92,93,94,99,100,101,102,104,105,106,107,108,109,111,114,115,116,118],allair:86,allig:80,allmethod:[108,110,117],alloc:110,allow:[4,11,15,20,54,69,72,83,85,91,92,93,100,101,104,108,110,111,115,117,118],allow_no_valu:18,allowsearchlistasmetharg:93,allowwhitespaceafterdirectivestarttoken:93,almost:[80,100],alocaldictvar:93,alon:[110,117],along:[47,48,66],alphabet:111,alreadi:[2,20,54,78,85,93,105,115],also:[0,12,15,18,20,37,43,54,66,69,72,74,76,80,81,83,84,86,87,91,93,94,99,100,102,105,106,108,109,110,111,112,113,115,117,118],alt:111,altern:[20,37,76,84,93,105,109,110,118],although:[69,80,100,101,104,110,114,115],alwai:[3,44,83,94,115,117,118],alwaysfilternon:93,ambiti:111,ambrosch:93,amd64:10,ameth:[31,84],amethodyoudefin:20,among:[83,100],amount:[53,93],amp:[56,57],analag:[100,108],analog:108,analysi:69,analysiscompil:5,analyt:[109,118],analyz:[0,5,24,93],analyzertest:25,andrea:93,ani:[4,6,7,9,15,16,18,20,37,41,43,46,53,66,69,72,76,78,83,84,88,91,93,95,99,100,104,105,106,108,109,110,111,113,115,117,118],animal_nam:100,anint:[37,84],annoi:93,announc:[83,111],anobj:[31,84],anoth:[4,20,37,53,69,70,76,83,91,93,100,108,109,110,111,115,116,117,118],another2:93,anothermissingvalu:73,answer:[69,72,112,118],anticip:[72,93],anwesha:63,anybodi:[76,83],anymor:93,anyon:88,anyth:[20,43,45,80,83,85,93,96,100,102,105,109,110,111,118],anytim:[72,117],anywai:118,anywher:[85,105,117,118],aoeu:84,aoeuaoeu:84,apach:[37,93,95,100,112,114,118],api:[1,2,20,93],apl:93,app:93,appar:[93,100],appear:[20,27,78,93,99,102,105,106,108,111,115,117,118],append:[100,111],appendag:4,appendgen:93,appendix:[79,93,100],appendtoprevchunk:4,appet:105,appli:[53,66,80,84,85,88,93,100,110,111,117,118],applic:[17,18,20,76,93,96,100,105,107,108,111,118],appreci:109,approach:[4,20,66,72,79,93,96,100,108],appropri:[20,53,66,72,93,109,110,118],appserv:118,appveyor:92,apr:[70,84,85],apreprocessvar:20,april:93,aquarium:20,arbitrari:[72,93,100],arbitrarili:[20,118],arcang:93,architectur:[91,109],archiv:93,area:108,aren:[85,100,108,109,111,118],arendartchuk:93,arff:[31,37,84],arg1:[31,37,84,93,99,104,110,117],arg2:[31,37,84,104,110,117],arg3:117,arg:[3,4,5,7,9,20,23,31,34,37,41,53,66,78,84,85,93,110,115,117],argentina:110,arglist:[4,16,33,108],arglisttest:33,argnam:4,argslist:4,argspec:93,argstr:[37,84],arguabl:100,argument:[1,6,9,12,15,20,27,37,54,69,78,80,83,84,85,93,102,104,105,106,108,110,111,114,115,116,117,118],argv:[3,41],aris:66,arkaitz:109,around:[1,9,37,69,88,93,99,100,102,104,110,115,118],arr:[78,100],arrai:100,arrang:[43,105,118],art:93,articl:[1,93,100,109],arun:63,arunkakorp:63,aruntimecondit:20,aruntimevar:20,ascii:[56,57,93],asctim:118,asid:93,ask:[83,88,109,112,114,117],asp101:100,asp:[15,69,107,109,110,115],aspect:[15,109,110],assert:[37,76,93,107,110],assertdirect:37,assertionerror:[34,73,102],assertposixsubprocess:27,assertsubprocess:27,assertwin32subprocess:27,assign:[37,77,91,93,100,107,110,117,118],assignto:4,assum:[10,15,20,72,79,93,108,109,110,118],assumpt:[93,94,108],asterisk:115,astr:[84,93],atend:19,atest:93,atstart:19,attempt:[20,53],attic:93,attr:[37,80,86,93,94,95,107,110],attract:111,attrdirect:37,attribexpr:4,attribnam:4,attribu:118,attribut:[4,7,15,20,31,38,53,69,72,78,79,83,84,85,93,100,105,106,108,110,111,117],attributeerror:[20,117,118],aug:93,augment:108,august:[72,93],austin:63,authent:[93,100,118],author:[20,65,66,67,91,93,94,100,108],autoassigndummytransactiontoself:93,autocal:[0,4,20,31,37,72,84,93,100,106,117],autoclasscompil:4,autogener:[70,84,85,93,111],autoimportforextenddirect:93,autoindent:113,autom:88,automat:[15,20,53,83,93,105,108,110,115,117,118],automethodcompil:4,avail:[20,43,66,93,105,108,111,117,118],averag:44,avial:93,avoid:[20,93,99,104,115,117,118],awai:[76,80,109,118],awak:[93,108,117,118],awar:[94,99,110,114],babi:110,back:[15,37,41,72,75,80,83,84,93,100,105,108,109,115,116,118],backend:[2,93],background:118,backport:88,backslash:[37,72,85,93,99,100,110],backup:[3,27],backup_suffix:3,backward:[42,93,111],bad:[20,93,102,118],badfloat:[20,118],badger:93,badint:[20,118],bah:110,bak:3,balanc:115,ballanc:[65,66,67,94],bam:80,bang:110,banish:[20,118],banner:96,baptist:[63,93],bar:[37,93,99,100,110,111],bare:[84,93,110,115],barf:37,barn:20,barrier:94,baruch:109,base:[1,2,3,4,5,7,8,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,40,41,43,44,45,46,53,55,66,72,76,83,91,93,94,95,100,102,103,104,108,109,110,115,117],baseclass:[4,10,17,20,93,111],baseclassnam:[4,5,93],basenam:[4,9],basi:[9,65],basic:[16,20,23,37,66,89,91,93,100,109,110,111,118],basiccodehighlighterfiltertest:29,basicmarkdownfiltertest:29,batch:44,batchrecord:44,bathtim:80,batteri:[91,107],bbb:20,becam:76,becaus:[10,15,20,37,69,72,76,78,80,84,85,93,100,108,109,110,114,115,117,118],becom:[10,53,85,100],bedrock:105,been:[10,15,53,63,65,66,67,76,78,84,85,86,93,100,101,104,105,106,108,109,110,111,115,118],beer:110,befor:[20,69,70,72,80,82,83,88,93,99,100,104,108,109,110,111,117,118],began:118,begin:[4,20,70,76,93,100,101,108,110,115,117,118],beginn:93,behav:[76,117],behavior:[7,20,28,64,93,114,117,118],behaviorist:79,behaviour:[93,100,110,111,115,116],behind:[15,66,93,107],behren:[63,93],being:[0,36,37,53,65,72,80,83,93,94,95,100,104,106,109,111,115,117,118],believ:[93,114],bellomi:109,belong:[76,83,109],below:[15,20,53,69,83,85,91,93,94,102,104,108,111,115,118],benchmark:[86,93],benefici:66,benefit:[85,93,101,109,110,111],besid:[27,84,109,113,117],best:10,beta:[93,109],better:[20,37,72,88,93,100,117,118],between:[15,20,37,66,83,85,93,99,100,101,104,106,108,110,114,115,116,117,118],bgcolor:100,bick:[45,63,76,84,85,93,109,111],big:[69,75,84,101,104,117,118],bigecho:[8,102],biggest:117,bin:[70,84,85,92,93,105,114,115],binari:105,bind:[20,76],bird:93,bit:93,bitorika:109,bla:110,black:[39,110],blag:93,blah:[93,105],blahblah:93,blank:[10,20,93,99,109,118],blarg1:84,blarg:[84,93],blend:[91,109],bless:100,blew:76,blindli:69,block1:108,block2:108,block:[10,20,37,66,69,76,84,93,96,100,102,104,107,110,111,115,118],blockdirect:[33,37],blocknam:100,blocktobepars:37,bnf:[77,79],bob:[93,100],boddi:109,bodi:[37,73,75,78,84,85,95,100,105,106,108,109,110,111,115],bodycont:111,bodytag:111,bof:37,bogdano:93,bogu:[37,72],boink:26,boinker:[0,24],bold:110,bomb:118,bone:111,bonnet:63,bonni:75,border:111,both:[10,15,20,64,66,76,85,93,100,101,108,110,114,115,117,118],bother:[89,93],bottl:110,bottleneck:109,bottom:[78,118],bottommost:108,bound:[93,100,109],box:[20,39,118],brace:[100,110,115],bracket:[93,110],branch:[88,93],breakabl:108,breakdirect:37,breakpoint:[19,37,93,107,110],breakpointdirect:37,brian:93,briefli:105,bring:75,broad:118,broader:12,broken:[93,109,118],brows:103,browser:[10,20,69,72,108,109,115,118],broytman:[63,92],bsd:91,buffer:[15,41,93,108],bufsiz:27,bug:[31,36,37,69,75,76,83,91,92,93,117],bugfix:[79,93,111],buggi:[93,118],bugzilla:40,build:[15,21,76,88,93,96,100,108,109,110,117,118],built:[9,12,83,84,86,110,118],builtin:[4,12,20,31,80,84,93,100,110],builtinimportdirector:12,bulk:[20,55,111],bump:93,bunch:[12,20,96,118],bunchofwritecal:34,bundl:[3,93,111],buster:73,button:118,cach:[1,2,20,37,38,77,91,92,93,100,107,109,110,111,117],cache1:[69,115],cachecollector:69,cachecompilationresult:20,cachedir:11,cachedirect:37,cachedirformodulefil:[20,93],cachedplacehold:20,cachedregex:16,cacheid:1,cacheinfo:[4,20],cacheitem:1,cacheitemid:[1,20],cachekei:117,cachemodulefilesfortraceback:[20,93],cacheregion:[0,62,93],cacheregionid:[1,20],cachestor:[0,1,62],cachetoken:[4,16],cachetokenpart:4,calcul:[75,93,100,108,109,111,115,117,118],call:[4,15,20,36,37,41,54,73,76,78,80,83,84,85,93,96,100,102,104,105,106,107,108,110,114,115,118],callabl:[15,20,93,110],callback:[93,118],callbas:117,callbaseerror:117,calldirect:37,caller:[18,20,93,117],callingsuperclassmethod:[108,117,118],callit:[37,84],came:[20,76,93,118],can:[0,1,4,9,10,12,15,20,37,38,46,53,65,69,72,73,76,83,84,85,86,88,90,91,93,94,95,96,99,100,102,103,104,105,106,107,108,111,112,113,114,115,116,117,118],canbethread:117,candid:90,cannot:[69,93,100,102,104,105,110,115,117,118],canonic:[10,37,93],capab:20,capabl:93,capit:100,captur:[37,93,100],capturedirect:37,caraldi:[63,93],care:[72,93,104,108,117],carefulli:[100,110],careless:93,carri:93,cart:100,cascad:[0,20,107],cat:[75,104],catalog:[20,93],catastroph:72,catchbreak:41,catcher:[111,117],caus:[10,36,38,93,115,117],caveat:117,ceas:104,central:88,cert:93,certain:[9,72,100,104,105,106,108,111,115,116,117,118],cfbase:27,cfidirbas:27,cgi:[20,36,37,40,43,83,85,93,100,107,117,118],cgihead:[43,93,114],cgiheadershook:[43,93,114],cgiimport:[37,54,93,111],cgiimportmixin:93,cgiinputmixin:93,cgitempl:[0,42,93,114],chain:[93,108,118],chanc:118,chang:[10,15,18,20,41,53,66,69,72,76,80,84,85,86,93,100,102,105,108,109,110,111,114,115,116,117,118],changelog:83,chapter:[74,84,85,87,101,105,108,110,112,114,117,118],charact:[15,20,37,80,93,99,100,104,110,114,115,117,118],charg:100,charset:[43,114],chatter:3,check:[20,27,31,39,41,69,75,83,93,111,117,118],checkbox:[20,118],checkcompil:27,checkfil:27,checkfilemtim:20,checkkeyword:[54,93],checknobackup:27,checkpo:19,checksubdirpyinit:27,cheeseshop:93,cheetah3:[0,20,26,35,43,88,105,109,112],cheetah:[63,66,69,70,72,73,74,75,79,80,84,85,86,87,92,93,95,96,99,101,102,103,106,108,110,113,114,115,116],cheetah_template_class:93,cheetah_yyyi:[20,93],cheetahcachedir:[20,93],cheetahcompil:93,cheetahcorp:96,cheetahdirown:11,cheetahdoc:93,cheetahsupport:[0,42,47],cheetahtempl:[0,83,84,85,90,91,93,111,112],cheetahtemplate3:[0,88,109,112],cheetahvar:93,cheetahvari:16,cheetahvarstarttoken:[37,116,117],cheetahwrapp:[0,24,62,93],cheetahwrapperfil:27,chep:[0,24,66,67,91],chep_2_conditionalized_import_behavior:28,cherrypi:20,chiefli:76,child:[27,46,93,100,108,118],children:[46,111,118],choic:[16,20,72,117,118],choos:[20,83,94,100,106,108,117,118],chop:[4,80],chose:[20,72,118],chri:93,christoph:93,chuck:[63,76,84,85,93,109],chui:109,chunk:[4,7,10,84,93,115],circuit:115,circumst:117,citi:[15,105,110,115],cito:[112,118],cjk:117,cjson:66,clark:109,clash:[38,93],classcompil:4,classcompilerclass:4,classdef:4,classdocstr:4,classifi:93,classmethod:[20,36,89,91,93],classmethods_compil:38,classmethods_subclass:38,classmethodsupport:38,classnam:[4,20,47,48],classsignatur:4,classvar1:31,clean:[91,93,109],cleanli:[83,109],cleanup:[92,93,102],cleanupst:4,clear:[1,2,39,93],clearli:69,client:[15,93,100,104,109,110],close:[18,69,72,81,93,110],close_fd:27,closeblock:4,closedef:4,closefilterblock:4,closer:100,closur:[37,66,93],cls:20,clutter:[83,115],cmd:27,cmdlinearg:21,cmdlineifac:[21,73],code:[0,1,3,4,8,10,12,15,18,20,29,34,36,37,39,44,53,56,57,66,69,70,73,75,76,78,80,82,83,84,85,86,91,92,93,94,95,99,100,102,104,105,106,107,108,109,110,111,112,115,116,117],codec:93,codechunk:4,codegener:[19,93],codehighlight:[10,93],col:[16,69,73,75,78,80,84,93],coldfus:112,collect:[18,93,100],colombia:110,colon:[93,108,110],color:[101,110],colorstudi:[115,118],column:[93,112],com:[0,1,34,40,53,63,65,66,67,88,93,100,109,112,114,118],comamnd:93,combin:[0,37,69,84,104,109,115],combo:[20,39,118],come:[15,20,46,93,95,100,103,105,110,111,115,117,118],comm:4,comma:[37,93,110,115],command:[20,21,27,69,80,84,85,91,93,95,100,106,107,117,118],commandlin:93,commandlineopt:20,commandlinetest:40,comment:[4,20,37,69,72,77,82,85,91,93,100,105,107,110,116,118],commentoffset:116,comments_multilin:37,comments_multiline_nogobbl:37,comments_singlelin:37,commentstarttoken:[37,82,93,116],commerci:76,commit:83,commitstrconst:[4,37,93],common:[88,93,96,109,117],commun:[63,91,93],communitycheetah:93,compact:109,companion:44,compar:[100,109],comparis:[20,93,100],comparison:[100,112,118],compat:[0,41,42,62,93,109,118],compil:[0,3,5,15,16,20,21,27,34,37,38,62,66,72,73,74,76,77,79,81,85,86,87,88,89,90,91,92,93,94,99,100,105,106,107,108,109,110,114,117,118],compilecacheitem:20,compilerclass:20,compilerdirect:37,compilerset:[20,26,35,37,43,93],compilersettingsdirect:37,complain:[83,118],complaint:72,complement:[93,109],complet:[18,20,72,83,93,100,114,115,117],complex:[15,18,37,96,107,108,109,111,118],complexexampl:84,complic:[76,84,86,100,117,118],compon:[84,100,109,111,118],componentarchitectur:20,comprehens:[108,110],comput:[83,85,104,110,118],computeres:106,concaten:[108,117],concentr:109,concept:[12,64,66],conceptu:[15,76,110,115],conclud:66,concret:109,concurr:93,cond2:93,cond:93,condit:[4,93,104,110,115],condition:[64,104],conditionexpr:4,conf:37,confid:83,config:[111,118],config_load:100,configpars:[18,111,117],configparsercasesensit:18,configstr:18,configur:[86,93,100,111,118],confirm:109,conflict:[72,117],conform:93,confus:[20,72,93,103,108,110],conjunct:[36,93],connect:93,consecut:10,consid:[15,65,106,109,110,111,115,117],consider:72,consist:[72,93,100,106,110,117],constant:[4,20,84,85,93,105,110,118],construct:[78,93,100,104,105,107,115,117,118],constructor:[20,85,87,93,106,110,111,115],constuctor:93,consult:[20,118],consum:76,contain:[1,4,27,37,42,54,66,72,76,78,79,83,84,93,96,99,100,103,104,106,107,108,109,110,111,114,115,117],content:[1,4,20,37,43,46,47,48,65,66,67,78,85,93,100,105,108,109,111,114,115,117,118],context1:100,context:[7,66,93,100,118],continu:[37,85,93,107,110],continuedirect:37,contrast:[106,108],contrib:93,contribut:[42,45,63,79,91,93,107,111,117],contributor:91,contribyt:111,control:[3,21,37,76,77,83,91,93,100,107,108,109,110,115,117,118],conveni:[83,93,104,111,117,118],convent:[72,106,110,115],convers:[20,118],convert:[18,20,37,69,72,84,93,105,108,111,115,118],converteol:37,converttmplpathtomodulenam:[0,62],convertversionstringtotupl:59,convstringtonum:18,cookbook:[94,112],cookbooktempl:94,cooki:[20,93,107,114,117],copi:[18,56,57,74,83,93,96,105,108,109,111,114,115,117],copyright:[93,96,111],copyset:18,core:[20,39,83,86,91,93,105,109,110,118],corefil:63,corner:12,correct:[10,83,93,100,111,118],correctli:[93,108],correspond:[10,15,19,93,110,118],corrspond:69,cos:[37,108],costa:110,could:[1,12,15,20,37,66,69,73,75,76,95,100,102,110,117],couldn:[72,76],count:[44,75,104,110],count_charact:100,count_paragraph:100,counter:[37,100,104],counterpart:115,countri:[108,110,115],coupl:[76,114,117],courier:110,cours:[15,86,105,109,110,111,117],courtesi:93,cover:[105,110],covers:[20,118],covert:80,covertoper:115,cpu:[115,117],craig:109,creat:[1,15,20,27,41,46,54,65,66,67,69,72,83,85,88,93,96,100,104,105,106,108,109,110,114,115,117,118],create_error:41,create_failur:41,create_success:41,createandcompil:40,createmethod:20,creation:93,creativ:109,crippl:72,criteria:115,croc:80,croi:63,cross:100,crumb:[46,111],crumbcssclass:46,crumblink:46,crumbseper:46,crumbtermin:46,css:10,cstringio:93,cumbersom:76,curli:[78,108],current:[1,4,12,20,26,35,41,43,44,46,53,66,78,80,84,85,88,93,104,105,111,115,117,118],current_pyston:34,currentclass:93,currenttim:[69,70,73,75,78,84,85],currenturl:[46,111],currentyr:111,curv:100,cust:115,custom:[15,20,43,46,88,93,100,105,109,110,114,115],customgetattrclass:36,customiz:102,cut:[10,93],cvs:83,cycl:[20,93,95,117],czajkowski:[93,117],dai:[20,93,115,118],damnsimpl:[63,118],dandi:108,danga:[1,93],danger:93,daniel:93,darkest:12,darren:63,das:63,data:[1,9,15,20,31,37,91,93,100,109,110,111,118],databas:[20,108,115,117,118],date:[20,69,76,86,90,93,100,103,117],date_format:100,datetim:[100,108],daycheckbox:[20,118],deadlock:93,deal:[10,20,69,93,117,118],dealt:[93,104],debogdano:93,debug:[2,3,20,76,93,102,110,111,115,116,117,118],debuglev:37,dec:[53,93],decemb:93,decid:[72,76],decim:44,deciph:4,decis:[77,117],declar:[66,77,91,93,107,110],decod:56,decor:[4,34,36,37,93,96,99],decoratordirect:37,decoratorexpr:4,decrement:53,dedent:4,deep:[18,117],deepcopi:18,deepcopyset:18,deepest:12,deepli:[37,84,108,117],def:[1,20,37,43,66,70,73,75,84,85,93,94,95,96,99,102,104,107,110,111,114,115,117,118],default_compiler_set:20,defaultfloat:[20,118],defaultint:[20,118],defaulttest:41,defaulttestnamespac:[83,84],defdirect:37,defdocstrmsg:116,defens:93,defer:104,defin:[1,20,36,43,46,83,85,91,93,94,102,108,110,111,115,118],definetemplateblock:93,definit:[20,79,80,82,83,85,93,99,100,101,105,106,108,109,111,114,115,117,118],defmacro:93,defmacrodirect:37,defval:4,del:[69,93,107,110],delai:76,delayedcompil:93,delayedstart:93,deleg:[77,93],delet:[2,20,27,83,93,105,108,110,111,117,118],delimet:[100,106,110],delimit:[37,85,93,108,110],deliveri:[20,118],demand:93,demet:[15,110],demonstr:[102,115],denman:76,denni:93,denot:[20,94],depend:[10,44,84,85,93,105,108,110,111,115,117,118],depeyrot:83,deploy:76,deprec:7,deprecationwarn:93,depreci:[105,117],depth:[18,37,46,93,108,111],dequ:93,deriv:[94,108],descend:108,describ:[20,72,76,79,83,85,93,102,105,108,111,115,118],descript:[20,46,88,99,109,111],deserv:117,design:[15,18,66,77,91,94,100,109,110,111,118],desir:[20,108,110,117,118],destin:[3,27,93],destroi:76,detail:[0,4,9,12,20,55,62,93,100,102,104,105,106,109,111,115,117,118],detect:[15,110],determin:[15,69,110,118],develop:[0,64,66,79,83,84,85,86,91,93,96,98,100,101,102,109,111,118],devhom:20,devsit:20,devtools_en:83,diagnost:107,dic:[20,54,118],dick:91,dict1:18,dict2:18,dict:[20,31,84,93,100,104,110,111,118],dict_typ:18,dictat:108,dictionari:[0,1,9,12,18,20,37,54,69,76,83,93,100,104,111,117,118],dicttempl:93,did:[72,76,93,104,110],didn:[20,76,78,82,83,93,102,117,118],die:54,diehl:109,diff:83,differ:[15,20,66,69,75,80,83,84,85,93,99,100,101,102,104,105,106,108,110,111,114,115,116,117,118],difficult:117,difficulti:109,diffutil:83,digit:[106,110],dile:80,dir:[9,20,93],direct:[1,4,10,12,20,36,37,53,66,69,72,76,77,79,83,85,86,93,94,95,99,100,101,102,104,106,107,109,111,115,116,117,118],directiveanalyz:[0,62,93],directiveendtoken:[93,116],directivekei:93,directivenamesandpars:93,directivestarttoken:[37,93,116],directivetoken:20,directli:[7,11,53,78,85,93,100,106,108,110,111],directori:[9,12,27,41,42,54,83,92,93,103,105,106,107,109,111,114],directorystructur:118,dirnam:93,dirown:[11,12],disabl:[15,28,86,93,110],disableddirect:93,disableddirectivehook:93,disallow:86,disappear:72,discard:[20,41,93,110,115,117],discov:72,discuss:[66,76,83,85,93,100,105,106,108,112,118],displai:[15,34,44,57,76,100,104,109,110,111,115,118],distinct:93,distinguish:[20,72,93,100,109,110,118],distribut:[20,79,83,93,103,105,109,115],distro:93,distutil:[83,93,105],ditto:118,divert:69,divid:[73,93],divis:[20,93],django:[0,62,93],doc:[12,70,83,84,92,93,99,100,111,112,117],docstr:[4,9,12,18,20,55,69,93,100,107,111,118],doctr:99,doctre:21,doctyp:111,document:[0,12,20,65,66,67,72,79,83,91,92,93,94,96,97,99,100,102,109,110,111,112,115,116,117,118],doe:[10,12,27,54,56,72,76,78,83,86,93,94,100,101,104,105,106,108,109,110,111,114,115,117,118],doesn:[1,2,4,20,44,69,72,83,93,102,105,110,115,117],doeveryth:115,doimport:12,doing:[100,108,111,114,115,117],dollar:[37,107,115],domain:[20,65,66,67,83,91,93,118],don:[3,4,18,20,27,36,37,41,44,53,54,72,74,85,93,101,104,105,108,110,114,115,117,118],done:[18,36,75,86,117],doo:[31,37,84],dooutput:78,dosometh:93,dot:[4,15,84,93,100,106,110,117,118],doubl:[103,111,118],doubt:110,doug:63,down:[73,76,88,95,108,110],download:[10,91,100,105,118],dozen:118,draft:[66,67],dramat:[90,91],drawback:72,dread:109,drew:76,drop:1,dropdown:100,dtml:[76,107],dualglob:93,dubrovski:93,duc:80,ducki:80,due:[66,72,93,115],dummi:[4,7,85,108,118],dummyclass:[31,37,84],dummyclassgetattrrais:31,dummyfunc:[31,37,84],dummyrespons:[7,93],dummyresponsefailur:7,dummyservlet:117,dummytran:[70,73,75,78,84,85,93],dummytransact:[0,62,69,73,75,78,84,85,93],dumpleton:109,duplic:[65,100,109],durationerror:34,dure:[76,93,117],duti:111,dutifulli:108,dynam:[20,72,91,93,95,108,109,111,114,115,117],dynamicallycompiledcheetahtempl:[4,5,20,36,93],dynamicmethodcompilationtest:34,dynamicsimplecompilationtest:34,dynamictemplateperformancetest:34,each:[1,9,10,12,15,20,27,38,46,54,69,72,73,75,76,79,80,84,85,93,100,104,106,108,109,110,111,115,117,118],earli:[117,118],earlier:[20,110,117],earth:105,easi:[15,72,76,91,96,100,101,109,110,115,118],easier:[15,20,72,91,93,100,101,105,109,113,115,117,118],easili:[94,95,118],eat:[37,115],eatdirect:5,eatencod:93,echo:[8,37,76,93,100,102,104,107,110,117],echodirect:37,echuck:63,edg:1,edit:[101,108,109,111],editor:[72,91,93,103,107,109],edmund:[76,93,109,117,118],edu:93,eeni:78,effect:[4,36,85,94,96,100,108,110,117,118],effici:[4,20,56,57,111],effort:[91,109,118],egenix:[100,108],egg:[90,92,93],eight:44,either:[15,20,83,88,93,96,102,105,106,109,110,111,114,117,118],eklitzk:93,elabor:[110,117],element:[20,54,93,100],elif:[20,37,69,75,93,100,104,110,118],elimin:69,elisp:93,eloranta:63,els:[4,20,37,66,69,73,75,78,80,83,84,85,93,100,102,106,107,108,109,110,115,117,118],elsewher:108,emac:101,email:[0,93,100,104,109],emb:[100,118],embed:[84,93,100,115],embperl:107,emded:100,emit:114,emphasi:109,empti:[20,37,45,93,100,104,111,114,115,118],emptycrumb:46,emptystr:[31,37],emptytempl:37,emul:[12,84,100,117],enabl:[66,93,102],enableddirect:93,encapsul:114,enclos:[37,84,93,99,110,115,117],enclosur:[37,93],encod:[4,10,19,37,40,57,66,93,100,110,113,115],encodeunicod:[10,93],encodeunicodecompattest:40,encodingdirect:37,encodingsearch:19,encount:[72,76,109,117],encourag:[88,91,109,111],encrypt:93,end:[1,4,16,20,27,37,46,47,48,66,69,72,73,75,76,78,80,84,85,91,93,96,99,100,101,106,107,109,110,111,114,115,116,117,118],endcacheregion:4,endcallregion:4,endcaptureregion:4,enddirectivenamesandhandl:93,endian:93,endpo:19,endtoken:93,energi:[109,117],enforc:93,engelhart:93,engin:[0,70,76,84,85,93,107,109,110],enhanc:[12,79,91],enough:[39,83,85,100,111,117],ensur:[93,100,108,109,111,115],entir:[20,72,93,100,108,110,117,118],entireti:10,entiti:[10,100,108,115],entri:[75,111,118],enumer:[65,93],env:[69,70,80,84,85,92,93],environ:[20,37,76,92,93,95,110,112,117],environment:[114,115,117,118],envvar:117,eof:37,eol:[37,93,110],eolslurptoken:[37,93],equal:[104,106,110],equiv:93,equival:[15,83,93,100,104,105,108,110,115,117],equval:100,erad:72,eric:93,erni:93,errmsg:54,erron:41,error:[2,3,4,8,18,19,20,21,27,41,54,77,88,91,93,105,107,109,110,111,117,118],errorcatch:[0,20,26,35,37,43,62,84,85,93,107,110,117],errorcatcherdirect:37,errorcatchernam:4,errorcheck:93,errorhandl:[73,102,110,111],errormessag:3,errorstempl:117,erwin:93,escap:[10,16,36,37,80,84,93,99,100,110,115,117],escaper:16,escaperegexchar:16,escapt:37,esoter:83,especi:[83,95,117,118],essenti:[85,108,110,117],establish:[105,118],esterbrook:[63,76,84,85,93,109],etc:[9,12,20,66,76,84,86,93,96,105,107,108,109,110,115,117,118],etext:108,euqival:100,eval:[72,73,100],evalu:[93,104,110,115,118],evalut:110,evan:[63,93,109],even:[0,12,15,44,69,76,93,100,101,105,109,110,114,117,118],even_i:44,evenrow:100,ever:[85,110],everi:[10,54,69,72,79,84,91,93,100,104,106,108,111,115,117,118],everybodi:100,everyon:88,everyth:[20,41,66,83,109,115,117],everytim:93,everywher:66,exact:[100,102],exactli:[78,93,106,108,110,117],examin:85,exampl:[1,4,15,20,46,66,69,72,80,84,91,93,94,95,96,100,104,105,107,108,111,115,116,117],exc:54,exc_info:73,exc_val:[8,73,102],except:[2,3,4,7,8,15,16,18,19,20,21,31,34,36,37,39,44,54,55,66,69,72,73,83,84,85,93,105,107,110,111,117,118],excit:117,exclus:[66,93],exec:[20,117],execut:[20,83,93,95,102,104,106,107,108,109,110,114,116,118],executecal:[4,15],exist:[1,20,27,54,72,73,83,84,85,91,93,100,109,114,115,117,118],exit:[3,41,93,104],expand:[69,84,93],expans:20,expect:[20,27,37,39,66,69,78,83,93,109,110,111,117,118],expectedoutput:[37,83],expectedoutputsubstr:27,expectedstatu:27,expecterror:27,expens:[72,117],experi:[15,88,109,110],experiment:[111,115],expir:104,explain:[15,20,93,94,106,109,110,117],explan:99,explanat:12,explicit:[37,84,93,106],explicitli:[93,94,108,110,115,118],explictli:93,exploit:83,expos:64,expr1:115,expr2:115,expr3:115,expr:[4,37,93,100,104,108,110,115],exprcompon:4,express:[16,37,72,75,76,84,93,100,104,106,107,108,110,117],expressionfilt:93,expressionfilterhook:93,expressli:100,exprtyp:93,expwebwar:118,extend:[20,37,43,79,91,92,93,94,99,100,107,109,110,111,114,117,118],extendsdirect:37,extens:[47,48,76,90,91,117,118],extensionstoignor:118,extent:93,extern:[93,108,115,117,118],extmsg:16,extra:[37,80,93,104,110,114,117,118],extra_vars_func:[47,48],extract:[76,100,108,114],extraimportstat:[4,5],extraurlpath:118,extrem:[15,20,105,110,117],eymard:93,face:[88,93],facil:[18,93,111],facilit:111,fact:[37,78,100,108],fail:[20,37,41,83,93,102,105,118],failfast:41,failur:[10,41,93,105,118],failureexcept:31,fairli:[83,93],fake:[93,118],fall:[15,76,93,105],fals:[2,3,4,15,18,19,20,27,34,37,47,48,69,70,73,75,78,84,85,93,100,104,109,110,114,115,117,118],falseexpr:4,familiar:[73,85,94],faq:[69,85,109,117],faqw:85,far:[15,76,84,88,100,110],fashion:[37,66,93,94],fast:[10,109],faster:[15,90,93,100,105,109,117],favor:93,featur:[69,72,76,79,83,84,88,92,93,101,105,107,108,109,110,111,115,117,118],feb:93,februari:93,fed:[4,93],feedback:76,feel:[91,110,111,118],fetch:100,fetchurl:100,few:[20,37,76,84,85,93,94,100,118],fewer:117,field:[20,44,93,109,110,117,118],fieldstorag:93,fifti:44,fig:96,figur:[69,72,94,95,96],fil:80,file:[3,4,5,6,9,11,12,18,20,26,27,35,36,37,41,43,46,47,48,54,69,70,73,76,77,79,80,84,85,86,91,92,93,95,99,100,103,106,107,108,109,110,111,114,115,117,118],filecont:9,filefind:9,filenam:[4,6,9,19,20,47,48,85,93,111,117,118],filename_expr:115,filerequir:83,filespec:93,filesystem:[12,93,117,118],fileutil:[0,62,107],fill:[3,27,45,72,74,76,77,79,85,86,93,96,100,102,105,106,108,109,110,111,114,115,116,117,118],filter:[0,9,20,24,26,35,36,37,43,62,69,73,75,78,84,85,91,93,100,107,110,117],filter_class_nam:115,filterarg:4,filterdir:9,filterdirect:37,filternam:80,filterslib:[20,26,35,43,115],filtertest:34,find:[1,9,19,83,93,100,104,105,109,110,111,117,118],findandreplac:9,findbol:19,findeol:19,findfil:9,fine:[76,83,93,105,108,110,111],finish:[85,93,106,111,117],first:[20,36,44,69,72,76,78,79,83,84,85,88,93,100,101,102,105,106,108,109,110,115,117,118],firstnam:[100,104,109],firstvalu:44,fit:[83,84,85,117,118],five:115,fix:[83,88,92,93,109,110],flag:[20,85,93,118],flake8:92,flat:[27,75,93,100,104],flatrecursecollis:27,fledg:100,flesh:111,flexibl:[0,20,72,91,93,100,105,109,115,118],flintston:105,flow:[76,77,91,100,107,109,110,115],flowcontrol:[75,104,115],flush:[7,117],fly:106,fname:110,fnm:12,follow:[1,15,20,27,31,36,37,72,83,84,85,88,93,99,102,104,105,106,108,109,110,111,115,117,118],font:115,foo:[20,37,66,84,93,100,110],foofoo:100,footer:[93,96],fopen:20,forbiddendirect:16,forbiddenexpress:16,forbiddensyntax:16,fordirect:37,foreach:100,forev:[42,115],forget:[69,75,114],forgot:117,forgotten:93,fork:[91,93],form:[0,15,20,37,45,75,76,93,99,102,107,109,110,111,114,115],format:[3,41,47,48,76,91,93,100,109,111,113,115,117,118],formatmetatag:111,formatt:93,former:72,formula:84,forum:118,found:[9,12,15,20,34,37,53,73,88,93,102,105,106,108,110,111,117,118],four:[85,100],fprintfmessag:3,fqname:12,fragil:72,fragment:[47,48],frame:[4,15,93],framework:[0,2,20,39,64,91,93,100,102,107,108,109,111],framwork:93,franz:109,fred:105,free:[91,111,117],freebsd:105,freeli:[100,117],frequent:[69,85,115,117,118],fri:70,friendli:[45,85,93,101,109,111],frogqueri:100,from:[4,10,12,15,18,20,26,31,33,35,36,37,40,41,43,46,66,69,72,73,75,76,83,84,85,88,89,90,91,92,93,95,96,99,100,104,105,107,109,110,111,114,116,117,118],fromlist:12,front:[18,109],frozen:12,frozenimportdirector:12,frustrat:[88,109],full:[4,55,91,93,100,109],fulli:[91,109],fullpath:9,fun:80,func2:[93,110],func3:110,func:[20,31,37,84,93,110,115],functhatrais:31,functionarg:115,functioncal:115,functionnam:4,funformkit:[100,118],further:[15,20,46,95,100,108,110],furthermor:100,futur:[7,20,64,69,83,86,93,100,111,115,116],gain:95,gajda:93,game:0,gape:93,garbag:37,gave:76,gazett:114,geiger:109,geir:109,gelato:76,gen:93,gencacheinfo:4,gencacheinfofromarglist:4,gencheetahvar:4,genclasscod:37,gener:[0,1,4,9,12,20,36,66,69,70,72,73,75,76,78,79,80,82,83,84,85,91,93,95,96,99,105,106,107,108,109,110,111,114,116,117,118],generatedclasscod:20,generatedmodulecod:[20,84],generatedpycod:20,genmodulecod:37,gennamemappervar:[4,93],genparsererrorfrompythonexcept:20,genplainvar:4,gentempl:84,gentimeinterv:4,genutil:[4,93],geoff:109,get:[2,12,18,20,31,37,38,43,69,73,74,76,84,86,90,91,93,100,104,106,107,108,110,111,114,117,118],get_suffix:12,getallvalu:[20,118],getarglist:16,getarticl:1,getarticleid:1,getattr:[73,80,85,95,117],getattrexcept:36,getattrtest:36,getbundl:3,getc:19,getcacheitem:1,getcacheregion:20,getcustom:[15,110],getdata:1,getdescr:12,getexpirytim:1,getexpress:93,getfilecont:[20,100],getfilestat:9,getfoo:108,getlin:19,getmethod:37,getmod:[11,12],getmodulecod:4,getmoduleencod:4,getmtim:[70,73,75,78,84,85],getnamechunk:93,getnonwhitespac:19,getparam:37,getpathext:12,getrefreshtim:1,getrowcol:19,getrowcollin:19,getsuffix:12,gettemplateclass:93,gettext:[4,84,93,100,107],gettextiledcont:[20,93],gettexttoken:117,gettingstart:[105,109,118],gettyp:37,getunknown:93,getvalu:[7,69,73,75,78,84,85,100],getvar:[20,37,93,100,110,117],getwhitespac:19,gill:83,git:88,github:[0,88,90,109,112,118],give:[46,69,80,85,86,91,93,100,107,108,114,117,118],given:[20,37,41,56,57],glob:[9,111],global:[4,12,20,37,73,80,83,84,85,93,108,110,115,117,118],globalsetvar:[73,75,78,84,85],globpattern:9,glossari:106,glue:108,gmail:[63,93],gmtime:96,gnuwin32:83,goal:[72,117],gobbl:[19,37,93,110],gobblewhitespacearoundmultilinecom:93,goe:[10,100,109],going:[76,93,118],gone:[93,104],good:[15,45,88,102,110,111],goodi:[93,117,118],googl:[15,63,93,96,103,110],gordon:12,got:[76,93,111],gotobookmark:19,gotten:12,govern:106,grace:93,gracefulli:[41,83],gradual:109,graham:[93,109],grammar:77,grandkid:27,grandpar:111,graphic:[91,109,118],great:[76,93,117],greater:[53,118],greet:[85,109],greg:[93,117],gregori:93,grei:100,grew:109,grok:[4,93],ground:66,group:[16,109,117],guarante:[42,111],guess:[10,101],guess_lex:10,guid:[20,72,83,85,91,93,106,108,110,112],guidelin:[64,93],gutenberg:108,hack:[12,83,93],had:[10,72,76,93],hadn:109,hahaha:73,haigh:63,hairi:91,half:[93,118],hall:[93,109],halt:102,hand:[20,117,118],handi:[18,93],handl:[1,20,37,66,72,77,85,91,93,107,108,109,111,114,117,118],handlei18n:93,handler:[93,110],handlerforextendsdirect:93,handlewsbeforedirect:4,happen:[20,76,80,85,88,105,109,110,111,115,117],happi:91,hard:[72,76,100,108,109,110,117],hardcod:117,harder:[69,101,117],harmless:4,harri:91,has:[10,15,18,46,65,66,67,69,72,76,78,83,84,85,86,93,100,101,102,104,105,106,108,109,110,111,112,115,117,118],has_lots_of_condit:110,hasattr:83,hasbookmark:19,hascooki:118,hasexpir:1,hasfield:118,hash:[37,93,94,99,110],hashdict:20,hashlib:66,hashlist:20,hashtabl:100,haskei:15,hasset:18,hasvalu:118,hasvar:[20,93,117],hat:40,have:[2,12,15,20,53,63,66,72,73,76,79,80,83,84,85,86,88,93,95,99,100,103,104,105,106,107,108,109,110,111,114,115,118],haven:[105,108,109,117],head:[95,105,108,109,111,115],header:[4,10,43,93,107,111,114],hear:117,heavi:66,hei:[102,110],height:[20,111,118],held:109,hell:76,hello:[20,66,84,85,93,95,105,109],help:[3,20,83,86,93,94,99,100,101,105,109,110,114,117,118],helper:[55,83,108,118],henc:117,her:118,here:[12,15,20,42,65,69,76,80,84,85,86,88,93,99,100,102,104,105,108,109,111,114,115,116,117,118],hereaft:66,hex:[100,110],hexdigest:66,hidden:[109,118],hide:[20,45,111],hierarch:118,hierarchi:[46,96,105,111,118],high:83,higher:110,highest:108,highli:[91,109],highlight:[10,29,93,101],his:[53,76,93],histori:77,hit:93,hiya:105,hmm:[78,111],hola:110,holder:1,hole:93,home:[20,26,35,43,46,105,111,112],homepag:[0,46],hood:[20,93,109],hook:[9,11,12,20,86,93,99],hope:109,host:[88,118],hour:[76,115],housekeep:105,how:[4,20,37,44,66,69,71,72,74,76,79,81,82,83,85,91,101,103,104,105,107,108,110,111,116,117,118],howel:112,howev:[86,93,96,100,101,104,108,110,111,115,117,118],howwork:[105,109,110,118],href:[100,104,109],htm:[83,112],html:[10,12,20,21,23,43,46,47,48,56,57,72,80,83,84,91,93,95,100,101,105,107,108,111,112,115,117,118],html_option:100,html_select_d:100,html_select_tim:100,htmldecod:[0,52,93],htmlencod:[0,52,56,93],htmltag:111,http:[0,1,10,12,20,34,40,83,84,85,88,93,100,108,109,111,112,114,115,117,118],http_equiv:93,httprequest:118,httpservlet:[20,118],human:[106,110,118],hundr:93,huss:93,hybrid:118,hyperlink:[111,115],hyphen:[104,118],i18n:[0,13,20,93],i18ndirect:37,ian:[45,63,76,84,85,93,109,111],ianbick:63,ibm:112,icon:93,idea:[20,76,88,100,109,115],ident:[69,85,93,100,104,108,110,118],identifi:[15,37,101,106,110],idiot:73,idir:27,idirflatrecursecollis:27,idirodirrecurs:27,idirrecurs:27,idontexist:102,iexist:102,ifdirect:37,ignor:[20,41,80,93,108,110,114,116,117,118],ignorebasenam:9,ignoredir:9,illeg:54,illustr:[104,109],imag:111,imagemagick:111,imagin:101,img:109,imgtag:111,immedi:[93,104,108,117,118],immun:111,impact:[86,102],implemen:[18,93],implement:[0,1,20,43,56,57,62,69,72,76,86,93,95,100,104,106,107,109,110,111,114,115,118],implicit:108,implicitli:[78,94,108,110],importantexamplecas:37,importdirect:37,importdirector:12,importedvarnam:4,importerror:[10,66,118],importhook:[0,12,62,93],importmanag:[0,11,62],importset:111,importstat:4,imposs:72,improv:[91,93],impstat:4,inaccess:109,inadvert:117,inc:[53,93,96],incant:72,includ:[15,20,37,42,83,84,88,91,93,99,100,104,106,107,108,110,114,117,118],include_php:100,includedirect:37,includefilenam:[37,115],includefrom:[4,80],includeid:[80,93],includerawexprinfilterarg:93,includeunderscor:4,incompat:111,inconsist:117,incorpor:[91,111],incorrectli:108,incorrig:117,increment:108,indent:[0,4,37,46,52,83,85,93,100,104,107,110,111,113,117],indent_dir:53,indentprocessor:53,independ:93,index:[4,44,90,91,96,100,112,118],indexformat:44,indexlog:108,indic:[84,93,118],indirect:83,individu:[10,100],ined:93,infil:[18,117],infinit:[93,104],influenc:85,info:[47,48,93,118],inform:[4,15,20,27,69,84,85,88,93,100,105,106,109,110,111,117,118],infrastructur:83,infrequ:115,ing:37,ingham:92,inherit:[20,43,77,79,83,84,89,91,92,93,105,107,110,111,114,115,117],inheritanceetc:[78,100,106,108,117,118],ini:[100,111,117],initi:[20,40,85,93,107,108,117],initialmethodcom:4,inlin:[28,36,38,66,93,99],inlineimporttest:36,inlinespanishtest:40,inner:108,innerblock1:108,innerblock2:108,innermost:84,input:[10,20,37,84,85,93,100,105,107,109,114,115,117],inputencod:37,inquiri:117,inquirytempl:117,insert:[4,20,93,100,101,108,117,118],insertlin:93,insid:[20,66,69,80,83,84,93,99,100,102,104,105,108,109,110,115,116,117,118],insignific:105,inspir:[69,109,110,115],instal:[10,11,12,83,90,92,93,107,109,112,117],install_eol:37,instanc:[1,4,9,15,19,20,41,69,72,73,75,85,93,96,100,104,105,106,108,110,111,115,117,118],instancevar1:31,instantan:117,instanti:[72,85,93,96,105,117,118],instead:[4,10,20,37,65,69,75,76,78,84,93,94,100,104,105,106,108,110,111,114,115,117,118],instruct:[77,91,93,106,107,110,118],insul:111,intact:[10,93],integ:[20,93,118],integr:[91,100,109,118],intellig:66,intend:[10,94,110,111,117],intens:115,intent:[93,108],interact:[99,105],interchang:72,interest:[76,85,100],interfac:[21,91,93,105,109,110],interfer:110,intermedi:[20,79,108,110],intermix:118,intern:[20,79,93,110,117,118],internation:[84,117],internet:[100,118],interoper:94,interpol:[76,115],interpret:[20,93,95,101,115,117],interrel:74,interspers:110,interv:[69,110,115],intn:37,intra:93,intrins:72,introduc:[36,66,85,93,94,104,105],introduct:[72,77,89,93,100,101,107],introspect:[4,93],invalid:[16,37,69,75,85,93,109,115],invent:101,invers:56,invok:[100,106,108,109,115],involv:[91,93,118],iptabl:93,irix:105,iron:[20,44],is_builtin:12,is_frozen:12,isbuiltin:12,iscgi:[43,93,114],isclassmethod:4,iscontrolledbywebkit:[93,114],isdbupd:[69,115],isdir:[9,12],iserrorcatcheron:4,isfrozen:12,isinst:93,isklass:4,islinecleartopo:19,isn:[15,37,97,110,115],isnew:1,isnonneg:44,isnotnon:44,isnumer:44,israw:4,isrunningfromwebkit:93,isstaticmethod:4,issu:[0,10,36,66,72,88,91,93,109,112,117],iswebwareinstal:93,ital:110,item0:84,item1:84,item2:84,item:[1,15,20,37,44,69,83,93,100,104,110,111,115,117,118],iter:[34,93,100,104,111],its:[0,9,10,20,44,69,72,73,76,85,91,93,100,102,103,104,105,106,108,109,110,111,115,117,118],itself:[42,80,85,91,93,94,108,109,110,117],jai:109,jakarta:[93,100,112],jame:[63,75],jan:93,januari:[69,76],java:[0,76,100,109,110,112,115,118],javascript:[100,111],javascripttag:111,jbq:[63,93],jbq_utf8_test1:40,jbq_utf8_test2:40,jbq_utf8_test3:40,jbq_utf8_test4:40,jbq_utf8_test5:40,jbq_utf8_test6:40,jbq_utf8_test7:40,jbq_utf8_test8:[40,93],jean:[63,93],jeff:[31,37,93,109],jeremiah:109,jhu:93,jjinux:63,job:118,joe:[75,104],johann:93,johnson:[31,37,93,109],join:[9,10,80,93,100,104,115],jon:63,jonathan:[63,92,93],jpq_utf8_test3:93,jroger:63,jsp:[107,109],juli:93,jump:104,jun:[65,66,67],june:93,jungl:12,junit:41,junk:93,just:[15,20,69,73,76,82,85,88,91,93,99,100,101,104,105,108,110,111,114,115,117,118],jython:93,karmix0:[63,93],karpierz:[63,92],kattner:109,kde:93,keen:108,keep:[20,53,76,83,90,93,114,115,117,118],keepreftogeneratedcod:20,kei:[1,2,4,15,18,20,37,54,69,76,84,93,94,100,104,106,110,111,116,117],kept:93,kerr:[15,110],keyerror:[2,8,93],keystrok:72,keyword:[4,6,12,20,37,54,69,80,93,102,110,111,115],kin:104,kind:[84,93,117],kindli:88,kiril:93,klass:[20,93],klitzk:[63,93],kludg:[20,93],knight:63,know:[20,69,76,105,109,110,111,115,117,118],knowledg:[79,109],known:[15,66,105,108,110],koi8:[43,114],kulezj:93,kumar:63,kuratomi:93,kurt:63,kuzelj:[53,93,109],kwarg:[5,6,7,10,27,37,41],kws:20,lack:[40,100],lakshmi:63,lambda:[84,93],lang:[20,93,112],languag:[64,72,76,79,91,93,94,100,103,106,107,109,117],larg:[34,53,76,93,103,108,109,110,118],larger:100,larri:[78,108],last:[1,15,20,36,44,70,73,78,80,84,85,93,100,104,108,109,110],lastvalu:44,late:76,latebind:72,later:[72,76,80,86,93,100,102,108,115,117,118],latest:115,latex:[93,109,115],latin:93,latter:[72,115],launch:118,law:[15,110],layout:[12,93],lazi:[1,110],ldelim:100,lead:[10,37,75,76,91,93,100,108,109,117],leaf:[108,118],leak:93,learn:[72,76,79,100,109,111],least:[1,20,83,84,94,101,110,114,118],leav:[0,20,44,69,93,102,117,118],led:76,left:[15,84,93,106,110,115,117],leftmost:84,legal:110,legalkeyword:[54,111],legalkw:93,legitim:[47,48],len:[37,100],length:[44,80,108,115],lengthi:93,less:[12,53,93,109,111,117],lesson:72,let:[72,75,80,84,105,108,111,115,117,118],letter:[15,44,105,106,110],leve:53,level:[12,27,28,37,53,66,84,93,100,106,108,110,115],levelstack:53,levestack:53,lexer:[10,16,81],liam:118,lian:[76,93,109,117],lib64:36,lib:[73,84,93,105,117,118],librari:[12,76,83,91,93,100,105,107,108,118],licens:[20,93],lie:[4,118],lied:80,lies:[75,99],life:117,like:[9,11,15,20,41,56,66,69,72,73,76,80,83,84,85,86,91,93,94,95,99,100,101,102,108,109,110,111,114,115,117,118],likewis:[37,104,108],limit:[20,93,95,109,110,115],line:[4,7,10,20,21,27,36,37,66,69,70,73,75,78,80,83,84,85,91,93,99,100,104,105,106,107,108,109,110,112,114,118],line_sep:53,linecol:[4,8,73,93,102],lineno:16,linenum:19,ling:10,link:[91,107,111],linter:92,linux:[10,92,105,114],linuxgazett:114,linuxjourn:93,lis:44,lisp:93,list:[4,8,9,20,27,37,44,46,54,72,76,79,83,84,86,93,100,102,104,105,106,108,109,110,111,112,115,116,117,118],list_:54,listdir:9,listerror:[8,102],listinfo:112,listtest:27,liter:[72,76,80,84,85,100,108,110,115],littl:[3,12,18,69,76,83,93,96,117],live:[12,66,76,117,118],load:[12,20,95],load_modul:12,load_templ:[47,48],load_template_fil:[47,48],load_template_modul:[47,48],load_template_str:[47,48],loadco:12,loader:41,loadingsit:[47,48],loadmod:12,loadmodul:40,local:[4,12,20,36,37,66,69,73,75,78,80,85,93,104,106,108,109,110,111,117,118],localsdict:73,locat:[46,66,104,105,108,111,114,117],locate_cheetah:27,lock:[93,117],log:[20,110,117,118],logic:[76,83,100,108,109,118],login:105,longcompile_compilersettingstest:34,longcompileandrun:34,longcompiletest:34,longer:[37,93,98,111,115,117],longmacro:93,longplacehold:72,longwind:93,look:[15,19,20,53,66,69,72,74,79,81,83,84,85,87,93,95,100,101,106,109,110,111,115,117,118],lookup:[31,69,72,80,84,85,89,93,100,106,110,115,117],lookuperror:[15,93],loop:[31,34,37,93,99,100,104,110,111,115,117],loos:93,lose:73,lost:[12,111],lot:[37,93,95,100,117,118],lotta:[69,101],love:[104,109],lover:44,low:117,lower:[93,100],lowercas:93,lowest:108,luca:93,lvalu:[106,110],mac:[12,93],macdonald:93,maco:83,macro:[0,62,93],macrobodi:93,macrodirect:93,macromedia:112,macronam:93,made:[12,63,72,83,85,86,93],magic:108,magnusson:109,mai:[7,20,69,72,73,76,83,85,93,95,100,104,105,106,108,109,110,111,114,115,117,118],mail:[76,93,100,105,108,109,111,112,115,117],mailto:[100,104,109],main:[3,5,20,21,27,41,69,70,73,75,78,80,84,85,95,100,101,106,108,110,114,115,118],main_dir:5,main_fil:5,mainclassnam:[4,5],mainli:[87,117],mainmethod:95,mainmethodnam:[4,5,20],maint:88,maintain:[69,76,83,86,91,93,99,100,101,102,106,109,110,111],maintian:[15,110],major:[20,91,92,93],make:[4,7,10,15,20,37,43,53,66,72,76,80,83,84,85,91,93,95,99,101,105,106,108,109,110,111,113,114,115,116,117,118],make_backup:3,makeappworkdir:118,makedir:54,makefil:[93,107,114],maker:[53,104],maketriplequoter:16,malici:117,manag:[15,18,105,110,111,118],mandatori:93,mani:[20,37,72,76,80,84,85,88,93,100,105,108,109,110,111,117,118],manner:118,manti:36,mantis_issue_11_regression_test:36,mantis_issue_21_regression_test:36,mantis_issue_22_regression_test:36,manual:[20,93,100,118],manualoverrid:93,map:[12,15,93,100,110],mapbuiltin:31,mapnam:93,mapper:72,mar:93,marc:63,march:93,marcin:93,margin:[4,10,117],mark:[4,84,93,94,99,108,109,110,114,117],markdown:[10,29,93,105],marker:[76,100,110],markup:[66,91,96],master:[88,91],mat:[75,104],match:[9,19,20,37,41,72,83,93,106,110,111],matchnonwhitespac:19,matchwhitespac:19,math:[37,78,100,108],mathia:[63,92],mathmodul:108,matter:[110,115],matur:107,max:[19,44,110],max_num_pyston:34,maxim:72,maximum:[72,93],maxlen:[10,37,80,115],maxsplit:100,mayb:[16,86,100,111,117],mcmillan:12,md5:66,mean:[20,44,66,72,80,83,84,86,93,95,96,105,106,108,110,114,115,116,117,118],meant:[10,93,96],meantim:118,meanwhil:[76,91],measur:93,mechan:[80,91,93,100,109],median:44,meeni:78,meet:[104,118],mel:63,member:[76,100,109],memcach:[1,2,93],memcachedcachestor:[1,2,93],memori:[1,20,93,95,104,110,115,117,118],memorycachestor:2,mention:[83,105,108,117],menu:[46,111],menubar:46,menucssclass:46,menulink:46,menulist:[46,111],mere:[105,108,115,118],merg:[16,18,88,93,111,117],mergenesteddictionari:18,messag:[3,20,27,54,83,93,105,109,118],messier:[15,110],met:76,meta:[20,93],metadata:93,metapath:12,metatag:111,meth1:[20,31,37,84,93],meth1n:20,meth2:[31,37,84,93],meth3:[31,93],meth:[31,37,84],method1:99,method2:99,method:[2,4,7,10,15,18,20,23,36,37,43,46,55,66,70,73,75,78,79,80,83,84,85,91,93,95,96,99,100,102,104,105,106,107,108,109,110,111,114,115,118],methodbodi:4,methodcompil:[4,37,93],methodcompilerclass:4,methodcompilerclassforinit:4,methoddef:4,methodnam:[4,25,27,28,29,30,31,32,33,34,36,37,38,40,41,117],methodsignatur:4,methwithpercentsigndefaultarg:37,mexico:110,michael:[93,109],michel:100,mid:109,middl:[66,113],might:[45,72,88,93,96,108,110,111,117,118],mightfail:102,mika:63,mike:[20,44,63,76,84,85,93,101,109,111],mikeb:[63,93],mikola:63,mimic:[20,118],min:44,mind:[93,115,117],mindspr:63,minei:78,mini:100,minim:[93,109],minimalist:105,minimum:[115,118],minimum_monkei:100,minor:[92,93],minut:[105,115],mirror:[102,110,114],misc:[0,24,52,93],misccomplexsyntax:37,miscellan:54,miscompil:110,misguidedli:93,misl:37,mismatch:[37,93],miss:[20,54,69,84,93,102,107,111,117,118],misspel:93,mistak:[72,118],mit:20,mix:[20,93,100],mixin:[18,43,83,93,94,117,118],mkdir:54,mkdirswithpyinitfil:54,mock:101,mod:[12,31],mod_python:[20,95],mode:[3,37,93,95,101,105,118],model:[43,65,69,118],modestli:86,modif:[85,93],modifi:[20,54,70,76,79,83,85,93,100,109,110,111,115,117,118],modul:[0,13,22,24,42,47,49,52,62,66,70,76,77,78,83,84,91,93,94,95,99,100,102,103,105,106,108,109,110,111,114,115,117,118],modular:[91,100,109],module_or_object:108,modulecompil:[4,5,93],moduleconst:4,moduledocstr:4,modulefoot:4,moduleglob:20,modulehead:4,modulenam:[4,5,20,40],modulo:[20,93],moe:[78,108],moin:112,moment:[93,100],mondai:[20,118],mondoreport:[0,42,93,100,111],mondoreportdoc:111,mondoreporttest:111,monitor:[93,115],monitorsrcfil:93,monkei:100,monkey_limit:100,monkeypox:63,month:76,mood:91,more:[1,4,9,10,15,20,37,56,57,72,76,77,83,84,85,88,93,100,103,104,105,106,107,109,110,111,112,115,117],more_condit:110,morefilt:115,most:[20,36,66,73,76,83,85,93,94,108,109,110,115,117,118],mostli:[66,117],mountainwebtool:112,move:[72,93,109,111,117],msg:[16,27],msgid:[20,93],mso:20,mtime:93,much:[10,15,20,27,44,72,80,93,100,109,117],muck:20,multi:[9,10,20,37,70,93,99,105,106,107,108,110,115,118],multilin:[37,93,99,117],multilinecommentendtoken:116,multilinecommentstarttoken:116,multilingu:100,multipl:[20,37,69,76,86,92,93,108,110,117,118],multipleinheritancesupport:38,multithread:117,murphi:93,must:[20,36,43,47,48,83,84,88,93,100,105,106,108,110,111,114,115,117,118],mutex:117,mutual:[66,93],myarrai:108,myattr:110,myclass:117,mycontain:93,mycooki:118,mydefault:117,myfield:118,myfilterclass:115,myinstanc:110,mylist:[110,115],mymaxlen:115,mymeth2:108,mymeth3:108,mymeth:108,mymethod:[95,117],mymixin:117,myobject:110,myparsetext:115,myprecompiledtempl:105,mypurepythonclass:108,mypythonclass:[43,114],mysessionvar:118,myset:111,mysql:112,mysubscript:110,mytempl:[20,93,99],mytemplateclasss:20,myvalu:118,myvar:[108,110,116],name:[4,11,12,15,16,18,19,20,31,37,41,63,69,72,76,78,84,85,91,93,100,104,105,106,108,109,110,111,115,117,118],namechunk:[4,16],namedgroup:16,nameerror:[84,85],namemapp:[0,4,20,24,36,37,62,72,73,84,85,90,92,93,100,102,105,106,107,117],namemapper_pur:[0,24],namemapperdict:93,namemapperpart:4,namemappertag:93,namemappertest:[31,32],namesak:109,nameslist:[78,108],namesmulti:[20,118],namespac:[0,20,26,31,35,37,43,78,83,93,100,102,105,106,107,117],namespace2:20,namesplit:12,naoeu:84,napkin:76,natur:[76,115],nautocal:84,navig:111,nbsp:[108,115],ndeepli:84,ndict:84,neat:[3,118],necessari:[4,69,72,83,85,86,88,93,106,107,111,115,117],necessarili:[72,118],need:[1,12,15,20,76,77,81,83,84,86,87,91,93,94,95,96,100,104,108,109,110,111,114,115,117,118],needless:93,neg:[37,39,104],negativeerror:44,neither:100,nest:[18,37,75,76,84,93,100,102,104,108,110,111,115,117],nesteddict:[31,84],nestedfunc:[31,84],nesteditem1:84,nesteditem2:84,net:[20,69,83,100,112,115,118],netus:100,network:93,never:[4,93,100,101,105],nevertheless:[76,117],new_modul:12,newin:37,newlin:[10,37,78,93,104,108,110,114,115],newmod:12,newset:[18,117],newspap:[20,118],newstyl:[12,93],next:[4,16,44,69,76,84,85,88,93,99,104,105,108,110,111,115,117,118],next_batch:44,nextcacheid:4,nextcallregionid:4,nextcaptureregionid:4,nextfilterregionid:4,nextpag:44,nfloat:37,nfunc:84,nfunction:84,ngettext:117,nhello:93,nicetracebacktempl:93,ninetynin:110,nintn:37,nlist:84,nnest:84,no_cach:93,noah:92,nobackup:[27,93],nobject:84,nobl:85,nodefault:18,nodelet:27,non:[15,20,80,91,93,105,107,108,109,110,111,115,118],none:[1,2,3,4,5,7,10,12,15,16,17,18,19,20,23,26,27,31,34,35,37,40,41,43,44,46,47,48,54,70,73,75,78,80,84,85,86,93,104,108,109,110,111,115,117,118],nongroup:16,nonhtml:113,nonnumericinputerror:[20,55,118],nontoken:37,nonzero:27,normal:[20,27,56,69,84,85,93,99,101,102,105,106,115,116,117,118],normand:93,normpath:17,noshad:96,notat:[4,15,84,93,100,106,110,117],note:[4,10,12,15,20,37,72,75,76,83,90,93,95,99,100,104,108,110,111,115,117,118],notfound:[15,20,31,36,73,84,85,93,102,110,111,117],noth:[20,37,45,54,82,93,100,104,108,110,111,114,115,117,118],notic:[15,72,84],notion:94,nov:[44,93],novalu:73,now:[20,37,72,76,93,96,105,108,109,110,111,114,115,117,118],npublic:37,npython:84,nstring:[37,84],nstringn:37,ntemplat:37,ntext:70,nthi:20,nucleu:76,nullstream:41,num:[37,75,93],number:[18,20,44,69,75,80,84,85,93,96,100,102,103,104,105,108,111,115,118],numer:[20,37,93,104,118],numon:37,numtwo:37,nveri:84,obei:[15,110],obj:[7,15,86,93,117],object:[1,2,3,4,7,9,10,14,15,16,17,18,19,20,31,36,37,41,42,45,53,54,69,72,76,79,80,83,84,85,91,93,94,100,106,107,108,109,110,111,112,115,117,118],objectvalu:100,observ:105,obtain:109,obviou:117,obvious:72,occas:118,occur:[36,72,73,76,93,102,106,110,116,117],ocean:75,oct:[31,93],octob:[93,109],odd:[44,76],odd_i:44,ode:80,odir:93,off:[4,10,15,20,34,37,53,66,80,86,93,102,110,117,118],offend:[102,104],offer:[76,91,115],offici:118,offset:19,offshoot:118,often:[69,108,109,112,115],ohmu:63,old:[20,92,93,98,100,117],older:[66,84,92,93,100,117],oldest:118,oldstyl:93,oleg:[63,92],oliveira:93,omit:[108,110,115],ommiss:100,onc:[76,100,102,115,117,118],one:[1,3,9,10,12,20,31,37,53,69,76,80,83,84,85,93,94,99,100,104,105,106,108,109,110,111,114,115,117,118],onefil:27,onefilenoextens:27,onefilewithodir:27,onelineif:[104,115],ones:[93,117],onli:[2,7,15,20,37,53,69,76,78,83,84,85,86,93,95,100,104,105,106,108,109,110,111,115,116,117,118],onto:115,opaqu:[20,93],open:[0,3,20,91,93,100,103,110,117],oper:[76,88,94,100,104,105,108,109,110,111,115,116,117,118],operand:37,opinion:100,oppos:117,opposit:[104,108,115],opt:[3,5,73,105],optik:93,optim:[15,91,93,95,107],option:[3,4,15,20,27,37,47,48,83,93,95,100,105,108,115],optionpars:93,optionstr:18,optionxform:18,optpars:93,order:[15,20,69,75,76,93,95,100,102,105,110,111,115],ordereddict:18,ordinari:[69,72,80,85,106,110,118],org:[0,10,12,20,63,84,85,93,100,108,111,112,117,118],organ:[76,88,118],orient:[15,20,91,94,109,110],orig_tran:69,origin:[20,63,91,93,100,108,114],origlist:44,orphan:44,orr:[20,44,63,76,84,85,93,109,111],orthogon:93,other:[0,7,20,31,37,69,72,76,78,84,85,88,90,91,93,94,95,105,106,107,108,109,110,113,115,117],otherfunc:93,otherhand:88,otherhtml:114,othertip:118,otherwis:[4,18,20,27,54,83,84,85,93,94,108,110,111,115,117,118],ouput:[102,107],our:[20,29,69,72,73,76,84,85,93,101,110,118],out:[0,3,9,10,20,27,37,38,54,69,72,76,77,83,86,93,100,103,104,105,106,108,109,117,118],outdat:93,outer:108,outerblock:108,outlin:[36,64,76],outpt:108,output:[4,10,20,27,36,37,41,43,46,53,69,70,73,75,76,77,78,82,83,84,85,91,93,99,100,101,102,104,105,107,108,109,110,111,118],outputchunk:7,outputencod:37,outputfilt:93,outputrowcolcom:116,outputstr:20,outputtest:[37,83],outputtransform:20,outsid:[66,69,78,85,93,100,105,108,110,111,115],over:[37,75,93,100,109,110,111,117,118],overal:100,overhaul:109,overhead:117,overkil:118,overlap:44,overrid:[18,20,37,43,46,83,93,105,108,110,114,115,116,117,118],overridden:[1,4,20,41,108],overview:[0,62,74,91,107,109],overwrit:[18,83,117],own:[20,43,73,83,93,94,100,105,108,111,114,117,118],owner:[12,93],ownertyp:12,packag:[12,48,62,73,74,83,90,93,105,108,109,111,118],packagenam:12,page1:108,page1log:108,page:[20,23,44,57,72,78,84,85,90,91,93,94,96,101,105,107,108,109,111,112,115,118],pagebreak:44,pagenam:94,pair:[69,76,108,111,115,117],paragraph:[15,105],parallel:[93,100],param:37,paramet:[1,20,69,93,115,117,118],parent1:92,parent2:92,parent:[54,93,100,106,108,111,118],parenthes:[15,75,108,110],parenthesi:110,parentnm:12,parrot:[100,104],pars:[4,20,84,93,100,110,115,116,117],parseerror:[16,93],parseopt:3,parser:[0,4,5,10,14,19,24,62,77,91,93,107,110],parserclass:[4,5],parsercom:4,parserinstruct:[82,116,117],parsetest:37,part:[37,76,83,85,100,102,105,106,108,110,117],parti:[100,107,111,118],partial:[20,37,93,116],particular:[12,83,88,100,101,106,108,109],particularli:[91,93,94,95,109,115],pass:[4,6,10,20,37,44,54,69,78,80,83,84,85,88,93,100,102,105,107,109,110,114,115,117],passdirect:37,past:[93,108],patch:[37,77,88,92,93],path:[3,11,12,17,20,27,37,40,41,47,48,54,66,84,85,93,105,111,117,118],pathimportdirector:12,pathisdir:12,pathlist:12,pathnam:[12,117],pattern:[9,16,20,93,94,111],patternorr:9,paul:109,pdf:93,peek:19,peer:93,pend:[4,110],peopl:[76,91,103,104,109,118],pep:[12,65,93],per:[20,93,117],percentoftot:44,percept:117,perfect:88,perform:[0,4,24,62,72,76,84,86,91,93,102,106,109,118],performancesampl:34,performancetest:34,perftest:34,perhap:[69,117],period:[78,106,110,115,117],perl:[20,72,100,101,104,115,118],permiss:[93,105,111,114],permit:[75,93],perso:83,person:[91,109],pertain:96,peru:110,peter:93,pformat:73,phd:[20,26,35,43,63],phdru:63,philipp:93,philosophi:107,phone:104,phoni:117,photo:112,php3:112,php:[15,20,93,107,109,110,112,114,115,118],phpbuilder:112,phplib:[76,107],phrase:99,physic:110,pick:93,pickl:93,pictur:105,picview:112,piec:[4,12,76,88],pijlman:93,pil:111,ping:35,pinger:[0,24],pip:[92,105],pipe:20,pipelin:100,pje:93,pkg_resourc:10,place:[7,20,54,65,66,67,93,94,100,106,109,110,111,115,117,118],placehold:[4,10,16,20,37,72,73,76,77,78,79,80,83,85,86,93,100,101,102,105,106,107,108,109,111,114,118],placeholder_to_a_filter_inst:115,placeholder_to_an_error_catcher_inst:102,placeholdernam:[110,115],placeholderprocessor:93,placeholders_cal:37,placeholders_esc:37,placeholders_v:37,placeholderstarttoken:93,placeholderstr:37,placeholdertag:93,placeholdertoken:20,plachold:115,plai:94,plain:[4,57,69,93,110],plan:[69,88,93,100,105,115,118],planet:105,platform:[76,83,118],pleas:[7,83,88,100,105,109,111,118],plenti:115,plone:20,plowplat:76,plu:[37,93,100],plug:[100,105,109],plugin:[10,20,93,111,118],plumb:20,plural:[20,93],point:[15,20,44,76,87,93,100,104,108,110,116],pointer:93,pollut:[93,109],pop:[37,53],popen4:27,popen:27,popul:100,popup:100,popup_init:100,port:[76,100],portion:[85,93,100,104,109,116,118],pos:[19,37],posit:[19,37,46,93,106,110],position:93,posix:105,possibl:[1,15,20,69,83,86,93,108,110,115,116,117,118],post:[20,43,93,95,109,111,114,117,118],postgresql:112,postparsedirectivehook:93,postparseplaceholderhook:93,postpon:69,postprocessor:100,postscript:[109,117],potenti:[93,109],power:[70,84,85,100,109,118],pprint:73,ppu:92,practic:[44,91,108],pre:[20,89,104,115,118],preced:[37,110,115,117],preceed:110,precompil:[83,85,89,90,91,93,105,108],precursor:100,predat:12,predefin:110,prefac:[93,108],prefer:[15,100,108,110,111,115,118],prefix:[20,46,93,99,105,110,115,117,118],prematur:104,premis:66,prepar:[12,93,118],preparsedirectivehook:93,preparseplaceholderhook:93,prependtosearchlist:93,prepopul:72,preprocess:[20,53],preprocesserror:20,preprocessor:[20,33,38,93,100],prerequisit:106,preselect:[20,118],presenc:118,present:[109,117,118],preserv:[10,93,115],press:[20,109,117,118],pretend:115,pretti:[20,44,93,105,118],prettycountri:108,prev:44,prev_batch:44,prevent:[53,72,83,93,104,108,117],preview:[20,101,118],previou:[20,37,41,69,84,93,99,104,110,111,115,118],previous:[20,93,118],prevnextpag:44,prevpag:44,primari:[88,110],primarili:[88,93],primit:[76,100],princip:108,principl:[0,94,109,110],print:[3,20,27,73,84,85,93,100,104,105,108,110,111,115,117,118],printabl:108,printarg:78,printer:117,printf:93,printout:93,printsourc:117,printstat:9,prior:[20,72,88,93,96],prioriti:101,privat:69,privileg:105,probabl:[76,93,117,118],problem:[83,92,93,104,105,108],procedur:83,process:[1,53,65,85,91,93,104,107,114],processdir:9,processformdata:118,processtag:93,produc:[69,78,84,85,99,102,104,106,108,109,115,117,118],product:[76,109,111],program:[3,15,20,21,72,76,82,83,84,85,91,94,100,104,105,109,110,111,115,117,118],programm:[15,20,69,91,93,109,110],programmat:115,project:[20,26,35,43,76,100,109,112,117,118],promis:118,prompt:[83,105],prone:93,propag:93,proper:[40,93,96],properli:[20,36,41,93,96,105],properti:[41,93],propog:6,propos:[10,66,91,100],proprieti:104,protect:93,protocol:[1,20,114],provid:[1,2,4,7,11,12,15,17,18,20,23,55,66,69,72,83,86,91,93,99,101,102,105,106,109,110,111,114,115,117,118],prune:93,pseudo:[37,72],pshaw:[20,118],psp:[4,15,37,93,107,108,109,110],pspetc:100,psyco:[4,93],ptl:20,publish:112,pull:[88,92],punctuat:84,pure:[90,92,108,109,110,117,118],purpos:[15,20,64,72,93,100,101,110,111,115],push:[37,53,72,76],put:[4,20,54,69,76,83,85,99,100,104,105,108,109,110,111,114,115,117,118],py_resourc:12,pyc:[93,95],pygment:[10,93],pyimport_importmodul:93,pymodul:[84,85],pyo:93,pypi:[90,92],python2:[36,73,93,105],python3:93,python:[0,1,2,4,10,11,12,15,18,20,37,43,44,47,48,54,63,64,66,69,70,72,73,76,79,83,84,85,88,89,90,92,93,95,96,98,99,100,102,104,105,106,107,108,109,110,111,114,115,116],pythonmethod:117,pythonpath:118,pyunit:41,pyz:12,qualiti:109,quenot:[63,93],queri:[44,69,115,118],question:[69,85,93,112],quick:100,quickli:[66,72,76,93],quickstart:107,quiet:93,quit:[80,85,96,97,100],quixot:20,quot:[37,56,57,80,84,93,110,115,116],quotat:93,quote_plu:100,rais:[2,10,15,20,31,36,37,54,82,93,102,110,111,117,118],raisedirect:37,raiseifmiss:117,random:108,rang:[37,75,80,93,100,104,110,115],rason:20,rat:[75,104],rather:[15,20,72,76,80,84,85,93,100,105,106,108,110,111,115,117,118],ratifi:10,raw:[4,9,37,93,100,102,107,110,117],raw_stat:4,rawcod:[4,8,73,102],rawdirect:37,rawexpr:[4,93,115],raworencodedunicod:[10,20,26,35,43,93],rawplacehold:4,rawsourc:16,rawstat:9,rawstr:37,rc1:93,rdelim:100,reach:115,read:[15,19,20,43,69,76,78,82,93,100,107,108,110,111,114,115,117,118],readabl:[12,91,110,118],reader:94,readi:[108,111],readto:19,readtoeol:19,real:[7,72,76,85,109],realist:15,realiz:[76,83],realli:[37,73,76,77,80,93,96,107,115,117],reason:[54,65,66,84,85,93,100,105,106,109,110,114,117,118],rebuild:93,recach:69,recalcul:117,recap:117,receiv:[10,106,117],recent:[36,73,93,109,117],recip:[34,91,94,112],recipe1:94,recogn:[4,27,93,110,114,115,117],recommend:[93,109,110,117,118],recompil:[20,84,85,92,93,117],record:[20,44,111,118],recordresult:9,recordstat:44,recov:41,recreat:93,recurs:[9,18,93,100,111],recurseexplicit:27,recurseexplicitwithodir:27,recurseimplicit:27,recursivenul:[0,42,93,111],red:40,redbeard0531:63,redefin:[20,93,111],redefinetemplateblock:93,redesign:118,redhat:[40,63],redirect:118,redisplai:118,reduc:93,redud:93,redund:85,ref:93,refactor:93,refer:[18,20,65,83,84,86,93,96,100,106,109,110,111,117,118],referenc:78,refin:[76,111],reflect:105,refresh:[1,20,39,100,115,117],refreshcach:[20,115],refreshtim:1,refus:114,regard:114,regardless:[91,93],regex:[9,15,93],regex_replac:100,region:[1,20,69,85,93,100,110],regionid:[1,20],regiontitl:4,registri:12,registryimportdirector:12,regress:[0,24,41,66,93,105,109],regular:[10,16,37,76,84,91,106,110],reimplement:[20,91,93,108,109,111],reinterpol:115,reiter:110,rel:[20,69,93,100,111,118],relat:93,releas:[20,42,76,88,90,92,93,105,109],releg:109,relev:[20,88,93],reli:7,reliabl:[101,111],reliant:36,reloadhook:12,reloc:[38,66],remain:[42,93,105,115],remainderofexpr:4,rememb:[69,83,84,85,93,104,108,110,111,115,117,118],remind:[69,93],reminisc:72,remot:20,remoteaddress:118,remotenam:118,remoteus:118,remov:[10,54,56,76,92,93,100,108,111],removefromlist:54,renam:[53,92,93,108,110,118],render:[6,10,47,48,72,93,94,100,109,111],renderoutput:1,rene:93,reorgan:12,repackag:93,repeat:[37,83,93,100,107,108,109,110,115],repeatdirect:37,repeatedli:20,repl:[9,100],replac:[2,9,10,12,20,36,76,93,96,100,108,109,110,111,118],replacenon:37,replaceregexinfil:9,replacestrinfil:9,replic:20,report:[16,31,37,44,76,88,92,93],repositori:88,repr:37,repres:[4,18,20,46,85,106,111,117,118],represent:[18,93,105,115],reprnewlinethreshold:116,reproduc:109,reproduct:88,reprshortstrconst:116,repugn:72,request:[17,20,85,88,92,93,106,109,115,117,118],request_method:114,requir:[72,76,92,93,100,102,104,107,108,110,114,115,117,118],reread:105,reserv:111,reserved_searchlist:20,reset:[37,82,93,116],residu:93,resolut:93,resolv:[45,93,102,111],resourc:117,resp:7,respect:84,respond:[4,17,20,23,36,43,70,73,75,78,84,85,93,95,99,106,108,111,114,118],respondtoget:118,respondtoput:118,respons:[7,18,69,73,75,78,84,85,93,100,109,117,118],rest:[20,84,93,94,104,118],restrict:[91,93,94],restructur:[93,118],result:[9,10,33,36,41,66,69,72,84,85,93,95,100,105,108,110,115,117,118],retain:78,retriev:[20,93,102,115,118],retrofit:66,returnaclass:20,returndirect:37,reus:[20,37,91,93,109],reusabl:[91,109],rev:19,reveal:69,revers:115,revert:116,review:118,revis:20,revisit:96,revolv:88,rework:93,rewrit:[76,93,105],rewrot:[72,93],rexec:93,rfind:19,rica:110,rich:20,right:[93,99,108,111,115,117,118],roadmap:91,rob:108,rober:109,robert:[53,93],robert_kuzelj:53,robust:[69,93],rodrigo:93,rodrigobamboo:93,roger:[63,92],roi:108,role:94,roman:44,root:[38,105,108,118],rootpath:9,ross:[63,92],roughli:[93,100],routin:[54,83,100,105,106,108,117],rst:[65,66,67,83,93],rtyler:93,rubber:80,rudd:[63,66,76,84,85,93,94,109,111],rudimentari:93,rule:[84,106,107,108,111],run:[20,21,27,39,41,72,73,83,84,85,88,92,93,99,100,104,105,108,109,110,114,116,117,118],runasmainprogram:[20,73,84,85],runner:[41,95],runtest:[25,27,28,29,30,31,32,33,34,36,37,38,40,41],runtim:[20,72,73,93,102,115],runtimeerror:[20,73,82,114],rvalu:93,sad:91,safe:[37,77,111,117,118],safeconvert:7,safedeleg:86,safedelegationlevel:86,safer:93,sai:[37,80,94,104,108,115],said:[96,101],same:[2,15,20,37,38,54,69,72,78,80,84,86,88,93,100,102,104,105,106,108,109,110,111,114,115,117,118],sampl:114,samplebaseclass:105,sandbox:83,sasa:109,sat:[75,85,93,104],satisfi:[92,118],satoh:93,satoru:93,save:[34,54,84,93,95,100],scale:118,scan:[4,19],scenario:[15,27,93,110],schedul:[20,69,118],scheme:12,schwaller:109,schwehr:63,scienc:110,scoobi:[31,37,84],scope:[66,93],scott:108,scratch:[27,110],screw:117,script:[20,27,37,43,85,92,93,100,105,107,117,118],scriptalia:114,scriptnam:21,sdist_doc:93,sea:75,search:[10,15,19,20,47,48,76,91,93,100,104,110,111,117,118],searchlist:[4,6,15,20,26,31,35,37,38,43,53,64,69,72,78,80,83,84,85,93,95,100,105,106,107,108,111,115,117,118],searchlistgener:31,second:[15,37,69,75,78,85,100,102,110,115,117,118],secretari:76,section:[15,20,78,80,91,93,100,104,105,106,108,109,110,111,114,115,117,118],sectionlog:108,secur:[86,93],sed:[10,93,100],see:[4,9,15,18,20,46,54,55,69,72,80,83,84,85,88,91,93,100,101,102,104,105,108,109,110,111,112,115,117,118],seem:[85,118],seen:80,segfault:[31,93],select:[18,91,100,108,109],self:[0,4,18,20,36,37,43,53,64,66,69,70,72,73,75,78,80,83,84,85,86,93,94,102,105,110,111,114,115,117,118],semant:[2,93,109],semi:86,send:[85,100,105,109,117,118],send_output:108,senorita:110,sens:[7,53,93,94,104],sensit:[18,93,110,115],sent:85,sentanc:100,sep:104,separ:[20,69,76,78,80,83,91,93,99,100,104,105,106,109,110,115,118],sept:93,septemb:[93,117],sequenc:[76,93,100,104,117],seri:[76,84],serial:[93,117],serv:[20,100,114,118],server:[2,93,107,112,114],serverdictionari:118,serversidepath:[17,20,93,111,117,118],serverurl:118,serverurldir:118,servic:[37,83,100,104,117],servlet2:118,servlet:[0,7,15,20,37,43,54,62,76,85,87,93,100,106,107,108,110,111,114,117],servletisrunningfromwebkit:93,session:[17,20,93,100,105,107,114,117],set:[2,4,5,15,18,20,37,53,66,69,72,75,80,84,85,86,91,93,99,100,101,102,104,107,109,110,111,114,115,117,118],set_block:100,set_fil:100,set_var:100,setbaseclass:4,setbookmark:19,setbreakpoint:19,setcachedir:11,setcallarg:4,setchar:53,setclassnam:4,setcompilerset:4,setdata:1,setdirect:37,seterrorcatch:4,setexpirytim:1,setfilt:4,setlevel:53,setmainmethodarg:4,setmainmethodnam:4,setmethodnam:4,setmethodsignatur:4,setmoduleencod:4,setpo:19,setq:93,setset:18,setshbang:4,setstyl:4,setthread:12,settingsmanag:[0,4,62,93,100,107,117],settingsmanagertest:30,settingsstr:4,settransform:4,setup:[27,31,33,34,37,40,41,83,93,105],setupmodul:32,setuptool:93,sever:[2,20,70,73,76,84,86,93,100,106,109,110,111,115,117],sgml:109,shadowpath:12,shall:66,shallow:18,shannon:[63,93],share:[88,93,94,100,104,109,117],shbang:[4,93,110],she:[104,118],sheep:110,shell:[27,72,80,83],shift:93,ship:83,shop:[76,100],shortcut:117,shorter:[15,37,84,91,100,110],should:[4,6,15,20,37,65,66,75,83,86,90,93,99,102,104,105,107,108,110,111,115,117,118],shouldn:[31,37,109],show:[27,72,79,83,84,85,93,99,101,104,105,109,110,111,117,118],show_bug:40,shown:[102,110],shumwai:[93,109],shutdown:[17,20,93],sick:117,siddl:63,side:[4,93,106,110,112,118],sidebar2:115,sidebar:[105,115],sidebarpag:118,sign:[37,106,107,115,117],signal:100,signatur:[4,20,93,108],signific:[72,76,93,102,109,110,117],significantli:[15,93,105],silenc:93,silent:[20,37,93,107,108,110,117,118],silentdirect:37,silentmod:4,silentmodeplacehold:93,silli:[80,93,115],similar:[64,78,93,100,110,115,117,118],simpl:[15,20,37,76,83,91,93,100,101,104,108,109,110,114,115,117,118],simpler:[93,118],simplest:[20,90,93,118],simpli:[83,100,108,109,115,117],simplifi:[20,93,110,118],simultan:[115,118],sin:[37,108],sinc:[10,20,69,72,76,91,93,95,99,100,101,104,105,108,109,110,118],sing:93,singl:[4,10,20,37,43,83,85,93,99,100,105,108,110,115,118],singleinherit:72,singlelineshortformfunc:93,sir:108,site1:118,site2:118,site:[46,73,91,93,105,107,108,109,111,114],sitecopyrightnam:111,sitecredit:111,sitedomainnam:111,siteframework:118,sitehiearchi:93,sitehierarchi:[0,42],sitelog:108,situat:[38,66,69,76,109,117,118],size:[20,44,75,93,101,104,108],skeleton:[23,111],skeletonpag:[0,22,37,93,100,108,118],skip:[27,78,104],slash:93,sleep:[17,20,117],slew:93,slice:[4,37,84],slide:[65,66,67,93],slightli:[20,37,93,110],slip:93,slow:[73,117],slowdown:93,slower:[15,93],slowli:117,sluggost:63,slurp:[20,37,43,75,78,93,100,104,107,108,110,114,116,118],slurpdirect:37,small:[75,93,96,104,105,108,111,118],smart:[110,114,117],smarter:76,smarti:[107,109],snag:117,snapshot:[20,117,118],snippet:96,snow:75,socialserv:63,soft:[20,37,109],softwar:[20,88,114,118],solari:105,sole:85,solut:[66,117],some:[1,11,20,31,37,39,53,69,76,83,84,88,91,93,94,99,100,101,104,105,106,108,109,111,114,115,116,117,118],somebodi:[76,83,86,118],someclass:78,somecondit:104,somedai:[76,93,100],somenam:93,someothercondit:[69,115],someplac:105,someth:[4,15,20,31,66,69,75,76,93,95,100,104,106,109,110,111,117,118],somethin2:93,something2:93,somethingels:93,sometim:[20,85,104,115,118],somewhat:[53,94],somewher:[93,108,117],soon:[53,93],sooner:115,sophist:[93,118],sophistoc:20,sorri:104,sort:115,sourc:[0,3,4,5,10,20,26,35,37,38,40,43,53,54,66,69,70,76,79,80,81,83,84,85,88,91,93,99,100,101,103,105,107,109,110,111,115,116,117,118],sourceexpr:4,sourcefilestat:9,sourceforg:[83,93,100,112,118],sourceread:[0,16,62],space:[10,20,37,80,84,93,108,110,115,117],spacifi:100,spam:[93,100],span:[70,93,110],special:[16,20,80,102,110,114,115,117],specialti:109,specialvar:4,specif:[7,15,20,72,83,85,91,93,100,105,106,108,109,111,115,116,117,118],specifi:[9,10,20,72,76,80,93,100,102,104,108,110,111,114,115,117,118],spectra:[86,112],speed:[72,85,95,105,115],speedup:117,spell:93,sphinx:[21,93],splattmpl:27,splattmplwithsubdirectori:27,split:[10,84,85,117],splitdriv:61,splitlin:19,spot:93,spread:109,spring:76,sql:[0,109],squeez:10,src:[18,19,20,27,83,93,109,111,114,118],srcdir:27,srcfile:[27,93],sre_pattern:[16,53],stabl:[76,109],stack:[4,91,93],stackoverflow:112,stale:93,stand:72,standalon:[0,20,54,76,85,93,100,109,111,117],standard:[12,15,18,20,27,66,67,83,84,85,93,100,105,108,111,115,116,117,118],standarddevi:44,standarddeviation_n:44,stanza:[69,84,85,117],star:[69,117],start:[4,12,16,19,20,44,69,73,75,78,84,85,91,93,100,104,106,107,110,111,115,118],startcacheregion:4,startcallregion:4,startcaptureregion:4,startmethoddef:4,startpo:93,startserv:93,startswith:19,startup:118,state:[20,34,76,83,93,118],statement:[4,20,37,38,66,76,85,93,102,104,105,108,110,117,118],static_cach:93,staticmethod:[36,89,91,93],staticmethodsupport:38,statist:[44,93,111],statprof:[0,52],statu:[27,65,66,67],stderr:[3,27,41,93,117],stdin:27,stdout:[3,27,41,93,100],steal:86,stearn:[63,92],step:[76,83,86,88,93,104,106,108,109,114,118],stephan:109,steve:112,stick:69,still:[12,15,20,38,66,76,93,101,118],stock:[111,118],stone:93,stop:[37,92,93,107,110,116],stopdirect:37,store:[1,12,41,88,93,105,111,118],str2:37,str:[10,20,80,84,85,93,108,115],strang:93,strategi:[100,118],strconst:4,strcont:4,stream:[3,16,37,41,93],street:[76,115],stress:108,strftime:96,strictli:[20,94,105],string:[1,4,9,10,12,18,19,20,27,31,37,45,54,56,57,69,72,76,83,84,85,93,99,100,102,104,105,106,108,110,111,114,115,117,118],string_expr:115,string_format:100,stringio:[85,93,100],stringisnumb:18,strip:[10,37,93,100,108],strip_tag:100,stripsqueez:[10,37,93],stroll:79,strong:[91,96],strorr:19,structur:[15,18,23,78,83,85,91,96,102,107,108,109,110,111,117],stub:[20,93],stuck:117,studi:83,stuff:[69,93,107,117],stunnel:93,stupid:[76,110],style:[20,37,66,84,91,92,93,100,107,110,111,115,116],stylesheettag:111,sub:[9,93],subclass:[15,20,27,38,43,54,83,85,91,93,94,102,106,108,109,110,111,115,117,118],subclasssearchlisttest:38,subcommand:[27,105],subcompon:4,subcript:[37,84],subdir:27,subdirectori:[27,93,103,105,118],subject:[20,93,109],submit:[20,37,79,83,88,109,118],submodul:62,subpackag:62,subplacehold:110,subprocess:27,subscript:[37,44,76,84,93,110,112,115],subsect:118,subsequ:[102,110],subsitut:118,substitut:[20,111,118],substr:[27,106],subsystem:83,subtempl:[76,93],subvers:93,succe:[27,80],success:[41,84,105,118],successfulli:[84,118],suffer:76,suffici:[34,83],suffix:[20,44,54,106,118],suggest:[76,93,118],suit:[41,83,84,91,93,105,109,111,118],suitabl:[93,111],sum:[44,104,110],summari:[9,44,107,111],summer:109,sun:84,superceed:93,superclass:[85,93,107,108,118],superdirect:37,superfici:100,supplement:93,suppli:[41,78,93,111,117],support:[4,15,48,76,91,92,93,95,96,98,105,106,108],suppos:[20,95],supposedli:72,suppress:[27,115],sure:[20,37,83,93,99,108,110,114,117,118],surnam:[100,104,109],surpris:[108,110],surreal:84,surround:[37,93],svn:[9,93],swath:93,symbol:66,syn:37,synchron:93,synonym:[93,104,117],syntact:104,syntax:[10,15,16,20,37,53,69,72,76,79,84,91,93,96,99,100,101,102,104,106,107,108,109,115,116,117],syntaxandoutput:[0,24,33,83,84,93,103],syntaxerror:117,sys:[12,20,73,84,85,100,117],system:[12,15,72,73,76,83,88,93,105,107,109,110,111,117],systemwid:105,tab:117,tabl:[100,104,109,118],tada:84,tag:[10,20,40,53,56,72,93,100,101,102,104,106,107,108,110,111,115,116,118],tag_nam:110,tagprocessor:93,take:[6,20,37,78,79,83,93,100,106,108,110,111,115,117,118],taken:[40,84],talk:108,tall:[20,118],talvola:109,tan:37,tarbal:[74,88,90,103],target:[20,37,93,100,117],task:[20,93,100,105,118],taught:15,tavi:[63,66,72,76,84,85,93,94,101,105,109,111],tclass:20,team:[20,91,93,109],teardown:[27,37],teardownmodul:32,technic:[108,109],techniqu:117,technolog:91,tediou:[100,117],tedium:117,tei:109,tell:[20,69,85,100,104,110,116],temp:93,templat:[0,4,6,7,10,15,17,21,24,26,33,34,35,36,37,39,40,43,47,48,54,55,62,64,66,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,86,89,92,93,94,96,99,101,102,104,105,106,107,108,110,113,114,115,116],template3:105,template_dir:6,template_fil:[6,47,48],template_str:[47,48],templateapiclass:[20,93],templatecacheidprefix:1,templateclass:93,templatecmdlineifac:[0,62,73],templatedef:105,templatefileextens:[11,93],templatemisc:93,templateobj:[8,21,73,93,102],templatepreprocessor:20,templaterepositori:93,templateserv:[76,93],templatesystem:112,templatetest:38,templt:93,temporari:[69,92,93,105],temporarili:100,tenet:94,term:[20,76,100,101,105,106,110,118],termin:20,terrel:[93,109],terri:93,ters:12,test10:[31,37],test11:[31,37],test12:[31,37],test13:[31,33,37],test14:[31,37],test15:[31,37],test16:[31,37,83],test17:[31,37],test18:[31,37],test19:[31,37],test1:[31,37,83],test20:[31,37],test21:[31,37],test22:[31,37],test23:[31,37],test24:[31,37],test25:37,test26:37,test27:31,test28:31,test29:31,test2:[31,37],test30:31,test31:31,test32:31,test33:31,test34:31,test35:31,test36:31,test37:31,test38:31,test39:31,test3:[31,37],test40:31,test41:31,test42:31,test43:31,test44:31,test45:31,test46:31,test47:31,test48:31,test49:31,test4:[31,33,37],test50:31,test51:31,test52:31,test53:31,test54:31,test55:31,test56:31,test57:31,test58:31,test59:31,test5:[31,37],test60:31,test61:31,test6:[31,37],test7:[31,37],test8:[31,37],test9:[31,37],test:[0,3,10,20,42,44,47,62,75,84,86,88,92,93,103,104,107,111,115,117,118],test_autoimport:36,test_baseclassarg:38,test_basicascii:40,test_basicdecor:38,test_basicdynam:34,test_basichead:29,test_basicusag:38,test_basicusage1:38,test_classnamearg:38,test_compilationcach:38,test_compilerset:25,test_complexusag:[33,38],test_definedfilt:36,test_error:41,test_failcas:38,test_failingbehavior:36,test_failingbehaviorwithset:36,test_failur:[40,41],test_fromfooimportth:36,test_html:29,test_i18n:38,test_importfailmodul:36,test_inlineimport:28,test_int:31,test_keepreftogeneratedcodearg:38,test_legacymod:28,test_mainmethodnamearg:38,test_merge1:33,test_merge2:33,test_merge3:33,test_mergedictionari:30,test_modulefilecach:38,test_moduleglobalsarg:38,test_modulelevelimport:28,test_modulenamearg:38,test_no_test:41,test_nonefilt:36,test_norm:50,test_normalizepreprocessorargvari:38,test_notfoundexcept:36,test_path:50,test_properimportofbadmodul:36,test_python:29,test_search:50,test_set:25,test_stderr_captur:41,test_stdout_captur:41,test_str:50,test_stuffbeforeimport_legaci:36,test_success:[40,41],test_templ:[0,42,47,49],test_thai:40,test_thai_utf8:40,test_unittests_changing_stderr:41,test_unittests_changing_stdout:41,test_validexcept:36,test_valuefornam:32,test_vff_1:31,testblock:[108,110],testcas:[25,27,28,29,30,31,32,33,34,36,37,38,40,41,83,93],testcompil:27,testdecor:37,testdynamiccompil:40,tester:83,testfil:27,testit:108,testitem:104,testload:41,testmondoreport:44,testprogram:41,testrunn:41,teststaticcompil:40,testtext:27,text:[3,4,37,43,46,57,65,66,67,69,70,72,76,80,82,84,91,93,99,100,101,103,104,106,108,109,110,113,114,115,117],text_and_placehold:108,than:[15,20,53,72,75,76,80,84,85,90,92,93,100,105,106,108,109,110,111,112,115,117,118],thank:[93,109],theblocknam:108,thefilt:[4,115],thei:[15,20,37,42,64,66,72,74,76,83,84,85,88,91,93,96,99,102,103,105,106,108,109,110,111,114,115,117,118],them:[12,15,20,37,65,72,76,83,84,85,86,93,96,99,100,102,105,108,109,110,111,114,115,117,118],themselv:[4,15,20,93,110,117],theprivatevar:86,therang:110,therefor:110,thestr:[9,18,37],thetim:4,thevari:117,thi:[1,2,4,7,9,10,12,15,17,18,20,27,34,37,41,42,43,44,45,46,53,56,57,65,66,67,69,70,72,73,74,75,76,77,78,80,82,83,84,85,86,87,91,92,93,94,95,96,97,99,100,101,102,103,104,105,106,107,108,110,111,112,114,115,116,117,118],thing:[12,54,76,80,86,93,95,105,106,108,109,111,117,118],think:[76,88,93,108,109,117,118],third:[20,84,100,107,109,111,118],thirdparti:112,this_is_a_very_long_lin:110,thoroughli:72,those:[2,20,66,76,79,86,88,93,104,106,107,108,109,114,115,117,118],though:[69,117],thought:[76,93],thread:[107,109,118],three:[93,100,105,106,110,111],threefileswithsubdirectori:27,threefileswithsubdirectoriesnoextens:27,through:[9,10,19,20,37,66,71,79,81,87,93,100,102,104,106,109,115],throughout:93,thrown:[20,118],thu:[15,20,93,99,100,108,109,110,118],thursdai:[20,118],tick:[69,85,118],tidi:93,tight:[93,100],tightli:100,till:37,tim20001112:112,time:[1,2,20,27,37,41,70,72,73,75,76,78,80,83,84,85,86,88,91,93,96,99,100,104,105,108,109,110,111,115,116,117,118],timed_refresh_cach:93,timedtest:34,timer:115,timestamp:[1,4,93,118],timestr:4,tini:108,tip:[88,91,100,107,108,109,110,114],titl:[65,66,67,95,105,108,109,111,115],title_or_id:100,tmp:[20,93],tmpl:[11,27,47,48,70,80,85,86,93,94,95,96,99,105,106,108,109,114,117,118],tmplinstanc:20,tmplpath:61,todo:[0,24,27,37,44,93,115],toe:[78,109],togeth:[100,109],token:[16,20,37,93,100],tom:[91,109],tomcat:100,too:[20,69,70,81,83,93,100,108,111,114,117,118],took:[20,117],tool:[0,62,83,91,93,100,102,107,109,114,116],top:[4,27,37,66,70,80,83,85,93,106,108,110,114,115,118],topic:[20,112],toshio:93,total:[44,110],touch:109,traceback:[15,20,36,73,88,93,109],track:[53,66,67,93],tracker:[0,88,91,109,112],tradeoff:[77,101],tradit:[28,66,85,91],trail:[10,37,78,93,100,108,110,115],tran:[17,20,23,69,70,73,75,78,80,84,85,93,117],transact:[7,17,20,37,55,78,85,87,93,117,118],transform:[4,10,20,93,99],transformerrespons:7,transformertransact:7,transit:93,translat:[4,20,84,85,93,101,117],transpar:93,travers:9,travi:[88,92],treat:[69,93,95,99,100,108,110,111,115],treatment:93,tree:[9,93,108,111],tri:[93,105],trick:[85,86,88,91,107,109],trigger:117,tripl:[37,93],trivial:[72,84,96,108],troubleshoot:[91,107,109],trueexpr:4,trump:20,truncat:[4,100,115],trust:[86,93],trydirect:37,tryexceptimporttest:38,tscompil:93,tuesdai:[20,118],tune:111,tunnel:93,tupl:[4,20,46,93,100],turbocheetah:[0,42],turbogear:20,turf:12,turn:[20,37,76,83,93,101,102,109,110,118],turnerrorcatcheroff:4,turnerrorcatcheron:4,turnoff:[20,118],turnon:[20,118],tut:63,tutori:[83,85,94,107,109,115],tweak:93,twice:27,twiki:115,two:[37,66,72,83,84,88,93,95,99,102,104,105,106,108,109,110,111,114,117,118],txt:[7,16,37,93,111,115],tyler:[63,65,66,67,93,94],type:[10,20,37,43,65,66,67,69,72,83,84,85,93,100,101,105,108,109,110,111,114,115,117],typeerror:[20,54,93,111,118],typefac:115,typetyp:93,typic:[88,95,109],typo:93,uhanov:93,unabl:10,unaccept:118,unattain:72,unavail:118,unbalanc:115,unchang:[37,84,93],uncheck:[20,118],unclos:[93,110],uncondition:2,undefin:[93,115],under:[20,78,83,93,102,109,117],underli:[110,117],underscor:[20,93,106,110],understand:[15,20,91,93,108,109,110,111,118],undesir:108,undid:93,undocu:[53,93,115],unfamiliar:96,unforeseen:66,unfortun:[69,88,108],ungetc:19,unicod:[0,10,24,37,92,93],unicode_in_searchlist_test:40,unicodedirect:37,unicodeencodeerror:93,unicodestr:37,unifi:[4,15,93,100,110],uniform:117,uninstal:[11,107],unintention:93,uniqu:[20,69,72,93,107,118],unit:[27,39,41,93,100,115],unittest:[25,27,28,29,30,31,32,33,34,36,37,38,40,41,83,93],unittest_local_copi:[83,93],univers:[84,106],unix:[83,85,118],unknown:[94,105,117],unless:[10,20,37,72,83,93,94,99,100,107,108,110,115,117],unlessdirect:37,unlik:[93,99,108,110,111,114,115],unlimit:20,unlock:117,unmolest:10,unnecessari:[86,105],unnecessarili:69,unpredict:[72,117],unsaf:117,unset:[20,118],unsnarl:93,unspecifi:[0,20,26,35,37,43,62],unsupport:[44,53],unsur:109,untest:93,until:[76,83,104],unto:91,untrust:[86,93],unus:93,unusu:108,updat:[18,66,69,83,84,92,93,105,108,112,115,117,118],updatelinecach:20,updateset:18,updatesettingsfromconfigfil:18,updatesettingsfromconfigfileobj:18,updatesettingsfromconfigstr:18,updatesettingsfrompysrcstr:18,upgrad:[111,117],upload:[20,111,118],uploadfil:111,uploadfilemixin:[20,118],upper:[84,93,100],uri:118,url:[12,20,46,100,106,108,111,117,118],urllib:100,urlpath:118,urlpathdir:118,uruguai:110,usabl:[10,43],usag:[3,15,20,21,27,37,43,72,93,108,117,118],usagemessag:3,use:[0,1,4,10,11,12,15,20,37,38,43,45,66,72,76,83,84,85,86,88,93,94,95,96,100,101,102,103,104,105,106,107,108,111,114,115,118],useac:4,useautocal:[4,15,93,110,116],usecach:20,used:[0,4,7,10,12,15,20,37,42,54,64,72,75,76,84,85,91,93,94,96,99,100,102,103,104,108,109,110,111,114,115,116,117,118],usefilt:93,useful:[10,20,43,54,57,83,88,93,96,99,108,109,111,115,117,118],usefulness:10,usekwsdictargforpassingtran:93,uselegacyimportmod:93,useless:105,uselessli:110,usenamemapp:[16,93,110,116],useorrais:[54,93],user:[20,42,69,72,78,79,83,90,91,93,100,101,105,106,109,110,111,115,117,118],usernam:118,uses:[10,15,20,37,53,85,88,93,96,100,101,104,108,109,110,111,115,117,118],usesearchlist:93,usestackfram:[4,93],using:[1,4,15,20,36,37,38,83,84,88,93,95,96,99,100,104,106,108,109,110,111,112,114,115,117,118],usr:[36,70,84,85,92,93,105],usual:[20,105,114,115,117,118],utf8:93,utf:93,util:[0,4,20,23,43,62,66,83,93,95,96,99,105,107,109,117,118],val1:110,val:[2,10,93,115],valid:[4,15,69,84,85,86,93,104,110,115,118],validpo:19,valu:[1,2,7,10,15,18,20,37,53,69,72,76,78,80,84,93,100,101,102,104,105,106,107,108,109,111,114,115,116,117,118],valuabl:109,value1:37,valueerror:[16,20,37,44,55,102,118],valueexpr:4,valueforkei:15,valuefornam:[4,15,70,73,75,78,84,85,93],valuefromfram:[15,93],valuefromframeorsearchlist:[4,15,93],valuefromsearchlist:[4,15,70,73,75,78,84,85,93],valuesgettermixin:44,vancouv:76,vanilla:93,var1:[93,110],var2:[93,110,115],var2_:110,var3:[93,115],var99:93,varexist:[20,37,93,117],vari:85,variabl:[12,15,20,37,43,55,69,75,76,78,80,83,84,85,93,100,104,106,107,108,109,110,111,114,115,117],varianc:44,variance_n:44,variant:20,variat:[15,20,108,110],varieti:[69,83,93,109,115],varietywithodir:27,varinsearchlist:93,variou:[20,79,84,93,100,105,106,111,117,118],varnam:[4,20,93,100,110,117],varnotfound_keyerror:93,varrazzo:93,varybi:[1,69,115],varybybrows:[69,115],varybyparam:[69,115],veloc:[72,76,93,107,109,110],velocitycontext:100,venezuela:110,verbatim:[93,110,115],verbos:[3,20,41,69,93,101,109,117],veri:[0,18,20,37,78,84,93,108,109,115,117,118],verifi:[27,28,36,37,38,54,83,86,93,105,110,111,117,118],verifytyp:93,versa:[91,94,109,110],version:[0,3,9,12,18,20,44,53,56,57,62,65,66,67,70,72,83,84,85,88,90,93,96,98,105,108,109,110,111,117,118],vesion:111,vff:31,vffsl:[4,31],vffsl_2:31,vffsl_3:31,vffsl_4:31,vfn:[4,31,70,73,75,78,84,85],vfs_2namespac:31,vfs_3namespac:31,vfs_4namespac:31,vfsl:4,via:[20,37,53,64,86,91,93,100,110,115,118],viabl:109,vice:[91,94,109,110],view:[1,93,103,109,115],viewer:112,vim:101,virtual:[92,118],visibl:[93,100,102,108,109,115,117],visit:[84,85,88,90,100,103,117,118],visual:[72,91,107,118],visualeditor:101,vital:117,vocabulari:[91,107],volunt:[84,85,88,109],voom:[69,80],vt_int:37,vt_variant:37,vt_void:37,vya:63,vyasarajan:63,w32:92,w4py:[112,118],wai:[20,37,44,45,66,69,83,84,86,90,91,93,100,101,102,104,105,106,108,109,110,111,115,117,118],wait:[20,118],walk:[9,71,81,87],walkdirtre:9,wall:110,walter:108,wanadoo:83,want:[15,20,43,45,72,76,79,84,85,86,93,94,100,101,104,105,108,109,110,111,114,115,117,118],wanteddai:[20,118],warasin:93,ward:93,warn:[3,7,8,12,27,73,76,93,102,117],wasn:[20,72,85,93,96,105],watch:[75,104,117],water:76,web:[0,20,55,57,76,91,93,95,96,100,106,107,108,109,111,117],webinput:[20,43,55,93,114,117],webinputmixin:[0,43,52,93,117],webkit:[93,111,117,118],webmacro:[107,109,110],webmast:109,webmixin:93,websaf:[10,37,80,93,100],websit:[15,91,93,109,110],webspher:112,webwar:[7,20,37,56,57,73,76,85,91,93,100,106,107,108,110,111,115,117],webwareexperiment:118,webwaremixin:93,wed:[73,85],week:[20,76,115,118],well:[10,18,76,91,96,102,108,109,111,118],went:72,were:[20,54,66,72,76,85,88,93,103,105,106,109,118],weren:84,what:[10,15,20,54,69,72,76,78,79,84,85,86,87,88,91,93,94,100,104,105,106,107,108,110,111,115,116,117,118],whatev:[20,108,109,110,114,118],whatever:115,whatsnew:93,wheel:[90,92],when:[4,7,10,20,36,41,46,76,78,79,83,84,85,86,91,93,95,96,101,102,104,106,107,108,109,110,111,115,116,118],whenev:[73,108,114,115],where:[4,15,20,27,31,36,38,41,46,72,76,83,88,93,100,101,107,108,115,117,118],wherea:[66,110,118],wherein:20,wherev:[20,105],whether:[20,41,69,72,85,91,93,94,105,109,110,111,115,117,118],which:[4,10,15,20,27,36,37,69,72,75,76,80,83,84,91,93,94,95,96,101,102,104,105,107,108,109,110,111,114,115,117,118],whichev:105,whiledirect:37,whitespac:[4,10,37,53,93,100,108],whitespaceafterdirectivetoken:37,who:[15,76,93,95,107,110,118],whole:[69,76,93,101,108],whom:86,whoop:[80,93],whose:[78,93,111,117],why:[20,86,89,93,107,118],wide:[10,72,83,105,109],width:[85,108,111],wiki:[20,93,103,111,112,117],wikipagerender:93,win32:93,window:[12,83,90,93,100,105,117],wish:[79,100,108,111,114,115,117,118],within:[20,37,66,84,93,110,116],without:[4,15,18,20,31,37,41,43,54,72,76,83,85,86,93,96,101,102,105,106,107,108,109,110,111,117,118],won:[15,37,83,93,101,105,111,117],wonder:[73,117],word:[20,37,100,108,109,115],wordi:[83,117],wordwrap:100,work:[1,4,9,15,18,20,28,29,37,39,41,72,73,76,79,83,88,92,93,100,103,105,108,109,110,111,113,114,115,117,118],workflow:[69,88],world:[20,76,84,85,93,95,105],worri:[72,114,118],worth:[100,118],worthwhil:111,would:[4,9,10,12,15,20,36,37,76,84,86,93,94,100,101,109,110,111,115,117,118],wouldn:[93,117],wow:[20,118],wrap:[3,73,80,84,93,100,108,115],wrapclassdef:4,wrapcod:4,wrapmoduledef:4,wrapper:[1,9,20,93,105],write:[3,7,15,20,37,41,66,69,70,72,73,75,76,78,80,82,83,84,85,86,89,91,93,100,105,106,109,110,111,115,117,118],writebodi:[20,23,66,93,108,111],writeheadtag:[23,111],writelin:7,writeln:7,writer:[100,109,118],written:[41,63,76,91,93,100,105,106,110,112,113,114,115,117],wrong:[69,93,100,109,117],wschar:19,www:[1,12,20,85,92,93,100,108,112,114,118],wysiwyg:109,x0c:19,x64:92,x86:92,xgen:93,xgettext:117,xml:[41,101,109],xmlrunner:[0,24],xmltestprogram:41,xmltestrunn:41,xmltestrunnertest:41,xrang:84,xxx:[27,93],xxxx:[20,93],yahoo:[53,111],yelp:63,yesterdai:93,yet:[10,20,44,69,84,91,93,97,100,101,105,108,109,110,111,115,118],yield:[37,93],yielddirect:37,yin:63,ymtd:100,you:[1,4,10,12,15,20,37,43,45,46,65,69,72,73,76,79,80,83,85,86,88,90,91,93,94,95,96,99,100,101,104,105,106,107,108,109,111,114,115,116,118],your:[6,15,20,43,44,72,83,85,86,88,91,93,94,95,99,100,101,103,104,107,108,109,110,111,114,115,117],yourself:[88,109,114,117,118],yourtempl:20,yyi:20,z_0:15,zero:[20,37,53,73,84,93,104,118],zerodivisionerror:[20,73,93],zip:12,zivkov:109,zope:[20,76,86,101,107,109,112],zpt2:100,zpt:[100,109],zptinternationalizationsupport:20,zwerschk:93,zzz:20},titles:["Cheetah package","Cheetah.CacheRegion module","Cheetah.CacheStore module","Cheetah.CheetahWrapper module","Cheetah.Compiler module","Cheetah.DirectiveAnalyzer module","Cheetah.Django module","Cheetah.DummyTransaction module","Cheetah.ErrorCatchers module","Cheetah.FileUtils module","Cheetah.Filters module","Cheetah.ImportHooks module","Cheetah.ImportManager module","Cheetah.Macros package","Cheetah.Macros.I18n module","Cheetah.NameMapper module","Cheetah.Parser module","Cheetah.Servlet module","Cheetah.SettingsManager module","Cheetah.SourceReader module","Cheetah.Template module","Cheetah.TemplateCmdLineIface module","Cheetah.Templates package","Cheetah.Templates.SkeletonPage module","Cheetah.Tests package","Cheetah.Tests.Analyzer module","Cheetah.Tests.Boinker module","Cheetah.Tests.CheetahWrapper module","Cheetah.Tests.Cheps module","Cheetah.Tests.Filters module","Cheetah.Tests.Misc module","Cheetah.Tests.NameMapper module","Cheetah.Tests.NameMapper_pure module","Cheetah.Tests.Parser module","Cheetah.Tests.Performance module","Cheetah.Tests.Pinger module","Cheetah.Tests.Regressions module","Cheetah.Tests.SyntaxAndOutput module","Cheetah.Tests.Template module","Cheetah.Tests.Test module","Cheetah.Tests.Unicode module","Cheetah.Tests.xmlrunner module","Cheetah.Tools package","Cheetah.Tools.CGITemplate module","Cheetah.Tools.MondoReport module","Cheetah.Tools.RecursiveNull module","Cheetah.Tools.SiteHierarchy module","Cheetah.Tools.turbocheetah package","Cheetah.Tools.turbocheetah.cheetahsupport module","Cheetah.Tools.turbocheetah.tests package","Cheetah.Tools.turbocheetah.tests.test_template module","Cheetah.Unspecified module","Cheetah.Utils package","Cheetah.Utils.Indenter module","Cheetah.Utils.Misc module","Cheetah.Utils.WebInputMixin module","Cheetah.Utils.htmlDecode module","Cheetah.Utils.htmlEncode module","Cheetah.Utils.statprof module","Cheetah.Version module","Cheetah.compat module","Cheetah.convertTmplPathToModuleName module","Cheetah","Authors and contributors","Cheetah Enhancement Proposals","(#1) CHEP Purpose and Guidelines","(#2) Conditionalized #import behavior","(#3) Exposing of super() and self via Template searchList","A BNF Grammar of Cheetah","Caching placeholders and #cache","Directives: Comments","The compiler","Design Decisions and Tradeoffs","Directives: Error Handling","Files","Directives: Flow Control","History of Cheetah","Cheetah Developer\u2019s Guide","Directives: Import, Inheritance, Declaration and Assignment","Introduction","Directives: Output","The parser","Directives: Parser Instructions","Patching Cheetah","Placeholders",".py Template Modules","Safe Delegation","Template","Contributing to Cheetah","Cheetah Recipes","Downloading Cheetah","Cheetah3, the Python-Powered Template Engine","News","&lt;no title&gt;","Basic Inheritance","Precompiled Templates","&#64;staticmethod and &#64;classmethod","Writing a \u201cRecipe\u201d","Cheetah Roadmap","Comments","Cheetah vs. Other Template Engines","Visual Editors","Error Handling","Examples","Flow Control","Getting Started","Vocabulary","Cheetah User\u2019s Guide","Import, Inheritance, Declaration and Assignment","Introduction","Language Overview","Batteries included: templates and other libraries","Useful Web Links","Non-HTML Output","non-Webware HTML output","Generating, Caching and Filtering Output","Instructions to the Parser/Compiler","Tips, Tricks and Troubleshooting","Using Cheetah with Webware"],titleterms:{"abstract":[65,66,67],"break":[75,104],"case":109,"class":100,"final":102,"function":109,"import":[66,78,95,108],"new":[92,109],"public":109,"return":[75,104],"static":[69,114],"super":67,"try":[73,102],"while":[75,104],Are:110,One:115,The:[71,81,105,118],Useful:112,Using:[117,118],access:[15,110],acknowledg:109,all:[110,117],analyz:25,applic:117,approach:118,asp:100,assert:[73,102],assign:[78,108],attr:[78,108],author:63,autocal:[15,110],backward:[66,67],basic:[94,95],batteri:111,behavior:66,behind:109,bigecho:73,bind:72,block:[78,108],bnf:68,boinker:26,bother:95,brace:69,breakpoint:[82,116],bug:[88,109],build:83,cach:[69,72,115],cacheregion:1,cachestor:2,call:117,can:[109,110],cascad:[15,110],catcher:73,cgi:114,cgitempl:43,chang:83,cheetah3:91,cheetah:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,64,68,76,77,83,88,89,90,91,94,98,100,105,107,109,111,112,117,118],cheetahsupport:48,cheetahwrapp:[3,27],chep:[28,64,65],classmethod:96,closur:110,code:[88,113,118],command:105,comment:[70,99],common:118,compat:[60,66,67,72],compil:[4,71,82,95,116],complex:[84,115],condit:69,condition:66,construct:110,contain:118,content:[79,91],continu:[75,104],contribut:[88,109],contributor:63,control:[75,104],converttmplpathtomodulenam:61,cooki:118,copyright:[65,66,67],databas:112,decis:72,declar:[78,108],def:[78,108],del:[78,108],deleg:86,delimit:72,design:72,detail:15,develop:[77,88,92,112],diagnost:117,dictionari:[15,110],direct:[70,73,75,78,80,82,108,110],directiveanalyz:5,directori:118,django:6,docstr:[70,99],doesn:109,dollar:110,download:90,dtml:100,dummytransact:7,dynam:69,echo:[73,80,115],editor:101,els:104,embperl:100,end:[102,104,108],engin:[91,100],enhanc:64,entir:115,error:[73,102],errorcatch:[8,73,102,111],etc:100,eval:80,exampl:[85,103,109,110,118],except:102,execut:115,exist:64,expos:67,express:[69,80,115],extend:[78,108],featur:100,file:[74,83,88,105],fileutil:[9,111],filter:[10,29,80,111,115],flow:[75,104],form:118,framework:[72,112,118],from:[78,80,94,108,115],gener:115,get:[88,105,109],gettext:117,give:109,global:78,grammar:68,guid:[77,79,107,109],guidelin:65,handl:[73,102,110],have:117,header:[70,99],histori:76,how:109,html:[109,113,114],htmldecod:56,htmlencod:57,i18n:14,implement:[15,66,67,78,108],importhook:11,importmanag:12,includ:[80,111,115],indent:[53,115],indic:91,individu:115,inherit:[72,78,94,108,118],initi:118,input:118,instal:[105,118],instruct:[82,116],internet:112,introduct:[79,91,94,109],jsp:100,languag:110,late:72,leav:15,librari:[109,111],line:115,link:112,listerror:73,lookup:95,macro:[13,14],makefil:117,master:92,matur:109,method:[69,117],misc:[30,54],miss:110,modul:[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,43,44,45,46,48,50,51,53,54,55,56,57,58,59,60,61,85,112],mondoreport:44,more:118,motiv:[66,67],multi:117,namemapp:[15,31,110],namemapper_pur:32,namespac:[15,110],necessari:110,non:[113,114],nutshel:91,object:102,open:112,optim:117,other:[100,111,112,118],ouput:115,out:15,output:[80,113,114,115,117],overview:[15,77,110],packag:[0,13,22,24,42,47,49,52],page:[100,114],parser:[16,33,81,82,116],parti:112,pass:[75,104],patch:[83,109],perform:[15,34],philosophi:109,php:100,phplib:100,pinger:35,placehold:[69,84,110,115,117],power:91,pre:95,precompil:95,process:[88,118],propos:64,psp:[100,117],purpos:65,python:[91,94,112,113,117,118],quickstart:105,rais:73,rational:[66,67],raw:[80,115],read:[79,109],realli:110,recip:[89,97],recursivenul:45,refer:[66,67],refresh:69,region:115,regress:[36,83],repeat:[75,104],report:109,requir:[83,105],roadmap:98,rule:110,safe:86,script:114,searchlist:[67,110],self:[15,67],server:118,servlet:[17,109,118],session:118,set:[78,108,116],settingsmanag:[18,111],sever:118,should:[79,109],sign:110,silent:[80,115],simpl:84,singl:72,site:118,sitehierarchi:46,skeletonpag:[23,111],slurp:[80,115],smarti:100,sourc:[112,113],sourceread:19,specif:[66,67],standalon:118,start:105,staticmethod:96,statprof:58,stop:[75,104],string:80,structur:118,stuff:112,style:[109,117],submodul:[0,13,22,24,42,47,49,52],subpackag:[0,42,47],summari:110,superclass:117,syntax:[103,110],syntaxandoutput:37,system:[112,118],tabl:91,tag:[109,117],talk:91,templat:[20,22,23,38,67,85,87,91,95,100,109,111,112,117,118],templatecmdlineifac:21,test:[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,49,50,69,83,105,109],test_templ:50,thi:[79,109],third:112,those:110,thread:117,through:85,time:69,timer:69,tip:[117,118],todo:39,tool:[42,43,44,45,46,47,48,49,50,111],tradeoff:72,transact:72,trick:117,troubleshoot:117,turbocheetah:[47,48,49,50],tutori:105,under:118,unicod:40,uninstal:105,uniqu:100,unless:[75,104],unspecifi:51,use:[109,110,117],user:107,util:[52,53,54,55,56,57,58,111],valu:110,variabl:118,veloc:100,version:[15,59],via:67,visual:101,vocabulari:106,walk:85,web:[112,118],webinput:118,webinputmixin:55,webmacro:100,webwar:[72,103,109,112,114,118],what:109,when:117,where:[109,110],which:100,whitespac:110,who:[79,109],why:[91,95,109,117],without:115,write:97,xmlrunner:41,you:[110,117],your:[105,118],zope:100}}) \ No newline at end of file
diff --git a/www/html/users_guide/comments.html b/docs/html/users_guide/comments.html
index b9486a5..73a9dec 100644
--- a/www/html/users_guide/comments.html
+++ b/docs/html/users_guide/comments.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -201,7 +201,7 @@ a set of #-prefixed comment lines.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/comparisons.html b/docs/html/users_guide/comparisons.html
index 52f8977..e42b632 100644
--- a/www/html/users_guide/comparisons.html
+++ b/docs/html/users_guide/comparisons.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -566,7 +566,7 @@ and which are for-blocks, or what their nesting order is.</li>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/editors.html b/docs/html/users_guide/editors.html
index 45cf9e2..d6d5ce6 100644
--- a/www/html/users_guide/editors.html
+++ b/docs/html/users_guide/editors.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -138,7 +138,7 @@ begins.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/errorHandling.html b/docs/html/users_guide/errorHandling.html
index dc4cd36..27ed9ae 100644
--- a/www/html/users_guide/errorHandling.html
+++ b/docs/html/users_guide/errorHandling.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -238,7 +238,7 @@ its {listErrors} method.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/examples.html b/docs/html/users_guide/examples.html
index ec1a893..18c7bc3 100644
--- a/www/html/users_guide/examples.html
+++ b/docs/html/users_guide/examples.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -138,7 +138,7 @@ people.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/flowControl.html b/docs/html/users_guide/flowControl.html
index f56421f..a150026 100644
--- a/www/html/users_guide/flowControl.html
+++ b/docs/html/users_guide/flowControl.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -473,7 +473,7 @@ $test
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/gettingStarted.html b/docs/html/users_guide/gettingStarted.html
index ac5a5af..6bbdc98 100644
--- a/www/html/users_guide/gettingStarted.html
+++ b/docs/html/users_guide/gettingStarted.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -350,7 +350,7 @@ provide a template definition since it was already established:</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/glossary.html b/docs/html/users_guide/glossary.html
index da48dfe..3a53ee0 100644
--- a/www/html/users_guide/glossary.html
+++ b/docs/html/users_guide/glossary.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -190,7 +190,7 @@ Rules).</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/index.html b/docs/html/users_guide/index.html
index d5a65d2..b6586a5 100644
--- a/www/html/users_guide/index.html
+++ b/docs/html/users_guide/index.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -265,7 +265,7 @@
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/inheritanceEtc.html b/docs/html/users_guide/inheritanceEtc.html
index 4eea3d9..560a737 100644
--- a/www/html/users_guide/inheritanceEtc.html
+++ b/docs/html/users_guide/inheritanceEtc.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -543,7 +543,7 @@ arguments.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/intro.html b/docs/html/users_guide/intro.html
index 2f2eafe..32c7b52 100644
--- a/www/html/users_guide/intro.html
+++ b/docs/html/users_guide/intro.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -395,7 +395,7 @@ of their developers. Thank you.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/language.html b/docs/html/users_guide/language.html
index ed916b7..dbb5d91 100644
--- a/www/html/users_guide/language.html
+++ b/docs/html/users_guide/language.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -706,7 +706,7 @@ on one line, it can be hard to read.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/libraries.html b/docs/html/users_guide/libraries.html
index 82b6de0..9b0a86b 100644
--- a/www/html/users_guide/libraries.html
+++ b/docs/html/users_guide/libraries.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -390,7 +390,7 @@ definitions from changes in your directory structure.</li>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/links.html b/docs/html/users_guide/links.html
index 4426bbd..e3a4ec9 100644
--- a/www/html/users_guide/links.html
+++ b/docs/html/users_guide/links.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -116,6 +116,7 @@ than this chapter is.)</p>
</ul>
</dd>
</dl>
+<p>Questions can also be asked and answered on <a class="reference external" href="https://stackoverflow.com/questions/tagged/cheetah">StackOverflow</a>.</p>
</div>
<div class="section" id="third-party-cheetah-stuff">
<h2>Third-party Cheetah Stuff<a class="headerlink" href="#third-party-cheetah-stuff" title="Permalink to this headline">¶</a></h2>
@@ -273,7 +274,7 @@ than this chapter is.)</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/nonHtml.html b/docs/html/users_guide/nonHtml.html
index 4905dcd..e545822 100644
--- a/www/html/users_guide/nonHtml.html
+++ b/docs/html/users_guide/nonHtml.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -126,7 +126,7 @@ make it easier to encode Python indentation in a Cheetah template.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/otherHtml.html b/docs/html/users_guide/otherHtml.html
index fc65ab9..36cd2d7 100644
--- a/www/html/users_guide/otherHtml.html
+++ b/docs/html/users_guide/otherHtml.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -198,7 +198,7 @@ don’t have execute permission.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/output.html b/docs/html/users_guide/output.html
index 39b0f22..ed8fb08 100644
--- a/www/html/users_guide/output.html
+++ b/docs/html/users_guide/output.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -494,7 +494,7 @@ for the latest ideas.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/parserInstructions.html b/docs/html/users_guide/parserInstructions.html
index 3fbceff..9ae76b8 100644
--- a/www/html/users_guide/parserInstructions.html
+++ b/docs/html/users_guide/parserInstructions.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -212,7 +212,7 @@ documented in the future.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/tipsAndTricks.html b/docs/html/users_guide/tipsAndTricks.html
index 0a947e4..3bfcf69 100644
--- a/www/html/users_guide/tipsAndTricks.html
+++ b/docs/html/users_guide/tipsAndTricks.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -591,7 +591,7 @@ using to mark strings for translation.</li>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/html/users_guide/webware.html b/docs/html/users_guide/webware.html
index dd255e5..ba9afa2 100644
--- a/www/html/users_guide/webware.html
+++ b/docs/html/users_guide/webware.html
@@ -11,7 +11,7 @@
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '../',
- VERSION: '3.0.1',
+ VERSION: '3.1.0',
COLLAPSE_INDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true,
@@ -660,7 +660,7 @@ This may help you avoid buggy servlets.</p>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2017, Oleg Broytman; 2009-2012, R. Tyler Croy; 2001-2008, The Cheetah Development Team..
- Last updated on Feb 27, 2018.
+ Last updated on Mar 03, 2018.
Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.5.
</div>
</body>
diff --git a/www/index.rst b/docs/index.rst
index 2f18cb6..2f18cb6 100644
--- a/www/index.rst
+++ b/docs/index.rst
diff --git a/www/make.bat b/docs/make.bat
index b5c2e3e..b5c2e3e 100644
--- a/www/make.bat
+++ b/docs/make.bat
diff --git a/www/news.rst b/docs/news.rst
index 278aff1..2a6ff8c 100644
--- a/www/news.rst
+++ b/docs/news.rst
@@ -1,13 +1,41 @@
News
====
+Development (master)
+--------------------
+
+3.1.0 (2018-03-03)
+------------------
+
+Features:
+
+ - Fix Cheetah to work with PyPy. Pull request by Mathias Stearn.
+
+Minor features:
+
+ - Code cleanup: fix code style to satisfy flake8 linter.
+
+Documentation:
+
+ - Rename www directory to docs.
+
+Tests:
+
+ - Run pypy tests at AppVeyor.
+ - Use remove-old-files.py from ppu to cleanup pip cache
+ at Travis and AppVeyor.
+
+
3.0.1 (2018-02-27)
+------------------
Bug fixes:
- Fix a minor bug in Compiler.
+
3.0.0 (2017-05-07)
+------------------
Major features:
diff --git a/www/news2.rst b/docs/news2.rst
index d295478..d295478 100644
--- a/www/news2.rst
+++ b/docs/news2.rst
diff --git a/www/rebuild b/docs/rebuild
index 2161873..2161873 100755
--- a/www/rebuild
+++ b/docs/rebuild
diff --git a/www/recipes/inheritance.rst b/docs/recipes/inheritance.rst
index 267fa1f..267fa1f 100644
--- a/www/recipes/inheritance.rst
+++ b/docs/recipes/inheritance.rst
diff --git a/www/recipes/precompiled.rst b/docs/recipes/precompiled.rst
index 7705106..7705106 100644
--- a/www/recipes/precompiled.rst
+++ b/docs/recipes/precompiled.rst
diff --git a/www/recipes/staticmethod.rst b/docs/recipes/staticmethod.rst
index cf55ec1..cf55ec1 100644
--- a/www/recipes/staticmethod.rst
+++ b/docs/recipes/staticmethod.rst
diff --git a/www/recipes/writing_a_recipe.rst b/docs/recipes/writing_a_recipe.rst
index 73d146a..73d146a 100644
--- a/www/recipes/writing_a_recipe.rst
+++ b/docs/recipes/writing_a_recipe.rst
diff --git a/www/roadmap.rst b/docs/roadmap.rst
index 5057742..5057742 100644
--- a/www/roadmap.rst
+++ b/docs/roadmap.rst
diff --git a/www/users_guide/comments.rst b/docs/users_guide/comments.rst
index 5bd45dc..5bd45dc 100644
--- a/www/users_guide/comments.rst
+++ b/docs/users_guide/comments.rst
diff --git a/www/users_guide/comparisons.rst b/docs/users_guide/comparisons.rst
index 6886035..6886035 100644
--- a/www/users_guide/comparisons.rst
+++ b/docs/users_guide/comparisons.rst
diff --git a/www/users_guide/editors.rst b/docs/users_guide/editors.rst
index 35bf0a5..35bf0a5 100644
--- a/www/users_guide/editors.rst
+++ b/docs/users_guide/editors.rst
diff --git a/www/users_guide/errorHandling.rst b/docs/users_guide/errorHandling.rst
index 752c5b5..752c5b5 100644
--- a/www/users_guide/errorHandling.rst
+++ b/docs/users_guide/errorHandling.rst
diff --git a/www/users_guide/examples.rst b/docs/users_guide/examples.rst
index 7304cd1..7304cd1 100644
--- a/www/users_guide/examples.rst
+++ b/docs/users_guide/examples.rst
diff --git a/www/users_guide/flowControl.rst b/docs/users_guide/flowControl.rst
index dbaecd3..dbaecd3 100644
--- a/www/users_guide/flowControl.rst
+++ b/docs/users_guide/flowControl.rst
diff --git a/www/users_guide/gettingStarted.rst b/docs/users_guide/gettingStarted.rst
index de4159f..de4159f 100644
--- a/www/users_guide/gettingStarted.rst
+++ b/docs/users_guide/gettingStarted.rst
diff --git a/www/users_guide/glossary.rst b/docs/users_guide/glossary.rst
index 62e27f9..62e27f9 100644
--- a/www/users_guide/glossary.rst
+++ b/docs/users_guide/glossary.rst
diff --git a/www/users_guide/index.rst b/docs/users_guide/index.rst
index efbf343..efbf343 100644
--- a/www/users_guide/index.rst
+++ b/docs/users_guide/index.rst
diff --git a/www/users_guide/inheritanceEtc.rst b/docs/users_guide/inheritanceEtc.rst
index e0bb125..e0bb125 100644
--- a/www/users_guide/inheritanceEtc.rst
+++ b/docs/users_guide/inheritanceEtc.rst
diff --git a/www/users_guide/intro.rst b/docs/users_guide/intro.rst
index 096bdef..096bdef 100644
--- a/www/users_guide/intro.rst
+++ b/docs/users_guide/intro.rst
diff --git a/www/users_guide/language.rst b/docs/users_guide/language.rst
index 679fe7b..679fe7b 100644
--- a/www/users_guide/language.rst
+++ b/docs/users_guide/language.rst
diff --git a/www/users_guide/libraries.rst b/docs/users_guide/libraries.rst
index cbdeb14..cbdeb14 100644
--- a/www/users_guide/libraries.rst
+++ b/docs/users_guide/libraries.rst
diff --git a/www/users_guide/links.rst b/docs/users_guide/links.rst
index a8e3a83..1927ff8 100644
--- a/www/users_guide/links.rst
+++ b/docs/users_guide/links.rst
@@ -17,6 +17,9 @@ Home Page, issue tracker
On-line Documentation
- http://cheetahtemplate.org/
+Questions can also be asked and answered on `StackOverflow
+<https://stackoverflow.com/questions/tagged/cheetah>`_.
+
Third-party Cheetah Stuff
-------------------------
diff --git a/www/users_guide/nonHtml.rst b/docs/users_guide/nonHtml.rst
index 19f9667..19f9667 100644
--- a/www/users_guide/nonHtml.rst
+++ b/docs/users_guide/nonHtml.rst
diff --git a/www/users_guide/otherHtml.rst b/docs/users_guide/otherHtml.rst
index eeceaab..eeceaab 100644
--- a/www/users_guide/otherHtml.rst
+++ b/docs/users_guide/otherHtml.rst
diff --git a/www/users_guide/output.rst b/docs/users_guide/output.rst
index d7fb8e0..d7fb8e0 100644
--- a/www/users_guide/output.rst
+++ b/docs/users_guide/output.rst
diff --git a/www/users_guide/parserInstructions.rst b/docs/users_guide/parserInstructions.rst
index b187e7f..b187e7f 100644
--- a/www/users_guide/parserInstructions.rst
+++ b/docs/users_guide/parserInstructions.rst
diff --git a/www/users_guide/tipsAndTricks.rst b/docs/users_guide/tipsAndTricks.rst
index 8e06952..8e06952 100644
--- a/www/users_guide/tipsAndTricks.rst
+++ b/docs/users_guide/tipsAndTricks.rst
diff --git a/www/users_guide/webware.rst b/docs/users_guide/webware.rst
index bc36a2b..bc36a2b 100644
--- a/www/users_guide/webware.rst
+++ b/docs/users_guide/webware.rst
diff --git a/setup.cfg b/setup.cfg
index 8846a60..6e25dcc 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -7,8 +7,14 @@ omit =
*/*DynamicallyCompiledCheetahTemplate*.py
skip_covered = True
+[easy_install]
+optimize = 2
+
[egg_info]
tag_build =
tag_date = 0
tag_svn_revision = 0
+[flake8]
+exclude = .git,.tox,Cheetah/Templates/SkeletonPage.py
+
diff --git a/setup.py b/setup.py
index a63fb74..1c09101 100755
--- a/setup.py
+++ b/setup.py
@@ -2,15 +2,11 @@
import os
try:
- os.remove('MANIFEST') # to avoid those bloody out-of-date manifests!!
-except:
+ os.remove('MANIFEST') # to avoid those bloody out-of-date manifests!!
+except Exception:
pass
import SetupTools
import SetupConfig
configurations = (SetupConfig,)
-SetupTools.run_setup( configurations )
-
-
-
-
+SetupTools.run_setup(configurations)
diff --git a/tox.ini b/tox.ini
index 94a0fa4..074e177 100644
--- a/tox.ini
+++ b/tox.ini
@@ -4,7 +4,8 @@
# and then run "tox" from this directory.
[tox]
-envlist = py27, py33, py34, py35, py36, pypy
+minversion = 2.0
+envlist = py27, py3{3,4,5,6}, py{27,34}-flake8, pypy
[testenv]
basepython =
@@ -17,8 +18,50 @@ basepython =
commands =
{envpython} --version
{envpython} -c "import struct; print(struct.calcsize('P') * 8)"
- {envpython} {envsitepackagesdir}/Cheetah/Tests/Test.py
deps =
Markdown >= 2.0.1
pygments
passenv = CI TRAVIS TRAVIS_* APPVEYOR DISTUTILS_USE_SDK MSSdk INCLUDE LIB WINDIR
+
+[tests]
+commands =
+ {[testenv]commands}
+ {envpython} {envsitepackagesdir}/Cheetah/Tests/Test.py
+
+[testenv:py27]
+commands =
+ {[tests]commands}
+
+[testenv:py33]
+commands =
+ {[tests]commands}
+
+[testenv:py34]
+commands =
+ {[tests]commands}
+
+[testenv:py35]
+commands =
+ {[tests]commands}
+
+[testenv:py36]
+commands =
+ {[tests]commands}
+
+[testenv:py27-flake8]
+deps =
+ flake8
+commands =
+ {[testenv]commands}
+ flake8 .
+
+[testenv:py34-flake8]
+deps =
+ flake8
+commands =
+ {[testenv]commands}
+ flake8 .
+
+[testenv:pypy]
+commands =
+ {[tests]commands}
diff --git a/www/html/searchindex.js b/www/html/searchindex.js
deleted file mode 100644
index 730c335..0000000
--- a/www/html/searchindex.js
+++ /dev/null
@@ -1 +0,0 @@
-Search.setIndex({docnames:["api/Cheetah","api/Cheetah.CacheRegion","api/Cheetah.CacheStore","api/Cheetah.CheetahWrapper","api/Cheetah.Compiler","api/Cheetah.DirectiveAnalyzer","api/Cheetah.Django","api/Cheetah.DummyTransaction","api/Cheetah.ErrorCatchers","api/Cheetah.FileUtils","api/Cheetah.Filters","api/Cheetah.ImportHooks","api/Cheetah.ImportManager","api/Cheetah.Macros","api/Cheetah.Macros.I18n","api/Cheetah.NameMapper","api/Cheetah.Parser","api/Cheetah.Servlet","api/Cheetah.SettingsManager","api/Cheetah.SourceReader","api/Cheetah.Template","api/Cheetah.TemplateCmdLineIface","api/Cheetah.Templates","api/Cheetah.Templates.SkeletonPage","api/Cheetah.Tests","api/Cheetah.Tests.Analyzer","api/Cheetah.Tests.Boinker","api/Cheetah.Tests.CheetahWrapper","api/Cheetah.Tests.Cheps","api/Cheetah.Tests.Filters","api/Cheetah.Tests.Misc","api/Cheetah.Tests.NameMapper","api/Cheetah.Tests.Parser","api/Cheetah.Tests.Performance","api/Cheetah.Tests.Pinger","api/Cheetah.Tests.Regressions","api/Cheetah.Tests.SyntaxAndOutput","api/Cheetah.Tests.Template","api/Cheetah.Tests.Test","api/Cheetah.Tests.Unicode","api/Cheetah.Tests.xmlrunner","api/Cheetah.Tools","api/Cheetah.Tools.CGITemplate","api/Cheetah.Tools.MondoReport","api/Cheetah.Tools.RecursiveNull","api/Cheetah.Tools.SiteHierarchy","api/Cheetah.Tools.turbocheetah","api/Cheetah.Tools.turbocheetah.cheetahsupport","api/Cheetah.Tools.turbocheetah.tests","api/Cheetah.Tools.turbocheetah.tests.test_template","api/Cheetah.Unspecified","api/Cheetah.Utils","api/Cheetah.Utils.Indenter","api/Cheetah.Utils.Misc","api/Cheetah.Utils.WebInputMixin","api/Cheetah.Utils.htmlDecode","api/Cheetah.Utils.htmlEncode","api/Cheetah.Utils.statprof","api/Cheetah.Version","api/Cheetah.compat","api/Cheetah.convertTmplPathToModuleName","api/modules","authors","chep","cheps/1_chep","cheps/2_import","cheps/3_super","dev_guide/bnf","dev_guide/cache","dev_guide/comments","dev_guide/compiler","dev_guide/design","dev_guide/errorHandling","dev_guide/files","dev_guide/flowControl","dev_guide/history","dev_guide/index","dev_guide/inheritanceEtc","dev_guide/introduction","dev_guide/output","dev_guide/parser","dev_guide/parserInstructions","dev_guide/patching","dev_guide/placeholders","dev_guide/pyModules","dev_guide/safeDelegation","dev_guide/template","developers","documentation","download","index","news","news2","recipes/inheritance","recipes/precompiled","recipes/staticmethod","recipes/writing_a_recipe","roadmap","users_guide/comments","users_guide/comparisons","users_guide/editors","users_guide/errorHandling","users_guide/examples","users_guide/flowControl","users_guide/gettingStarted","users_guide/glossary","users_guide/index","users_guide/inheritanceEtc","users_guide/intro","users_guide/language","users_guide/libraries","users_guide/links","users_guide/nonHtml","users_guide/otherHtml","users_guide/output","users_guide/parserInstructions","users_guide/tipsAndTricks","users_guide/webware"],envversion:52,filenames:["api/Cheetah.rst","api/Cheetah.CacheRegion.rst","api/Cheetah.CacheStore.rst","api/Cheetah.CheetahWrapper.rst","api/Cheetah.Compiler.rst","api/Cheetah.DirectiveAnalyzer.rst","api/Cheetah.Django.rst","api/Cheetah.DummyTransaction.rst","api/Cheetah.ErrorCatchers.rst","api/Cheetah.FileUtils.rst","api/Cheetah.Filters.rst","api/Cheetah.ImportHooks.rst","api/Cheetah.ImportManager.rst","api/Cheetah.Macros.rst","api/Cheetah.Macros.I18n.rst","api/Cheetah.NameMapper.rst","api/Cheetah.Parser.rst","api/Cheetah.Servlet.rst","api/Cheetah.SettingsManager.rst","api/Cheetah.SourceReader.rst","api/Cheetah.Template.rst","api/Cheetah.TemplateCmdLineIface.rst","api/Cheetah.Templates.rst","api/Cheetah.Templates.SkeletonPage.rst","api/Cheetah.Tests.rst","api/Cheetah.Tests.Analyzer.rst","api/Cheetah.Tests.Boinker.rst","api/Cheetah.Tests.CheetahWrapper.rst","api/Cheetah.Tests.Cheps.rst","api/Cheetah.Tests.Filters.rst","api/Cheetah.Tests.Misc.rst","api/Cheetah.Tests.NameMapper.rst","api/Cheetah.Tests.Parser.rst","api/Cheetah.Tests.Performance.rst","api/Cheetah.Tests.Pinger.rst","api/Cheetah.Tests.Regressions.rst","api/Cheetah.Tests.SyntaxAndOutput.rst","api/Cheetah.Tests.Template.rst","api/Cheetah.Tests.Test.rst","api/Cheetah.Tests.Unicode.rst","api/Cheetah.Tests.xmlrunner.rst","api/Cheetah.Tools.rst","api/Cheetah.Tools.CGITemplate.rst","api/Cheetah.Tools.MondoReport.rst","api/Cheetah.Tools.RecursiveNull.rst","api/Cheetah.Tools.SiteHierarchy.rst","api/Cheetah.Tools.turbocheetah.rst","api/Cheetah.Tools.turbocheetah.cheetahsupport.rst","api/Cheetah.Tools.turbocheetah.tests.rst","api/Cheetah.Tools.turbocheetah.tests.test_template.rst","api/Cheetah.Unspecified.rst","api/Cheetah.Utils.rst","api/Cheetah.Utils.Indenter.rst","api/Cheetah.Utils.Misc.rst","api/Cheetah.Utils.WebInputMixin.rst","api/Cheetah.Utils.htmlDecode.rst","api/Cheetah.Utils.htmlEncode.rst","api/Cheetah.Utils.statprof.rst","api/Cheetah.Version.rst","api/Cheetah.compat.rst","api/Cheetah.convertTmplPathToModuleName.rst","api/modules.rst","authors.rst","chep.rst","cheps/1_chep.rst","cheps/2_import.rst","cheps/3_super.rst","dev_guide/bnf.rst","dev_guide/cache.rst","dev_guide/comments.rst","dev_guide/compiler.rst","dev_guide/design.rst","dev_guide/errorHandling.rst","dev_guide/files.rst","dev_guide/flowControl.rst","dev_guide/history.rst","dev_guide/index.rst","dev_guide/inheritanceEtc.rst","dev_guide/introduction.rst","dev_guide/output.rst","dev_guide/parser.rst","dev_guide/parserInstructions.rst","dev_guide/patching.rst","dev_guide/placeholders.rst","dev_guide/pyModules.rst","dev_guide/safeDelegation.rst","dev_guide/template.rst","developers.rst","documentation.rst","download.rst","index.rst","news.rst","news2.rst","recipes/inheritance.rst","recipes/precompiled.rst","recipes/staticmethod.rst","recipes/writing_a_recipe.rst","roadmap.rst","users_guide/comments.rst","users_guide/comparisons.rst","users_guide/editors.rst","users_guide/errorHandling.rst","users_guide/examples.rst","users_guide/flowControl.rst","users_guide/gettingStarted.rst","users_guide/glossary.rst","users_guide/index.rst","users_guide/inheritanceEtc.rst","users_guide/intro.rst","users_guide/language.rst","users_guide/libraries.rst","users_guide/links.rst","users_guide/nonHtml.rst","users_guide/otherHtml.rst","users_guide/output.rst","users_guide/parserInstructions.rst","users_guide/tipsAndTricks.rst","users_guide/webware.rst"],objects:{"":{Cheetah:[0,0,0,"-"]},"Cheetah.CacheRegion":{CacheItem:[1,1,1,""],CacheRegion:[1,1,1,""]},"Cheetah.CacheRegion.CacheItem":{clear:[1,2,1,""],getData:[1,2,1,""],getExpiryTime:[1,2,1,""],getRefreshTime:[1,2,1,""],hasExpired:[1,2,1,""],renderOutput:[1,2,1,""],setData:[1,2,1,""],setExpiryTime:[1,2,1,""]},"Cheetah.CacheRegion.CacheRegion":{clear:[1,2,1,""],getCacheItem:[1,2,1,""],isNew:[1,2,1,""]},"Cheetah.CacheStore":{AbstractCacheStore:[2,1,1,""],Error:[2,3,1,""],MemcachedCacheStore:[2,1,1,""],MemoryCacheStore:[2,1,1,""]},"Cheetah.CacheStore.AbstractCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemcachedCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],servers:[2,4,1,""],set:[2,2,1,""]},"Cheetah.CacheStore.MemoryCacheStore":{"delete":[2,2,1,""],add:[2,2,1,""],clear:[2,2,1,""],get:[2,2,1,""],replace:[2,2,1,""],set:[2,2,1,""]},"Cheetah.CheetahWrapper":{Bundle:[3,1,1,""],CheetahWrapper:[3,1,1,""],Error:[3,3,1,""],fprintfMessage:[3,5,1,""],usage:[3,5,1,""]},"Cheetah.CheetahWrapper.CheetahWrapper":{BACKUP_SUFFIX:[3,4,1,""],MAKE_BACKUPS:[3,4,1,""],chatter:[3,2,1,""],compile:[3,2,1,""],debug:[3,2,1,""],error:[3,2,1,""],fill:[3,2,1,""],help:[3,2,1,""],main:[3,2,1,""],options:[3,2,1,""],parseOpts:[3,2,1,""],test:[3,2,1,""],version:[3,2,1,""],warn:[3,2,1,""]},"Cheetah.Compiler":{AutoClassCompiler:[4,1,1,""],AutoMethodCompiler:[4,1,1,""],ClassCompiler:[4,1,1,""],Compiler:[4,4,1,""],Error:[4,3,1,""],GenUtils:[4,1,1,""],MethodCompiler:[4,1,1,""],ModuleCompiler:[4,1,1,""]},"Cheetah.Compiler.AutoMethodCompiler":{addMethArg:[4,2,1,""],addStop:[4,2,1,""],cleanupState:[4,2,1,""],isClassMethod:[4,2,1,""],isStaticMethod:[4,2,1,""],methodSignature:[4,2,1,""]},"Cheetah.Compiler.ClassCompiler":{addAttribute:[4,2,1,""],addChunkToInit:[4,2,1,""],addClassDocString:[4,2,1,""],addDecorator:[4,2,1,""],addErrorCatcherCall:[4,2,1,""],addSuper:[4,2,1,""],attributes:[4,2,1,""],classDef:[4,2,1,""],classDocstring:[4,2,1,""],className:[4,2,1,""],classSignature:[4,2,1,""],cleanupState:[4,2,1,""],closeBlock:[4,2,1,""],closeDef:[4,2,1,""],methodCompilerClass:[4,4,1,""],methodCompilerClassForInit:[4,4,1,""],methodDefs:[4,2,1,""],setBaseClass:[4,2,1,""],setClassName:[4,2,1,""],setMainMethodArgs:[4,2,1,""],setMainMethodName:[4,2,1,""],setting:[4,2,1,""],startMethodDef:[4,2,1,""],wrapClassDef:[4,2,1,""]},"Cheetah.Compiler.GenUtils":{addGetTextVar:[4,2,1,""],genCacheInfo:[4,2,1,""],genCacheInfoFromArgList:[4,2,1,""],genCheetahVar:[4,2,1,""],genNameMapperVar:[4,2,1,""],genPlainVar:[4,2,1,""],genTimeInterval:[4,2,1,""]},"Cheetah.Compiler.MethodCompiler":{addAssert:[4,2,1,""],addBreak:[4,2,1,""],addChunk:[4,2,1,""],addClosure:[4,2,1,""],addContinue:[4,2,1,""],addDel:[4,2,1,""],addEcho:[4,2,1,""],addElif:[4,2,1,""],addElse:[4,2,1,""],addExcept:[4,2,1,""],addFilteredChunk:[4,2,1,""],addFinally:[4,2,1,""],addFor:[4,2,1,""],addIf:[4,2,1,""],addInclude:[4,2,1,""],addIndentingDirective:[4,2,1,""],addMethComment:[4,2,1,""],addMethDocString:[4,2,1,""],addOneLineIf:[4,2,1,""],addPSP:[4,2,1,""],addPass:[4,2,1,""],addPlaceholder:[4,2,1,""],addRaise:[4,2,1,""],addRawText:[4,2,1,""],addReIndentingDirective:[4,2,1,""],addRepeat:[4,2,1,""],addReturn:[4,2,1,""],addSet:[4,2,1,""],addSilent:[4,2,1,""],addStrConst:[4,2,1,""],addTernaryExpr:[4,2,1,""],addTry:[4,2,1,""],addUnless:[4,2,1,""],addWhile:[4,2,1,""],addWriteChunk:[4,2,1,""],addYield:[4,2,1,""],appendToPrevChunk:[4,2,1,""],cleanupState:[4,2,1,""],closeFilterBlock:[4,2,1,""],commitStrConst:[4,2,1,""],dedent:[4,2,1,""],docString:[4,2,1,""],endCacheRegion:[4,2,1,""],endCallRegion:[4,2,1,""],endCaptureRegion:[4,2,1,""],handleWSBeforeDirective:[4,2,1,""],indent:[4,2,1,""],indentation:[4,2,1,""],isErrorCatcherOn:[4,2,1,""],methodBody:[4,2,1,""],methodDef:[4,2,1,""],methodName:[4,2,1,""],methodSignature:[4,2,1,""],nextCacheID:[4,2,1,""],nextCallRegionID:[4,2,1,""],nextCaptureRegionID:[4,2,1,""],nextFilterRegionID:[4,2,1,""],setCallArg:[4,2,1,""],setErrorCatcher:[4,2,1,""],setFilter:[4,2,1,""],setMethodName:[4,2,1,""],setMethodSignature:[4,2,1,""],setTransform:[4,2,1,""],setting:[4,2,1,""],startCacheRegion:[4,2,1,""],startCallRegion:[4,2,1,""],startCaptureRegion:[4,2,1,""],turnErrorCatcherOff:[4,2,1,""],turnErrorCatcherOn:[4,2,1,""],wrapCode:[4,2,1,""]},"Cheetah.Compiler.ModuleCompiler":{addAttribute:[4,2,1,""],addComment:[4,2,1,""],addImportStatement:[4,2,1,""],addImportedVarNames:[4,2,1,""],addModuleDocString:[4,2,1,""],addModuleGlobal:[4,2,1,""],addModuleHeader:[4,2,1,""],addSpecialVar:[4,2,1,""],classCompilerClass:[4,4,1,""],classDefs:[4,2,1,""],compile:[4,2,1,""],getModuleCode:[4,2,1,""],getModuleEncoding:[4,2,1,""],importStatements:[4,2,1,""],importedVarNames:[4,2,1,""],moduleConstants:[4,2,1,""],moduleDocstring:[4,2,1,""],moduleFooter:[4,2,1,""],moduleHeader:[4,2,1,""],parserClass:[4,4,1,""],setBaseClass:[4,2,1,""],setCompilerSetting:[4,2,1,""],setCompilerSettings:[4,2,1,""],setModuleEncoding:[4,2,1,""],setShBang:[4,2,1,""],specialVars:[4,2,1,""],timestamp:[4,2,1,""],wrapModuleDef:[4,2,1,""]},"Cheetah.DirectiveAnalyzer":{AnalysisCompiler:[5,1,1,""],Analyzer:[5,1,1,""],analyze:[5,5,1,""],main:[5,5,1,""],main_dir:[5,5,1,""],main_file:[5,5,1,""]},"Cheetah.DirectiveAnalyzer.AnalysisCompiler":{parserClass:[5,4,1,""]},"Cheetah.DirectiveAnalyzer.Analyzer":{eatDirective:[5,2,1,""]},"Cheetah.Django":{render:[6,5,1,""]},"Cheetah.DummyTransaction":{DummyResponse:[7,1,1,""],DummyResponseFailure:[7,3,1,""],DummyTransaction:[7,1,1,""],TransformerResponse:[7,1,1,""],TransformerTransaction:[7,1,1,""]},"Cheetah.DummyTransaction.DummyResponse":{flush:[7,2,1,""],getvalue:[7,2,1,""],safeConvert:[7,2,1,""],write:[7,2,1,""],writelines:[7,2,1,""],writeln:[7,2,1,""]},"Cheetah.DummyTransaction.DummyTransaction":{response:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerResponse":{getvalue:[7,2,1,""]},"Cheetah.DummyTransaction.TransformerTransaction":{response:[7,2,1,""]},"Cheetah.ErrorCatchers":{BigEcho:[8,1,1,""],Echo:[8,4,1,""],Error:[8,3,1,""],ErrorCatcher:[8,1,1,""],KeyError:[8,1,1,""],ListErrors:[8,1,1,""]},"Cheetah.ErrorCatchers.BigEcho":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ErrorCatcher":{exceptions:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.ErrorCatchers.KeyError":{warn:[8,2,1,""]},"Cheetah.ErrorCatchers.ListErrors":{listErrors:[8,2,1,""],warn:[8,2,1,""]},"Cheetah.FileUtils":{FileFinder:[9,1,1,""],FindAndReplace:[9,1,1,""],SourceFileStats:[9,1,1,""],findFiles:[9,5,1,""],replaceRegexInFiles:[9,5,1,""],replaceStrInFiles:[9,5,1,""]},"Cheetah.FileUtils.FileFinder":{files:[9,2,1,""],filterDir:[9,2,1,""],processDir:[9,2,1,""],walkDirTree:[9,2,1,""]},"Cheetah.FileUtils.FindAndReplace":{results:[9,2,1,""]},"Cheetah.FileUtils.SourceFileStats":{getFileStats:[9,2,1,""],printStats:[9,2,1,""],rawStats:[9,2,1,""],summary:[9,2,1,""]},"Cheetah.Filters":{CodeHighlighter:[10,1,1,""],EncodeUnicode:[10,4,1,""],Filter:[10,1,1,""],Markdown:[10,1,1,""],MaxLen:[10,1,1,""],RawOrEncodedUnicode:[10,4,1,""],Strip:[10,1,1,""],StripSqueeze:[10,1,1,""],WebSafe:[10,1,1,""],test:[10,5,1,""]},"Cheetah.Filters.CodeHighlighter":{filter:[10,2,1,""]},"Cheetah.Filters.Filter":{filter:[10,2,1,""]},"Cheetah.Filters.Markdown":{filter:[10,2,1,""]},"Cheetah.Filters.MaxLen":{filter:[10,2,1,""]},"Cheetah.Filters.Strip":{filter:[10,2,1,""]},"Cheetah.Filters.StripSqueeze":{filter:[10,2,1,""]},"Cheetah.Filters.WebSafe":{filter:[10,2,1,""]},"Cheetah.ImportHooks":{CheetahDirOwner:[11,1,1,""],install:[11,5,1,""],setCacheDir:[11,5,1,""],uninstall:[11,5,1,""]},"Cheetah.ImportHooks.CheetahDirOwner":{getmod:[11,2,1,""],templateFileExtensions:[11,4,1,""]},"Cheetah.ImportManager":{BuiltinImportDirector:[12,1,1,""],DirOwner:[12,1,1,""],FrozenImportDirector:[12,1,1,""],ImportDirector:[12,1,1,""],ImportManager:[12,1,1,""],Owner:[12,1,1,""],PathImportDirector:[12,1,1,""],RegistryImportDirector:[12,1,1,""],getDescr:[12,5,1,""],getPathExt:[12,5,1,""],nameSplit:[12,5,1,""],packageName:[12,5,1,""],pathIsDir:[12,5,1,""]},"Cheetah.ImportManager.BuiltinImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.DirOwner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.FrozenImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.ImportManager":{doimport:[12,2,1,""],importHook:[12,2,1,""],install:[12,2,1,""],reloadHook:[12,2,1,""],setThreaded:[12,2,1,""]},"Cheetah.ImportManager.Owner":{getmod:[12,2,1,""]},"Cheetah.ImportManager.PathImportDirector":{getmod:[12,2,1,""]},"Cheetah.ImportManager.RegistryImportDirector":{getmod:[12,2,1,""]},"Cheetah.Macros":{I18n:[14,0,0,"-"]},"Cheetah.Macros.I18n":{I18n:[14,1,1,""]},"Cheetah.NameMapper":{NotFound:[15,3,1,""],hasKey:[15,5,1,""],valueForKey:[15,5,1,""],valueForName:[15,5,1,""],valueFromFrame:[15,5,1,""],valueFromFrameOrSearchList:[15,5,1,""],valueFromSearchList:[15,5,1,""]},"Cheetah.Parser":{ArgList:[16,1,1,""],CheetahVariable:[16,1,1,""],ForbiddenDirective:[16,3,1,""],ForbiddenExpression:[16,3,1,""],ForbiddenSyntax:[16,3,1,""],ParseError:[16,3,1,""],Parser:[16,4,1,""],Placeholder:[16,1,1,""],any:[16,5,1,""],cachedRegex:[16,5,1,""],escapeRegexChars:[16,5,1,""],group:[16,5,1,""],makeTripleQuoteRe:[16,5,1,""],maybe:[16,5,1,""],namedGroup:[16,5,1,""],nongroup:[16,5,1,""]},"Cheetah.Parser.ArgList":{add_argument:[16,2,1,""],add_default:[16,2,1,""],merge:[16,2,1,""],next:[16,2,1,""]},"Cheetah.Parser.ParseError":{report:[16,2,1,""]},"Cheetah.Servlet":{Servlet:[17,1,1,""]},"Cheetah.Servlet.Servlet":{application:[17,4,1,""],request:[17,4,1,""],respond:[17,2,1,""],serverSidePath:[17,2,1,""],session:[17,4,1,""],shutdown:[17,2,1,""],sleep:[17,2,1,""],transaction:[17,4,1,""]},"Cheetah.SettingsManager":{ConfigParserCaseSensitive:[18,1,1,""],Error:[18,3,1,""],NoDefault:[18,1,1,""],SettingsManager:[18,1,1,""],convStringToNum:[18,5,1,""],mergeNestedDictionaries:[18,5,1,""],stringIsNumber:[18,5,1,""]},"Cheetah.SettingsManager.ConfigParserCaseSensitive":{optionxform:[18,2,1,""]},"Cheetah.SettingsManager.SettingsManager":{copySettings:[18,2,1,""],deepcopySettings:[18,2,1,""],hasSetting:[18,2,1,""],setSetting:[18,2,1,""],setting:[18,2,1,""],settings:[18,2,1,""],updateSettings:[18,2,1,""],updateSettingsFromConfigFileObj:[18,2,1,""],updateSettingsFromConfigStr:[18,2,1,""],updateSettingsFromPySrcStr:[18,2,1,""]},"Cheetah.SourceReader":{ENCODINGsearch:[19,5,1,""],Error:[19,3,1,""],SourceReader:[19,1,1,""]},"Cheetah.SourceReader.SourceReader":{advance:[19,2,1,""],atEnd:[19,2,1,""],atStart:[19,2,1,""],breakPoint:[19,2,1,""],checkPos:[19,2,1,""],filename:[19,2,1,""],find:[19,2,1,""],findBOL:[19,2,1,""],findEOL:[19,2,1,""],getLine:[19,2,1,""],getNonWhiteSpace:[19,2,1,""],getRowCol:[19,2,1,""],getRowColLine:[19,2,1,""],getWhiteSpace:[19,2,1,""],getc:[19,2,1,""],gotoBookmark:[19,2,1,""],hasBookmark:[19,2,1,""],isLineClearToPos:[19,2,1,""],lineNum:[19,2,1,""],matchNonWhiteSpace:[19,2,1,""],matchWhiteSpace:[19,2,1,""],matches:[19,2,1,""],peek:[19,2,1,""],pos:[19,2,1,""],read:[19,2,1,""],readTo:[19,2,1,""],readToEOL:[19,2,1,""],rev:[19,2,1,""],rfind:[19,2,1,""],setBookmark:[19,2,1,""],setBreakPoint:[19,2,1,""],setPos:[19,2,1,""],splitlines:[19,2,1,""],src:[19,2,1,""],startswith:[19,2,1,""],ungetc:[19,2,1,""],validPos:[19,2,1,""]},"Cheetah.Template":{CompileCacheItem:[20,1,1,""],Error:[20,3,1,""],PreprocessError:[20,3,1,""],T:[20,4,1,""],Template:[20,1,1,""],TemplatePreprocessor:[20,1,1,""],checkFileMtime:[20,5,1,""],createMethod:[20,5,1,""],genParserErrorFromPythonException:[20,5,1,""],hashDict:[20,5,1,""],hashList:[20,5,1,""],updateLinecache:[20,5,1,""]},"Cheetah.Template.Template":{NonNumericInputError:[20,3,1,""],Reserved_SearchList:[20,4,1,""],compile:[20,6,1,""],errorCatcher:[20,2,1,""],generatedClassCode:[20,2,1,""],generatedModuleCode:[20,2,1,""],getCacheRegion:[20,2,1,""],getCacheRegions:[20,2,1,""],getFileContents:[20,2,1,""],getVar:[20,2,1,""],hasVar:[20,2,1,""],i18n:[20,2,1,""],refreshCache:[20,2,1,""],runAsMainProgram:[20,2,1,""],searchList:[20,2,1,""],shutdown:[20,2,1,""],subclass:[20,6,1,""],varExists:[20,2,1,""],webInput:[20,2,1,""]},"Cheetah.Template.TemplatePreprocessor":{preprocess:[20,2,1,""]},"Cheetah.TemplateCmdLineIface":{CmdLineIface:[21,1,1,""],Error:[21,3,1,""]},"Cheetah.TemplateCmdLineIface.CmdLineIface":{run:[21,2,1,""],usage:[21,2,1,""]},"Cheetah.Templates":{SkeletonPage:[23,0,0,"-"]},"Cheetah.Templates.SkeletonPage":{SkeletonPage:[23,1,1,""]},"Cheetah.Templates.SkeletonPage.SkeletonPage":{respond:[23,2,1,""],writeBody:[23,2,1,""],writeHeadTag:[23,2,1,""]},"Cheetah.Tests":{Analyzer:[25,0,0,"-"],Boinker:[26,0,0,"-"],CheetahWrapper:[27,0,0,"-"],Cheps:[28,0,0,"-"],Filters:[29,0,0,"-"],Misc:[30,0,0,"-"],NameMapper:[31,0,0,"-"],Parser:[32,0,0,"-"],Performance:[33,0,0,"-"],Pinger:[34,0,0,"-"],Regressions:[35,0,0,"-"],SyntaxAndOutput:[36,0,0,"-"],Template:[37,0,0,"-"],Test:[38,0,0,"-"],Unicode:[39,0,0,"-"],xmlrunner:[40,0,0,"-"]},"Cheetah.Tests.Analyzer":{AnalyzerTests:[25,1,1,""]},"Cheetah.Tests.Analyzer.AnalyzerTests":{test_compilersettings:[25,2,1,""],test_set:[25,2,1,""]},"Cheetah.Tests.Boinker":{Boinker:[26,1,1,""]},"Cheetah.Tests.Boinker.Boinker":{boink:[26,2,1,""]},"Cheetah.Tests.CheetahWrapper":{CFBase:[27,1,1,""],CFIdirBase:[27,1,1,""],Flat:[27,1,1,""],FlatRecurseCollision:[27,1,1,""],IdirFlatRecurseCollision:[27,1,1,""],IdirOdirRecurse:[27,1,1,""],IdirRecurse:[27,1,1,""],NoBackup:[27,1,1,""],OneFile:[27,1,1,""],OneFileNoExtension:[27,1,1,""],OneFileWithOdir:[27,1,1,""],Popen4:[27,1,1,""],RecurseExplicit:[27,1,1,""],RecurseExplicitWIthOdir:[27,1,1,""],RecurseImplicit:[27,1,1,""],SplatTmpl:[27,1,1,""],SplatTmplWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectories:[27,1,1,""],ThreeFilesWithSubdirectoriesNoExtension:[27,1,1,""],VarietyWithOdir:[27,1,1,""],listTests:[27,5,1,""],main:[27,5,1,""],warn:[27,5,1,""]},"Cheetah.Tests.CheetahWrapper.CFBase":{assertPosixSubprocess:[27,2,1,""],assertSubprocess:[27,2,1,""],assertWin32Subprocess:[27,2,1,""],checkCompile:[27,2,1,""],checkFill:[27,2,1,""],checkNoBackup:[27,2,1,""],checkSubdirPyInit:[27,2,1,""],expectError:[27,4,1,""],go:[27,2,1,""],inform:[27,2,1,""],locate_cheetah:[27,2,1,""],setUp:[27,2,1,""],srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""],tearDown:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.CFIdirBase":{srcDir:[27,4,1,""],srcFiles:[27,4,1,""],subdirs:[27,4,1,""]},"Cheetah.Tests.CheetahWrapper.Flat":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.FlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirFlatRecurseCollision":{expectError:[27,4,1,""],testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirOdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.IdirRecurse":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.NoBackup":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFile":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.OneFileWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseExplicitWIthOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.RecurseImplicit":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmpl":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.SplatTmplWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectories":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.ThreeFilesWithSubdirectoriesNoExtension":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.CheetahWrapper.VarietyWithOdir":{testCompile:[27,2,1,""],testFill:[27,2,1,""],testText:[27,2,1,""]},"Cheetah.Tests.Cheps":{Chep_2_Conditionalized_Import_Behavior:[28,1,1,""]},"Cheetah.Tests.Cheps.Chep_2_Conditionalized_Import_Behavior":{test_InlineImport:[28,2,1,""],test_LegacyMode:[28,2,1,""],test_ModuleLevelImport:[28,2,1,""]},"Cheetah.Tests.Filters":{BasicCodeHighlighterFilterTest:[29,1,1,""],BasicMarkdownFilterTest:[29,1,1,""]},"Cheetah.Tests.Filters.BasicCodeHighlighterFilterTest":{test_Html:[29,2,1,""],test_Python:[29,2,1,""]},"Cheetah.Tests.Filters.BasicMarkdownFilterTest":{test_BasicHeader:[29,2,1,""]},"Cheetah.Tests.Misc":{SettingsManagerTests:[30,1,1,""]},"Cheetah.Tests.Misc.SettingsManagerTests":{test_mergeDictionaries:[30,2,1,""]},"Cheetah.Tests.NameMapper":{DummyClass:[31,1,1,""],DummyClassGetAttrRaises:[31,1,1,""],MapBuiltins:[31,1,1,""],NameMapperTest:[31,1,1,""],VFF:[31,1,1,""],VFFSL:[31,1,1,""],VFFSL_2:[31,1,1,""],VFFSL_3:[31,1,1,""],VFFSL_4:[31,1,1,""],VFN:[31,1,1,""],VFS:[31,1,1,""],VFS_2namespaces:[31,1,1,""],VFS_3namespaces:[31,1,1,""],VFS_4namespaces:[31,1,1,""],aClass:[31,4,1,""],aFunc:[31,5,1,""],dummyFunc:[31,5,1,""],funcThatRaises:[31,5,1,""]},"Cheetah.Tests.NameMapper.DummyClass":{classVar1:[31,4,1,""],meth1:[31,2,1,""],meth2:[31,2,1,""],meth3:[31,2,1,""],meth:[31,2,1,""]},"Cheetah.Tests.NameMapper.MapBuiltins":{test_int:[31,2,1,""]},"Cheetah.Tests.NameMapper.NameMapperTest":{VFN:[31,2,1,""],VFS:[31,2,1,""],check:[31,2,1,""],failureException:[31,4,1,""],get:[31,2,1,""],namespace:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFF":{get:[31,2,1,""],setUp:[31,2,1,""],test_VFF_1:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFFSL":{VFFSL:[31,2,1,""],get:[31,2,1,""],setUp:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFN":{test10:[31,2,1,""],test11:[31,2,1,""],test12:[31,2,1,""],test13:[31,2,1,""],test14:[31,2,1,""],test15:[31,2,1,""],test16:[31,2,1,""],test17:[31,2,1,""],test18:[31,2,1,""],test19:[31,2,1,""],test1:[31,2,1,""],test20:[31,2,1,""],test23:[31,2,1,""],test24:[31,2,1,""],test27:[31,2,1,""],test28:[31,2,1,""],test29:[31,2,1,""],test2:[31,2,1,""],test30:[31,2,1,""],test31:[31,2,1,""],test32:[31,2,1,""],test33:[31,2,1,""],test34:[31,2,1,""],test35:[31,2,1,""],test36:[31,2,1,""],test37:[31,2,1,""],test38:[31,2,1,""],test39:[31,2,1,""],test3:[31,2,1,""],test40:[31,2,1,""],test41:[31,2,1,""],test42:[31,2,1,""],test43:[31,2,1,""],test44:[31,2,1,""],test45:[31,2,1,""],test46:[31,2,1,""],test47:[31,2,1,""],test48:[31,2,1,""],test49:[31,2,1,""],test4:[31,2,1,""],test50:[31,2,1,""],test51:[31,2,1,""],test52:[31,2,1,""],test53:[31,2,1,""],test54:[31,2,1,""],test55:[31,2,1,""],test56:[31,2,1,""],test57:[31,2,1,""],test58:[31,2,1,""],test59:[31,2,1,""],test5:[31,2,1,""],test60:[31,2,1,""],test61:[31,2,1,""],test6:[31,2,1,""],test7:[31,2,1,""],test8:[31,2,1,""],test9:[31,2,1,""]},"Cheetah.Tests.NameMapper.VFS":{get:[31,2,1,""],searchList:[31,2,1,""],searchListGenerator:[31,2,1,""]},"Cheetah.Tests.Parser":{ArgListTest:[32,1,1,""]},"Cheetah.Tests.Parser.ArgListTest":{setUp:[32,2,1,""],test_merge1:[32,2,1,""],test_merge2:[32,2,1,""],test_merge3:[32,2,1,""]},"Cheetah.Tests.Performance":{BunchOfWriteCalls:[33,1,1,""],DurationError:[33,3,1,""],DynamicMethodCompilationTest:[33,1,1,""],DynamicSimpleCompilationTest:[33,1,1,""],DynamicTemplatePerformanceTest:[33,1,1,""],FilterTest:[33,1,1,""],LongCompileAndRun:[33,1,1,""],LongCompileTest:[33,1,1,""],LongCompile_CompilerSettingsTest:[33,1,1,""],PerformanceTest:[33,1,1,""],perftest:[33,5,1,""]},"Cheetah.Tests.Performance.BunchOfWriteCalls":{iterations:[33,4,1,""],performanceSample:[33,2,1,""]},"Cheetah.Tests.Performance.DynamicMethodCompilationTest":{performanceSample:[33,2,1,""]},"Cheetah.Tests.Performance.DynamicSimpleCompilationTest":{performanceSample:[33,2,1,""]},"Cheetah.Tests.Performance.DynamicTemplatePerformanceTest":{loops:[33,4,1,""],test_BasicDynamic:[33,2,1,""]},"Cheetah.Tests.Performance.FilterTest":{performanceSample:[33,2,1,""],setUp:[33,2,1,""],template:[33,4,1,""]},"Cheetah.Tests.Performance.LongCompileAndRun":{performanceSample:[33,2,1,""]},"Cheetah.Tests.Performance.LongCompileTest":{compile:[33,2,1,""],performanceSample:[33,2,1,""]},"Cheetah.Tests.Performance.LongCompile_CompilerSettingsTest":{compile:[33,2,1,""]},"Cheetah.Tests.Performance.PerformanceTest":{display:[33,4,1,""],iterations:[33,4,1,""],runTest:[33,2,1,""],save:[33,4,1,""]},"Cheetah.Tests.Pinger":{Pinger:[34,1,1,""]},"Cheetah.Tests.Pinger.Pinger":{ping:[34,2,1,""]},"Cheetah.Tests.Regressions":{CustomGetAttrClass:[35,1,1,""],GetAttrException:[35,3,1,""],GetAttrTest:[35,1,1,""],InlineImportTest:[35,1,1,""],Mantis_Issue_11_Regression_Test:[35,1,1,""],Mantis_Issue_21_Regression_Test:[35,1,1,""],Mantis_Issue_22_Regression_Test:[35,1,1,""]},"Cheetah.Tests.Regressions.GetAttrTest":{test_NotFoundException:[35,2,1,""],test_ValidException:[35,2,1,""]},"Cheetah.Tests.Regressions.InlineImportTest":{test_AutoImporting:[35,2,1,""],test_FromFooImportThing:[35,2,1,""],test_ImportFailModule:[35,2,1,""],test_ProperImportOfBadModule:[35,2,1,""],test_StuffBeforeImport_Legacy:[35,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_11_Regression_Test":{test_FailingBehavior:[35,2,1,""],test_FailingBehaviorWithSetting:[35,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_21_Regression_Test":{runTest:[35,2,1,""]},"Cheetah.Tests.Regressions.Mantis_Issue_22_Regression_Test":{test_DefinedFilter:[35,2,1,""],test_NoneFilter:[35,2,1,""]},"Cheetah.Tests.SyntaxAndOutput":{AssertDirective:[36,1,1,""],AttrDirective:[36,1,1,""],Backslashes:[36,1,1,""],BlockDirective:[36,1,1,""],BreakDirective:[36,1,1,""],BreakpointDirective:[36,1,1,""],CGI:[36,1,1,""],CacheDirective:[36,1,1,""],CallDirective:[36,1,1,""],CaptureDirective:[36,1,1,""],Comments_MultiLine:[36,1,1,""],Comments_MultiLine_NoGobble:[36,1,1,""],Comments_SingleLine:[36,1,1,""],CompilerDirective:[36,1,1,""],CompilerSettingsDirective:[36,1,1,""],ContinueDirective:[36,1,1,""],DecoratorDirective:[36,1,1,""],DefDirective:[36,1,1,""],DefmacroDirective:[36,1,1,""],DummyClass:[36,1,1,""],EOLSlurpToken:[36,1,1,""],EchoDirective:[36,1,1,""],EmptyTemplate:[36,1,1,""],EncodingDirective:[36,1,1,""],ErrorCatcherDirective:[36,1,1,""],ExtendsDirective:[36,1,1,""],FilterDirective:[36,1,1,""],ForDirective:[36,1,1,""],GetVar:[36,1,1,""],I18nDirective:[36,1,1,""],IfDirective:[36,1,1,""],ImportDirective:[36,1,1,""],ImportantExampleCases:[36,1,1,""],IncludeDirective:[36,1,1,""],Indenter:[36,1,1,""],MiscComplexSyntax:[36,1,1,""],NameMapper:[36,1,1,""],NonTokens:[36,1,1,""],OutputTest:[36,1,1,""],PSP:[36,1,1,""],PassDirective:[36,1,1,""],PlaceholderStrings:[36,1,1,""],Placeholders:[36,1,1,""],Placeholders_Calls:[36,1,1,""],Placeholders_Esc:[36,1,1,""],Placeholders_Vals:[36,1,1,""],RaiseDirective:[36,1,1,""],RawDirective:[36,1,1,""],RepeatDirective:[36,1,1,""],ReturnDirective:[36,1,1,""],SetDirective:[36,1,1,""],SilentDirective:[36,1,1,""],SlurpDirective:[36,1,1,""],StopDirective:[36,1,1,""],SuperDirective:[36,1,1,""],TryDirective:[36,1,1,""],UnicodeDirective:[36,1,1,""],UnicodeStrings:[36,1,1,""],UnlessDirective:[36,1,1,""],Unspecified:[36,1,1,""],VarExists:[36,1,1,""],WhileDirective:[36,1,1,""],WhitespaceAfterDirectiveTokens:[36,1,1,""],YieldDirective:[36,1,1,""],dummyFunc:[36,5,1,""],install_eols:[36,5,1,""],testdecorator:[36,5,1,""]},"Cheetah.Tests.SyntaxAndOutput.AssertDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.AttrDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Backslashes":{convertEOLs:[36,4,1,""],setUp:[36,2,1,""],tearDown:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BlockDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.BreakpointDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CGI":{convertEOLs:[36,4,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CacheDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CallDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CaptureDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine":{test10:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_MultiLine_NoGobble":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Comments_SingleLine":{test10:[36,2,1,""],test11:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.CompilerSettingsDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ContinueDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DecoratorDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test19:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DefmacroDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.DummyClass":{callIt:[36,2,1,""],meth1:[36,2,1,""],meth2:[36,2,1,""],meth:[36,2,1,""],methWithPercentSignDefaultArg:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EOLSlurpToken":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EchoDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EmptyTemplate":{convertEOLs:[36,4,1,""],test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.EncodingDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ExtendsDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.FilterDirective":{convertEOLs:[36,4,1,""],test10:[36,2,1,""],test11:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ForDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.GetVar":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.I18nDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IfDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ImportantExampleCases":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.IncludeDirective":{setUp:[36,2,1,""],tearDown:[36,2,1,""],test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Indenter":{control:[36,4,1,""],convertEOLs:[36,4,1,""],searchList:[36,2,1,""],source:[36,4,1,""],test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.MiscComplexSyntax":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NameMapper":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test19:[36,2,1,""],test1:[36,2,1,""],test20:[36,2,1,""],test21:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.NonTokens":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.OutputTest":{DEBUGLEV:[36,4,1,""],convertEOLs:[36,4,1,""],genClassCode:[36,2,1,""],genModuleCode:[36,2,1,""],report:[36,4,1,""],searchList:[36,2,1,""],verify:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PSP":{searchList:[36,2,1,""],test10:[36,2,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PassDirective":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.PlaceholderStrings":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test19:[36,2,1,""],test1:[36,2,1,""],test20:[36,2,1,""],test21:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Calls":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test19:[36,2,1,""],test1:[36,2,1,""],test20:[36,2,1,""],test21:[36,2,1,""],test22:[36,2,1,""],test23:[36,2,1,""],test24:[36,2,1,""],test25:[36,2,1,""],test26:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Esc":{convertEOLs:[36,4,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.Placeholders_Vals":{convertEOLs:[36,4,1,""],test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RaiseDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RawDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.RepeatDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.ReturnDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SetDirective":{test10:[36,2,1,""],test11:[36,2,1,""],test12:[36,2,1,""],test13:[36,2,1,""],test14:[36,2,1,""],test15:[36,2,1,""],test16:[36,2,1,""],test17:[36,2,1,""],test18:[36,2,1,""],test19:[36,2,1,""],test1:[36,2,1,""],test20:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""],test7:[36,2,1,""],test8:[36,2,1,""],test9:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SilentDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SlurpDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.StopDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.SuperDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.TryDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnicodeStrings":{test1:[36,2,1,""],test2:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.UnlessDirective":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""],test6:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.VarExists":{test1:[36,2,1,""],test2:[36,2,1,""],test3:[36,2,1,""],test4:[36,2,1,""],test5:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhileDirective":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.WhitespaceAfterDirectiveTokens":{test1:[36,2,1,""]},"Cheetah.Tests.SyntaxAndOutput.YieldDirective":{convertEOLs:[36,4,1,""],test1:[36,2,1,""]},"Cheetah.Tests.Template":{ClassMethodSupport:[37,1,1,""],ClassMethods_compile:[37,1,1,""],ClassMethods_subclass:[37,1,1,""],MultipleInheritanceSupport:[37,1,1,""],Preprocessors:[37,1,1,""],StaticMethodSupport:[37,1,1,""],SubclassSearchListTest:[37,1,1,""],TemplateTest:[37,1,1,""],TryExceptImportTest:[37,1,1,""]},"Cheetah.Tests.Template.ClassMethodSupport":{test_BasicDecorator:[37,2,1,""]},"Cheetah.Tests.Template.ClassMethods_compile":{test_baseclassArg:[37,2,1,""],test_basicUsage:[37,2,1,""],test_classNameArg:[37,2,1,""],test_compilationCache:[37,2,1,""],test_keepRefToGeneratedCodeArg:[37,2,1,""],test_mainMethodNameArg:[37,2,1,""],test_moduleFileCaching:[37,2,1,""],test_moduleGlobalsArg:[37,2,1,""],test_moduleNameArg:[37,2,1,""]},"Cheetah.Tests.Template.ClassMethods_subclass":{test_basicUsage:[37,2,1,""]},"Cheetah.Tests.Template.MultipleInheritanceSupport":{runTest:[37,2,1,""]},"Cheetah.Tests.Template.Preprocessors":{test_basicUsage1:[37,2,1,""],test_complexUsage:[37,2,1,""],test_i18n:[37,2,1,""],test_normalizePreprocessorArgVariants:[37,2,1,""]},"Cheetah.Tests.Template.StaticMethodSupport":{test_BasicDecorator:[37,2,1,""]},"Cheetah.Tests.Template.SubclassSearchListTest":{runTest:[37,2,1,""]},"Cheetah.Tests.Template.TryExceptImportTest":{test_FailCase:[37,2,1,""]},"Cheetah.Tests.Unicode":{CommandLineTest:[39,1,1,""],EncodeUnicodeCompatTest:[39,1,1,""],InlineSpanishTest:[39,1,1,""],JBQ_UTF8_Test1:[39,1,1,""],JBQ_UTF8_Test2:[39,1,1,""],JBQ_UTF8_Test3:[39,1,1,""],JBQ_UTF8_Test4:[39,1,1,""],JBQ_UTF8_Test5:[39,1,1,""],JBQ_UTF8_Test6:[39,1,1,""],JBQ_UTF8_Test7:[39,1,1,""],JBQ_UTF8_Test8:[39,1,1,""],Unicode_in_SearchList_Test:[39,1,1,""],loadModule:[39,5,1,""]},"Cheetah.Tests.Unicode.CommandLineTest":{createAndCompile:[39,2,1,""]},"Cheetah.Tests.Unicode.EncodeUnicodeCompatTest":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.InlineSpanishTest":{setUp:[39,2,1,""],test_failure:[39,2,1,""],test_success:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test1":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test2":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test3":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test4":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test5":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test6":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test7":{runTest:[39,2,1,""]},"Cheetah.Tests.Unicode.JBQ_UTF8_Test8":{testDynamicCompile:[39,2,1,""],testStaticCompile:[39,2,1,""]},"Cheetah.Tests.Unicode.Unicode_in_SearchList_Test":{test_BasicASCII:[39,2,1,""],test_Thai:[39,2,1,""],test_Thai_utf8:[39,2,1,""]},"Cheetah.Tests.xmlrunner":{XMLTestProgram:[40,1,1,""],XMLTestRunner:[40,1,1,""],XMLTestRunnerTest:[40,1,1,""],create_error:[40,5,1,""],create_failure:[40,5,1,""],create_success:[40,5,1,""],main:[40,4,1,""]},"Cheetah.Tests.xmlrunner.XMLTestProgram":{runTests:[40,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunner":{path:[40,4,1,""],run:[40,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest":{NullStream:[40,1,1,""],setUp:[40,2,1,""],test_error:[40,2,1,""],test_failure:[40,2,1,""],test_no_tests:[40,2,1,""],test_stderr_capture:[40,2,1,""],test_stdout_capture:[40,2,1,""],test_success:[40,2,1,""],test_unittests_changing_stderr:[40,2,1,""],test_unittests_changing_stdout:[40,2,1,""]},"Cheetah.Tests.xmlrunner.XMLTestRunnerTest.NullStream":{write:[40,2,1,""]},"Cheetah.Tools":{CGITemplate:[42,0,0,"-"],MondoReport:[43,0,0,"-"],RecursiveNull:[44,0,0,"-"],SiteHierarchy:[45,0,0,"-"],turbocheetah:[46,0,0,"-"]},"Cheetah.Tools.CGITemplate":{CGITemplate:[42,1,1,""]},"Cheetah.Tools.CGITemplate.CGITemplate":{cgiHeaders:[42,2,1,""],cgiHeadersHook:[42,2,1,""],isCgi:[42,2,1,""]},"Cheetah.Tools.MondoReport":{IndexFormats:[43,1,1,""],MondoReport:[43,1,1,""],NegativeError:[43,3,1,""],PrevNextPage:[43,1,1,""],RecordStats:[43,1,1,""],Roman:[43,5,1,""],Summary:[43,1,1,""],ValuesGetterMixin:[43,1,1,""],isNonNegative:[43,5,1,""],isNotNone:[43,5,1,""],isNumeric:[43,5,1,""],mean:[43,5,1,""],median:[43,5,1,""],standardDeviation:[43,5,1,""],standardDeviation_n:[43,5,1,""],sum:[43,5,1,""],variance:[43,5,1,""],variance_n:[43,5,1,""]},"Cheetah.Tools.MondoReport.IndexFormats":{Letter:[43,2,1,""],Roman:[43,2,1,""],even:[43,2,1,""],even_i:[43,2,1,""],index:[43,2,1,""],item:[43,2,1,""],letter:[43,2,1,""],number:[43,2,1,""],odd:[43,2,1,""],odd_i:[43,2,1,""],roman:[43,2,1,""]},"Cheetah.Tools.MondoReport.MondoReport":{all:[43,2,1,""],batch:[43,2,1,""],page:[43,2,1,""],summary:[43,2,1,""]},"Cheetah.Tools.MondoReport.RecordStats":{first:[43,2,1,""],firstValue:[43,2,1,""],last:[43,2,1,""],lastValue:[43,2,1,""],length:[43,2,1,""],next:[43,2,1,""],nextPages:[43,2,1,""],next_batches:[43,2,1,""],percentOfTotal:[43,2,1,""],prev:[43,2,1,""],prevPages:[43,2,1,""],prev_batches:[43,2,1,""],summary:[43,2,1,""]},"Cheetah.Tools.MondoReport.Summary":{average:[43,2,1,""],count:[43,2,1,""],max:[43,2,1,""],mean:[43,2,1,""],median:[43,2,1,""],min:[43,2,1,""],standardDeviation:[43,2,1,""],standardDeviation_n:[43,2,1,""],sum:[43,2,1,""],total:[43,2,1,""],variance:[43,2,1,""],variance_n:[43,2,1,""]},"Cheetah.Tools.RecursiveNull":{RecursiveNull:[44,1,1,""]},"Cheetah.Tools.SiteHierarchy":{Hierarchy:[45,1,1,""]},"Cheetah.Tools.SiteHierarchy.Hierarchy":{crumbLink:[45,2,1,""],crumbSeperator:[45,2,1,""],crumbTerminator:[45,2,1,""],crumbs:[45,2,1,""],emptyCrumb:[45,2,1,""],menuLink:[45,2,1,""],menuList:[45,2,1,""]},"Cheetah.Tools.turbocheetah":{TurboCheetah:[46,1,1,""],cheetahsupport:[47,0,0,"-"],tests:[48,0,0,"-"]},"Cheetah.Tools.turbocheetah.TurboCheetah":{extension:[46,4,1,""],load_template:[46,2,1,""],load_template_file:[46,2,1,""],load_template_module:[46,2,1,""],load_template_string:[46,2,1,""],render:[46,2,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport":{TurboCheetah:[47,1,1,""]},"Cheetah.Tools.turbocheetah.cheetahsupport.TurboCheetah":{extension:[47,4,1,""],load_template:[47,2,1,""],load_template_file:[47,2,1,""],load_template_module:[47,2,1,""],load_template_string:[47,2,1,""],render:[47,2,1,""]},"Cheetah.Tools.turbocheetah.tests":{test_template:[49,0,0,"-"]},"Cheetah.Tools.turbocheetah.tests.test_template":{test_normal:[49,5,1,""],test_path:[49,5,1,""],test_search:[49,5,1,""],test_string:[49,5,1,""]},"Cheetah.Utils":{Indenter:[52,0,0,"-"],Misc:[53,0,0,"-"],WebInputMixin:[54,0,0,"-"],htmlDecode:[55,0,0,"-"],htmlEncode:[56,0,0,"-"]},"Cheetah.Utils.Indenter":{IndentProcessor:[52,1,1,""],Indenter:[52,1,1,""],indentize:[52,5,1,""]},"Cheetah.Utils.Indenter.IndentProcessor":{ARGS:[52,4,1,""],CHAR:[52,4,1,""],DEC:[52,4,1,""],DIRECTIVE:[52,4,1,""],INC:[52,4,1,""],INDENT_DIR:[52,4,1,""],LINE_SEP:[52,4,1,""],OFF:[52,4,1,""],ON:[52,4,1,""],POP:[52,4,1,""],PUSH:[52,4,1,""],SET:[52,4,1,""],WHITESPACES:[52,4,1,""],WS:[52,4,1,""],process:[52,2,1,""]},"Cheetah.Utils.Indenter.Indenter":{Chars:[52,4,1,""],Level:[52,4,1,""],LevelStack:[52,4,1,""],On:[52,4,1,""],dec:[52,2,1,""],inc:[52,2,1,""],indent:[52,2,1,""],off:[52,2,1,""],on:[52,2,1,""],pop:[52,2,1,""],push:[52,2,1,""],setChar:[52,2,1,""],setLevel:[52,2,1,""]},"Cheetah.Utils.Misc":{checkKeywords:[53,5,1,""],die:[53,5,1,""],mkdirsWithPyInitFiles:[53,5,1,""],removeFromList:[53,5,1,""],useOrRaise:[53,5,1,""]},"Cheetah.Utils.WebInputMixin":{NonNumericInputError:[54,3,1,""]},"Cheetah.Utils.htmlDecode":{htmlDecode:[55,5,1,""]},"Cheetah.Utils.htmlEncode":{htmlEncode:[56,5,1,""]},"Cheetah.Version":{convertVersionStringToTuple:[58,5,1,""]},"Cheetah.convertTmplPathToModuleName":{convertTmplPathToModuleName:[60,5,1,""]},Cheetah:{CacheRegion:[1,0,0,"-"],CacheStore:[2,0,0,"-"],CheetahWrapper:[3,0,0,"-"],Compiler:[4,0,0,"-"],DirectiveAnalyzer:[5,0,0,"-"],Django:[6,0,0,"-"],DummyTransaction:[7,0,0,"-"],ErrorCatchers:[8,0,0,"-"],FileUtils:[9,0,0,"-"],Filters:[10,0,0,"-"],ImportHooks:[11,0,0,"-"],ImportManager:[12,0,0,"-"],Macros:[13,0,0,"-"],NameMapper:[15,0,0,"-"],Parser:[16,0,0,"-"],Servlet:[17,0,0,"-"],SettingsManager:[18,0,0,"-"],SourceReader:[19,0,0,"-"],Template:[20,0,0,"-"],TemplateCmdLineIface:[21,0,0,"-"],Templates:[22,0,0,"-"],Tests:[24,0,0,"-"],Tools:[41,0,0,"-"],Unspecified:[50,0,0,"-"],Utils:[51,0,0,"-"],Version:[58,0,0,"-"],compat:[59,0,0,"-"],convertTmplPathToModuleName:[60,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","class","Python class"],"2":["py","method","Python method"],"3":["py","exception","Python exception"],"4":["py","attribute","Python attribute"],"5":["py","function","Python function"],"6":["py","classmethod","Python class method"]},objtypes:{"0":"py:module","1":"py:class","2":"py:method","3":"py:exception","4":"py:attribute","5":"py:function","6":"py:classmethod"},terms:{"0b1":92,"0b2":92,"0b3":92,"0b4":92,"0b5":92,"0rc1":92,"0rc2":92,"0rc3":92,"0rc4":92,"0rc5":92,"0rc6":92,"0rc7":92,"0rc8":92,"0x816d0fc":72,"0x8170ecc":72,"10th":92,"12b1":92,"12b2":92,"12th":92,"13a1":69,"13b1":92,"13b2":92,"13th":92,"14b1":92,"15a1":92,"15a2":92,"15a3":92,"15b1":92,"15m":114,"15rc1":92,"15rc2":92,"16a1":92,"16b1":92,"17rc1":92,"17th":92,"18rc1":92,"19th":92,"1st":92,"20notat":92,"20refer":92,"24th":92,"25th":92,"29th":92,"30m":[68,114],"30th":92,"4ism":92,"4th":92,"6th":92,"8a1":92,"8a2":92,"8a3":[71,92],"8a4":92,"8th":92,"9a1":92,"9a2":92,"9a3":92,"9a4":92,"9a5":92,"9a6":92,"9b1":92,"9th":92,"abstract":[4,17],"boolean":[83,92,103,104,114],"break":[20,35,36,75,82,92,106,107,109,114,116],"byte":[92,94],"case":[18,20,25,27,28,29,30,31,32,33,35,36,37,38,39,40,71,85,92,99,102,107,109,110,114,116,117],"catch":[101,110],"char":[15,16,36,52,92,109],"class":[1,2,3,4,5,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,41,42,43,44,45,46,47,52,65,69,72,77,79,82,83,84,90,92,93,95,98,101,104,105,106,107,108,109,110,113,114,116,117],"default":[1,4,15,18,20,36,43,65,77,79,82,83,92,93,99,101,103,107,109,110,113,114,115,116,117],"final":[20,36,71,72,75,78,92,99,100,105,106,108,109,113,117],"float":[20,31,36,43,83,99,117],"function":[4,9,12,15,17,18,20,35,36,41,53,55,56,60,65,68,71,79,83,84,90,92,93,95,99,103,104,105,109,110,113,114,116],"import":[4,10,11,12,20,28,35,36,37,42,54,63,72,76,82,83,84,88,90,92,93,95,99,104,106,109,110,113,116,117],"int":[20,27,31,36,83,117],"long":[36,38,68,82,84,92,104,107,109,114,116,117],"new":[1,20,28,65,72,74,75,82,87,90,92,99,103,106,107,110,115,116,117],"public":[20,36,64,65,66],"return":[1,2,4,8,9,10,15,16,18,19,20,36,42,43,52,53,55,56,65,72,77,79,83,84,92,93,99,101,106,109,110,113,114,116,117],"short":[20,36,92,104,105,107,109,114,116,117],"static":[20,71,90,92,106,114,117],"super":[63,92,93,99,116],"switch":[65,79,92,114],"throw":[85,110],"true":[3,4,9,16,18,19,20,27,31,36,40,64,68,72,74,77,83,84,92,99,103,107,108,109,114,116],"try":[1,4,10,20,36,65,68,75,83,84,85,87,92,104,106,108,109,110,113,116,117],"var":[4,15,20,36,83,92,98,99,103,107,109,114,116,117],"void":36,"while":[12,36,65,71,75,92,93,99,101,106,108,109,110,115,116],AND:[15,36,92,109],Added:92,And:[83,103,107,109,114,116],Are:106,BUT:[99,109],Being:113,But:[3,15,20,75,83,109,114,116,117],CVS:[9,75,82,84,92,116],Das:62,Doing:[71,110],FOR:[92,109],For:[1,4,15,20,65,71,83,84,92,93,95,99,102,104,107,108,109,110,114,116,117],Its:[15,107,110],KWS:[23,92],KWs:[23,36,83,84],NOT:[12,15,36,55],Not:[81,99,110],One:[20,64,71,83,90,92,106,108,109,116,117],Such:[10,105],THAT:109,THE:92,That:[12,68,79,82,84,92,93,95,100,107,109,110,114,116,117],The:[1,2,3,10,15,18,20,21,27,36,40,42,43,45,52,63,65,68,69,71,72,74,75,76,77,78,79,81,82,83,84,85,87,92,93,94,99,100,101,102,103,105,106,107,108,109,110,111,113,114,115,116],Then:[72,78,82,99,104,113,114],There:[12,20,41,45,74,92,94,98,99,101,104,105,107,108,109,113,114,116,117],These:[4,20,65,92,95,101,103,105,109,110,116,117],USED:92,Use:[45,85,91,92,99,107,114,116],Used:[3,16,116],Useful:[90,106,110],Using:[15,36,90,95,106,109],VFS:[31,68,69,72,74,77,79,83,84],WILL:92,Was:92,Will:[65,92],With:[15,95,109,115],_1var:109,________________________________________________0123456789_______abcdefghijklmnopqrstuvwxyz______abcdefghijklmnopqrstuvwxyz_____________________________________________________________________________________________________________________________________:60,__builtin__:92,__builtins__:92,__cach:68,__cache13925129__refreshtim:68,__cache55048032__refreshtim:68,__cache88939345__refreshtim:68,__call__:109,__cheetah_gentime__:[83,84],__cheetah_src__:84,__cheetah_version__:[83,84],__class__:[20,85,92,94],__delattr__:20,__dict__:[20,85],__doc__:20,__eq__:92,__errorcatcher1:72,__errorcatcher2:72,__errorcatcher3:72,__format__:20,__getattr__:[4,31,92],__getattribute__:20,__getatttr__:35,__hash__:20,__i0:74,__i:[74,92],__init__:[1,4,20,27,53,83,84,92,101,107,116],__main__:[40,83,84],__metaclass__:92,__module__:20,__modulevars__:92,__name__:[83,84,92,94],__ne__:92,__new__:20,__path__:12,__reduce__:20,__reduce_ex__:20,__refreshtim:68,__repr__:20,__setattr__:20,__sizeof__:20,__specialconstant__:4,__str__:[20,83,84,92,107,109,117],__subclasshook__:20,__v:[20,92],__weakref__:20,_addcheetahplumbingcodetoclass:20,_assignrequiredmethodstoclass:92,_bodytagattrib:110,_build:21,_cachedata:68,_cacheindex:68,_call:83,_callarg:83,_char:52,_cheetah_:92,_cheetah__globalsetvar:20,_cheetah__indent:52,_cheetah__iscontrolledbywebkit:36,_cheetah__xxx:20,_cheetah_cachecompilationresult:20,_cheetah_cachedirformodulefil:[20,92],_cheetah_cachemodulefilesfortraceback:[20,92],_cheetah_cacheregionclass:20,_cheetah_cachestor:20,_cheetah_cachestoreclass:20,_cheetah_cachestoreidprefix:20,_cheetah_compilecach:20,_cheetah_compilelock:20,_cheetah_compilerclass:20,_cheetah_compilerinst:20,_cheetah_compilerset:20,_cheetah_defaultbaseclassfortempl:20,_cheetah_defaultclassnamefortempl:20,_cheetah_defaultmainmethodnam:20,_cheetah_defaultmainmethodnamefortempl:20,_cheetah_defaultmoduleglobalsfortempl:20,_cheetah_defaultmodulenamefortempl:20,_cheetah_defaultpreprocessorclass:20,_cheetah_generatedmodulecod:20,_cheetah_keepreftogeneratedcod:20,_cheetah_preprocessor:20,_cheetah_requiredcheetahclassattribut:20,_cheetah_requiredcheetahclassmethod:20,_cheetah_requiredcheetahmethod:20,_cheetah_usecompilationcach:20,_cheetah_xxx:20,_compil:20,_createcacheregion:20,_createconfigfil:92,_currentfilt:[72,74,77,79,83,84],_default:52,_eatmultilinedef:92,_errorcatch:72,_exceptionstocatch:101,_filedirnam:92,_filemtim:[72,83,84,92],_filenam:92,_filepath:[72,83,84,92],_filter:[35,79,92],_filterslib:79,_getcachestor:20,_getcachestoreidprefix:20,_getcompilerclass:20,_getcompilerset:20,_gettemplateapiclassforincludedirectivecompil:20,_getvaluefornam:92,_globalsetvar:[20,26,34,42,72,74,77,83,84],_handlecheetahinclud:20,_highlevelpars:[4,5,16],_includecheetahsourc:[79,92],_indent:52,_initcheetahattribut:92,_initcheetahinst:20,_initialfilt:79,_input:36,_javascriptlib:110,_javascripttag:110,_legalkw:92,_level:52,_lowlevelpars:16,_lowlevelsemanticspars:92,_maincheetahmethod_for_:94,_maincheetahmethod_for_gentempl:83,_maincheetahmethod_for_x2:77,_maincheetahmethod_for_x:[72,84],_makedummypackagefordir:92,_metatag:110,_namemapp:[15,92,104],_normalizepreprocessor:20,_normalizepreprocessorarg:20,_normalizepreprocessorset:20,_output:36,_page:93,_pathnametranschar:60,_prebuiltsearchlist:[20,26,34,42],_preprocesssourc:20,_searchlist:[72,74,77,83,84,92],_set:18,_settingscollector:18,_sin:107,_skeletonpag:[23,36,110,117],_spawnmethodcompil:4,_sre:[16,52],_str1:36,_str3:36,_stylesheet:110,_stylesheetlib:110,_stylesheetsord:110,_templat:72,_testinfo:40,_txt:52,_underscor:92,_updatesettingswithpreprocesstoken:20,_var:109,a2p:116,aaa:20,aaron:108,abandon:[92,117],abbatiello:62,abbeyj:[62,92],abbrevi:92,abc:109,abil:[65,84,92,99],abitrari:92,abl:[10,15,71,108,109],abort:[3,92],about:[9,12,15,20,43,71,75,92,100,101,104,105,107,108,109,110,113,116,117],abov:[1,4,20,77,92,94,98,99,101,104,107,114,116,117],abramowitz:62,absenc:117,absolut:[92,117],absolute_url:99,abspath:17,abstractcachestor:2,accept:[9,12,20,92,99,103,116],acces:[36,98],access:[0,1,20,31,36,84,85,90,92,101,108,114,116,117],accessor:92,accident:92,accompani:116,accomplish:93,accord:[75,92,114],accumul:[8,84],acheiv:93,achiev:104,acknowledg:106,aclass:31,acompiletimecondit:20,across:114,act:20,action:[92,103,108],activ:[33,64,72,90],activest:[33,111],actual:[20,36,68,79,87,92,105,116],adam:[62,91],add:[1,2,4,36,68,78,82,83,92,99,100,104,107,109,113,114,117],add_argu:16,add_default:16,addassert:4,addattribut:4,addbreak:4,addchunk:4,addchunktoinit:4,addclassdocstr:4,addclosur:4,addcom:4,addcontinu:4,adddecor:4,adddel:4,addecho:4,added:[12,20,75,82,83,84,92,94,98,99],addelif:4,addels:4,adderrorcatchercal:4,addexcept:4,addfilteredchunk:4,addfin:4,addfor:4,addgettextvar:4,addheaderfoot:92,addif:4,addimportedvarnam:4,addimportstat:4,addinclud:4,addindentingdirect:4,adding:[10,20,92,98,116],addit:[6,84,87,92,95,104,113,114],addmetharg:4,addmethcom:4,addmethdocstr:4,addmoduledocstr:4,addmoduleglob:4,addmodulehead:4,addonelineif:4,addpass:4,addplacehold:4,addpsp:4,addrais:4,addrawtext:4,addreindentingdirect:4,addrepeat:4,address:[15,103,107,109,117],addreturn:4,addset:[4,92],addsil:4,addspecialvar:4,addstop:4,addstrconst:4,addsup:4,addternaryexpr:4,addtimestampstocompileroutput:92,addtosearchlist:92,addtri:4,addunless:4,addwhil:4,addwritechunk:4,addyield:4,adecor:92,adequ:116,adict:[31,83],adition:116,adj:[92,107],adjac:[79,116],adjust:94,administr:[90,104,107,113],adsens:95,advanc:[1,19,20,92,99,109],advantag:[36,77,99,107,108,116,117],advic:[83,84,108],affect:[81,84,92,109,114,116],afloat:83,after:[4,45,64,69,71,75,79,81,92,98,103,104,105,107,109,114,116,117],afunc:[31,83],afunct:65,again:[71,82,83,92,99,107,108,113,114,117],against:92,agre:[82,113],ahead:71,aim:[15,85,92,109],aix:104,aka:[4,20,82,92,98,109,117],akei:92,akin:114,alcatraz:85,alejandro:92,algorithm:117,alia:[4,5,8,10,16,20,31,40,79,84,92,101,107],alist:83,aliv:[74,103],all:[1,7,9,10,15,16,20,27,36,42,43,45,52,53,64,65,68,75,79,82,83,84,85,87,91,92,93,98,99,100,101,103,104,105,106,107,108,110,113,114,115,117],allair:85,allig:79,allmethod:[107,109,116],alloc:109,allow:[4,11,15,20,53,68,71,82,84,90,91,92,99,100,103,107,109,110,114,116,117],allow_no_valu:18,allowsearchlistasmetharg:92,allowwhitespaceafterdirectivestarttoken:92,almost:[79,99],alocaldictvar:92,alon:[109,116],along:[46,47,65],alphabet:110,alreadi:[2,20,53,77,84,92,104,114],also:[0,12,15,18,20,36,42,53,65,68,71,73,75,79,80,82,83,85,86,90,92,93,98,99,101,104,105,107,108,109,110,111,112,114,116,117],alt:110,altern:[20,36,75,83,92,104,108,109,117],although:[68,79,99,100,103,109,113,114],alwai:[3,43,82,93,114,116,117],alwaysfilternon:92,ambiti:110,ambrosch:92,amd64:10,ameth:[31,83],amethodyoudefin:20,among:[82,99],amount:[52,92],amp:[55,56],analag:[99,107],analog:107,analysi:68,analysiscompil:5,analyt:[108,117],analyz:[0,5,24,92],analyzertest:25,andrea:92,ani:[4,6,7,9,15,16,18,20,36,40,42,45,52,65,68,71,75,77,82,83,87,90,92,94,98,99,103,104,105,107,108,109,110,112,114,116,117],animal_nam:99,anint:[36,83],annoi:92,announc:[82,110],anobj:[31,83],anoth:[4,20,36,52,68,69,75,82,90,92,99,107,108,109,110,114,115,116,117],another2:92,anothermissingvalu:72,answer:[68,71,117],anticip:[71,92],anwesha:62,anybodi:[75,82],anymor:92,anyon:87,anyth:[20,42,44,79,82,84,92,95,99,101,104,108,109,110,117],anytim:[71,116],anywai:117,anywher:[84,104,116,117],aoeu:83,aoeuaoeu:83,apach:[36,92,94,99,111,113,117],api:[1,2,20,92],apl:92,app:92,appar:[92,99],appear:[20,27,77,92,98,101,104,105,107,110,114,116,117],append:[99,110],appendag:4,appendgen:92,appendix:[78,92,99],appendtoprevchunk:4,appet:104,appli:[52,65,79,83,84,87,92,99,109,110,116,117],applic:[17,18,20,75,92,95,99,104,106,107,110,117],appreci:108,approach:[4,20,65,71,78,92,95,99,107],appropri:[20,52,65,71,92,108,109,117],appserv:117,appveyor:91,apr:[69,83,84],apreprocessvar:20,april:92,aquarium:20,arbitrari:[71,92,99],arbitrarili:[20,117],arcang:92,architectur:[90,108],archiv:92,area:107,aren:[84,99,107,108,110,117],arendartchuk:92,arff:[31,36,83],arg1:[31,36,83,92,98,103,109,116],arg2:[31,36,83,103,109,116],arg3:116,arg:[3,4,5,7,9,20,23,31,33,36,40,52,65,77,83,84,92,109,114,116],argentina:109,arglist:[4,16,32,107],arglisttest:32,argnam:4,argslist:4,argspec:92,argstr:[36,83],arguabl:99,argument:[1,6,9,12,15,20,27,36,53,68,77,79,82,83,84,92,101,103,104,105,107,109,110,113,114,115,116,117],argv:[3,40],aris:65,arkaitz:108,around:[1,9,36,68,87,92,98,99,101,103,109,114,117],arr:[77,99],arrai:99,arrang:[42,104,117],art:92,articl:[1,92,99,108],arun:62,arunkakorp:62,aruntimecondit:20,aruntimevar:20,ascii:[55,56,92],asctim:117,asid:92,ask:[82,87,108,113,116],asp101:99,asp:[15,68,106,108,109,114],aspect:[15,108,109],assert:[36,75,92,106,109],assertdirect:36,assertionerror:[33,72,101],assertposixsubprocess:27,assertsubprocess:27,assertwin32subprocess:27,assign:[36,76,90,92,99,106,109,116,117],assignto:4,assum:[10,15,20,71,78,92,107,108,109,117],assumpt:[92,93,107],asterisk:114,astr:[83,92],atend:19,atest:92,atstart:19,attempt:[20,52],attic:92,attr:[36,79,85,92,93,94,106,109],attract:110,attrdirect:36,attribexpr:4,attribnam:4,attribu:117,attribut:[4,7,15,20,31,37,52,68,71,77,78,82,83,84,92,99,104,105,107,109,110,116],attributeerror:[20,116,117],aug:92,augment:107,august:[71,92],austin:62,authent:[92,99,117],author:[20,64,65,66,90,92,93,99,107],autoassigndummytransactiontoself:92,autocal:[0,4,20,31,36,71,83,92,99,105,116],autoclasscompil:4,autogener:[69,83,84,92,110],autoimportforextenddirect:92,autoindent:112,autom:87,automat:[15,20,52,82,92,104,107,109,114,116,117],automethodcompil:4,avail:[20,42,65,92,104,107,110,116,117],averag:43,avial:92,avoid:[20,92,98,103,114,116,117],awai:[75,79,108,117],awak:[92,107,116,117],awar:[93,98,109,113],babi:109,back:[15,36,40,71,74,79,82,83,92,99,104,107,108,114,115,117],backend:[2,92],background:117,backport:87,backslash:[36,71,84,92,98,99,109],backup:[3,27],backup_suffix:3,backward:[41,92,110],bad:[20,92,101,117],badfloat:[20,117],badger:92,badint:[20,117],bah:109,bak:3,balanc:114,ballanc:[64,65,66,93],bam:79,bang:109,banish:[20,117],banner:95,baptist:[62,92],bar:[36,92,98,99,109,110],bare:[83,92,109,114],barf:36,barn:20,barrier:93,baruch:108,base:[1,2,3,4,5,7,8,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,39,40,42,43,44,45,52,54,65,71,75,82,90,92,93,94,99,101,102,103,107,108,109,114,116],baseclass:[4,10,17,20,92,110],baseclassnam:[4,5,92],basenam:[4,9],basi:[9,64],basic:[16,20,23,36,65,88,90,92,99,108,109,110,117],basiccodehighlighterfiltertest:29,basicmarkdownfiltertest:29,batch:43,batchrecord:43,bathtim:79,batteri:[90,106],bbb:20,becam:75,becaus:[10,15,20,36,68,71,75,77,79,83,84,92,99,107,108,109,113,114,116,117],becom:[10,52,84,99],bedrock:104,been:[10,15,52,62,64,65,66,75,77,83,84,85,92,99,100,103,104,105,107,108,109,110,114,117],beer:109,befor:[20,68,69,71,79,81,82,87,92,98,99,103,107,108,109,110,116,117],began:117,begin:[4,20,69,75,92,99,100,107,109,114,116,117],beginn:92,behav:[75,116],behavior:[7,20,28,63,92,113,116,117],behaviorist:78,behaviour:[92,99,109,110,114,115],behind:[15,65,92,106],behren:[62,92],being:[0,35,36,52,64,71,79,82,92,93,94,99,103,105,108,110,114,116,117],believ:[92,113],bellomi:108,belong:[75,82,108],below:[15,20,52,68,82,84,90,92,93,101,103,107,110,114,117],benchmark:[85,92],benefici:65,benefit:[84,92,100,108,109,110],besid:[27,83,108,112,116],best:10,beta:[92,108],better:[20,36,71,87,92,99,116,117],between:[15,20,36,65,82,84,92,98,99,100,103,105,107,109,113,114,115,116,117],bgcolor:99,bick:[44,62,75,83,84,92,108,110],big:[68,74,83,100,103,116,117],bigecho:[8,101],biggest:116,bin:[69,83,84,91,92,104,113,114],binari:104,bind:[20,75],bird:92,bit:92,bitorika:108,bla:109,black:[38,109],blag:92,blah:[92,104],blahblah:92,blank:[10,20,92,98,108,117],blarg1:83,blarg:[83,92],blend:[90,108],bless:99,blew:75,blindli:68,block1:107,block2:107,block:[10,20,36,65,68,75,83,92,95,99,101,103,106,109,110,114,117],blockdirect:[32,36],blocknam:99,blocktobepars:36,bnf:[76,78],bob:[92,99],boddi:108,bodi:[36,72,74,77,83,84,94,99,104,105,107,108,109,110,114],bodycont:110,bodytag:110,bof:36,bogdano:92,bogu:[36,71],boink:26,boinker:[0,24],bold:109,bomb:117,bone:110,bonnet:62,bonni:74,border:110,both:[10,15,20,63,65,75,84,92,99,100,107,109,113,114,116,117],bother:[88,92],bottl:109,bottleneck:108,bottom:[77,117],bottommost:107,bound:[92,99,108],box:[20,38,117],brace:[99,109,114],bracket:[92,109],branch:[87,92],breakabl:107,breakdirect:36,breakpoint:[19,36,92,106,109],breakpointdirect:36,brian:92,briefli:104,bring:74,broad:117,broader:12,broken:[92,108,117],brows:102,browser:[10,20,68,71,107,108,114,117],broytman:[62,91],bsd:90,buffer:[15,40,92,107],bufsiz:27,bug:[31,35,36,68,74,75,82,90,91,92,116],bugfix:[78,92,110],buggi:[92,117],bugzilla:39,build:[15,21,75,87,92,95,99,107,108,109,116,117],built:[9,12,82,83,85,109,117],builtin:[4,12,20,31,79,83,92,99,109],builtinimportdirector:12,bulk:[20,54,110],bump:92,bunch:[12,20,95,117],bunchofwritecal:33,bundl:[3,92,110],buster:72,button:117,cach:[1,2,20,36,37,76,90,92,99,106,108,109,110,116],cache1:[68,114],cachecollector:68,cachecompilationresult:20,cachedir:11,cachedirect:36,cachedirformodulefil:[20,92],cachedplacehold:20,cachedregex:16,cacheid:1,cacheinfo:[4,20],cacheitem:1,cacheitemid:[1,20],cachekei:116,cachemodulefilesfortraceback:[20,92],cacheregion:[0,61,92],cacheregionid:[1,20],cachestor:[0,1,61],cachetoken:[4,16],cachetokenpart:4,calcul:[74,92,99,107,108,110,114,116,117],call:[4,15,20,35,36,40,53,72,75,77,79,82,83,84,92,95,99,101,103,104,105,106,107,109,113,114,117],callabl:[15,20,92,109],callback:[92,117],callbas:116,callbaseerror:116,calldirect:36,caller:[18,20,92,116],callingsuperclassmethod:[107,116,117],callit:[36,83],came:[20,75,92,117],can:[0,1,4,9,10,12,15,20,36,37,45,52,64,68,71,72,75,82,83,84,85,87,89,90,92,93,94,95,98,99,101,102,103,104,105,106,107,110,112,113,114,115,116,117],canbethread:116,candid:89,cannot:[68,92,99,101,103,104,109,114,116,117],canonic:[10,36,92],capab:20,capabl:92,capit:99,captur:[36,92,99],capturedirect:36,caraldi:[62,92],care:[71,92,103,107,116],carefulli:[99,109],careless:92,carri:92,cart:99,cascad:[0,20,106],cat:[74,103],catalog:[20,92],catastroph:71,catchbreak:40,catcher:[110,116],caus:[10,35,37,92,114,116],caveat:116,ceas:103,central:87,cert:92,certain:[9,71,99,103,104,105,107,110,114,115,116,117],cfbase:27,cfidirbas:27,cgi:[20,35,36,39,42,82,84,92,99,106,116,117],cgihead:[42,92,113],cgiheadershook:[42,92,113],cgiimport:[36,53,92,110],cgiimportmixin:92,cgiinputmixin:92,cgitempl:[0,41,92,113],chain:[92,107,117],chanc:117,chang:[10,15,18,20,40,52,65,68,71,75,79,83,84,85,92,99,101,104,107,108,109,110,113,114,115,116,117],changelog:82,chapter:[73,83,84,86,100,104,107,109,111,113,116,117],charact:[15,20,36,79,92,98,99,103,109,113,114,116,117],charg:99,charset:[42,113],chatter:3,check:[20,27,31,38,40,68,74,82,92,110,116,117],checkbox:[20,117],checkcompil:27,checkfil:27,checkfilemtim:20,checkkeyword:[53,92],checknobackup:27,checkpo:19,checksubdirpyinit:27,cheeseshop:92,cheetah3:[0,20,26,34,42,87,104,108,111],cheetah:[62,65,68,69,71,72,73,74,78,79,83,84,85,86,91,92,94,95,98,100,101,102,105,107,109,112,113,114,115],cheetah_template_class:92,cheetah_yyyi:[20,92],cheetahcachedir:[20,92],cheetahcompil:92,cheetahcorp:95,cheetahdirown:11,cheetahdoc:92,cheetahsupport:[0,41,46],cheetahtempl:[0,82,83,84,89,90,92,110,111],cheetahtemplate3:[0,87,108,111],cheetahvar:92,cheetahvari:16,cheetahvarstarttoken:[36,115,116],cheetahwrapp:[0,24,61,92],cheetahwrapperfil:27,chep:[0,24,65,66,90],chep_2_conditionalized_import_behavior:28,cherrypi:20,chiefli:75,child:[27,45,92,99,107,117],children:[45,110,117],choic:[16,20,71,116,117],choos:[20,82,93,99,105,107,116,117],chop:[4,79],chose:[20,71,117],chri:92,christoph:92,chuck:[62,75,83,84,92,108],chui:108,chunk:[4,7,10,83,92,114],circuit:114,circumst:116,citi:[15,104,109,114],cito:[111,117],cjk:116,cjson:65,clark:108,clash:[37,92],classcompil:4,classcompilerclass:4,classdef:4,classdocstr:4,classifi:92,classmethod:[20,35,88,90,92],classmethods_compil:37,classmethods_subclass:37,classmethodsupport:37,classnam:[4,20,46,47],classsignatur:4,classvar1:31,clean:[90,92,108],cleanli:[82,108],cleanup:[91,92,101],cleanupst:4,clear:[1,2,38,92],clearli:68,client:[15,92,99,103,108,109],close:[18,68,71,80,92,109],close_fd:27,closeblock:4,closedef:4,closefilterblock:4,closer:99,closur:[36,65,92],cls:20,clutter:[82,114],cmd:27,cmdlinearg:21,cmdlineifac:[21,72],code:[0,1,3,4,8,10,12,15,18,20,29,33,35,36,38,43,52,55,56,65,68,69,72,74,75,77,79,81,82,83,84,85,90,91,92,93,94,98,99,101,103,104,105,106,107,108,109,110,111,114,115,116],codec:92,codechunk:4,codegener:[19,92],codehighlight:[10,92],col:[16,68,72,74,77,79,83,92],coldfus:111,collect:[18,92,99],colombia:109,colon:[92,107,109],color:[100,109],colorstudi:[114,117],column:[92,111],com:[0,1,33,39,52,62,64,65,66,87,92,99,108,111,113,117],comamnd:92,combin:[0,36,68,83,103,108,114],combo:[20,38,117],come:[15,20,45,92,94,99,102,104,109,110,114,116,117],comm:4,comma:[36,92,109,114],command:[20,21,27,68,79,83,84,90,92,94,99,105,106,116,117],commandlin:92,commandlineopt:20,commandlinetest:39,comment:[4,20,36,68,71,76,81,84,90,92,99,104,106,109,115,117],commentoffset:115,comments_multilin:36,comments_multiline_nogobbl:36,comments_singlelin:36,commentstarttoken:[36,81,92,115],commerci:75,commit:82,commitstrconst:[4,36,92],common:[87,92,95,108,116],commun:[62,90,92],communitycheetah:92,compact:108,companion:43,compar:[99,108],comparis:[20,92,99],comparison:[99,111,117],compat:[0,40,41,61,92,108,117],compil:[0,3,5,15,16,20,21,27,33,36,37,61,65,71,72,73,75,76,78,80,84,85,86,87,88,89,90,91,92,93,98,99,104,105,106,107,108,109,113,116,117],compilecacheitem:20,compilerclass:20,compilerdirect:36,compilerset:[20,26,34,36,42,92],compilersettingsdirect:36,complain:[82,117],complaint:71,complement:[92,108],complet:[18,20,71,82,92,99,113,114,116],complex:[15,18,36,95,106,107,108,110,117],complexexampl:83,complic:[75,83,85,99,116,117],compon:[83,99,108,110,117],componentarchitectur:20,comprehens:[107,109],comput:[82,84,103,109,117],computeres:105,concaten:[107,116],concentr:108,concept:[12,63,65],conceptu:[15,75,109,114],conclud:65,concret:108,concurr:92,cond2:92,cond:92,condit:[4,92,103,109,114],condition:[63,103],conditionexpr:4,conf:36,confid:82,config:[110,117],config_load:99,configpars:[18,110,116],configparsercasesensit:18,configstr:18,configur:[85,92,99,110,117],confirm:108,conflict:[71,116],conform:92,confus:[20,71,92,102,107,109],conjunct:[35,92],connect:92,consecut:10,consid:[15,64,105,108,109,110,114,116],consider:71,consist:[71,92,99,105,109,116],constant:[4,20,83,84,92,104,109,117],construct:[77,92,99,103,104,106,114,116,117],constructor:[20,84,86,92,105,109,110,114],constuctor:92,consult:[20,117],consum:75,contain:[1,4,27,36,41,53,65,71,75,77,78,82,83,92,95,98,99,102,103,105,106,107,108,109,110,113,114,116],content:[1,4,20,36,42,45,46,47,64,65,66,77,84,92,99,104,107,108,110,113,114,116,117],context1:99,context:[7,65,92,99,117],continu:[36,84,92,106,109],continuedirect:36,contrast:[105,107],contrib:92,contribut:[41,44,62,78,90,92,106,110,116],contributor:90,contribyt:110,control:[3,21,36,75,76,82,90,92,99,106,107,108,109,114,116,117],conveni:[82,92,103,110,116,117],convent:[71,105,109,114],convers:[20,117],convert:[18,20,36,68,71,83,92,104,107,110,114,117],converteol:36,converttmplpathtomodulenam:[0,61],convertversionstringtotupl:58,convstringtonum:18,cookbook:[93,111],cookbooktempl:93,cooki:[20,92,106,113,116],copi:[18,55,56,73,82,92,95,104,107,108,110,113,114,116],copyright:[92,95,110],copyset:18,core:[20,38,82,85,90,92,104,108,109,117],corefil:62,corner:12,correct:[10,82,92,99,110,117],correctli:[92,107],correspond:[10,15,19,92,109,117],corrspond:68,cos:[36,107],costa:109,could:[1,12,15,20,36,65,68,72,74,75,94,99,101,109,116],couldn:[71,75],count:[43,74,103,109],count_charact:99,count_paragraph:99,counter:[36,99,103],counterpart:114,countri:[107,109,114],coupl:[75,113,116],courier:109,cours:[15,85,104,108,109,110,116],courtesi:92,cover:[104,109],covers:[20,117],covert:79,covertoper:114,cpu:[114,116],craig:108,creat:[1,15,20,27,40,45,53,64,65,66,68,71,82,84,87,92,95,99,103,104,105,107,108,109,113,114,116,117],create_error:40,create_failur:40,create_success:40,createandcompil:39,createmethod:20,creation:92,creativ:108,crippl:71,criteria:114,croc:79,croi:62,cross:99,crumb:[45,110],crumbcssclass:45,crumblink:45,crumbseper:45,crumbtermin:45,css:10,cstringio:92,cumbersom:75,curli:[77,107],current:[1,4,12,20,26,34,40,42,43,45,52,65,77,79,83,84,87,92,103,104,110,114,116,117],current_pyston:33,currentclass:92,currenttim:[68,69,72,74,77,83,84],currenturl:[45,110],currentyr:110,curv:99,cust:114,custom:[15,20,42,45,87,92,99,104,108,109,113,114],customgetattrclass:35,customiz:101,cut:[10,92],cvs:82,cycl:[20,92,94,116],czajkowski:[92,116],dai:[20,92,114,117],damnsimpl:[62,117],dandi:107,danga:[1,92],danger:92,daniel:92,darkest:12,darren:62,das:62,data:[1,9,15,20,31,36,90,92,99,108,109,110,117],databas:[20,107,114,116,117],date:[20,68,75,85,89,92,99,102,116],date_format:99,datetim:[99,107],daycheckbox:[20,117],deadlock:92,deal:[10,20,68,92,116,117],dealt:[92,103],debogdano:92,debug:[2,3,20,75,92,101,109,110,114,115,116,117],debuglev:36,dec:[52,92],decemb:92,decid:[71,75],decim:43,deciph:4,decis:[76,116],declar:[65,76,90,92,106,109],decod:55,decor:[4,33,35,36,92,95,98],decoratordirect:36,decoratorexpr:4,decrement:52,dedent:4,deep:[18,116],deepcopi:18,deepcopyset:18,deepest:12,deepli:[36,83,107,116],def:[1,20,36,42,65,69,72,74,83,84,92,93,94,95,98,101,103,106,109,110,113,114,116,117],default_compiler_set:20,defaultfloat:[20,117],defaultint:[20,117],defaulttest:40,defaulttestnamespac:[82,83],defdirect:36,defdocstrmsg:115,defens:92,defer:103,defin:[1,20,35,42,45,82,84,90,92,93,101,107,109,110,114,117],definetemplateblock:92,definit:[20,78,79,81,82,84,92,98,99,100,104,105,107,108,110,113,114,116,117],defmacro:92,defmacrodirect:36,defval:4,del:[68,92,106,109],delai:75,delayedcompil:92,delayedstart:92,deleg:[76,92],delet:[2,20,27,82,92,104,107,109,110,116,117],delimet:[99,105,109],delimit:[36,84,92,107,109],deliveri:[20,117],demand:92,demet:[15,109],demonstr:[101,114],denman:75,denni:92,denot:[20,93],depend:[10,43,83,84,92,104,107,109,110,114,116,117],depeyrot:82,deploy:75,deprec:7,deprecationwarn:92,depreci:[104,116],depth:[18,36,45,92,107,110],dequ:92,deriv:[93,107],descend:107,describ:[20,71,75,78,82,84,92,101,104,107,110,114,117],descript:[20,45,87,98,108,110],deserv:116,design:[15,18,65,76,90,93,99,108,109,110,117],desir:[20,107,109,116,117],destin:[3,27,92],destroi:75,detail:[0,4,9,12,20,54,61,92,99,101,103,104,105,108,110,114,116,117],detect:[15,109],determin:[15,68,109,117],develop:[0,63,65,78,82,83,84,85,90,92,95,97,99,100,101,108,110,117],devhom:20,devsit:20,devtools_en:82,diagnost:106,dic:[20,53,117],dick:90,dict1:18,dict2:18,dict:[20,31,83,92,99,103,109,110,117],dict_typ:18,dictat:107,dictionari:[0,1,9,12,18,20,36,53,68,75,82,92,99,103,110,116,117],dicttempl:92,did:[71,75,92,103,109],didn:[20,75,77,81,82,92,101,116,117],die:53,diehl:108,diff:82,differ:[15,20,65,68,74,79,82,83,84,92,98,99,100,101,103,104,105,107,109,110,113,114,115,116,117],difficult:116,difficulti:108,diffutil:82,digit:[105,109],dile:79,dir:[9,20,92],direct:[1,4,10,12,20,35,36,52,65,68,71,75,76,78,82,84,85,92,93,94,98,99,100,101,103,105,106,108,110,114,115,116,117],directiveanalyz:[0,61,92],directiveendtoken:[92,115],directivekei:92,directivenamesandpars:92,directivestarttoken:[36,92,115],directivetoken:20,directli:[7,11,52,77,84,92,99,105,107,109,110],directori:[9,12,27,40,41,53,82,92,102,104,105,106,108,110,113],directorystructur:117,dirnam:92,dirown:[11,12],disabl:[15,28,85,92,109],disableddirect:92,disableddirectivehook:92,disallow:85,disappear:71,discard:[20,40,92,109,114,116],discov:71,discuss:[65,75,82,84,92,99,104,105,107,111,117],displai:[15,33,43,56,75,99,103,108,109,110,114,117],distinct:92,distinguish:[20,71,92,99,108,109,117],distribut:[20,78,82,92,102,104,108,114],distro:92,distutil:[82,92,104],ditto:117,divert:68,divid:[72,92],divis:[20,92],django:[0,61,92],doc:[12,69,83,92,98,99,110,111,116],docstr:[4,9,12,18,20,54,68,92,99,106,110,117],doctr:98,doctre:21,doctyp:110,document:[0,12,20,64,65,66,71,78,82,90,92,93,95,96,98,99,101,108,109,110,111,114,115,116,117],doe:[10,12,27,53,55,71,75,77,82,85,92,93,99,100,103,104,105,107,108,109,110,113,114,116,117],doesn:[1,2,4,20,43,68,71,82,92,101,104,109,114,116],doeveryth:114,doimport:12,doing:[99,107,110,113,114,116],dollar:[36,106,114],domain:[20,64,65,66,82,90,92,117],don:[3,4,18,20,27,35,36,40,43,52,53,71,73,84,92,100,103,104,107,109,113,114,116,117],done:[18,35,74,85,116],doo:[31,36,83],dooutput:77,dosometh:92,dot:[4,15,83,92,99,105,109,116,117],doubl:[102,110,117],doubt:109,doug:62,down:[72,75,87,94,107,109],download:[10,90,99,104,117],dozen:117,draft:[65,66],dramat:[89,90],drawback:71,dread:108,drew:75,drop:1,dropdown:99,dtml:[75,106],dualglob:92,dubrovski:92,duc:79,ducki:79,due:[65,71,92,114],dummi:[4,7,84,107,117],dummyclass:[31,36,83],dummyclassgetattrrais:31,dummyfunc:[31,36,83],dummyrespons:[7,92],dummyresponsefailur:7,dummyservlet:116,dummytran:[69,72,74,77,83,84,92],dummytransact:[0,61,68,72,74,77,83,84,92],dumpleton:108,duplic:[64,99,108],durationerror:33,dure:[75,92,116],duti:110,dutifulli:107,dynam:[20,71,90,92,94,107,108,110,113,114,116],dynamicallycompiledcheetahtempl:[4,5,20,35,92],dynamicmethodcompilationtest:33,dynamicsimplecompilationtest:33,dynamictemplateperformancetest:33,each:[1,9,10,12,15,20,27,37,45,53,68,71,72,74,75,78,79,83,84,92,99,103,105,107,108,109,110,114,116,117],earli:[116,117],earlier:[20,109,116],earth:104,easi:[15,71,75,90,95,99,100,108,109,114,117],easier:[15,20,71,90,92,99,100,104,108,112,114,116,117],easili:[93,94,117],eat:[36,114],eatdirect:5,eatencod:92,echo:[8,36,75,92,99,101,103,106,109,116],echodirect:36,echuck:62,edg:1,edit:[100,107,108,110],editor:[71,90,92,102,106,108],edmund:[75,92,108,116,117],edu:92,eeni:77,effect:[4,35,84,93,95,99,107,109,116,117],effici:[4,20,55,56,110],effort:[90,108,117],egenix:[99,107],egg:[89,91,92],eight:43,either:[15,20,82,87,92,95,101,104,105,108,109,110,113,116,117],eklitzk:92,elabor:[109,116],element:[20,53,92,99],elif:[20,36,68,74,92,99,103,109,117],elimin:68,elisp:92,eloranta:62,els:[4,20,36,65,68,72,74,77,79,82,83,84,92,99,101,105,106,107,108,109,114,116,117],elsewher:107,emac:100,email:[0,92,99,103,108],emb:[99,117],embed:[83,92,99,114],embperl:106,emded:99,emit:113,emphasi:108,empti:[20,36,44,92,99,103,110,113,114,117],emptycrumb:45,emptystr:[31,36],emptytempl:36,emul:[12,83,99,116],enabl:[65,92,101],enableddirect:92,encapsul:113,enclos:[36,83,92,98,109,114,116],enclosur:[36,92],encod:[4,10,19,36,39,56,65,92,99,109,112,114],encodeunicod:[10,92],encodeunicodecompattest:39,encodingdirect:36,encodingsearch:19,encount:[71,75,108,116],encourag:[87,90,108,110],encrypt:92,end:[1,4,16,20,27,36,45,46,47,65,68,71,72,74,75,77,79,83,84,90,92,95,98,99,100,105,106,108,109,110,113,114,115,116,117],endcacheregion:4,endcallregion:4,endcaptureregion:4,enddirectivenamesandhandl:92,endian:92,endpo:19,endtoken:92,energi:[108,116],enforc:92,engelhart:92,engin:[0,69,75,83,84,92,106,108,109],enhanc:[12,78,90],enough:[38,82,84,99,110,116],ensur:[92,99,107,108,110,114],entir:[20,71,92,99,107,109,116,117],entireti:10,entiti:[10,99,107,114],entri:[74,110,117],enumer:[64,92],env:[68,69,79,83,84,91,92],environ:[20,36,75,91,92,94,109,111,116],environment:[113,114,116,117],envvar:116,eof:36,eol:[36,92,109],eolslurptoken:[36,92],equal:[103,105,109],equiv:92,equival:[15,82,92,99,103,104,107,109,114,116],equval:99,erad:71,eric:92,erni:92,errmsg:53,erron:40,error:[2,3,4,8,18,19,20,21,27,40,53,76,87,90,92,104,106,108,109,110,116,117],errorcatch:[0,20,26,34,36,42,61,83,84,92,106,109,116],errorcatcherdirect:36,errorcatchernam:4,errorcheck:92,errorhandl:[72,101,109,110],errormessag:3,errorstempl:116,erwin:92,escap:[10,16,35,36,79,83,92,98,99,109,114,116],escaper:16,escaperegexchar:16,escapt:36,esoter:82,especi:[82,94,116,117],essenti:[84,107,109,116],establish:[104,117],esterbrook:[62,75,83,84,92,108],etc:[9,12,20,65,75,83,85,92,95,104,106,107,108,109,114,116,117],etext:107,euqival:99,eval:[71,72,99],evalu:[92,103,109,114,117],evalut:109,evan:[62,92,108],even:[0,12,15,43,68,75,92,99,100,104,108,109,113,116,117],even_i:43,evenrow:99,ever:[84,109],everi:[10,53,68,71,78,83,90,92,99,103,105,107,110,114,116,117],everybodi:99,everyon:87,everyth:[20,40,65,82,108,114,116],everytim:92,everywher:65,exact:[99,101],exactli:[77,92,105,107,109,116],examin:84,exampl:[1,4,15,20,45,65,68,71,79,83,90,92,93,94,95,99,103,104,106,107,110,114,115,116],exc:53,exc_info:72,exc_val:[8,72,101],except:[2,3,4,7,8,15,16,18,19,20,21,31,33,35,36,38,43,53,54,65,68,71,72,82,83,84,92,104,106,109,110,116,117],excit:116,exclus:[65,92],exec:[20,116],execut:[20,82,92,94,101,103,105,106,107,108,109,113,115,117],executecal:[4,15],exist:[1,20,27,53,71,72,82,83,84,90,92,99,108,113,114,116,117],exit:[3,40,92,103],expand:[68,83,92],expans:20,expect:[20,27,36,38,65,68,77,82,92,108,109,110,116,117],expectedoutput:[36,82],expectedoutputsubstr:27,expectedstatu:27,expecterror:27,expens:[71,116],experi:[15,87,108,109],experiment:[110,114],expir:103,explain:[15,20,92,93,105,108,109,116],explan:98,explanat:12,explicit:[36,83,92,105],explicitli:[92,93,107,109,114,117],explictli:92,exploit:82,expos:63,expr1:114,expr2:114,expr3:114,expr:[4,36,92,99,103,107,109,114],exprcompon:4,express:[16,36,71,74,75,83,92,99,103,105,106,107,109,116],expressionfilt:92,expressionfilterhook:92,expressli:99,exprtyp:92,expwebwar:117,extend:[20,36,42,78,90,91,92,93,98,99,106,108,109,110,113,116,117],extendsdirect:36,extens:[46,47,75,89,90,116,117],extensionstoignor:117,extent:92,extern:[92,107,114,116,117],extmsg:16,extra:[36,79,92,103,109,113,116,117],extra_vars_func:[46,47],extract:[75,99,107,113],extraimportstat:[4,5],extraurlpath:117,extrem:[15,20,104,109,116],eymard:92,face:[87,92],facil:[18,92,110],facilit:110,fact:[36,77,99,107],fail:[20,36,40,82,92,101,104,117],failfast:40,failur:[10,40,92,104,117],failureexcept:31,fairli:[82,92],fake:[92,117],fall:[15,75,92,104],fals:[2,3,4,15,18,19,20,27,33,36,46,47,68,69,72,74,77,83,84,92,99,103,108,109,113,114,116,117],falseexpr:4,familiar:[72,84,93],faq:[68,84,108,116],faqw:84,far:[15,75,83,87,99,109],fashion:[36,65,92,93],fast:[10,108],faster:[15,89,92,99,104,108,116],favor:92,featur:[68,71,75,78,82,83,87,91,92,100,104,106,107,108,109,110,114,116,117],feb:92,februari:92,fed:[4,92],feedback:75,feel:[90,109,110,117],fetch:99,fetchurl:99,few:[20,36,75,83,84,92,93,99,117],fewer:116,field:[20,43,92,108,109,116,117],fieldstorag:92,fifti:43,fig:95,figur:[68,71,93,94,95],fil:79,file:[3,4,5,6,9,11,12,18,20,26,27,34,35,36,40,42,45,46,47,53,68,69,72,75,76,78,79,83,84,85,90,91,92,94,98,99,102,105,106,107,108,109,110,113,114,116,117],filecont:9,filefind:9,filenam:[4,6,9,19,20,46,47,84,92,110,116,117],filename_expr:114,filerequir:82,filespec:92,filesystem:[12,92,116,117],fileutil:[0,61,106],fill:[3,27,44,71,73,75,76,78,84,85,92,95,99,101,104,105,107,108,109,110,113,114,115,116,117],filter:[0,9,20,24,26,34,35,36,42,61,68,72,74,77,83,84,90,92,99,106,109,116],filter_class_nam:114,filterarg:4,filterdir:9,filterdirect:36,filternam:79,filterslib:[20,26,34,42,114],filtertest:33,find:[1,9,19,82,92,99,103,104,108,109,110,116,117],findandreplac:9,findbol:19,findeol:19,findfil:9,fine:[75,82,92,104,107,109,110],finish:[84,92,105,110,116],first:[20,35,43,68,71,75,77,78,82,83,84,87,92,99,100,101,104,105,107,108,109,114,116,117],firstnam:[99,103,108],firstvalu:43,fit:[82,83,84,116,117],five:114,fix:[82,87,91,92,108,109],flag:[20,84,92,117],flat:[27,74,92,99,103],flatrecursecollis:27,fledg:99,flesh:110,flexibl:[0,20,71,90,92,99,104,108,114,117],flintston:104,flow:[75,76,90,99,106,108,109,114],flowcontrol:[74,103,114],flush:[7,116],fly:105,fname:109,fnm:12,follow:[1,15,20,27,31,35,36,71,82,83,84,87,92,98,101,103,104,105,107,108,109,110,114,116,117],font:114,foo:[20,36,65,83,92,99,109],foofoo:99,footer:[92,95],fopen:20,forbiddendirect:16,forbiddenexpress:16,forbiddensyntax:16,fordirect:36,foreach:99,forev:[41,114],forget:[68,74,113],forgot:116,forgotten:92,fork:[90,92],form:[0,15,20,36,44,74,75,92,98,101,106,108,109,110,113,114],format:[3,40,46,47,75,90,92,99,108,110,112,114,116,117],formatmetatag:110,formatt:92,former:71,formula:83,forum:117,found:[9,12,15,20,33,36,52,72,87,92,101,104,105,107,109,110,116,117],four:[84,99],fprintfmessag:3,fqname:12,fragil:71,fragment:[46,47],frame:[4,15,92],framework:[0,2,20,38,63,90,92,99,101,106,107,108,110],framwork:92,franz:108,fred:104,free:[90,110,116],freebsd:104,freeli:[99,116],frequent:[68,84,114,116,117],fri:69,friendli:[44,84,92,100,108,110],frogqueri:99,from:[4,10,12,15,18,20,26,31,32,34,35,36,39,40,42,45,65,68,71,72,74,75,82,83,84,87,88,89,90,92,94,95,98,99,103,104,106,108,109,110,113,115,116,117],fromlist:12,front:[18,108],frozen:12,frozenimportdirector:12,frustrat:[87,108],full:[4,54,90,92,99,108],fulli:[90,108],fullpath:9,fun:79,func2:[92,109],func3:109,func:[12,20,31,36,83,92,109,114],functhatrais:31,functionarg:114,functioncal:114,functionnam:4,funformkit:[99,117],further:[15,20,45,94,99,107,109],furthermor:99,futur:[7,20,63,68,82,85,92,99,110,114,115],gain:94,gajda:92,game:0,gape:92,garbag:36,gave:75,gazett:113,geiger:108,geir:108,gelato:75,gen:92,gencacheinfo:4,gencacheinfofromarglist:4,gencheetahvar:4,genclasscod:36,gener:[0,1,4,9,12,20,35,65,68,69,71,72,74,75,77,78,79,81,82,83,84,90,92,94,95,98,104,105,106,107,108,109,110,113,115,116,117],generatedclasscod:20,generatedmodulecod:[20,83],generatedpycod:20,genmodulecod:36,gennamemappervar:[4,92],genparsererrorfrompythonexcept:20,genplainvar:4,gentempl:83,gentimeinterv:4,genutil:[4,92],geoff:108,get:[2,12,18,20,31,36,37,42,68,72,73,75,83,85,89,90,92,99,103,105,106,107,109,110,113,116,117],get_suffix:12,getallvalu:[20,117],getarglist:16,getarticl:1,getarticleid:1,getattr:[72,79,84,94,116],getattrexcept:35,getattrtest:35,getbundl:3,getc:19,getcacheitem:1,getcacheregion:20,getcustom:[15,109],getdata:1,getdescr:12,getexpirytim:1,getexpress:92,getfilecont:[20,99],getfilestat:9,getfoo:107,getlin:19,getmethod:36,getmod:[11,12],getmodulecod:4,getmoduleencod:4,getmtim:[69,72,74,77,83,84],getnamechunk:92,getnonwhitespac:19,getparam:36,getpathext:12,getrefreshtim:1,getrowcol:19,getrowcollin:19,getsuffix:12,gettemplateclass:92,gettext:[4,83,92,99,106],gettextiledcont:[20,92],gettexttoken:116,gettingstart:[104,108,117],gettyp:36,getunknown:92,getvalu:[7,68,72,74,77,83,84,99],getvar:[20,36,92,99,109,116],getwhitespac:19,gill:82,git:87,github:[0,87,89,108,111,117],give:[45,68,79,84,85,90,92,99,106,107,113,116,117],given:[20,36,40,55,56],glob:[9,110],global:[4,12,20,36,72,79,82,83,84,92,107,109,114,116,117],globalsetvar:[72,74,77,83,84],globpattern:9,glossari:105,glue:107,gmail:[62,92],gmtime:95,gnuwin32:82,goal:[71,116],gobbl:[19,36,92,109],gobblewhitespacearoundmultilinecom:92,goe:[10,99,108],going:[75,92,117],gone:[92,103],good:[15,44,87,101,109,110],goodi:[92,116,117],googl:[15,62,92,95,102,109],gordon:12,got:[75,92,110],gotobookmark:19,gotten:12,govern:105,grace:92,gracefulli:[40,82],gradual:108,graham:[92,108],grammar:76,grandkid:27,grandpar:110,graphic:[90,108,117],great:[75,92,116],greater:[52,117],greet:[84,108],greg:[92,116],gregori:92,grei:99,grew:108,grok:[4,92],ground:65,group:[16,108,116],guarante:[41,110],guess:[10,100],guess_lex:10,guid:[20,71,82,84,90,92,105,107,109,111],guidelin:[63,92],gutenberg:107,hack:[12,82,92],had:[10,71,75,92],hadn:108,hahaha:72,haigh:62,hairi:90,half:[92,117],hall:[92,108],halt:101,hand:[20,116,117],handi:[18,92],handl:[1,20,36,65,71,76,84,90,92,106,107,108,110,113,116,117],handlei18n:92,handler:[92,109],handlerforextendsdirect:92,handlewsbeforedirect:4,happen:[20,75,79,84,87,104,108,109,110,114,116],happi:90,hard:[71,75,99,107,108,109,116],hardcod:116,harder:[68,100,116],harmless:4,harri:90,has:[10,15,18,45,64,65,66,68,71,75,77,82,83,84,85,92,99,100,101,103,104,105,107,108,109,110,111,114,116,117],has_lots_of_condit:109,hasattr:82,hasbookmark:19,hascooki:117,hasexpir:1,hasfield:117,hash:[36,92,93,98,109],hashdict:20,hashlib:65,hashlist:20,hashtabl:99,haskei:15,hasset:18,hasvalu:117,hasvar:[20,92,116],hat:39,have:[2,12,15,20,52,62,65,71,72,75,78,79,82,83,84,85,87,92,94,98,99,102,103,104,105,106,107,108,109,110,113,114,117],haven:[104,107,108,116],head:[94,104,107,108,110,114],header:[4,10,42,92,106,110,113],hear:116,heavi:65,hei:[101,109],height:[20,110,117],held:108,hell:75,hello:[20,65,83,84,92,94,104,108],help:[3,20,82,85,92,93,98,99,100,104,108,109,113,116,117],helper:[54,82,107,117],henc:116,her:117,here:[12,15,20,41,64,68,75,79,83,84,85,87,92,98,99,101,103,104,107,108,110,113,114,115,116,117],hereaft:65,hex:[99,109],hexdigest:65,hidden:[108,117],hide:[20,44,110],hierarch:117,hierarchi:[45,95,104,110,117],high:82,higher:109,highest:107,highli:[90,108],highlight:[10,29,92,100],his:[52,75,92],histori:76,hit:92,hiya:104,hmm:[77,110],hola:109,holder:1,hole:92,home:[20,26,34,42,45,104,110,111],homepag:[0,45],hood:[20,92,108],hook:[9,11,12,20,85,92,98],hope:108,host:[87,117],hour:[75,114],housekeep:104,how:[4,20,36,43,65,68,70,71,73,75,78,80,81,82,84,90,100,102,103,104,106,107,109,110,115,116,117],howel:111,howev:[85,92,95,99,100,103,107,109,110,114,116,117],howwork:[104,108,109,117],href:[99,103,108],htm:[82,111],html:[10,12,20,21,23,42,45,46,47,55,56,71,79,82,83,90,92,94,99,100,104,106,107,110,111,114,116,117],html_option:99,html_select_d:99,html_select_tim:99,htmldecod:[0,51,92],htmlencod:[0,51,55,92],htmltag:110,http:[0,1,10,12,20,33,39,82,83,84,87,92,99,107,108,110,111,113,114,116,117],http_equiv:92,httprequest:117,httpservlet:[20,117],human:[105,109,117],hundr:92,huss:92,hybrid:117,hyperlink:[110,114],hyphen:[103,117],i18n:[0,13,20,92],i18ndirect:36,ian:[44,62,75,83,84,92,108,110],ianbick:62,ibm:111,icon:92,idea:[20,75,87,99,108,114],ident:[68,84,92,99,103,107,109,117],identifi:[15,36,100,105,109],idiot:72,idir:27,idirflatrecursecollis:27,idirodirrecurs:27,idirrecurs:27,idontexist:101,iexist:101,ifdirect:36,ignor:[20,40,79,92,107,109,113,115,116,117],ignorebasenam:9,ignoredir:9,illeg:53,illustr:[103,108],imag:110,imagemagick:110,imagin:100,img:108,imgtag:110,immedi:[92,103,107,116,117],immun:110,impact:[85,101],implemen:[18,92],implement:[0,1,20,42,55,56,61,68,71,75,85,92,94,99,103,105,106,108,109,110,113,114,117],implicit:107,implicitli:[77,93,107,109],importantexamplecas:36,importdirect:36,importdirector:12,importedvarnam:4,importerror:[10,65,117],importhook:[0,12,61,92],importmanag:[0,11,61],importset:110,importstat:4,imposs:71,improv:[90,92],impstat:4,inaccess:108,inadvert:116,inc:[52,92,95],incant:71,includ:[15,20,36,41,82,83,87,90,92,98,99,103,105,106,107,109,113,116,117],include_php:99,includedirect:36,includefilenam:[36,114],includefrom:[4,79],includeid:[79,92],includerawexprinfilterarg:92,includeunderscor:4,incompat:110,inconsist:116,incorpor:[90,110],incorrectli:107,incorrig:116,increment:107,indent:[0,4,36,45,51,82,84,92,99,103,106,109,110,112,116],indent_dir:52,indentprocessor:52,independ:92,index:[4,43,89,90,95,99,111,117],indexformat:43,indexlog:107,indic:[83,92,117],indirect:82,individu:[10,99],ined:92,infil:[18,116],infinit:[92,103],influenc:84,info:[46,47,92,117],inform:[4,15,20,27,68,83,84,87,92,99,104,105,108,109,110,116,117],infrastructur:82,infrequ:114,ing:36,ingham:91,inherit:[20,42,76,78,82,83,88,90,91,92,104,106,109,110,113,114,116],inheritanceetc:[77,99,105,107,116,117],ini:[99,110,116],initi:[20,39,84,92,106,107,116],initialmethodcom:4,inlin:[28,35,37,65,92,98],inlineimporttest:35,inlinespanishtest:39,inner:107,innerblock1:107,innerblock2:107,innermost:83,input:[10,20,36,83,84,92,99,104,106,108,113,114,116],inputencod:36,inquiri:116,inquirytempl:116,insert:[4,20,92,99,100,107,116,117],insertlin:92,insid:[20,65,68,79,82,83,92,98,99,101,103,104,107,108,109,114,115,116,117],insignific:104,inspir:[68,108,109,114],instal:[10,11,12,82,89,91,92,106,108,111,116],install_eol:36,instanc:[1,4,9,15,19,20,40,68,71,72,74,84,92,95,99,103,104,105,107,109,110,114,116,117],instancevar1:31,instantan:116,instanti:[71,84,92,95,104,116,117],instead:[4,10,20,36,64,68,74,75,77,83,92,93,99,103,104,105,107,109,110,113,114,116,117],instruct:[76,90,92,105,106,109,117],insul:110,intact:[10,92],integ:[20,92,117],integr:[90,99,108,117],intellig:65,intend:[10,93,109,110,116],intens:114,intent:[92,107],interact:[98,104],interchang:71,interest:[75,84,99],interfac:[21,90,92,104,108,109],interfer:109,intermedi:[20,78,107,109],intermix:117,intern:[20,78,92,109,116,117],internation:[83,116],internet:[99,117],interoper:93,interpol:[75,114],interpret:[20,92,94,100,114,116],interrel:73,interspers:109,interv:[68,109,114],intn:36,intra:92,intrins:71,introduc:[35,65,84,92,93,103,104],introduct:[71,76,88,92,99,100,106],introspect:[4,92],invalid:[16,36,68,74,84,92,108,114],invent:100,invers:55,invok:[99,105,107,108,114],involv:[90,92,117],iptabl:92,irix:104,iron:[20,43],is_builtin:12,is_frozen:12,isbuiltin:12,iscgi:[42,92,113],isclassmethod:4,iscontrolledbywebkit:[92,113],isdbupd:[68,114],isdir:[9,12],iserrorcatcheron:4,isfrozen:12,isinst:92,isklass:4,islinecleartopo:19,isn:[15,36,96,109,114],isnew:1,isnonneg:43,isnotnon:43,isnumer:43,israw:4,isrunningfromwebkit:92,isstaticmethod:4,issu:[0,10,35,65,71,87,90,92,108,111,116],iswebwareinstal:92,ital:109,item0:83,item1:83,item2:83,item:[1,15,20,36,43,68,82,92,99,103,109,110,114,116,117],iter:[33,92,99,103,110],its:[0,9,10,20,43,68,71,72,75,84,90,92,99,101,102,103,104,105,107,108,109,110,114,116,117],itself:[41,79,84,90,92,93,107,108,109,116],jai:108,jakarta:[92,99,111],jame:[62,74],jan:92,januari:[68,75],java:[0,75,99,108,109,111,114,117],javascript:[99,110],javascripttag:110,jbq:[62,92],jbq_utf8_test1:39,jbq_utf8_test2:39,jbq_utf8_test3:39,jbq_utf8_test4:39,jbq_utf8_test5:39,jbq_utf8_test6:39,jbq_utf8_test7:39,jbq_utf8_test8:[39,92],jean:[62,92],jeff:[31,36,92,108],jeremiah:108,jhu:92,jjinux:62,job:117,joe:[74,103],johann:92,johnson:[31,36,92,108],join:[9,10,79,92,99,103,114],jon:62,jonathan:[62,91,92],jpq_utf8_test3:92,jroger:62,jsp:[106,108],juli:92,jump:103,jun:[64,65,66],june:92,jungl:12,junit:40,junk:92,just:[15,20,68,72,75,81,84,87,90,92,98,99,100,103,104,107,109,110,113,114,116,117],jython:92,karmix0:[62,92],karpierz:[62,91],kattner:108,kde:92,keen:107,keep:[20,52,75,82,89,92,113,114,116,117],keepreftogeneratedcod:20,kei:[1,2,4,15,18,20,36,53,68,75,83,92,93,99,103,105,109,110,115,116],kept:92,kerr:[15,109],keyerror:[2,8,92],keystrok:71,keyword:[4,6,12,20,36,53,68,79,92,101,109,110,114],kin:103,kind:[83,92,116],kindli:87,kiril:92,klass:[20,92],klitzk:[62,92],kludg:[20,92],knight:62,know:[20,68,75,104,108,109,110,114,116,117],knowledg:[78,108],known:[15,65,104,107,109],koi8:[42,113],kulezj:92,kumar:62,kuratomi:92,kurt:62,kuzelj:[52,92,108],kwarg:[5,6,7,10,27,36,40],kws:20,lack:[39,99],lakshmi:62,lambda:[83,92],lang:[20,92,111],languag:[63,71,75,78,90,92,93,99,102,105,106,108,116],larg:[33,52,75,92,102,107,108,109,117],larger:99,larri:[77,107],last:[1,15,20,35,43,69,72,77,79,83,84,92,99,103,107,108,109],lastvalu:43,late:75,latebind:71,later:[71,75,79,85,92,99,101,107,114,116,117],latest:114,latex:[92,108,114],latin:92,latter:[71,114],launch:117,law:[15,109],layout:[12,92],lazi:[1,109],ldelim:99,lead:[10,36,74,75,90,92,99,107,108,116],leaf:[107,117],leak:92,learn:[71,75,78,99,108,110],least:[1,20,82,83,93,100,109,113,117],leav:[0,20,43,68,92,101,116,117],led:75,left:[15,83,92,105,109,114,116],leftmost:83,legal:109,legalkeyword:[53,110],legalkw:92,legitim:[46,47],len:[36,99],length:[43,79,107,114],lengthi:92,less:[12,52,92,108,110,116],lesson:71,let:[71,74,79,83,104,107,110,114,116,117],letter:[15,43,104,105,109],leve:52,level:[12,27,28,36,52,65,83,92,99,105,107,109,114],levelstack:52,levestack:52,lexer:[10,16,80],liam:117,lian:[75,92,108,116],lib64:35,lib:[12,72,83,92,104,116,117],librari:[75,82,90,92,99,104,106,107,117],licens:[20,92],lie:[4,117],lied:79,lies:[74,98],life:116,like:[9,11,15,20,40,55,65,68,71,72,75,79,82,83,84,85,90,92,93,94,98,99,100,101,107,108,109,110,113,114,116,117],likewis:[36,103,107],limit:[20,92,94,108,109,114],line:[4,7,10,20,21,27,35,36,65,68,69,72,74,77,79,82,83,84,90,92,98,99,103,104,105,106,107,108,109,111,113,117],line_sep:52,linecol:[4,8,72,92,101],lineno:16,linenum:19,ling:10,link:[90,106,110],linux:[10,91,104,113],linuxgazett:113,linuxjourn:92,lis:43,lisp:92,list:[4,8,9,20,27,36,43,45,53,71,75,78,82,83,85,92,99,101,103,104,105,107,108,109,110,111,114,115,116,117],list_:53,listdir:9,listerror:[8,101],listinfo:111,listtest:27,liter:[71,75,79,83,84,99,107,109,114],littl:[3,12,18,68,75,82,92,95,116],live:[12,65,75,116,117],load:[12,20,94],load_modul:12,load_templ:[46,47],load_template_fil:[46,47],load_template_modul:[46,47],load_template_str:[46,47],loadco:12,loader:40,loadingsit:[46,47],loadmod:12,loadmodul:39,local:[4,12,20,35,36,65,68,72,74,77,79,84,92,103,105,107,108,109,110,116,117],localsdict:72,locat:[45,65,103,104,107,110,113,116],locate_cheetah:27,lock:[92,116],log:[20,109,116,117],logic:[75,82,99,107,108,117],login:104,longcompile_compilersettingstest:33,longcompileandrun:33,longcompiletest:33,longer:[36,92,97,110,114,116],longmacro:92,longplacehold:71,longwind:92,look:[15,19,20,52,65,68,71,73,78,80,82,83,84,86,92,94,99,100,105,108,109,110,114,116,117],lookup:[31,68,71,79,83,84,88,92,99,105,109,114,116],lookuperror:[15,92],loop:[31,33,36,92,98,99,103,109,110,114,116],loos:92,lose:72,lost:[12,110],lot:[36,92,94,99,116,117],lotta:[68,100],love:[103,108],lover:43,low:116,lower:[92,99],lowercas:92,lowest:107,luca:92,lvalu:[105,109],mac:[12,92],macdonald:92,maco:82,macro:[0,61,92],macrobodi:92,macrodirect:92,macromedia:111,macronam:92,made:[12,62,71,82,84,85,92],magic:107,magnusson:108,mai:[7,20,68,71,72,75,82,84,92,94,99,103,104,105,107,108,109,110,113,114,116,117],mail:[75,92,99,104,107,108,110,111,114,116],mailto:[99,103,108],main:[3,5,20,21,27,40,68,69,72,74,77,79,83,84,94,99,100,105,107,109,113,114,117],main_dir:5,main_fil:5,mainclassnam:[4,5],mainli:[86,116],mainmethod:94,mainmethodnam:[4,5,20],maint:87,maintain:[68,75,82,85,90,92,98,99,100,101,105,108,109,110],maintian:[15,109],major:[20,90,91,92],make:[4,7,10,15,20,36,42,52,65,71,75,79,82,83,84,90,92,94,98,100,104,105,107,108,109,110,112,113,114,115,116,117],make_backup:3,makeappworkdir:117,makedir:53,makefil:[92,106,113],maker:[52,103],maketriplequoter:16,malici:116,manag:[15,18,104,109,110,117],mandatori:92,mani:[20,36,71,75,79,83,84,87,92,99,104,107,108,109,110,116,117],manner:117,manti:35,mantis_issue_11_regression_test:35,mantis_issue_21_regression_test:35,mantis_issue_22_regression_test:35,manual:[20,92,99,117],manualoverrid:92,map:[12,15,92,99,109],mapbuiltin:31,mapnam:92,mapper:71,mar:92,marc:62,march:92,marcin:92,margin:[4,10,116],mark:[4,83,92,93,98,107,108,109,113,116],markdown:[10,29,92,104],marker:[75,99,109],markup:[65,90,95],master:87,mat:[74,103],match:[9,19,20,36,40,71,82,92,105,109,110],matchnonwhitespac:19,matchwhitespac:19,math:[36,77,99,107],mathmodul:107,matter:[109,114],matur:106,max:[19,43,109],max_num_pyston:33,maxim:71,maximum:[71,92],maxlen:[10,36,79,114],maxsplit:99,mayb:[16,85,99,110,116],mcmillan:12,md5:65,mean:[20,43,65,71,79,82,83,85,92,94,95,104,105,107,109,113,114,115,116,117],meant:[10,92,95],meantim:117,meanwhil:[75,90],measur:92,mechan:[79,90,92,99,108],median:43,meeni:77,meet:[103,117],mel:62,member:[75,99,108],memcach:[1,2,92],memcachedcachestor:[1,2,92],memori:[1,20,92,94,103,109,114,116,117],memorycachestor:2,mention:[82,104,107,116],menu:[45,110],menubar:45,menucssclass:45,menulink:45,menulist:[45,110],mere:[104,107,114,117],merg:[16,18,87,92,110,116],mergenesteddictionari:18,messag:[3,20,27,53,82,92,104,108,117],messier:[15,109],met:75,meta:[20,92],metadata:92,metapath:12,metatag:110,meth1:[20,31,36,83,92],meth1n:20,meth2:[31,36,83,92],meth3:[31,92],meth:[31,36,83],method1:98,method2:98,method:[2,4,7,10,15,18,20,23,35,36,42,45,54,65,69,72,74,77,78,79,82,83,84,90,92,94,95,98,99,101,103,104,105,106,107,108,109,110,113,114,117],methodbodi:4,methodcompil:[4,36,92],methodcompilerclass:4,methodcompilerclassforinit:4,methoddef:4,methodnam:[4,25,27,28,29,30,31,32,33,35,36,37,39,40,116],methodsignatur:4,methwithpercentsigndefaultarg:36,mexico:109,michael:[92,108],michel:99,mid:108,middl:[65,112],might:[44,71,87,92,95,107,109,110,116,117],mightfail:101,mika:62,mike:[20,43,62,75,83,84,92,100,108,110],mikeb:[62,92],mikola:62,mimic:[20,117],min:43,mind:[92,114,116],mindspr:62,minei:77,mini:99,minim:[92,108],minimalist:104,minimum:[114,117],minimum_monkei:99,minor:[91,92],minut:[104,114],mirror:[101,109,113],misc:[0,24,51,92],misccomplexsyntax:36,miscellan:53,miscompil:109,misguidedli:92,misl:36,mismatch:[36,92],miss:[20,53,68,83,92,101,106,110,116,117],misspel:92,mistak:[71,117],mit:20,mix:[20,92,99],mixin:[18,42,82,92,93,116,117],mkdir:53,mkdirswithpyinitfil:53,mock:100,mod:[12,31],mod_python:[20,94],mode:[3,36,92,94,100,104,117],model:[42,64,68,117],modestli:85,modif:[84,92],modifi:[20,53,69,75,78,82,84,92,99,108,109,110,114,116,117],modul:[0,13,22,24,41,46,48,51,61,65,69,75,76,77,82,83,90,92,93,94,98,99,101,102,104,105,107,108,109,110,113,114,116,117],modular:[90,99,108],module_or_object:107,modulecompil:[4,5,92],moduleconst:4,moduledocstr:4,modulefoot:4,moduleglob:20,modulehead:4,modulenam:[4,5,20,39],modulo:[20,92],moe:[77,107],moin:111,moment:[92,99],mondai:[20,117],mondoreport:[0,41,92,99,110],mondoreportdoc:110,mondoreporttest:110,monitor:[92,114],monitorsrcfil:92,monkei:99,monkey_limit:99,monkeypox:62,month:75,mood:90,more:[1,4,9,10,15,20,36,55,56,71,75,76,82,83,84,87,92,99,102,103,104,105,106,108,109,110,111,114,116],more_condit:109,morefilt:114,most:[20,35,65,72,75,82,84,92,93,107,108,109,114,116,117],mostli:[65,116],mountainwebtool:111,move:[71,92,108,110,116],msg:[16,27],msgid:[20,92],mso:20,mtime:92,much:[10,15,20,27,43,71,79,92,99,108,116],muck:20,multi:[9,10,20,36,69,92,98,104,105,106,107,109,114,117],multilin:[36,92,98,116],multilinecommentendtoken:115,multilinecommentstarttoken:115,multilingu:99,multipl:[20,36,68,75,85,91,92,107,109,116,117],multipleinheritancesupport:37,multithread:116,murphi:92,must:[20,35,42,46,47,82,83,87,92,99,104,105,107,109,110,113,114,116,117],mutex:116,mutual:[65,92],myarrai:107,myattr:109,myclass:116,mycontain:92,mycooki:117,mydefault:116,myfield:117,myfilterclass:114,myinstanc:109,mylist:[109,114],mymaxlen:114,mymeth2:107,mymeth3:107,mymeth:107,mymethod:[94,116],mymixin:116,myobject:109,myparsetext:114,myprecompiledtempl:104,mypurepythonclass:107,mypythonclass:[42,113],mysessionvar:117,myset:110,mysql:111,mysubscript:109,mytempl:[20,92,98],mytemplateclasss:20,myvalu:117,myvar:[107,109,115],name:[4,11,12,15,16,18,19,20,31,36,40,62,68,71,75,77,83,84,90,92,99,103,104,105,107,108,109,110,114,116,117],namechunk:[4,16],namedgroup:16,nameerror:[83,84],namemapp:[0,4,20,24,35,36,61,71,72,83,84,89,91,92,99,101,104,105,106,116],namemapperdict:92,namemapperpart:4,namemappertag:92,namemappertest:31,namesak:108,nameslist:[77,107],namesmulti:[20,117],namespac:[0,20,26,31,34,36,42,77,82,92,99,101,104,105,106,116],namespace2:20,namesplit:12,naoeu:83,napkin:75,natur:[75,114],nautocal:83,navig:110,nbsp:[107,114],ndeepli:83,ndict:83,neat:[3,117],necessari:[4,68,71,82,84,85,87,92,105,106,110,114,116],necessarili:[71,117],need:[1,12,15,20,75,76,80,82,83,85,86,90,92,93,94,95,99,103,107,108,109,110,113,114,116,117],needless:92,neg:[36,38,103],negativeerror:43,neither:99,nest:[18,36,74,75,83,92,99,101,103,107,109,110,114,116],nesteddict:[31,83],nestedfunc:[31,83],nesteditem1:83,nesteditem2:83,net:[20,68,82,99,111,114,117],netus:99,network:92,never:[4,92,99,100,104],nevertheless:[75,116],new_modul:12,newin:36,newlin:[10,36,77,92,103,107,109,113,114],newmod:12,newset:[18,116],newspap:[20,117],newstyl:[12,92],next:[4,16,43,68,75,83,84,87,92,98,103,104,107,109,110,114,116,117],next_batch:43,nextcacheid:4,nextcallregionid:4,nextcaptureregionid:4,nextfilterregionid:4,nextpag:43,nfloat:36,nfunc:83,nfunction:83,ngettext:116,nhello:92,nicetracebacktempl:92,ninetynin:109,nintn:36,nlist:83,nnest:83,no_cach:92,noah:91,nobackup:[27,92],nobject:83,nobl:84,nodefault:18,nodelet:27,non:[15,20,79,90,92,104,106,107,108,109,110,114,117],none:[1,2,3,4,5,7,10,12,15,16,17,18,19,20,23,26,27,31,33,34,36,39,40,42,43,45,46,47,53,69,72,74,77,79,83,84,85,92,103,107,108,109,110,114,116,117],nongroup:16,nonhtml:112,nonnumericinputerror:[20,54,117],nontoken:36,nonzero:27,normal:[20,27,55,68,83,84,92,98,100,101,104,105,114,115,116,117],normand:92,normpath:17,noshad:95,notat:[4,15,83,92,99,105,109,116],note:[4,10,12,15,20,36,71,74,75,82,89,92,94,98,99,103,107,109,110,114,116,117],notfound:[15,20,31,35,72,83,84,92,101,109,110,116],noth:[20,36,44,53,81,92,99,103,107,109,110,113,114,116,117],notic:[15,71,83],notion:93,nov:[43,92],novalu:72,now:[20,36,71,75,92,95,104,107,108,109,110,113,114,116,117],npublic:36,npython:83,nstring:[36,83],nstringn:36,ntemplat:36,ntext:69,nthi:20,nucleu:75,nullstream:40,num:[36,74,92],number:[18,20,43,68,74,79,83,84,92,95,99,101,102,103,104,107,110,114,117],numer:[20,36,92,103,117],numon:36,numtwo:36,nveri:83,obei:[15,109],obj:[7,15,85,92,116],object:[1,2,3,4,7,9,10,14,15,16,17,18,19,20,31,35,36,40,41,44,52,53,68,71,75,78,79,82,83,84,90,92,93,99,105,106,107,108,109,110,111,114,116,117],objectvalu:99,observ:104,obtain:108,obviou:116,obvious:71,occas:117,occur:[35,71,72,75,92,101,105,109,115,116],ocean:74,oct:[31,92],octob:[92,108],odd:[43,75],odd_i:43,ode:79,odir:92,off:[4,10,15,20,33,36,52,65,79,85,92,101,109,116,117],offend:[101,103],offer:[75,90,114],offici:117,offset:19,offshoot:117,often:[68,107,108,111,114],ohmu:62,old:[20,92,97,99,116],older:[65,83,91,92,99,116],oldest:117,oldstyl:92,oleg:[62,91],oliveira:92,omit:[107,109,114],ommiss:99,onc:[75,99,101,114,116,117],one:[1,3,9,10,12,20,31,36,52,68,75,79,82,83,84,92,93,98,99,103,104,105,107,108,109,110,113,114,116,117],onefil:27,onefilenoextens:27,onefilewithodir:27,onelineif:[103,114],ones:[92,116],onli:[2,7,15,20,36,52,68,75,77,82,83,84,85,92,94,99,103,104,105,107,108,109,110,114,115,116,117],onto:114,opaqu:[20,92],open:[0,3,20,90,92,99,102,109,116],oper:[75,87,93,99,103,104,107,108,109,110,114,115,116,117],operand:36,opinion:99,oppos:116,opposit:[103,107,114],opt:[3,5,72,104],optik:92,optim:[15,90,92,94,106],option:[3,4,15,20,27,36,46,47,82,92,94,99,104,107,114],optionpars:92,optionstr:18,optionxform:18,optpars:92,order:[15,20,68,74,75,92,94,99,101,104,109,110,114],ordereddict:18,ordinari:[68,71,79,84,105,109,117],org:[0,10,12,20,62,83,84,92,99,107,110,111,116,117],organ:[75,87,117],orient:[15,20,90,93,108,109],orig_tran:68,origin:[20,62,90,92,99,107,113],origlist:43,orphan:43,orr:[20,43,62,75,83,84,92,108,110],orthogon:92,other:[0,7,20,31,36,68,71,75,77,83,84,87,89,90,92,93,94,104,105,106,107,108,109,112,114,116],otherfunc:92,otherhand:87,otherhtml:113,othertip:117,otherwis:[4,18,20,27,53,82,83,84,92,93,107,109,110,114,116,117],ouput:[101,106],our:[20,29,68,71,72,75,83,84,92,100,109,117],out:[0,3,9,10,20,27,36,37,53,68,71,75,76,82,85,92,99,102,103,104,105,107,108,116,117],outdat:92,outer:107,outerblock:107,outlin:[35,63,75],outpt:107,output:[4,10,20,27,35,36,40,42,45,52,68,69,72,74,75,76,77,81,82,83,84,90,92,98,99,100,101,103,104,106,107,108,109,110,117],outputchunk:7,outputencod:36,outputfilt:92,outputrowcolcom:115,outputstr:20,outputtest:[36,82],outputtransform:20,outsid:[65,68,77,84,92,99,104,107,109,110,114],over:[36,74,92,99,108,109,110,116,117],overal:99,overhaul:108,overhead:116,overkil:117,overlap:43,overrid:[18,20,36,42,45,82,92,104,107,109,113,114,115,116,117],overridden:[1,4,20,40,107],overview:[0,61,73,90,106,108],overwrit:[18,82,116],own:[20,42,72,82,92,93,99,104,107,110,113,116,117],owner:[12,92],ownertyp:12,packag:[12,47,61,72,73,82,89,92,104,107,108,110,117],packagenam:12,page1:107,page1log:107,page:[20,23,43,56,71,77,83,84,89,90,92,93,95,100,104,106,107,108,110,111,114,117],pagebreak:43,pagenam:93,pair:[68,75,107,110,114,116],paragraph:[15,104],parallel:[92,99],param:36,paramet:[1,20,68,92,114,116,117],parent1:91,parent2:91,parent:[53,92,99,105,107,110,117],parenthes:[15,74,107,109],parenthesi:109,parentnm:12,parrot:[99,103],pars:[4,20,83,92,99,109,114,115,116],parseerror:[16,92],parseopt:3,parser:[0,4,5,10,14,19,24,61,76,90,92,106,109],parserclass:[4,5],parsercom:4,parserinstruct:[81,115,116],parsetest:36,part:[36,75,82,84,99,101,104,105,107,109,116],parti:[99,106,110,117],partial:[20,36,92,115],particular:[12,82,87,99,100,105,107,108],particularli:[90,92,93,94,108,114],pass:[4,6,10,20,36,43,53,68,77,79,82,83,84,87,92,99,101,104,106,108,109,113,114,116],passdirect:36,past:[92,107],patch:[36,76,87,91,92],path:[3,11,12,17,20,27,36,39,40,46,47,53,65,83,84,92,104,110,116,117],pathimportdirector:12,pathisdir:12,pathlist:12,pathnam:[12,116],pattern:[9,16,20,92,93,110],patternorr:9,paul:108,pdf:92,peek:19,peer:92,pend:[4,109],peopl:[75,90,102,103,108,117],pep:[12,64,92],per:[20,92,116],percentoftot:43,percept:116,perfect:87,perform:[0,4,24,61,71,75,83,85,90,92,101,105,108,117],performancesampl:33,performancetest:33,perftest:33,perhap:[68,116],period:[77,105,109,114,116],perl:[20,71,99,100,103,114,117],permiss:[92,104,110,113],permit:[74,92],perso:82,person:[90,108],pertain:95,peru:109,peter:92,pformat:72,phd:[20,26,34,42,62],phdru:62,philipp:92,philosophi:106,phone:103,phoni:116,photo:111,php3:111,php:[15,20,92,106,108,109,111,113,114,117],phpbuilder:111,phplib:[75,106],phrase:98,physic:109,pick:92,pickl:92,pictur:104,picview:111,piec:[4,12,75,87],pijlman:92,pil:110,ping:34,pinger:[0,24],pip:104,pipe:20,pipelin:99,pje:92,pkg_resourc:10,place:[7,20,53,64,65,66,92,93,99,105,108,109,110,114,116,117],placehold:[4,10,16,20,36,71,72,75,76,77,78,79,82,84,85,92,99,100,101,104,105,106,107,108,110,113,117],placeholder_to_a_filter_inst:114,placeholder_to_an_error_catcher_inst:101,placeholdernam:[109,114],placeholderprocessor:92,placeholders_cal:36,placeholders_esc:36,placeholders_v:36,placeholderstarttoken:92,placeholderstr:36,placeholdertag:92,placeholdertoken:20,plachold:114,plai:93,plain:[4,56,68,92,109],plan:[68,87,92,99,104,114,117],planet:104,platform:[75,82,117],pleas:[7,82,87,99,104,108,110,117],plenti:114,plone:20,plowplat:75,plu:[36,92,99],plug:[99,104,108],plugin:[10,20,92,110,117],plumb:20,plural:[20,92],point:[15,20,43,75,86,92,99,103,107,109,115],pointer:92,pollut:[92,108],pop:[36,52],popen4:27,popen:27,popul:99,popup:99,popup_init:99,port:[75,99],portion:[84,92,99,103,108,115,117],pos:[19,36],posit:[19,36,45,92,105,109],position:92,posix:104,possibl:[1,15,20,68,82,85,92,107,109,114,115,116,117],post:[20,42,92,94,108,110,113,116,117],postgresql:111,postparsedirectivehook:92,postparseplaceholderhook:92,postpon:68,postprocessor:99,postscript:[108,116],potenti:[92,108],power:[69,83,84,99,108,117],pprint:72,practic:[43,90,107],pre:[20,88,103,114,117],preced:[36,109,114,116],preceed:109,precompil:[82,84,88,89,90,92,104,107],precursor:99,predat:12,predefin:109,prefac:[92,107],prefer:[15,99,107,109,110,114,117],prefix:[20,45,92,98,104,109,114,116,117],prematur:103,premis:65,prepar:[12,92,117],preparsedirectivehook:92,preparseplaceholderhook:92,prependtosearchlist:92,prepopul:71,preprocess:[20,52],preprocesserror:20,preprocessor:[20,32,37,92,99],prerequisit:105,preselect:[20,117],presenc:117,present:[108,116,117],preserv:[10,92,114],press:[20,108,116,117],pretend:114,pretti:[20,43,92,104,117],prettycountri:107,prev:43,prev_batch:43,prevent:[52,71,82,92,103,107,116],preview:[20,100,117],previou:[20,36,40,68,83,92,98,103,109,110,114,117],previous:[20,92,117],prevnextpag:43,prevpag:43,primari:[87,109],primarili:[87,92],primit:[75,99],princip:107,principl:[0,93,108,109],print:[3,20,27,72,83,84,92,99,103,104,107,109,110,114,116,117],printabl:107,printarg:77,printer:116,printf:92,printout:92,printsourc:116,printstat:9,prior:[20,71,87,92,95],prioriti:100,privat:68,privileg:104,probabl:[75,92,116,117],problem:[82,91,92,103,104,107],procedur:82,process:[1,52,64,84,90,92,103,106,113],processdir:9,processformdata:117,processtag:92,produc:[68,77,83,84,98,101,103,105,107,108,114,116,117],product:[75,108,110],program:[3,15,20,21,71,75,81,82,83,84,90,93,99,103,104,108,109,110,114,116,117],programm:[15,20,68,90,92,108,109],programmat:114,project:[20,26,34,42,75,99,108,111,116,117],promis:117,prompt:[82,104],prone:92,propag:92,proper:[39,92,95],properli:[20,35,40,92,95,104],properti:[40,92],propog:6,propos:[10,65,90,99],proprieti:103,protect:92,protocol:[1,20,113],provid:[1,2,4,7,11,12,15,17,18,20,23,54,65,68,71,82,85,90,92,98,100,101,104,105,108,109,110,113,114,116,117],prune:92,pseudo:[36,71],pshaw:[20,117],psp:[4,15,36,92,106,107,108,109],pspetc:99,psyco:[4,92],ptl:20,publish:111,pull:[87,91],punctuat:83,pure:[89,91,107,108,109,116,117],purpos:[15,20,63,71,92,99,100,109,110,114],push:[36,52,71,75],put:[4,20,53,68,75,82,84,98,99,103,104,107,108,109,110,113,114,116,117],py_resourc:12,pyc:[92,94],pygment:[10,92],pyimport_importmodul:92,pymodul:[83,84],pyo:92,pypi:89,python2:[35,72,92,104],python3:92,python:[0,1,2,4,10,11,12,15,18,20,36,42,43,46,47,53,62,63,65,68,69,71,72,75,78,82,83,84,87,88,89,91,92,94,95,97,98,99,101,103,104,105,106,107,108,109,110,113,114,115],pythonmethod:116,pythonpath:117,pyunit:40,pyz:12,qualiti:108,quenot:[62,92],queri:[43,68,114,117],question:[68,84,92],quick:99,quickli:[65,71,75,92],quickstart:106,quiet:92,quit:[79,84,95,96,99],quixot:20,quot:[36,55,56,79,83,92,109,114,115],quotat:92,quote_plu:99,rais:[2,10,15,20,31,35,36,53,81,92,101,109,110,116,117],raisedirect:36,raiseifmiss:116,random:107,rang:[36,74,79,92,99,103,109,114],rason:20,rat:[74,103],rather:[15,20,71,75,79,83,84,92,99,104,105,107,109,110,114,116,117],ratifi:10,raw:[4,9,36,92,99,101,106,109,116],raw_stat:4,rawcod:[4,8,72,101],rawdirect:36,rawexpr:[4,92,114],raworencodedunicod:[10,20,26,34,42,92],rawplacehold:4,rawsourc:16,rawstat:9,rawstr:36,rc1:92,rdelim:99,reach:114,read:[15,19,20,42,68,75,77,81,92,99,106,107,109,110,113,114,116,117],readabl:[12,90,109,117],reader:93,readi:[107,110],readto:19,readtoeol:19,real:[7,71,75,84,108],realist:15,realiz:[75,82],realli:[36,72,75,76,79,92,95,106,114,116],reason:[53,64,65,83,84,92,99,104,105,108,109,113,116,117],rebuild:92,recach:68,recalcul:116,recap:116,receiv:[10,105,116],recent:[35,72,92,108,116],recip:[33,90,93,111],recipe1:93,recogn:[4,27,92,109,113,114,116],recommend:[92,108,109,116,117],recompil:[20,83,84,91,92,116],record:[20,43,110,117],recordresult:9,recordstat:43,recov:40,recreat:92,recurs:[9,18,92,99,110],recurseexplicit:27,recurseexplicitwithodir:27,recurseimplicit:27,recursivenul:[0,41,92,110],red:39,redefin:[20,92,110],redefinetemplateblock:92,redesign:117,redhat:[39,62],redirect:117,redisplai:117,reduc:92,redud:92,redund:84,ref:92,refactor:92,refer:[18,20,64,82,83,85,92,95,99,105,108,109,110,116,117],referenc:77,refin:[75,110],reflect:104,refresh:[1,20,38,99,114,116],refreshcach:[20,114],refreshtim:1,refus:113,regard:113,regardless:[90,92],regex:[9,15,92],regex_replac:99,region:[1,20,68,84,92,99,109],regionid:[1,20],regiontitl:4,registri:12,registryimportdirector:12,regress:[0,24,40,65,92,104,108],regular:[10,16,36,75,83,90,105,109],reimplement:[20,90,92,107,108,110],reinterpol:114,reiter:109,rel:[20,68,92,99,110,117],relat:92,releas:[20,41,75,87,89,91,92,104,108],releg:108,relev:[20,87,92],reli:7,reliabl:[100,110],reliant:35,reloadhook:12,reloc:[37,65],remain:[41,92,104,114],remainderofexpr:4,rememb:[68,82,83,84,92,103,107,109,110,114,116,117],remind:[68,92],reminisc:71,remot:20,remoteaddress:117,remotenam:117,remoteus:117,remov:[10,53,55,75,92,99,107,110],removefromlist:53,renam:[52,92,107,109,117],render:[6,10,46,47,71,92,93,99,108,110],renderoutput:1,rene:92,reorgan:12,repackag:92,repeat:[36,82,92,99,106,107,108,109,114],repeatdirect:36,repeatedli:20,repl:[9,99],replac:[2,9,10,12,20,35,75,92,95,99,107,108,109,110,117],replacenon:36,replaceregexinfil:9,replacestrinfil:9,replic:20,report:[16,31,36,43,75,87,91,92],repositori:87,repr:36,repres:[4,18,20,45,84,105,110,116,117],represent:[18,92,104,114],reprnewlinethreshold:115,reproduc:108,reproduct:87,reprshortstrconst:115,repugn:71,request:[17,20,84,87,91,92,105,108,114,116,117],request_method:113,requir:[71,75,91,92,99,101,103,106,107,109,113,114,116,117],reread:104,reserv:110,reserved_searchlist:20,reset:[36,81,92,115],residu:92,resolut:92,resolv:[44,92,101,110],resourc:116,resp:7,respect:83,respond:[4,17,20,23,35,42,69,72,74,77,83,84,92,94,98,105,107,110,113,117],respondtoget:117,respondtoput:117,respons:[7,18,68,72,74,77,83,84,92,99,108,116,117],rest:[20,83,92,93,103,117],restrict:[90,92,93],restructur:[92,117],result:[9,10,32,35,40,65,68,71,83,84,92,94,99,104,107,109,114,116,117],retain:77,retriev:[20,92,101,114,117],retrofit:65,returnaclass:20,returndirect:36,reus:[20,36,90,92,108],reusabl:[90,108],rev:19,reveal:68,revers:114,revert:115,review:117,revis:20,revisit:95,revolv:87,rework:92,rewrit:[75,92,104],rewrot:[71,92],rexec:92,rfind:19,rica:109,rich:20,right:[92,98,107,110,114,116,117],roadmap:90,rob:107,rober:108,robert:[52,92],robert_kuzelj:52,robust:[68,92],rodrigo:92,rodrigobamboo:92,roger:[62,91],roi:107,role:93,roman:43,root:[37,104,107,117],rootpath:9,ross:[62,91],roughli:[92,99],routin:[53,82,99,104,105,107,116],rst:[64,65,66,82,92],rtyler:92,rubber:79,rudd:[62,65,75,83,84,92,93,108,110],rudimentari:92,rule:[83,105,106,107,110],run:[20,21,27,38,40,71,72,82,83,84,87,91,92,98,99,103,104,107,108,109,113,115,116,117],runasmainprogram:[20,72,83,84],runner:[40,94],runtest:[25,27,28,29,30,31,32,33,35,36,37,39,40],runtim:[20,71,72,92,101,114],runtimeerror:[20,72,81,113],rvalu:92,sad:90,safe:[36,76,110,116,117],safeconvert:7,safedeleg:85,safedelegationlevel:85,safer:92,sai:[36,79,93,103,107,114],said:[95,100],same:[2,15,20,36,37,53,68,71,77,79,83,85,87,92,99,101,103,104,105,107,108,109,110,113,114,116,117],sampl:113,samplebaseclass:104,sandbox:82,sasa:108,sat:[74,84,92,103],satisfi:117,satoh:92,satoru:92,save:[33,53,83,92,94,99],scale:117,scan:[4,19],scenario:[15,27,92,109],schedul:[20,68,117],scheme:12,schwaller:108,schwehr:62,scienc:109,scoobi:[31,36,83],scope:[65,92],scott:107,scratch:[27,109],screw:116,script:[20,27,36,42,84,91,92,99,104,106,116,117],scriptalia:113,scriptnam:21,sdist_doc:92,sea:74,search:[10,15,19,20,46,47,75,90,92,99,103,109,110,116,117],searchlist:[4,6,15,20,26,31,34,36,37,42,52,63,68,71,77,79,82,83,84,92,94,99,104,105,106,107,110,114,116,117],searchlistgener:31,second:[15,36,68,74,77,84,99,101,109,114,116,117],secretari:75,section:[15,20,77,79,90,92,99,103,104,105,107,108,109,110,113,114,116,117],sectionlog:107,secur:[85,92],sed:[10,92,99],see:[4,9,15,18,20,45,53,54,68,71,79,82,83,84,87,90,92,99,100,101,103,104,107,108,109,110,111,114,116,117],seem:[84,117],seen:79,segfault:[31,92],select:[18,90,99,107,108],self:[0,4,18,20,35,36,42,52,63,65,68,69,71,72,74,77,79,82,83,84,85,92,93,101,104,109,110,113,114,116,117],semant:[2,92,108],semi:85,send:[84,99,104,108,116,117],send_output:107,senorita:109,sens:[7,52,92,93,103],sensit:[18,92,109,114],sent:84,sentanc:99,sep:103,separ:[20,68,75,77,79,82,90,92,98,99,103,104,105,108,109,114,117],sept:92,septemb:[92,116],sequenc:[75,92,99,103,116],seri:[75,83],serial:[92,116],serv:[20,99,113,117],server:[2,92,106,111,113],serverdictionari:117,serversidepath:[17,20,92,110,116,117],serverurl:117,serverurldir:117,servic:[36,82,99,103,116],servlet2:117,servlet:[0,7,15,20,36,42,53,61,75,84,86,92,99,105,106,107,109,110,113,116],servletisrunningfromwebkit:92,session:[17,20,92,99,104,106,113,116],set:[2,4,5,15,18,20,36,52,65,68,71,74,79,83,84,85,90,92,98,99,100,101,103,106,108,109,110,113,114,116,117],set_block:99,set_fil:99,set_var:99,setbaseclass:4,setbookmark:19,setbreakpoint:19,setcachedir:11,setcallarg:4,setchar:52,setclassnam:4,setcompilerset:4,setdata:1,setdirect:36,seterrorcatch:4,setexpirytim:1,setfilt:4,setlevel:52,setmainmethodarg:4,setmainmethodnam:4,setmethodnam:4,setmethodsignatur:4,setmoduleencod:4,setpo:19,setq:92,setset:18,setshbang:4,setstyl:4,setthread:12,settingsmanag:[0,4,61,92,99,106,116],settingsmanagertest:30,settingsstr:4,settransform:4,setup:[27,31,32,33,36,39,40,82,92,104],setuptool:92,sever:[2,20,69,72,75,83,85,92,99,105,108,109,110,114,116],sgml:108,shadowpath:12,shall:65,shallow:18,shannon:[62,92],share:[87,92,93,99,103,108,116],shbang:[4,92,109],she:[103,117],sheep:109,shell:[27,71,79,82],shift:92,ship:82,shop:[75,99],shortcut:116,shorter:[15,36,83,90,99,109],should:[4,6,15,20,36,64,65,74,82,85,89,92,98,101,103,104,106,107,109,110,114,116,117],shouldn:[31,36,108],show:[27,71,78,82,83,84,92,98,100,103,104,108,109,110,116,117],show_bug:39,shown:[101,109],shumwai:[92,108],shutdown:[17,20,92],sick:116,siddl:62,side:[4,92,105,109,111,117],sidebar2:114,sidebar:[104,114],sidebarpag:117,sign:[36,105,106,114,116],signal:99,signatur:[4,20,92,107],signific:[71,75,92,101,108,109,116],significantli:[15,92,104],silenc:92,silent:[20,36,92,106,107,109,116,117],silentdirect:36,silentmod:4,silentmodeplacehold:92,silli:[79,92,114],similar:[63,77,92,99,109,114,116,117],simpl:[15,20,36,75,82,90,92,99,100,103,107,108,109,113,114,116,117],simpler:[92,117],simplest:[20,89,92,117],simpli:[82,99,107,108,114,116],simplifi:[20,92,109,117],simultan:[114,117],sin:[36,107],sinc:[10,20,68,71,75,90,92,94,98,99,100,103,104,107,108,109,117],sing:92,singl:[4,10,20,36,42,82,84,92,98,99,104,107,109,114,117],singleinherit:71,singlelineshortformfunc:92,sir:107,site1:117,site2:117,site:[45,72,90,92,104,106,107,108,110,113],sitecopyrightnam:110,sitecredit:110,sitedomainnam:110,siteframework:117,sitehiearchi:92,sitehierarchi:[0,41],sitelog:107,situat:[37,65,68,75,108,116,117],size:[20,43,74,92,100,103,107],skeleton:[23,110],skeletonpag:[0,22,36,92,99,107,117],skip:[27,77,103],slash:92,sleep:[17,20,116],slew:92,slice:[4,36,83],slide:[64,65,66,92],slightli:[20,36,92,109],slip:92,slow:[72,116],slowdown:92,slower:[15,92],slowli:116,sluggost:62,slurp:[20,36,42,74,77,92,99,103,106,107,109,113,115,117],slurpdirect:36,small:[74,92,95,103,104,107,110,117],smart:[109,113,116],smarter:75,smarti:[106,108],snag:116,snapshot:[20,116,117],snippet:95,snow:74,socialserv:62,soft:[20,36,108],softwar:[20,87,113,117],solari:104,sole:84,solut:[65,116],some:[1,11,20,31,36,38,52,68,75,82,83,87,90,92,93,98,99,100,103,104,105,107,108,110,113,114,115,116,117],somebodi:[75,82,85,117],someclass:77,somecondit:103,somedai:[75,92,99],somenam:92,someothercondit:[68,114],someplac:104,someth:[4,15,20,31,65,68,74,75,92,94,99,103,105,108,109,110,116,117],somethin2:92,something2:92,somethingels:92,sometim:[20,84,103,114,117],somewhat:[52,93],somewher:[92,107,116],soon:[52,92],sooner:114,sophist:[92,117],sophistoc:20,sorri:103,sort:114,sourc:[0,3,4,5,10,20,26,34,36,37,39,42,52,53,65,68,69,75,78,79,80,82,83,84,87,90,92,98,99,100,102,104,106,108,109,110,114,115,116,117],sourceexpr:4,sourcefilestat:9,sourceforg:[82,92,99,111,117],sourceread:[0,16,61],space:[10,20,36,79,83,92,107,109,114,116],spacifi:99,spam:[92,99],span:[69,92,109],special:[16,20,79,101,109,113,114,116],specialti:108,specialvar:4,specif:[7,15,20,71,82,84,90,92,99,104,105,107,108,110,114,115,116,117],specifi:[9,10,20,71,75,79,92,99,101,103,107,109,110,113,114,116,117],spectra:[85,111],speed:[71,84,94,104,114],speedup:116,spell:92,sphinx:[21,92],splattmpl:27,splattmplwithsubdirectori:27,split:[10,83,84,116],splitdriv:60,splitlin:19,spot:92,spread:108,spring:75,sql:[0,108],squeez:10,src:[18,19,20,27,82,92,108,110,113,117],srcdir:27,srcfile:[27,92],sre_pattern:[16,52],stabl:[75,108],stack:[4,90,92],stale:92,stand:71,standalon:[0,20,53,75,84,92,99,108,110,116],standard:[12,15,18,20,27,65,66,82,83,84,92,99,104,107,110,114,115,116,117],standarddevi:43,standarddeviation_n:43,stanza:[68,83,84,116],star:[68,116],start:[4,12,16,19,20,43,68,72,74,77,83,84,90,92,99,103,105,106,109,110,114,117],startcacheregion:4,startcallregion:4,startcaptureregion:4,startmethoddef:4,startpo:92,startserv:92,startswith:19,startup:117,state:[20,33,75,82,92,117],statement:[4,20,36,37,65,75,84,92,101,103,104,107,109,116,117],static_cach:92,staticmethod:[35,88,90,92],staticmethodsupport:37,statist:[43,92,110],statprof:[0,51],statu:[27,64,65,66],stderr:[3,27,40,92,116],stdin:27,stdout:[3,27,40,92,99],steal:85,step:[75,82,85,87,92,103,105,107,108,113,117],stephan:108,steve:111,stick:68,still:[12,15,20,37,65,75,92,100,117],stock:[110,117],stone:92,stop:[36,91,92,106,109,115],stopdirect:36,store:[1,12,40,87,92,104,110,117],str2:36,str:[10,20,79,83,84,92,107,114],strang:92,strategi:[99,117],strconst:4,strcont:4,stream:[3,16,36,40,92],street:[75,114],stress:107,strftime:95,strictli:[20,93,104],string:[1,4,9,10,12,18,19,20,27,31,36,44,53,55,56,68,71,75,82,83,84,92,98,99,101,103,104,105,107,109,110,113,114,116,117],string_expr:114,string_format:99,stringio:[84,92,99],stringisnumb:18,strip:[10,36,92,99,107],strip_tag:99,stripsqueez:[10,36,92],stroll:78,strong:[90,95],strorr:19,structur:[15,18,23,77,82,84,90,95,101,106,107,108,109,110,116],stub:[20,92],stuck:116,studi:82,stuff:[68,92,106,116],stunnel:92,stupid:[75,109],style:[20,36,65,83,90,92,99,106,109,110,114,115],stylesheettag:110,sub:[9,92],subclass:[15,20,27,37,42,53,82,84,90,92,93,101,105,107,108,109,110,114,116,117],subclasssearchlisttest:37,subcommand:[27,104],subcompon:4,subcript:[36,83],subdir:27,subdirectori:[27,92,102,104,117],subject:[20,92,108],submit:[20,36,78,82,87,108,117],submodul:61,subpackag:61,subplacehold:109,subprocess:27,subscript:[36,43,75,83,92,109,111,114],subsect:117,subsequ:[101,109],subsitut:117,substitut:[20,110,117],substr:[27,105],subsystem:82,subtempl:[75,92],subvers:92,succe:[27,79],success:[40,83,104,117],successfulli:[83,117],suffer:75,suffici:[33,82],suffix:[20,43,53,105,117],suggest:[75,92,117],suit:[40,82,83,90,92,104,108,110,117],suitabl:[92,110],sum:[43,103,109],summari:[9,43,106,110],summer:108,sun:83,superceed:92,superclass:[84,92,106,107,117],superdirect:36,superfici:99,supplement:92,suppli:[40,77,92,110,116],support:[4,15,47,75,90,91,92,94,95,97,104,105,107],suppos:[20,94],supposedli:71,suppress:[27,114],sure:[20,36,82,92,98,107,109,113,116,117],surnam:[99,103,108],surpris:[107,109],surreal:83,surround:[36,92],svn:[9,92],swath:92,symbol:65,syn:36,synchron:92,synonym:[92,103,116],syntact:103,syntax:[10,15,16,20,36,52,68,71,75,78,83,90,92,95,98,99,100,101,103,105,106,107,108,114,115,116],syntaxandoutput:[0,24,32,82,83,92,102],syntaxerror:116,sys:[12,20,72,83,84,99,116],system:[12,15,71,72,75,82,87,92,104,106,108,109,110,116],systemwid:104,tab:116,tabl:[99,103,108,117],tada:83,tag:[10,20,39,52,55,71,92,99,100,101,103,105,106,107,109,110,114,115,117],tag_nam:109,tagprocessor:92,take:[6,20,36,77,78,82,92,99,105,107,109,110,114,116,117],taken:[39,83],talk:107,tall:[20,117],talvola:108,tan:36,tarbal:[73,87,89,102],target:[20,36,92,99,116],task:[20,92,99,104,117],taught:15,tavi:[62,65,71,75,83,84,92,93,100,104,108,110],tclass:20,team:[20,90,92,108],teardown:[27,36],technic:[107,108],techniqu:116,technolog:90,tediou:[99,116],tedium:116,tei:108,tell:[20,68,84,99,103,109,115],temp:92,templat:[0,4,6,7,10,15,17,21,24,26,32,33,34,35,36,38,39,42,46,47,53,54,61,63,65,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,85,88,91,92,93,95,98,100,101,103,104,105,106,107,109,112,113,114,115],template3:104,template_dir:6,template_fil:[6,46,47],template_str:[46,47],templateapiclass:[20,92],templatecacheidprefix:1,templateclass:92,templatecmdlineifac:[0,61,72],templatedef:104,templatefileextens:[11,92],templatemisc:92,templateobj:[8,21,72,92,101],templatepreprocessor:20,templaterepositori:92,templateserv:[75,92],templatesystem:111,templatetest:37,templt:92,temporari:[68,91,92,104],temporarili:99,tenet:93,term:[20,75,99,100,104,105,109,117],termin:20,terrel:[92,108],terri:92,ters:12,test10:[31,36],test11:[31,36],test12:[31,36],test13:[31,32,36],test14:[31,36],test15:[31,36],test16:[31,36,82],test17:[31,36],test18:[31,36],test19:[31,36],test1:[31,36,82],test20:[31,36],test21:36,test22:36,test23:[31,36],test24:[31,36],test25:36,test26:36,test27:31,test28:31,test29:31,test2:[31,36],test30:31,test31:31,test32:31,test33:31,test34:31,test35:31,test36:31,test37:31,test38:31,test39:31,test3:[31,36],test40:31,test41:31,test42:31,test43:31,test44:31,test45:31,test46:31,test47:31,test48:31,test49:31,test4:[31,32,36],test50:31,test51:31,test52:31,test53:31,test54:31,test55:31,test56:31,test57:31,test58:31,test59:31,test5:[31,36],test60:31,test61:31,test6:[31,36],test7:[31,36],test8:[31,36],test9:[31,36],test:[0,3,10,20,41,43,46,61,74,83,85,87,91,92,102,103,106,110,114,116,117],test_autoimport:35,test_baseclassarg:37,test_basicascii:39,test_basicdecor:37,test_basicdynam:33,test_basichead:29,test_basicusag:37,test_basicusage1:37,test_classnamearg:37,test_compilationcach:37,test_compilerset:25,test_complexusag:[32,37],test_definedfilt:35,test_error:40,test_failcas:37,test_failingbehavior:35,test_failingbehaviorwithset:35,test_failur:[39,40],test_fromfooimportth:35,test_html:29,test_i18n:37,test_importfailmodul:35,test_inlineimport:28,test_int:31,test_keepreftogeneratedcodearg:37,test_legacymod:28,test_mainmethodnamearg:37,test_merge1:32,test_merge2:32,test_merge3:32,test_mergedictionari:30,test_modulefilecach:37,test_moduleglobalsarg:37,test_modulelevelimport:28,test_modulenamearg:37,test_no_test:40,test_nonefilt:35,test_norm:49,test_normalizepreprocessorargvari:37,test_notfoundexcept:35,test_path:49,test_properimportofbadmodul:35,test_python:29,test_search:49,test_set:25,test_stderr_captur:40,test_stdout_captur:40,test_str:49,test_stuffbeforeimport_legaci:35,test_success:[39,40],test_templ:[0,41,46,48],test_thai:39,test_thai_utf8:39,test_unittests_changing_stderr:40,test_unittests_changing_stdout:40,test_validexcept:35,test_vff_1:31,testblock:[107,109],testcas:[25,27,28,29,30,31,32,33,35,36,37,39,40,82,92],testcompil:27,testdecor:36,testdynamiccompil:39,tester:82,testfil:27,testit:107,testitem:103,testload:40,testmondoreport:43,testprogram:40,testrunn:40,teststaticcompil:39,testtext:27,text:[3,4,36,42,45,56,64,65,66,68,69,71,75,79,81,83,90,92,98,99,100,102,103,105,107,108,109,112,113,114,116],text_and_placehold:107,than:[15,20,52,71,74,75,79,83,84,89,91,92,99,104,105,107,108,109,110,111,114,116,117],thank:[92,108],theblocknam:107,thefilt:[4,114],thei:[15,20,36,41,63,65,71,73,75,82,83,84,87,90,92,95,98,101,102,104,105,107,108,109,110,113,114,116,117],them:[12,15,20,36,64,71,75,82,83,84,85,92,95,98,99,101,104,107,108,109,110,113,114,116,117],themselv:[4,15,20,92,109,116],theprivatevar:85,therang:109,therefor:109,thestr:[9,18,36],thetim:4,thevari:116,thi:[1,2,4,7,9,10,12,15,17,18,20,27,33,36,40,41,42,43,44,45,52,55,56,64,65,66,68,69,71,72,73,74,75,76,77,79,81,82,83,84,85,86,90,91,92,93,94,95,96,98,99,100,101,102,103,104,105,106,107,109,110,111,113,114,115,116,117],thing:[12,53,75,79,85,92,94,104,105,107,108,110,116,117],think:[75,87,92,107,108,116,117],third:[20,83,99,106,108,110,117],thirdparti:111,this_is_a_very_long_lin:109,thoroughli:71,those:[2,20,65,75,78,85,87,92,103,105,106,107,108,113,114,116,117],though:[68,116],thought:[75,92],thread:[106,108,117],three:[92,99,104,105,109,110],threefileswithsubdirectori:27,threefileswithsubdirectoriesnoextens:27,through:[9,10,19,20,36,65,70,78,80,86,92,99,101,103,105,108,114],throughout:92,thrown:[20,117],thu:[15,20,92,98,99,107,108,109,117],thursdai:[20,117],tick:[68,84,117],tidi:92,tight:[92,99],tightli:99,till:36,tim20001112:111,time:[1,2,20,27,36,40,69,71,72,74,75,77,79,82,83,84,85,87,90,92,95,98,99,103,104,107,108,109,110,114,115,116,117],timed_refresh_cach:92,timedtest:33,timer:114,timestamp:[1,4,92,117],timestr:4,tini:107,tip:[87,90,99,106,107,108,109,113],titl:[64,65,66,94,104,107,108,110,114],title_or_id:99,tmp:[20,92],tmpl:[11,27,46,47,69,79,84,85,92,93,94,95,98,104,105,107,108,113,116,117],tmplinstanc:20,tmplpath:60,todo:[0,24,27,36,43,92,114],toe:[77,108],togeth:[99,108],token:[16,20,36,92,99],tom:[90,108],tomcat:99,too:[20,68,69,80,82,92,99,107,110,113,116,117],took:[20,116],tool:[0,61,82,90,92,99,101,106,108,113,115],top:[4,27,36,65,69,79,82,84,92,105,107,109,113,114,117],topic:[20,111],toshio:92,total:[43,109],touch:108,traceback:[15,20,35,72,87,92,108],track:[52,65,66,92],tracker:[0,87,90,108,111],tradeoff:[76,100],tradit:[28,65,84,90],trail:[10,36,77,92,99,107,109,114],tran:[17,20,23,68,69,72,74,77,79,83,84,92,116],transact:[7,17,20,36,54,77,84,86,92,116,117],transform:[4,10,20,92,98],transformerrespons:7,transformertransact:7,transit:92,translat:[4,20,83,84,92,100,116],transpar:92,travers:9,travi:[87,91],treat:[68,92,94,98,99,107,109,110,114],treatment:92,tree:[9,92,107,110],tri:[92,104],trick:[84,85,87,90,106,108],trigger:116,tripl:[36,92],trivial:[71,83,95,107],troubleshoot:[90,106,108],trueexpr:4,trump:20,truncat:[4,99,114],trust:[85,92],trydirect:36,tryexceptimporttest:37,tscompil:92,tuesdai:[20,117],tune:110,tunnel:92,tupl:[4,20,45,92,99],turbocheetah:[0,41],turbogear:20,turf:12,turn:[20,36,75,82,92,100,101,108,109,117],turnerrorcatcheroff:4,turnerrorcatcheron:4,turnoff:[20,117],turnon:[20,117],tut:62,tutori:[82,84,93,106,108,114],tweak:92,twice:27,twiki:114,two:[36,65,71,82,83,87,92,94,98,101,103,104,105,107,108,109,110,113,116,117],txt:[7,16,36,92,110,114],tyler:[62,64,65,66,92,93],type:[10,20,36,42,64,65,66,68,71,82,83,84,92,99,100,104,107,108,109,110,113,114,116],typeerror:[20,53,92,110,117],typefac:114,typetyp:92,typic:[87,94,108],typo:92,uhanov:92,unabl:10,unaccept:117,unattain:71,unavail:117,unbalanc:114,unchang:[36,83,92],uncheck:[20,117],unclos:[92,109],uncondition:2,undefin:[92,114],under:[20,77,82,92,101,108,116],underli:[109,116],underscor:[20,92,105,109],understand:[15,20,90,92,107,108,109,110,117],undesir:107,undid:92,undocu:[52,92,114],unfamiliar:95,unforeseen:65,unfortun:[68,87,107],ungetc:19,unicod:[0,10,24,36,91,92],unicode_in_searchlist_test:39,unicodedirect:36,unicodeencodeerror:92,unicodestr:36,unifi:[4,15,92,99,109],uniform:116,uninstal:[11,106],unintention:92,uniqu:[20,68,71,92,106,117],unit:[27,38,40,92,99,114],unittest:[25,27,28,29,30,31,32,33,35,36,37,39,40,82,92],unittest_local_copi:[82,92],univers:[83,105],unix:[82,84,117],unknown:[93,104,116],unless:[10,20,36,71,82,92,93,98,99,106,107,109,114,116],unlessdirect:36,unlik:[92,98,107,109,110,113,114],unlimit:20,unlock:116,unmolest:10,unnecessari:[85,104],unnecessarili:68,unpredict:[71,116],unsaf:116,unset:[20,117],unsnarl:92,unspecifi:[0,20,26,34,36,42,61],unsupport:[43,52],unsur:108,untest:92,until:[75,82,103],unto:90,untrust:[85,92],unus:92,unusu:107,updat:[18,65,68,82,83,91,92,104,107,111,114,116,117],updatelinecach:20,updateset:18,updatesettingsfromconfigfil:18,updatesettingsfromconfigfileobj:18,updatesettingsfromconfigstr:18,updatesettingsfrompysrcstr:18,upgrad:[110,116],upload:[20,110,117],uploadfil:110,uploadfilemixin:[20,117],upper:[83,92,99],uri:117,url:[12,20,45,99,105,107,110,116,117],urllib:99,urlpath:117,urlpathdir:117,uruguai:109,usabl:[10,42],usag:[3,15,20,21,27,36,42,71,92,107,116,117],usagemessag:3,use:[0,1,4,10,11,12,15,20,36,37,42,44,65,71,75,82,83,84,85,87,92,93,94,95,99,100,101,102,103,104,105,106,107,110,113,114,117],useac:4,useautocal:[4,15,92,109,115],usecach:20,used:[0,4,7,10,12,15,20,36,41,53,63,71,74,75,83,84,90,92,93,95,98,99,101,102,103,107,108,109,110,113,114,115,116,117],usefilt:92,useful:[10,20,42,53,56,82,87,92,95,98,107,108,110,114,116,117],usefulness:10,usekwsdictargforpassingtran:92,uselegacyimportmod:92,useless:104,uselessli:109,usenamemapp:[16,92,109,115],useorrais:[53,92],user:[20,41,68,71,77,78,82,89,90,92,99,100,104,105,108,109,110,114,116,117],usernam:117,uses:[10,15,20,36,52,84,87,92,95,99,100,103,107,108,109,110,114,116,117],usesearchlist:92,usestackfram:[4,92],using:[1,4,15,20,35,36,37,82,83,87,92,94,95,98,99,103,105,107,108,109,110,111,113,114,116,117],usr:[35,69,83,84,91,92,104],usual:[20,104,113,114,116,117],utf8:92,utf:92,util:[0,4,20,23,42,61,65,82,92,94,95,98,104,106,108,116,117],val1:109,val:[2,10,92,114],valid:[4,15,68,83,84,85,92,103,109,114,117],validpo:19,valu:[1,2,7,10,15,18,20,36,52,68,71,75,77,79,83,92,99,100,101,103,104,105,106,107,108,110,113,114,115,116,117],valuabl:108,value1:36,valueerror:[16,20,36,43,54,101,117],valueexpr:4,valueforkei:15,valuefornam:[4,15,69,72,74,77,83,84,92],valuefromfram:[15,92],valuefromframeorsearchlist:[4,15,92],valuefromsearchlist:[4,15,69,72,74,77,83,84,92],valuesgettermixin:43,vancouv:75,vanilla:92,var1:[92,109],var2:[92,109,114],var2_:109,var3:[92,114],var99:92,varexist:[20,36,92,116],vari:84,variabl:[12,15,20,36,42,54,68,74,75,77,79,82,83,84,92,99,103,105,106,107,108,109,110,113,114,116],varianc:43,variance_n:43,variant:20,variat:[15,20,107,109],varieti:[68,82,92,108,114],varietywithodir:27,varinsearchlist:92,variou:[20,78,83,92,99,104,105,110,116,117],varnam:[4,20,92,99,109,116],varnotfound_keyerror:92,varrazzo:92,varybi:[1,68,114],varybybrows:[68,114],varybyparam:[68,114],veloc:[71,75,92,106,108,109],velocitycontext:99,venezuela:109,verbatim:[92,109,114],verbos:[3,20,40,68,92,100,108,116],veri:[0,18,20,36,77,83,92,107,108,114,116,117],verifi:[27,28,35,36,37,53,82,85,92,104,109,110,116,117],verifytyp:92,versa:[90,93,108,109],version:[0,3,9,12,18,20,43,52,55,56,61,64,65,66,69,71,82,83,84,87,89,92,95,97,104,107,108,109,110,116,117],vesion:110,vff:31,vffsl:[4,31],vffsl_2:31,vffsl_3:31,vffsl_4:31,vfn:[4,31,69,72,74,77,83,84],vfs_2namespac:31,vfs_3namespac:31,vfs_4namespac:31,vfsl:4,via:[20,36,52,63,85,90,92,99,109,114,117],viabl:108,vice:[90,93,108,109],view:[1,92,102,108,114],viewer:111,vim:100,virtual:[91,117],visibl:[92,99,101,107,108,114,116],visit:[83,84,87,89,99,102,116,117],visual:[71,90,106,117],visualeditor:100,vital:116,vocabulari:[90,106],volunt:[83,84,87,108],voom:[68,79],vt_int:36,vt_variant:36,vt_void:36,vya:62,vyasarajan:62,w32:91,w4py:[111,117],wai:[20,36,43,44,65,68,82,83,85,89,90,92,99,100,101,103,104,105,107,108,109,110,114,116,117],wait:[20,117],walk:[9,70,80,86],walkdirtre:9,wall:109,walter:107,wanadoo:82,want:[15,20,42,44,71,75,78,83,84,85,92,93,99,100,103,104,107,108,109,110,113,114,116,117],wanteddai:[20,117],warasin:92,ward:92,warn:[3,7,8,12,27,72,75,92,101,116],wasn:[20,71,84,92,95,104],watch:[74,103,116],water:75,web:[0,20,54,56,75,90,92,94,95,99,105,106,107,108,110,116],webinput:[20,42,54,92,113,116],webinputmixin:[0,42,51,92,116],webkit:[92,110,116,117],webmacro:[106,108,109],webmast:108,webmixin:92,websaf:[10,36,79,92,99],websit:[15,90,92,108,109],webspher:111,webwar:[7,20,36,55,56,72,75,84,90,92,99,105,106,107,109,110,114,116],webwareexperiment:117,webwaremixin:92,wed:[72,84],week:[20,75,114,117],well:[10,18,75,90,95,101,107,108,110,117],went:71,were:[20,53,65,71,75,84,87,92,102,104,105,108,117],weren:83,what:[10,15,20,53,68,71,75,77,78,83,84,85,86,87,90,92,93,99,103,104,105,106,107,109,110,114,115,116,117],whatev:[20,107,108,109,113,117],whatever:114,whatsnew:92,wheel:[89,91],when:[4,7,10,20,35,40,45,75,77,78,82,83,84,85,90,92,94,95,100,101,103,105,106,107,108,109,110,114,115,117],whenev:[72,107,113,114],where:[4,15,20,27,31,35,37,40,45,71,75,82,87,92,99,100,106,107,114,116,117],wherea:[65,109,117],wherein:20,wherev:[20,104],whether:[20,40,68,71,84,90,92,93,104,108,109,110,114,116,117],which:[4,10,15,20,27,35,36,68,71,74,75,79,82,83,90,92,93,94,95,100,101,103,104,106,107,108,109,110,113,114,116,117],whichev:104,whiledirect:36,whitespac:[4,10,36,52,92,99,107],whitespaceafterdirectivetoken:36,who:[15,75,92,94,106,109,117],whole:[68,75,92,100,107],whom:85,whoop:[79,92],whose:[77,92,110,116],why:[20,85,88,92,106,117],wide:[10,71,82,104,108],width:[84,107,110],wiki:[20,92,102,110,111,116],wikipagerender:92,win32:92,window:[12,82,89,92,99,104,116],wish:[78,99,107,110,113,114,116,117],within:[20,36,65,83,92,109,115],without:[4,15,18,20,31,36,40,42,53,71,75,82,84,85,92,95,100,101,104,105,106,107,108,109,110,116,117],won:[15,36,82,92,100,104,110,116],wonder:[72,116],word:[20,36,99,107,108,114],wordi:[82,116],wordwrap:99,work:[1,4,9,15,18,20,28,29,36,38,40,71,72,75,78,82,87,91,92,99,102,104,107,108,109,110,112,113,114,116,117],workflow:[68,87],world:[20,75,83,84,92,94,104],worri:[71,113,117],worth:[99,117],worthwhil:110,would:[4,9,10,12,15,20,35,36,75,83,85,92,93,99,100,108,109,110,114,116,117],wouldn:[92,116],wow:[20,117],wrap:[3,72,79,83,92,99,107,114],wrapclassdef:4,wrapcod:4,wrapmoduledef:4,wrapper:[1,9,20,92,104],write:[3,7,15,20,36,40,65,68,69,71,72,74,75,77,79,81,82,83,84,85,88,90,92,99,104,105,108,109,110,114,116,117],writebodi:[20,23,65,92,107,110],writeheadtag:[23,110],writelin:7,writeln:7,writer:[99,108,117],written:[40,62,75,90,92,99,104,105,109,111,112,113,114,116],wrong:[68,92,99,108,116],wschar:19,www:[1,12,20,82,84,92,99,107,111,113,117],wysiwyg:108,x0c:19,x64:91,x86:91,xgen:92,xgettext:116,xml:[40,100,108],xmlrunner:[0,24],xmltestprogram:40,xmltestrunn:40,xmltestrunnertest:40,xrang:83,xxx:[27,92],xxxx:[20,92],yahoo:[52,110],yelp:62,yesterdai:92,yet:[10,20,43,68,83,90,92,96,99,100,104,107,108,109,110,114,117],yield:[36,92],yielddirect:36,yin:62,ymtd:99,you:[1,4,10,12,15,20,36,42,44,45,64,68,71,72,75,78,79,82,84,85,87,89,90,92,93,94,95,98,99,100,103,104,105,106,107,108,110,113,114,115,117],your:[6,15,20,42,43,71,82,84,85,87,90,92,93,94,98,99,100,102,103,106,107,108,109,110,113,114,116],yourself:[87,108,113,116,117],yourtempl:20,yyi:20,z_0:15,zero:[20,36,52,72,83,92,103,117],zerodivisionerror:[20,72,92],zip:12,zivkov:108,zope:[20,75,85,100,106,108,111],zpt2:99,zpt:[99,108],zptinternationalizationsupport:20,zwerschk:92,zzz:20},titles:["Cheetah package","Cheetah.CacheRegion module","Cheetah.CacheStore module","Cheetah.CheetahWrapper module","Cheetah.Compiler module","Cheetah.DirectiveAnalyzer module","Cheetah.Django module","Cheetah.DummyTransaction module","Cheetah.ErrorCatchers module","Cheetah.FileUtils module","Cheetah.Filters module","Cheetah.ImportHooks module","Cheetah.ImportManager module","Cheetah.Macros package","Cheetah.Macros.I18n module","Cheetah.NameMapper module","Cheetah.Parser module","Cheetah.Servlet module","Cheetah.SettingsManager module","Cheetah.SourceReader module","Cheetah.Template module","Cheetah.TemplateCmdLineIface module","Cheetah.Templates package","Cheetah.Templates.SkeletonPage module","Cheetah.Tests package","Cheetah.Tests.Analyzer module","Cheetah.Tests.Boinker module","Cheetah.Tests.CheetahWrapper module","Cheetah.Tests.Cheps module","Cheetah.Tests.Filters module","Cheetah.Tests.Misc module","Cheetah.Tests.NameMapper module","Cheetah.Tests.Parser module","Cheetah.Tests.Performance module","Cheetah.Tests.Pinger module","Cheetah.Tests.Regressions module","Cheetah.Tests.SyntaxAndOutput module","Cheetah.Tests.Template module","Cheetah.Tests.Test module","Cheetah.Tests.Unicode module","Cheetah.Tests.xmlrunner module","Cheetah.Tools package","Cheetah.Tools.CGITemplate module","Cheetah.Tools.MondoReport module","Cheetah.Tools.RecursiveNull module","Cheetah.Tools.SiteHierarchy module","Cheetah.Tools.turbocheetah package","Cheetah.Tools.turbocheetah.cheetahsupport module","Cheetah.Tools.turbocheetah.tests package","Cheetah.Tools.turbocheetah.tests.test_template module","Cheetah.Unspecified module","Cheetah.Utils package","Cheetah.Utils.Indenter module","Cheetah.Utils.Misc module","Cheetah.Utils.WebInputMixin module","Cheetah.Utils.htmlDecode module","Cheetah.Utils.htmlEncode module","Cheetah.Utils.statprof module","Cheetah.Version module","Cheetah.compat module","Cheetah.convertTmplPathToModuleName module","Cheetah","Authors and contributors","Cheetah Enhancement Proposals","(#1) CHEP Purpose and Guidelines","(#2) Conditionalized #import behavior","(#3) Exposing of super() and self via Template searchList","A BNF Grammar of Cheetah","Caching placeholders and #cache","Directives: Comments","The compiler","Design Decisions and Tradeoffs","Directives: Error Handling","Files","Directives: Flow Control","History of Cheetah","Cheetah Developer\u2019s Guide","Directives: Import, Inheritance, Declaration and Assignment","Introduction","Directives: Output","The parser","Directives: Parser Instructions","Patching Cheetah","Placeholders",".py Template Modules","Safe Delegation","Template","Contributing to Cheetah","Cheetah Recipes","Downloading Cheetah","Cheetah3, the Python-Powered Template Engine","News","&lt;no title&gt;","Basic Inheritance","Precompiled Templates","&#64;staticmethod and &#64;classmethod","Writing a \u201cRecipe\u201d","Cheetah Roadmap","Comments","Cheetah vs. Other Template Engines","Visual Editors","Error Handling","Examples","Flow Control","Getting Started","Vocabulary","Cheetah User\u2019s Guide","Import, Inheritance, Declaration and Assignment","Introduction","Language Overview","Batteries included: templates and other libraries","Useful Web Links","Non-HTML Output","non-Webware HTML output","Generating, Caching and Filtering Output","Instructions to the Parser/Compiler","Tips, Tricks and Troubleshooting","Using Cheetah with Webware"],titleterms:{"abstract":[64,65,66],"break":[74,103],"case":108,"class":99,"final":101,"function":108,"import":[65,77,94,107],"new":[91,108],"public":108,"return":[74,103],"static":[68,113],"super":66,"try":[72,101],"while":[74,103],Are:109,One:114,The:[70,80,104,117],Useful:111,Using:[116,117],access:[15,109],acknowledg:108,all:[109,116],analyz:25,applic:116,approach:117,asp:99,assert:[72,101],assign:[77,107],attr:[77,107],author:62,autocal:[15,109],backward:[65,66],basic:[93,94],batteri:110,behavior:65,behind:108,bigecho:72,bind:71,block:[77,107],bnf:67,boinker:26,bother:94,brace:68,breakpoint:[81,115],bug:[87,108],build:82,cach:[68,71,114],cacheregion:1,cachestor:2,call:116,can:[108,109],cascad:[15,109],catcher:72,cgi:113,cgitempl:42,chang:82,cheetah3:90,cheetah:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,63,67,75,76,82,87,88,89,90,93,97,99,104,106,108,110,111,116,117],cheetahsupport:47,cheetahwrapp:[3,27],chep:[28,63,64],classmethod:95,closur:109,code:[87,112,117],command:104,comment:[69,98],common:117,compat:[59,65,66,71],compil:[4,70,81,94,115],complex:[83,114],condit:68,condition:65,construct:109,contain:117,content:[78,90],continu:[74,103],contribut:[87,108],contributor:62,control:[74,103],converttmplpathtomodulenam:60,cooki:117,copyright:[64,65,66],databas:111,decis:71,declar:[77,107],def:[77,107],del:[77,107],deleg:85,delimit:71,design:71,detail:15,develop:[76,87,111],diagnost:116,dictionari:[15,109],direct:[69,72,74,77,79,81,107,109],directiveanalyz:5,directori:117,django:6,docstr:[69,98],doesn:108,dollar:109,download:89,dtml:99,dummytransact:7,dynam:68,echo:[72,79,114],editor:100,els:103,embperl:99,end:[101,103,107],engin:[90,99],enhanc:63,entir:114,error:[72,101],errorcatch:[8,72,101,110],etc:99,eval:79,exampl:[84,102,108,109,117],except:101,execut:114,exist:63,expos:66,express:[68,79,114],extend:[77,107],featur:99,file:[73,82,87,104],fileutil:[9,110],filter:[10,29,79,110,114],flow:[74,103],form:117,framework:[71,111,117],from:[77,79,93,107,114],gener:114,get:[87,104,108],gettext:116,give:108,global:77,grammar:67,guid:[76,78,106,108],guidelin:64,handl:[72,101,109],have:116,header:[69,98],histori:75,how:108,html:[108,112,113],htmldecod:55,htmlencod:56,i18n:14,implement:[15,65,66,77,107],importhook:11,importmanag:12,includ:[79,110,114],indent:[52,114],indic:90,individu:114,inherit:[71,77,93,107,117],initi:117,input:117,instal:[104,117],instruct:[81,115],internet:111,introduct:[78,90,93,108],jsp:99,languag:109,late:71,leav:15,librari:[108,110],line:114,link:111,listerror:72,lookup:94,macro:[13,14],makefil:116,matur:108,method:[68,116],misc:[30,53],miss:109,modul:[1,2,3,4,5,6,7,8,9,10,11,12,14,15,16,17,18,19,20,21,23,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,42,43,44,45,47,49,50,52,53,54,55,56,57,58,59,60,84,111],mondoreport:43,more:117,motiv:[65,66],multi:116,namemapp:[15,31,109],namespac:[15,109],necessari:109,non:[112,113],nutshel:90,object:101,open:111,optim:116,other:[99,110,111,117],ouput:114,out:15,output:[79,112,113,114,116],overview:[15,76,109],packag:[0,13,22,24,41,46,48,51],page:[99,113],parser:[16,32,80,81,115],parti:111,pass:[74,103],patch:[82,108],perform:[15,33],philosophi:108,php:99,phplib:99,pinger:34,placehold:[68,83,109,114,116],power:90,pre:94,precompil:94,process:[87,117],propos:63,psp:[99,116],purpos:64,python:[90,93,111,112,116,117],quickstart:104,rais:72,rational:[65,66],raw:[79,114],read:[78,108],realli:109,recip:[88,96],recursivenul:44,refer:[65,66],refresh:68,region:114,regress:[35,82],repeat:[74,103],report:108,requir:[82,104],roadmap:97,rule:109,safe:85,script:113,searchlist:[66,109],self:[15,66],server:117,servlet:[17,108,117],session:117,set:[77,107,115],settingsmanag:[18,110],sever:117,should:[78,108],sign:109,silent:[79,114],simpl:83,singl:71,site:117,sitehierarchi:45,skeletonpag:[23,110],slurp:[79,114],smarti:99,sourc:[111,112],sourceread:19,specif:[65,66],standalon:117,start:104,staticmethod:95,statprof:57,stop:[74,103],string:79,structur:117,stuff:111,style:[108,116],submodul:[0,13,22,24,41,46,48,51],subpackag:[0,41,46],summari:109,superclass:116,syntax:[102,109],syntaxandoutput:36,system:[111,117],tabl:90,tag:[108,116],talk:90,templat:[20,22,23,37,66,84,86,90,94,99,108,110,111,116,117],templatecmdlineifac:21,test:[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,48,49,68,82,104,108],test_templ:49,thi:[78,108],third:111,those:109,thread:116,through:84,time:68,timer:68,tip:[116,117],todo:38,tool:[41,42,43,44,45,46,47,48,49,110],tradeoff:71,transact:71,trick:116,troubleshoot:116,turbocheetah:[46,47,48,49],tutori:104,under:117,unicod:39,uninstal:104,uniqu:99,unless:[74,103],unspecifi:50,use:[108,109,116],user:106,util:[51,52,53,54,55,56,57,110],valu:109,variabl:117,veloc:99,version:[15,58],via:66,visual:100,vocabulari:105,walk:84,web:[111,117],webinput:117,webinputmixin:54,webmacro:99,webwar:[71,102,108,111,113,117],what:108,when:116,where:[108,109],which:99,whitespac:109,who:[78,108],why:[90,94,108,116],without:114,write:96,xmlrunner:40,you:[109,116],your:[104,117],zope:99}}) \ No newline at end of file