/lib/webob-1.1.1/webob/util.py
https://github.com/theosp/google_appengine · Python · 110 lines · 86 code · 8 blank · 16 comment · 10 complexity · b3b1763198f061736e48f51164cab229 MD5 · raw file
- import cgi, warnings
- from webob.headers import _trans_key
- def html_escape(s):
- """HTML-escape a string or object
- This converts any non-string objects passed into it to strings
- (actually, using ``unicode()``). All values returned are
- non-unicode strings (using ``&#num;`` entities for all non-ASCII
- characters).
- None is treated specially, and returns the empty string.
- """
- if s is None:
- return ''
- if hasattr(s, '__html__'):
- return s.__html__()
- if not isinstance(s, basestring):
- if hasattr(s, '__unicode__'):
- s = unicode(s)
- else:
- s = str(s)
- s = cgi.escape(s, True)
- if isinstance(s, unicode):
- s = s.encode('ascii', 'xmlcharrefreplace')
- return s
- def header_docstring(header, rfc_section):
- if header.isupper():
- header = _trans_key(header)
- major_section = rfc_section.split('.')[0]
- link = 'http://www.w3.org/Protocols/rfc2616/rfc2616-sec%s.html#sec%s' % (major_section, rfc_section)
- return "Gets and sets the ``%s`` header (`HTTP spec section %s <%s>`_)." \
- % (header, rfc_section, link)
- def warn_deprecation(text, version, stacklevel):
- # version specifies when to start raising exceptions instead of warnings
- if version == '1.2':
- cls = DeprecationWarning
- elif version == '1.3':
- cls = PendingDeprecationWarning
- else:
- cls = DeprecationWarning
- warnings.warn("Unknown warn_deprecation version arg: %r" % version,
- RuntimeWarning,
- stacklevel=1
- )
- warnings.warn(text, cls, stacklevel=stacklevel+1)
- status_reasons = {
- # Status Codes
- # Informational
- 100: 'Continue',
- 101: 'Switching Protocols',
- 102: 'Processing',
- # Successful
- 200: 'OK',
- 201: 'Created',
- 202: 'Accepted',
- 203: 'Non-Authoritative Information',
- 204: 'No Content',
- 205: 'Reset Content',
- 206: 'Partial Content',
- 207: 'Multi Status',
- 226: 'IM Used',
- # Redirection
- 300: 'Multiple Choices',
- 301: 'Moved Permanently',
- 302: 'Found',
- 303: 'See Other',
- 304: 'Not Modified',
- 305: 'Use Proxy',
- 307: 'Temporary Redirect',
- # Client Error
- 400: 'Bad Request',
- 401: 'Unauthorized',
- 402: 'Payment Required',
- 403: 'Forbidden',
- 404: 'Not Found',
- 405: 'Method Not Allowed',
- 406: 'Not Acceptable',
- 407: 'Proxy Authentication Required',
- 408: 'Request Timeout',
- 409: 'Conflict',
- 410: 'Gone',
- 411: 'Length Required',
- 412: 'Precondition Failed',
- 413: 'Request Entity Too Large',
- 414: 'Request URI Too Long',
- 415: 'Unsupported Media Type',
- 416: 'Requested Range Not Satisfiable',
- 417: 'Expectation Failed',
- 422: 'Unprocessable Entity',
- 423: 'Locked',
- 424: 'Failed Dependency',
- 426: 'Upgrade Required',
- # Server Error
- 500: 'Internal Server Error',
- 501: 'Not Implemented',
- 502: 'Bad Gateway',
- 503: 'Service Unavailable',
- 504: 'Gateway Timeout',
- 505: 'HTTP Version Not Supported',
- 507: 'Insufficient Storage',
- 510: 'Not Extended',
- }