More work on the ironpython support
authorArmin Ronacher <armin.ronacher@active-4.com>
Sun, 17 Aug 2008 17:43:22 +0000 (19:43 +0200)
committerArmin Ronacher <armin.ronacher@active-4.com>
Sun, 17 Aug 2008 17:43:22 +0000 (19:43 +0200)
--HG--
branch : trunk

jinja2/_ipysupport.py [new file with mode: 0644]
jinja2/loaders.py
jinja2/runtime.py

diff --git a/jinja2/_ipysupport.py b/jinja2/_ipysupport.py
new file mode 100644 (file)
index 0000000..22ae823
--- /dev/null
@@ -0,0 +1,40 @@
+# -*- coding: utf-8 -*-
+"""
+    jinja2._ipysupport
+    ~~~~~~~~~~~~~~~~~~
+
+    IronPython support library.  This library exports functionality from
+    the CLR to Python that is normally available in the standard library.
+
+    :copyright: Copyright 2008 by Armin Ronacher.
+    :license: BSD.
+"""
+from System import DateTime
+from System.IO import Path, File, FileInfo
+
+
+epoch = DateTime(1970, 1, 1)
+
+
+class _PathModule(object):
+    """A minimal path module."""
+
+    sep = str(Path.DirectorySeparatorChar)
+    altsep = str(Path.AltDirectorySeparatorChar)
+    pardir = '..'
+
+    def join(self, path, *args):
+        args = list(args[::-1])
+        while args:
+            path = Path.Combine(path, args.pop())
+        return path
+
+    def isfile(self, filename):
+        return File.Exists(filename)
+
+    def getmtime(self, filename):
+        info = FileInfo(filename)
+        return int((info.LastAccessTimeUtc - epoch).TotalSeconds)
+
+
+path = _PathModule()
index e964fdcf7964092480d19fc85bfc4427c9b3723e..c97b5bf808c0c0e4c89a357b11a71cb98364ed46 100644 (file)
@@ -8,7 +8,11 @@
     :copyright: 2008 by Armin Ronacher.
     :license: BSD, see LICENSE for more details.
 """
-from os import path
+try:
+    from os import path
+except ImportError:
+    # support for iron python without standard library
+    from _ipysupport import path
 try:
     from hashlib import sha1
 except ImportError:
index 2c3aeb09df102e89968d6493a6d64cab1f4bc236..9b2c3a59e33cfaf17e3d088c7c043541925e7727 100644 (file)
@@ -10,7 +10,8 @@
 """
 import sys
 from itertools import chain, imap
-from jinja2.utils import Markup, partial, soft_unicode, escape, missing, concat
+from jinja2.utils import Markup, partial, soft_unicode, escape, missing, \
+     concat, MethodType, FunctionType
 from jinja2.exceptions import UndefinedError, TemplateRuntimeError
 
 
@@ -20,12 +21,8 @@ __all__ = ['LoopContext', 'Context', 'TemplateReference', 'Macro', 'Markup',
            'markup_join', 'unicode_join']
 
 
-#: get the types we support for context functions.  We do not use types because
-#: IronPython doesn't provide that module out of the box.
-class _C(object):
-    meth = lambda: None
-_context_function_types = (type(lambda: None), type(_C.meth))
-del _C
+#: the types we support for context functions
+_context_function_types = (FunctionType, MethodType)
 
 
 def markup_join(seq):