summaryrefslogtreecommitdiff
path: root/django
diff options
context:
space:
mode:
authorJoseph Kocherhans <joseph@jkocherhans.com>2007-10-06 22:34:48 +0000
committerJoseph Kocherhans <joseph@jkocherhans.com>2007-10-06 22:34:48 +0000
commit6104f6bd856a36e41352d3b90e7a550ef276daab (patch)
tree0fc58d8a9cc6e2b2f47bc55c91b4d09c75de286e /django
parent4e3eb6ed5f9b7b74b47b33439dde7995e08d5933 (diff)
newforms-admin: Merged to [6458]
git-svn-id: http://code.djangoproject.com/svn/django/branches/newforms-admin@6459 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django')
-rwxr-xr-xdjango/bin/compile-messages.py3
-rwxr-xr-xdjango/bin/make-messages.py95
-rw-r--r--django/conf/locale/de/LC_MESSAGES/django.mobin44119 -> 44534 bytes
-rw-r--r--django/conf/locale/de/LC_MESSAGES/django.po59
-rw-r--r--django/contrib/auth/backends.py5
-rw-r--r--django/contrib/sessions/models.py9
-rw-r--r--django/core/handlers/wsgi.py17
-rw-r--r--django/core/management/__init__.py2
-rw-r--r--django/core/management/commands/startapp.py2
-rw-r--r--django/db/models/fields/__init__.py2
-rw-r--r--django/http/__init__.py5
-rw-r--r--django/newforms/widgets.py18
-rw-r--r--django/oldforms/__init__.py4
-rw-r--r--django/utils/cache.py15
-rw-r--r--django/utils/translation/__init__.py14
-rw-r--r--django/utils/translation/trans_null.py1
-rw-r--r--django/utils/translation/trans_real.py6
-rw-r--r--django/views/static.py4
18 files changed, 145 insertions, 116 deletions
diff --git a/django/bin/compile-messages.py b/django/bin/compile-messages.py
index 2838cb8aa4..8693022644 100755
--- a/django/bin/compile-messages.py
+++ b/django/bin/compile-messages.py
@@ -14,7 +14,8 @@ def compile_messages(locale=None):
basedirs = [os.path.join('conf', 'locale'), 'locale']
if os.environ.get('DJANGO_SETTINGS_MODULE'):
from django.conf import settings
- basedirs += settings.LOCALE_PATHS
+ if hasattr(settings, 'LOCALE_PATHS'):
+ basedirs += settings.LOCALE_PATHS
# Gather existing directories.
basedirs = set(map(os.path.abspath, filter(os.path.isdir, basedirs)))
diff --git a/django/bin/make-messages.py b/django/bin/make-messages.py
index 11616c9ca5..44040390ea 100755
--- a/django/bin/make-messages.py
+++ b/django/bin/make-messages.py
@@ -74,59 +74,62 @@ def make_messages():
if os.path.exists(potfile):
os.unlink(potfile)
+ all_files = []
for (dirpath, dirnames, filenames) in os.walk("."):
- for file in filenames:
- if domain == 'djangojs' and file.endswith('.js'):
- if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
+ all_files.extend([(dirpath, f) for f in filenames])
+ all_files.sort()
+ for dirpath, file in all_files:
+ if domain == 'djangojs' and file.endswith('.js'):
+ if verbose: sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
+ src = open(os.path.join(dirpath, file), "rb").read()
+ src = pythonize_re.sub('\n#', src)
+ open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)
+ thefile = '%s.py' % file
+ cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
+ os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
+ (stdin, stdout, stderr) = os.popen3(cmd, 't')
+ msgs = stdout.read()
+ errors = stderr.read()
+ if errors:
+ print "errors happened while running xgettext on %s" % file
+ print errors
+ sys.exit(8)
+ old = '#: '+os.path.join(dirpath, thefile)[2:]
+ new = '#: '+os.path.join(dirpath, file)[2:]
+ msgs = msgs.replace(old, new)
+ if msgs:
+ open(potfile, 'ab').write(msgs)
+ os.unlink(os.path.join(dirpath, thefile))
+ elif domain == 'django' and (file.endswith('.py') or file.endswith('.html')):
+ thefile = file
+ if file.endswith('.html'):
src = open(os.path.join(dirpath, file), "rb").read()
- src = pythonize_re.sub('\n#', src)
- open(os.path.join(dirpath, '%s.py' % file), "wb").write(src)
thefile = '%s.py' % file
- cmd = 'xgettext %s -d %s -L Perl --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
- os.path.exists(potfile) and '--omit-header' or '', domain, os.path.join(dirpath, thefile))
- (stdin, stdout, stderr) = os.popen3(cmd, 't')
- msgs = stdout.read()
- errors = stderr.read()
- if errors:
- print "errors happened while running xgettext on %s" % file
- print errors
- sys.exit(8)
+ open(os.path.join(dirpath, thefile), "wb").write(templatize(src))
+ if verbose:
+ sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
+ cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
+ domain, os.path.join(dirpath, thefile))
+ (stdin, stdout, stderr) = os.popen3(cmd, 't')
+ msgs = stdout.read()
+ errors = stderr.read()
+ if errors:
+ print "errors happened while running xgettext on %s" % file
+ print errors
+ sys.exit(8)
+ if thefile != file:
old = '#: '+os.path.join(dirpath, thefile)[2:]
new = '#: '+os.path.join(dirpath, file)[2:]
msgs = msgs.replace(old, new)
- if msgs:
- open(potfile, 'ab').write(msgs)
+ if os.path.exists(potfile):
+ # Strip the header
+ msgs = '\n'.join(dropwhile(len, msgs.split('\n')))
+ else:
+ msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
+ if msgs:
+ open(potfile, 'ab').write(msgs)
+ if thefile != file:
os.unlink(os.path.join(dirpath, thefile))
- elif domain == 'django' and (file.endswith('.py') or file.endswith('.html')):
- thefile = file
- if file.endswith('.html'):
- src = open(os.path.join(dirpath, file), "rb").read()
- thefile = '%s.py' % file
- open(os.path.join(dirpath, thefile), "wb").write(templatize(src))
- if verbose:
- sys.stdout.write('processing file %s in %s\n' % (file, dirpath))
- cmd = 'xgettext -d %s -L Python --keyword=gettext_noop --keyword=gettext_lazy --keyword=ngettext_lazy:1,2 --keyword=ugettext_noop --keyword=ugettext_lazy --keyword=ungettext_lazy:1,2 --from-code UTF-8 -o - "%s"' % (
- domain, os.path.join(dirpath, thefile))
- (stdin, stdout, stderr) = os.popen3(cmd, 't')
- msgs = stdout.read()
- errors = stderr.read()
- if errors:
- print "errors happened while running xgettext on %s" % file
- print errors
- sys.exit(8)
- if thefile != file:
- old = '#: '+os.path.join(dirpath, thefile)[2:]
- new = '#: '+os.path.join(dirpath, file)[2:]
- msgs = msgs.replace(old, new)
- if os.path.exists(potfile):
- # Strip the header
- msgs = '\n'.join(dropwhile(len, msgs.split('\n')))
- else:
- msgs = msgs.replace('charset=CHARSET', 'charset=UTF-8')
- if msgs:
- open(potfile, 'ab').write(msgs)
- if thefile != file:
- os.unlink(os.path.join(dirpath, thefile))
if os.path.exists(potfile):
(stdin, stdout, stderr) = os.popen3('msguniq --to-code=utf-8 "%s"' % potfile, 'b')
diff --git a/django/conf/locale/de/LC_MESSAGES/django.mo b/django/conf/locale/de/LC_MESSAGES/django.mo
index 307976e4d5..2699d25e55 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.mo
+++ b/django/conf/locale/de/LC_MESSAGES/django.mo
Binary files differ
diff --git a/django/conf/locale/de/LC_MESSAGES/django.po b/django/conf/locale/de/LC_MESSAGES/django.po
index 6978cf2d44..50fa66d43f 100644
--- a/django/conf/locale/de/LC_MESSAGES/django.po
+++ b/django/conf/locale/de/LC_MESSAGES/django.po
@@ -1,6 +1,7 @@
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
-# This file is distributed under the same license as the PACKAGE package.
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# Translation of django.po to German
+#
+# Copyright (C) 2005-2007,
+# This file is distributed under the same license as the django package.
#
msgid ""
""
@@ -1629,76 +1630,76 @@ msgstr "Webseite"
msgid "flat pages"
msgstr "Webseiten"
-#: contrib/humanize/templatetags/humanize.py:17
+#: contrib/humanize/templatetags/humanize.py:20
msgid "th"
-msgstr ""
+msgstr "."
-#: contrib/humanize/templatetags/humanize.py:17
+#: contrib/humanize/templatetags/humanize.py:20
msgid "st"
-msgstr ""
+msgstr "."
-#: contrib/humanize/templatetags/humanize.py:17
+#: contrib/humanize/templatetags/humanize.py:20
msgid "nd"
-msgstr ""
+msgstr "."
-#: contrib/humanize/templatetags/humanize.py:17
+#: contrib/humanize/templatetags/humanize.py:20
msgid "rd"
-msgstr ""
+msgstr "."
-#: contrib/humanize/templatetags/humanize.py:47
+#: contrib/humanize/templatetags/humanize.py:50
#, python-format
msgid "%(value).1f million"
msgid_plural "%(value).1f million"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(value).1f Million"
+msgstr[1] "%(value).1f Millionen"
-#: contrib/humanize/templatetags/humanize.py:50
+#: contrib/humanize/templatetags/humanize.py:53
#, python-format
msgid "%(value).1f billion"
msgid_plural "%(value).1f billion"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(value).1f Milliarde"
+msgstr[1] "%(value).1f Milliarden"
-#: contrib/humanize/templatetags/humanize.py:53
+#: contrib/humanize/templatetags/humanize.py:56
#, python-format
msgid "%(value).1f trillion"
msgid_plural "%(value).1f trillion"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "%(value).1f Billion"
+msgstr[1] "%(value).1f Billionen"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "one"
msgstr "ein"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "two"
msgstr "zwei"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "three"
msgstr "drei"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "four"
msgstr "vier"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "five"
msgstr "fünf"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "six"
msgstr "sechs"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "seven"
msgstr "sieben"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "eight"
msgstr "acht"
-#: contrib/humanize/templatetags/humanize.py:68
+#: contrib/humanize/templatetags/humanize.py:71
msgid "nine"
msgstr "neun"
diff --git a/django/contrib/auth/backends.py b/django/contrib/auth/backends.py
index be6cfede11..f79929e2d2 100644
--- a/django/contrib/auth/backends.py
+++ b/django/contrib/auth/backends.py
@@ -1,6 +1,11 @@
from django.db import connection
from django.contrib.auth.models import User
+try:
+ set
+except NameError:
+ from sets import Set as set # Python 2.3 fallback
+
class ModelBackend:
"""
Authenticate against django.contrib.auth.models.User
diff --git a/django/contrib/sessions/models.py b/django/contrib/sessions/models.py
index c086396947..8fc5e17d69 100644
--- a/django/contrib/sessions/models.py
+++ b/django/contrib/sessions/models.py
@@ -1,5 +1,12 @@
-import base64, md5, random, sys, datetime
+import os
+import sys
+import time
+import datetime
+import base64
+import md5
+import random
import cPickle as pickle
+
from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.conf import settings
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 6fe24f5d13..16d1d822e0 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -1,16 +1,16 @@
+from threading import Lock
+from pprint import pformat
+try:
+ from cStringIO import StringIO
+except ImportError:
+ from StringIO import StringIO
+
from django.core.handlers.base import BaseHandler
from django.core import signals
from django.dispatch import dispatcher
from django.utils import datastructures
from django.utils.encoding import force_unicode
from django import http
-from pprint import pformat
-from shutil import copyfileobj
-from threading import Lock
-try:
- from cStringIO import StringIO
-except ImportError:
- from StringIO import StringIO
# See http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
STATUS_CODE_TEXT = {
@@ -105,7 +105,8 @@ class WSGIRequest(http.HttpRequest):
return '%s%s' % (self.path, self.environ.get('QUERY_STRING', '') and ('?' + self.environ.get('QUERY_STRING', '')) or '')
def is_secure(self):
- return 'HTTPS' in self.environ and self.environ['HTTPS'] == 'on'
+ return 'wsgi.url_scheme' in self.environ \
+ and self.environ['wsgi.url_scheme'] == 'https'
def _load_post_and_files(self):
# Populates self._post and self._files
diff --git a/django/core/management/__init__.py b/django/core/management/__init__.py
index e15dfccdf2..cd90fd6109 100644
--- a/django/core/management/__init__.py
+++ b/django/core/management/__init__.py
@@ -239,7 +239,7 @@ def setup_environ(settings_mod):
project_directory, settings_filename = os.path.split(settings_mod.__file__)
project_name = os.path.basename(project_directory)
settings_name = os.path.splitext(settings_filename)[0]
- sys.path.append(os.path.join(project_directory, '..'))
+ sys.path.append(os.path.join(project_directory, os.pardir))
project_module = __import__(project_name, {}, {}, [''])
sys.path.pop()
diff --git a/django/core/management/commands/startapp.py b/django/core/management/commands/startapp.py
index 1da2776cf5..c238e74a08 100644
--- a/django/core/management/commands/startapp.py
+++ b/django/core/management/commands/startapp.py
@@ -16,7 +16,7 @@ class Command(LabelCommand):
directory = os.getcwd()
# Determine the project_name a bit naively -- by looking at the name of
# the parent directory.
- project_dir = os.path.normpath(os.path.join(directory, '..'))
+ project_dir = os.path.normpath(os.path.join(directory, os.pardir))
parent_dir = os.path.basename(project_dir)
project_name = os.path.basename(directory)
if app_name == project_name:
diff --git a/django/db/models/fields/__init__.py b/django/db/models/fields/__init__.py
index 67f14f9baf..017f82a28b 100644
--- a/django/db/models/fields/__init__.py
+++ b/django/db/models/fields/__init__.py
@@ -236,7 +236,7 @@ class Field(object):
if self.default is not NOT_PROVIDED:
if callable(self.default):
return self.default()
- return self.default
+ return force_unicode(self.default, strings_only=True)
if not self.empty_strings_allowed or (self.null and settings.DATABASE_ENGINE != 'oracle'):
return None
return ""
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 9a47e70592..508c6d2f3e 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -47,8 +47,9 @@ class HttpRequest(object):
def get_host(self):
"Returns the HTTP host using the environment or request headers."
# We try three options, in order of decreasing preference.
- host = self.META.get('HTTP_X_FORWARDED_HOST', '')
- if 'HTTP_HOST' in self.META:
+ if 'HTTP_X_FORWARDED_HOST' in self.META:
+ host = self.META['HTTP_X_FORWARDED_HOST']
+ elif 'HTTP_HOST' in self.META:
host = self.META['HTTP_HOST']
else:
# Reconstruct the host using the algorithm from PEP 333.
diff --git a/django/newforms/widgets.py b/django/newforms/widgets.py
index eb67385e53..1336a20991 100644
--- a/django/newforms/widgets.py
+++ b/django/newforms/widgets.py
@@ -7,6 +7,7 @@ try:
except NameError:
from sets import Set as set # Python 2.3 fallback
+import copy
from itertools import chain
from django.conf import settings
from django.utils.datastructures import MultiValueDict
@@ -135,6 +136,12 @@ class Widget(object):
else:
self.attrs = {}
+ def __deepcopy__(self, memo):
+ obj = copy.copy(self)
+ obj.attrs = self.attrs.copy()
+ memo[id(self)] = obj
+ return obj
+
def render(self, name, value, attrs=None):
"""
Returns this Widget rendered as HTML, as a Unicode string.
@@ -191,7 +198,7 @@ class PasswordInput(Input):
input_type = 'password'
def __init__(self, attrs=None, render_value=True):
- self.attrs = attrs or {}
+ super(PasswordInput, self).__init__(attrs)
self.render_value = render_value
def render(self, name, value, attrs=None):
@@ -208,8 +215,8 @@ class MultipleHiddenInput(HiddenInput):
of values.
"""
def __init__(self, attrs=None, choices=()):
+ super(MultipleHiddenInput, self).__init__(attrs)
# choices can be any iterable
- self.attrs = attrs or {}
self.choices = choices
def render(self, name, value, attrs=None, choices=()):
@@ -248,9 +255,9 @@ class Textarea(Widget):
class CheckboxInput(Widget):
def __init__(self, attrs=None, check_test=bool):
+ super(CheckboxInput, self).__init__(attrs)
# check_test is a callable that takes a value and returns True
# if the checkbox should be checked for that value.
- self.attrs = attrs or {}
self.check_test = check_test
def render(self, name, value, attrs=None):
@@ -267,7 +274,7 @@ class CheckboxInput(Widget):
class Select(Widget):
def __init__(self, attrs=None, choices=()):
- self.attrs = attrs or {}
+ super(Select, self).__init__(attrs)
# choices can be any iterable, but we may need to render this widget
# multiple times. Thus, collapse it into a list so it can be consumed
# more than once.
@@ -306,8 +313,8 @@ class NullBooleanSelect(Select):
class SelectMultiple(Widget):
def __init__(self, attrs=None, choices=()):
+ super(SelectMultiple, self).__init__(attrs)
# choices can be any iterable
- self.attrs = attrs or {}
self.choices = choices
def render(self, name, value, attrs=None, choices=()):
@@ -530,4 +537,3 @@ class SplitDateTimeWidget(MultiWidget):
if value:
return [value.date(), value.time()]
return [None, None]
- \ No newline at end of file
diff --git a/django/oldforms/__init__.py b/django/oldforms/__init__.py
index 9bb90416c4..5f7b9fc2ad 100644
--- a/django/oldforms/__init__.py
+++ b/django/oldforms/__init__.py
@@ -500,7 +500,7 @@ class SelectField(FormField):
selected_html = u''
if smart_unicode(value) == str_data:
selected_html = u' selected="selected"'
- output.append(u' <option value="%s"%s>%s</option>' % (escape(value), selected_html, escape(display_name)))
+ output.append(u' <option value="%s"%s>%s</option>' % (escape(value), selected_html, force_unicode(escape(display_name))))
output.append(u' </select>')
return u'\n'.join(output)
@@ -612,7 +612,7 @@ class SelectMultipleField(SelectField):
selected_html = u''
if smart_unicode(value) in str_data_list:
selected_html = u' selected="selected"'
- output.append(u' <option value="%s"%s>%s</option>' % (escape(value), selected_html, escape(choice)))
+ output.append(u' <option value="%s"%s>%s</option>' % (escape(value), selected_html, force_unicode(escape(choice))))
output.append(u' </select>')
return u'\n'.join(output)
diff --git a/django/utils/cache.py b/django/utils/cache.py
index 2494d7839e..f192e1115c 100644
--- a/django/utils/cache.py
+++ b/django/utils/cache.py
@@ -23,7 +23,7 @@ import time
from email.Utils import formatdate
from django.conf import settings
from django.core.cache import cache
-from django.utils.encoding import smart_str
+from django.utils.encoding import smart_str, iri_to_uri
cc_delim_re = re.compile(r'\s*,\s*')
@@ -57,6 +57,13 @@ def patch_cache_control(response, **kwargs):
cc = dict([dictitem(el) for el in cc])
else:
cc = {}
+
+ # If there's already a max-age header but we're being asked to set a new
+ # max-age, use the minumum of the two ages. In practice this happens when
+ # a decorator and a piece of middleware both operate on a given view.
+ if 'max-age' in cc and 'max_age' in kwargs:
+ kwargs['max_age'] = min(cc['max-age'], kwargs['max_age'])
+
for (k,v) in kwargs.items():
cc[k.replace('_', '-')] = v
cc = ', '.join([dictvalue(el) for el in cc.items()])
@@ -118,7 +125,7 @@ def _generate_cache_key(request, headerlist, key_prefix):
value = request.META.get(header, None)
if value is not None:
ctx.update(value)
- return 'views.decorators.cache.cache_page.%s.%s.%s' % (key_prefix, request.path, ctx.hexdigest())
+ return 'views.decorators.cache.cache_page.%s.%s.%s' % (key_prefix, iri_to_uri(request.path), ctx.hexdigest())
def get_cache_key(request, key_prefix=None):
"""
@@ -132,7 +139,7 @@ def get_cache_key(request, key_prefix=None):
"""
if key_prefix is None:
key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
- cache_key = 'views.decorators.cache.cache_header.%s.%s' % (key_prefix, request.path)
+ cache_key = 'views.decorators.cache.cache_header.%s.%s' % (key_prefix, iri_to_uri(request.path))
headerlist = cache.get(cache_key, None)
if headerlist is not None:
return _generate_cache_key(request, headerlist, key_prefix)
@@ -156,7 +163,7 @@ def learn_cache_key(request, response, cache_timeout=None, key_prefix=None):
key_prefix = settings.CACHE_MIDDLEWARE_KEY_PREFIX
if cache_timeout is None:
cache_timeout = settings.CACHE_MIDDLEWARE_SECONDS
- cache_key = 'views.decorators.cache.cache_header.%s.%s' % (key_prefix, request.path)
+ cache_key = 'views.decorators.cache.cache_header.%s.%s' % (key_prefix, iri_to_uri(request.path))
if response.has_header('Vary'):
headerlist = ['HTTP_'+header.upper().replace('-', '_') for header in vary_delim_re.split(response['Vary'])]
cache.set(cache_key, headerlist, cache_timeout)
diff --git a/django/utils/translation/__init__.py b/django/utils/translation/__init__.py
index 13fc8a847a..9ca7419e1e 100644
--- a/django/utils/translation/__init__.py
+++ b/django/utils/translation/__init__.py
@@ -2,6 +2,7 @@
Internationalization support.
"""
from django.utils.functional import lazy
+from django.utils.encoding import force_unicode
__all__ = ['gettext', 'gettext_noop', 'gettext_lazy', 'ngettext',
'ngettext_lazy', 'string_concat', 'activate', 'deactivate',
@@ -39,7 +40,7 @@ def delayed_loader(*args, **kwargs):
g['real_%s' % name] = getattr(trans, name)
# Make the originally requested function call on the way out the door.
- return g[caller](*args, **kwargs)
+ return g['real_%s' % caller](*args, **kwargs)
g = globals()
for name in __all__:
@@ -63,14 +64,10 @@ def ugettext(message):
def ungettext(singular, plural, number):
return real_ungettext(singular, plural, number)
-def string_concat(*strings):
- return real_string_concat(*strings)
-
ngettext_lazy = lazy(ngettext, str)
gettext_lazy = lazy(gettext, str)
ungettext_lazy = lazy(ungettext, unicode)
ugettext_lazy = lazy(ugettext, unicode)
-string_concat = lazy(string_concat, unicode)
def activate(language):
return real_activate(language)
@@ -108,3 +105,10 @@ def templatize(src):
def deactivate_all():
return real_deactivate_all()
+def string_concat(*strings):
+ """
+ Lazy variant of string concatenation, needed for translations that are
+ constructed from multiple parts.
+ """
+ return u''.join([force_unicode(s) for s in strings])
+string_concat = lazy(string_concat, unicode)
diff --git a/django/utils/translation/trans_null.py b/django/utils/translation/trans_null.py
index e3f89567a5..771a80e99c 100644
--- a/django/utils/translation/trans_null.py
+++ b/django/utils/translation/trans_null.py
@@ -13,7 +13,6 @@ ngettext_lazy = ngettext
def ungettext(singular, plural, number):
return force_unicode(ngettext(singular, plural, number))
-string_concat = lambda *strings: u''.join([force_unicode(el) for el in strings])
activate = lambda x: None
deactivate = deactivate_all = install = lambda: None
get_language = lambda: settings.LANGUAGE_CODE
diff --git a/django/utils/translation/trans_real.py b/django/utils/translation/trans_real.py
index 5fff1ea63a..250af04e8c 100644
--- a/django/utils/translation/trans_real.py
+++ b/django/utils/translation/trans_real.py
@@ -516,9 +516,3 @@ def templatize(src):
out.write(blankout(t.contents, 'X'))
return out.getvalue()
-def string_concat(*strings):
- """"
- Lazy variant of string concatenation, needed for translations that are
- constructed from multiple parts.
- """
- return u''.join([force_unicode(s) for s in strings])
diff --git a/django/views/static.py b/django/views/static.py
index 3ec4ca14a1..e274057617 100644
--- a/django/views/static.py
+++ b/django/views/static.py
@@ -29,12 +29,12 @@ def serve(request, path, document_root=None, show_indexes=False):
newpath = ''
for part in path.split('/'):
if not part:
- # strip empty path components
+ # Strip empty path components.
continue
drive, part = os.path.splitdrive(part)
head, part = os.path.split(part)
if part in (os.curdir, os.pardir):
- # strip '.' amd '..' in path
+ # Strip '.' and '..' in path.
continue
newpath = os.path.join(newpath, part).replace('\\', '/')
if newpath and path != newpath: