app/django/utils/http.py
changeset 54 03e267d67478
child 323 ff1a9aa48cfd
equal deleted inserted replaced
53:57b4279d8c4e 54:03e267d67478
       
     1 import urllib
       
     2 from email.Utils import formatdate
       
     3 
       
     4 from django.utils.encoding import smart_str, force_unicode
       
     5 from django.utils.functional import allow_lazy
       
     6 
       
     7 def urlquote(url, safe='/'):
       
     8     """
       
     9     A version of Python's urllib.quote() function that can operate on unicode
       
    10     strings. The url is first UTF-8 encoded before quoting. The returned string
       
    11     can safely be used as part of an argument to a subsequent iri_to_uri() call
       
    12     without double-quoting occurring.
       
    13     """
       
    14     return force_unicode(urllib.quote(smart_str(url), safe))
       
    15 
       
    16 urlquote = allow_lazy(urlquote, unicode)
       
    17 
       
    18 def urlquote_plus(url, safe=''):
       
    19     """
       
    20     A version of Python's urllib.quote_plus() function that can operate on
       
    21     unicode strings. The url is first UTF-8 encoded before quoting. The
       
    22     returned string can safely be used as part of an argument to a subsequent
       
    23     iri_to_uri() call without double-quoting occurring.
       
    24     """
       
    25     return force_unicode(urllib.quote_plus(smart_str(url), safe))
       
    26 urlquote_plus = allow_lazy(urlquote_plus, unicode)
       
    27 
       
    28 def urlencode(query, doseq=0):
       
    29     """
       
    30     A version of Python's urllib.urlencode() function that can operate on
       
    31     unicode strings. The parameters are first case to UTF-8 encoded strings and
       
    32     then encoded as per normal.
       
    33     """
       
    34     if hasattr(query, 'items'):
       
    35         query = query.items()
       
    36     return urllib.urlencode(
       
    37         [(smart_str(k),
       
    38          isinstance(v, (list,tuple)) and [smart_str(i) for i in v] or smart_str(v))
       
    39             for k, v in query],
       
    40         doseq)
       
    41 
       
    42 def cookie_date(epoch_seconds=None):
       
    43     """
       
    44     Formats the time to ensure compatibility with Netscape's cookie standard.
       
    45 
       
    46     Accepts a floating point number expressed in seconds since the epoch, in
       
    47     UTC - such as that outputted by time.time(). If set to None, defaults to
       
    48     the current time.
       
    49 
       
    50     Outputs a string in the format 'Wdy, DD-Mon-YYYY HH:MM:SS GMT'.
       
    51     """
       
    52     rfcdate = formatdate(epoch_seconds)
       
    53     return '%s-%s-%s GMT' % (rfcdate[:7], rfcdate[8:11], rfcdate[12:25])
       
    54 
       
    55 def http_date(epoch_seconds=None):
       
    56     """
       
    57     Formats the time to match the RFC1123 date format as specified by HTTP
       
    58     RFC2616 section 3.3.1.
       
    59 
       
    60     Accepts a floating point number expressed in seconds since the epoch, in
       
    61     UTC - such as that outputted by time.time(). If set to None, defaults to
       
    62     the current time.
       
    63 
       
    64     Outputs a string in the format 'Wdy, DD Mon YYYY HH:MM:SS GMT'.
       
    65     """
       
    66     rfcdate = formatdate(epoch_seconds)
       
    67     return '%s GMT' % rfcdate[:25]