summaryrefslogtreecommitdiff
path: root/django/utils
diff options
context:
space:
mode:
authorMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-02-04 05:45:17 +0000
committerMalcolm Tredinnick <malcolm.tredinnick@gmail.com>2008-02-04 05:45:17 +0000
commit0a9b7519582bc358be10bb374bfbdfe237e09578 (patch)
tree53cd8b31532dab0bf97bda74589e34a1b615b9f3 /django/utils
parenta4343209db3473b09aecc707cea522455c8218cc (diff)
queryset-refactor: Merged changes from trunk up to [7085].
git-svn-id: http://code.djangoproject.com/svn/django/branches/queryset-refactor@7086 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/utils')
-rw-r--r--django/utils/datastructures.py9
-rw-r--r--django/utils/encoding.py2
-rw-r--r--django/utils/feedgenerator.py2
-rw-r--r--django/utils/html.py23
4 files changed, 21 insertions, 15 deletions
diff --git a/django/utils/datastructures.py b/django/utils/datastructures.py
index 25e9421575..82d914000f 100644
--- a/django/utils/datastructures.py
+++ b/django/utils/datastructures.py
@@ -2,6 +2,9 @@ class MergeDict(object):
"""
A simple class for creating new "virtual" dictionaries that actually look
up values in more than one dictionary, passed in the constructor.
+
+ If a key appears in more than one of the passed in dictionaries, only the
+ first occurrence will be used.
"""
def __init__(self, *dicts):
self.dicts = dicts
@@ -25,11 +28,9 @@ class MergeDict(object):
def getlist(self, key):
for dict_ in self.dicts:
- try:
+ if key in dict_.keys():
return dict_.getlist(key)
- except KeyError:
- pass
- raise KeyError
+ return []
def items(self):
item_list = []
diff --git a/django/utils/encoding.py b/django/utils/encoding.py
index 2ab0db7432..33bb37b0ea 100644
--- a/django/utils/encoding.py
+++ b/django/utils/encoding.py
@@ -98,5 +98,5 @@ def iri_to_uri(iri):
# section 3.1 of RFC 3987.
if iri is None:
return iri
- return urllib.quote(smart_str(iri), safe='/#%[]=:;$&()+,!?')
+ return urllib.quote(smart_str(iri), safe='/#%[]=:;$&()+,!?*')
diff --git a/django/utils/feedgenerator.py b/django/utils/feedgenerator.py
index 3e0826c968..23400bb8e7 100644
--- a/django/utils/feedgenerator.py
+++ b/django/utils/feedgenerator.py
@@ -53,7 +53,7 @@ class SyndicationFeed(object):
'title': to_unicode(title),
'link': iri_to_uri(link),
'description': to_unicode(description),
- 'language': force_unicode(language),
+ 'language': to_unicode(language),
'author_email': to_unicode(author_email),
'author_name': to_unicode(author_name),
'author_link': iri_to_uri(author_link),
diff --git a/django/utils/html.py b/django/utils/html.py
index 33e2ee3856..17ff78a2b5 100644
--- a/django/utils/html.py
+++ b/django/utils/html.py
@@ -102,18 +102,23 @@ def urlize(text, trim_url_limit=None, nofollow=False, autoescape=False):
if middle.startswith('www.') or ('@' not in middle and not middle.startswith('http://') and \
len(middle) > 0 and middle[0] in string.ascii_letters + string.digits and \
(middle.endswith('.org') or middle.endswith('.net') or middle.endswith('.com'))):
- middle = '<a href="http://%s"%s>%s</a>' % (
- urlquote(middle, safe='/&=:;#?+'), nofollow_attr,
- trim_url(middle))
+ middle = 'http://%s' % middle
if middle.startswith('http://') or middle.startswith('https://'):
- middle = '<a href="%s"%s>%s</a>' % (
- urlquote(middle, safe='/&=:;#?+'), nofollow_attr,
- trim_url(middle))
- if '@' in middle and not middle.startswith('www.') and \
- not ':' in middle and simple_email_re.match(middle):
+ url = urlquote(middle, safe='/&=:;#?+*')
+ if autoescape and not safe_input:
+ url = escape(url)
+ trimmed_url = trim_url(middle)
+ middle = '<a href="%s"%s>%s</a>' % (url, nofollow_attr,
+ trimmed_url)
+ elif '@' in middle and not middle.startswith('www.') and \
+ not ':' in middle and simple_email_re.match(middle):
+ if autoescape:
+ middle = conditional_escape(middle)
middle = '<a href="mailto:%s">%s</a>' % (middle, middle)
if lead + middle + trail != word:
- words[i] = lead + middle + trail
+ if autoescape and not safe_input:
+ lead, trail = escape(lead), escape(trail)
+ words[i] = mark_safe('%s%s%s' % (lead, middle, trail))
elif autoescape and not safe_input:
words[i] = escape(word)
elif safe_input: