[svn] some small fixes and django compatibility for jinja
authorArmin Ronacher <armin.ronacher@active-4.com>
Sat, 3 Mar 2007 12:15:04 +0000 (13:15 +0100)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sat, 3 Mar 2007 12:15:04 +0000 (13:15 +0100)
--HG--
branch : trunk

jinja/datastructure.py
jinja/environment.py
jinja/parser.py

index 37a3dce188e253b3483c6f6f705bf0bd61015e8d..7a69ec585d0f70b74699ca11bf9d4d39ea710862 100644 (file)
@@ -148,11 +148,11 @@ class Context(object):
         return Undefined
 
     def __setitem__(self, name, value):
-        self._stack[-1][name] = value
+        self.current[name] = value
 
     def __delitem__(self, name):
-        if name in self._stack[-1]:
-            del self._stack[-1][name]
+        if name in self.current:
+            del self.current[name]
 
     def __repr__(self):
         tmp = {}
index d413be94d4f90c0200abadb0b3eb6e5a42e2a445..701c4d2fb892db3de99dc0eb63ef0975d6b424b1 100644 (file)
@@ -58,7 +58,7 @@ class Environment(object):
 
         # global namespace
         self.globals = namespace is None and DEFAULT_NAMESPACE.copy() \
-                       or namespace
+                       or namespace or {}
 
         # create lexer
         self.lexer = Lexer(self)
@@ -153,7 +153,8 @@ class Environment(object):
             args += tuple(dyn_args)
         elif dyn_kwargs is not None:
             kwargs.update(dyn_kwargs)
-        if getattr(f, 'jinja_unsafe_call', False):
+        if getattr(f, 'jinja_unsafe_call', False) or \
+           getattr(f, 'alters_data', False):
             raise SecurityException('unsafe function %r called' % f.__name__)
         return f(*args, **kwargs)
 
index d25b9d3fd54457eab329e0030e87a80b209bd614..0c4dcb101ec6446a5af010b26c2d4dc3226d2184 100644 (file)
@@ -137,7 +137,7 @@ class Parser(object):
         except (StopIteration, ValueError):
             raise TemplateSyntaxError('invalid syntax for set', lineno)
         ast = self.parse_python(lineno, gen, '(%s)')
-        return nodes.Set(lineno, name[1], ast.expr)
+        return nodes.Set(lineno, name[2], ast.expr)
 
     def handle_filter_directive(self, lineno, gen):
         """