summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorR. Tyler Ballance <tyler@slide.com>2009-06-28 14:10:54 -0700
committerR. Tyler Ballance <tyler@slide.com>2009-06-28 14:10:54 -0700
commitc38cbebcf6cd29adace490f1fbe7dee8324a27c9 (patch)
tree22663f2192c78ec30987395e06d26e3077d8b84c
parent899407bee3e372615b840c59b3eb25824250d7b0 (diff)
parent714a46b4ed922d7afaf8ef95144890cfcd74007e (diff)
downloadpython-cheetah-c38cbebcf6cd29adace490f1fbe7dee8324a27c9.tar.gz
Merge commit 'abbeyj/performance' into performance
Conflicts: src/Template.py src/c/_template.c
-rw-r--r--SetupConfig.py3
-rw-r--r--bin/.gitattributes1
-rw-r--r--bin/cheetah.bat1
-rw-r--r--src/Template.py39
-rw-r--r--src/Tests/Template.py15
-rw-r--r--src/c/_template.c8
6 files changed, 39 insertions, 28 deletions
diff --git a/SetupConfig.py b/SetupConfig.py
index 87df62b..9508e3c 100644
--- a/SetupConfig.py
+++ b/SetupConfig.py
@@ -34,6 +34,7 @@ package_dir = {'Cheetah':'src'}
import os
import os.path
+import sys
from distutils.core import Extension
ext_modules=[
@@ -51,6 +52,8 @@ ext_modules=[
scripts = ['bin/cheetah-compile',
'bin/cheetah',
]
+if sys.platform == "win32":
+ scripts.append('bin/cheetah.bat')
data_files = ['recursive: src *.tmpl *.txt LICENSE README TODO CHANGES',
]
if not os.getenv('CHEETAH_INSTALL_WITHOUT_SETUPTOOLS'):
diff --git a/bin/.gitattributes b/bin/.gitattributes
new file mode 100644
index 0000000..5bebad2
--- /dev/null
+++ b/bin/.gitattributes
@@ -0,0 +1 @@
+cheetah.bat -crlf
diff --git a/bin/cheetah.bat b/bin/cheetah.bat
new file mode 100644
index 0000000..3f6cf2a
--- /dev/null
+++ b/bin/cheetah.bat
@@ -0,0 +1 @@
+@"%~dp0..\python" "%~dpn0" %*
diff --git a/src/Template.py b/src/Template.py
index 2fd9c50..eeeeb95 100644
--- a/src/Template.py
+++ b/src/Template.py
@@ -25,11 +25,6 @@ try:
from types import StringTypes
except ImportError:
StringTypes = (types.StringType,types.UnicodeType)
-try:
- from types import BooleanType
- boolTypeAvailable = True
-except ImportError:
- boolTypeAvailable = False
try:
from threading import Lock
@@ -607,11 +602,11 @@ class Template(Servlet):
N = types.NoneType; S = types.StringType; U = types.UnicodeType
D = types.DictType; F = types.FileType
C = types.ClassType; M = types.ModuleType
- I = types.IntType
+ I = types.IntType; B = types.BooleanType
+
+ IB = (I, B)
+ NS = (N, S)
- if boolTypeAvailable:
- B = types.BooleanType
-
vt(source, 'source', (N,S,U), 'string or None')
vt(file, 'file',(N,S,U,F), 'string, file-like object, or None')
@@ -622,12 +617,10 @@ class Template(Servlet):
cacheCompilationResults = valOrDefault(
cacheCompilationResults, klass._CHEETAH_cacheCompilationResults)
- if boolTypeAvailable:
- vt(cacheCompilationResults, 'cacheCompilationResults', (I,B), 'boolean')
+ vt(cacheCompilationResults, 'cacheCompilationResults', IB, 'boolean')
useCache = valOrDefault(useCache, klass._CHEETAH_useCompilationCache)
- if boolTypeAvailable:
- vt(cacheCompilationResults, 'cacheCompilationResults', (I,B), 'boolean')
+ vt(useCache, 'useCache', IB, 'boolean')
compilerSettings = valOrDefault(
compilerSettings, klass._getCompilerSettings(source, file) or {})
@@ -638,10 +631,9 @@ class Template(Servlet):
keepRefToGeneratedCode = valOrDefault(
keepRefToGeneratedCode, klass._CHEETAH_keepRefToGeneratedCode)
- if boolTypeAvailable:
- vt(cacheCompilationResults, 'cacheCompilationResults', (I,B), 'boolean')
-
- vt(moduleName, 'moduleName', (N,S), 'string or None')
+ vt(keepRefToGeneratedCode, 'keepRefToGeneratedCode', IB, 'boolean')
+
+ vt(moduleName, 'moduleName', NS, 'string or None')
__orig_file__ = None
if not moduleName:
if file and type(file) in StringTypes:
@@ -649,27 +641,26 @@ class Template(Servlet):
__orig_file__ = file
else:
moduleName = klass._CHEETAH_defaultModuleNameForTemplates
-
+
className = valOrDefault(
className, klass._CHEETAH_defaultClassNameForTemplates)
- vt(className, 'className', (N,S), 'string or None')
+ vt(className, 'className', NS, 'string or None')
className = className or moduleName
mainMethodName = valOrDefault(
mainMethodName, klass._CHEETAH_defaultMainMethodNameForTemplates)
- vt(mainMethodName, 'mainMethodName', (N,S), 'string or None')
+ vt(mainMethodName, 'mainMethodName', NS, 'string or None')
moduleGlobals = valOrDefault(
moduleGlobals, klass._CHEETAH_defaultModuleGlobalsForTemplates)
cacheModuleFilesForTracebacks = valOrDefault(
cacheModuleFilesForTracebacks, klass._CHEETAH_cacheModuleFilesForTracebacks)
- if boolTypeAvailable:
- vt(cacheModuleFilesForTracebacks, 'cacheModuleFilesForTracebacks', (I,B), 'boolean')
-
+ vt(cacheModuleFilesForTracebacks, 'cacheModuleFilesForTracebacks', IB, 'boolean')
+
cacheDirForModuleFiles = valOrDefault(
cacheDirForModuleFiles, klass._CHEETAH_cacheDirForModuleFiles)
- vt(cacheDirForModuleFiles, 'cacheDirForModuleFiles', (N,S), 'string or None')
+ vt(cacheDirForModuleFiles, 'cacheDirForModuleFiles', NS, 'string or None')
except TypeError, reason:
raise TypeError(reason)
diff --git a/src/Tests/Template.py b/src/Tests/Template.py
index 9a07181..06f9768 100644
--- a/src/Tests/Template.py
+++ b/src/Tests/Template.py
@@ -326,7 +326,22 @@ class StaticMethodSupport(TemplateTest):
except AttributeError, ex:
self.fail(ex)
+class Useless(object):
+ def boink(self):
+ return [1, 2, 3]
+class MultipleInheritanceSupport(TemplateTest):
+ def runTest(self):
+ template = '''
+ #extends Template, Useless
+ #def foo()
+ #return [4,5] + $boink()
+ #end def
+ '''
+ template = Template.compile(template)
+ template = template()
+ result = template.foo()
+ print result
##################################################
diff --git a/src/c/_template.c b/src/c/_template.c
index 04fced1..2345336 100644
--- a/src/c/_template.c
+++ b/src/c/_template.c
@@ -14,7 +14,7 @@ static PyObject *unspecified = NULL;
static PyObject *py_valordefault(PyObject *self, PyObject *args, PyObject *kwargs)
{
- PyObject *value, *def, *res;
+ PyObject *value, *def;
if (!PyArg_ParseTuple(args, "OO", &value, &def))
return NULL;
@@ -31,7 +31,7 @@ static const char _template_doc[] = "\
\n\
";
static struct PyMethodDef _template_methods[] = {
- {"valOrDefault", py_valordefault, METH_VARARGS, NULL},
+ {"valOrDefault", (PyCFunction)py_valordefault, METH_VARARGS, NULL},
{NULL}
};
@@ -41,10 +41,10 @@ PyMODINIT_FUNC init_template()
_template_doc);
unspecifiedModule = PyImport_ImportModule("Cheetah.Unspecified");
if ( (PyErr_Occurred()) || (!unspecifiedModule) )
- return NULL;
+ return;
unspecified = PyObject_GetAttrString(unspecifiedModule, "Unspecified");
if (PyErr_Occurred())
- return NULL;
+ return;
}
#ifdef __cplusplus