improved djangosupport
authorDavid Cramer <dcramer@gmail.com>
Tue, 25 Mar 2008 13:36:01 +0000 (14:36 +0100)
committerDavid Cramer <dcramer@gmail.com>
Tue, 25 Mar 2008 13:36:01 +0000 (14:36 +0100)
--HG--
branch : trunk

THANKS
jinja/contrib/_djangosupport.py

diff --git a/THANKS b/THANKS
index c0976318566f796544049437d2efab9d010cf15f..817cb1ef87a6ba2c49a0630565cf25f5b32c3ea6 100644 (file)
--- a/THANKS
+++ b/THANKS
@@ -9,3 +9,4 @@ patches, helped working out solutions etc. Thanks to all of you!
 - Alexey Melchakov
 - Stefan Ebner
 - Bryan McLemore
+- David Cramer
index 2fead1445039a4ff4c2aa53e6c7cc1cc2066140a..c40cff5803c009110778b8be8e0a5fa877d9345f 100644 (file)
@@ -1,4 +1,5 @@
 # -*- coding: utf-8 -*-\r
+# -*- coding: utf-8 -*-\r
 """\r
     jinja.contrib._djangosupport\r
     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~\r
     `django.contrib.jinja`. See the docstring of `jinja.contrib.djangosupport`\r
     for more details.\r
 \r
-    :copyright: 2007 by Armin Ronacher, Bryan McLemore.\r
+    :copyright: 2007-2008 by Armin Ronacher, Bryan McLemore, David Cramer.\r
     :license: BSD, see LICENSE for more details.\r
 """\r
 import sys\r
+import warnings\r
 import new\r
 from django.conf import settings\r
 from django.template.context import get_standard_processors\r
@@ -32,13 +34,12 @@ env = None
 \r
 \r
 #: default filters\r
-DEFAULT_FILTERS = [\r
+DEFAULT_FILTERS = (\r
     'django.template.defaultfilters.date',\r
     'django.template.defaultfilters.timesince',\r
     'django.template.defaultfilters.linebreaks',\r
     'django.contrib.humanize.templatetags.humanize.intcomma'\r
-]\r
-\r
+)\r
 \r
 def configure(convert_filters=DEFAULT_FILTERS, loader=None, **options):\r
     """\r
@@ -46,12 +47,13 @@ def configure(convert_filters=DEFAULT_FILTERS, loader=None, **options):
     """\r
     global env\r
 \r
-    if env is not None:\r
-        raise RuntimeError('jinja already configured')\r
+    if env:\r
+        warnings.warn("Jinja already initialized.")\r
+        return\r
 \r
     # setup environment\r
     if loader is None:\r
-        loaders = [FileSystemLoader(l) for l in settings.TEMPLATE_DIRS]\r
+        loaders = tuple(FileSystemLoader(l) for l in settings.TEMPLATE_DIRS)\r
         if not loaders:\r
             loader = None\r
         elif len(loaders) == 1:\r
@@ -84,7 +86,7 @@ def setup_django_module():
              new.module('django.contrib.jinja')\r
     module.env = env\r
     module.__doc__ = djangosupport.__doc__\r
-    module.register = Library()\r
+    module.register = Library\r
     public_names = module.__all__ = ['register', 'env']\r
     get_name = globals().get\r
     for name in exported:\r
@@ -121,11 +123,8 @@ def convert_django_filter(f):
         def wrapped(env, ctx, value):\r
             return f(value, *args)\r
         return wrapped\r
-    try:\r
-        filter_factory.__name__ = f.__name__\r
-        filter_factory.__doc__ = f.__doc__\r
-    except:\r
-        pass\r
+    filter_factory.__name__ = f.__name__\r
+    filter_factory.__doc__ = getattr(f, '__doc__', None)\r
     return filter_factory\r
 \r
 \r
@@ -138,15 +137,15 @@ class Library(object):
 \r
     For more details see the docstring of the `django.contrib.jinja` module.\r
     """\r
-    __slots__ = ()\r
-\r
-    def object(obj, name=None):\r
+    @staticmethod\r
+    def object(func, name=None):\r
         """Register a new global."""\r
         if name is None:\r
-            name = getattr(obj, '__name__')\r
-        env.globals[name] = obj\r
+            name = getattr(func, '__name__')\r
+        env.globals[name] = func\r
         return func\r
 \r
+    @staticmethod\r
     def filter(func, name=None):\r
         """Register a new filter function."""\r
         if name is None:\r
@@ -154,6 +153,7 @@ class Library(object):
         env.filters[name] = func\r
         return func\r
 \r
+    @staticmethod\r
     def test(func, name):\r
         """Register a new test function."""\r
         if name is None:\r
@@ -161,6 +161,7 @@ class Library(object):
         env.tests[name] = func\r
         return func\r
 \r
+    @staticmethod\r
     def context_inclusion(func, template, name=None):\r
         """\r
         Similar to the inclusion tag from django this one expects func to be a\r
@@ -185,6 +186,7 @@ class Library(object):
             pass\r
         env.globals[name] = wrapper\r
 \r
+    @staticmethod\r
     def clean_inclusion(func, template, name=None, run_processors=False):\r
         """\r
         Similar to above however it won't pass the context into func().\r