You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					100 lines
				
				2.5 KiB
			
		
		
			
		
	
	
					100 lines
				
				2.5 KiB
			| 
											8 years ago
										 | # -*- coding: utf-8 -*-
 | ||
|  | """
 | ||
|  |     jinja2._compat
 | ||
|  |     ~~~~~~~~~~~~~~
 | ||
|  | 
 | ||
|  |     Some py2/py3 compatibility support based on a stripped down
 | ||
|  |     version of six so we don't have to depend on a specific version
 | ||
|  |     of it.
 | ||
|  | 
 | ||
|  |     :copyright: Copyright 2013 by the Jinja team, see AUTHORS.
 | ||
|  |     :license: BSD, see LICENSE for details.
 | ||
|  | """
 | ||
|  | import sys
 | ||
|  | 
 | ||
|  | PY2 = sys.version_info[0] == 2
 | ||
|  | PYPY = hasattr(sys, 'pypy_translation_info')
 | ||
|  | _identity = lambda x: x
 | ||
|  | 
 | ||
|  | 
 | ||
|  | if not PY2:
 | ||
|  |     unichr = chr
 | ||
|  |     range_type = range
 | ||
|  |     text_type = str
 | ||
|  |     string_types = (str,)
 | ||
|  |     integer_types = (int,)
 | ||
|  | 
 | ||
|  |     iterkeys = lambda d: iter(d.keys())
 | ||
|  |     itervalues = lambda d: iter(d.values())
 | ||
|  |     iteritems = lambda d: iter(d.items())
 | ||
|  | 
 | ||
|  |     import pickle
 | ||
|  |     from io import BytesIO, StringIO
 | ||
|  |     NativeStringIO = StringIO
 | ||
|  | 
 | ||
|  |     def reraise(tp, value, tb=None):
 | ||
|  |         if value.__traceback__ is not tb:
 | ||
|  |             raise value.with_traceback(tb)
 | ||
|  |         raise value
 | ||
|  | 
 | ||
|  |     ifilter = filter
 | ||
|  |     imap = map
 | ||
|  |     izip = zip
 | ||
|  |     intern = sys.intern
 | ||
|  | 
 | ||
|  |     implements_iterator = _identity
 | ||
|  |     implements_to_string = _identity
 | ||
|  |     encode_filename = _identity
 | ||
|  | 
 | ||
|  | else:
 | ||
|  |     unichr = unichr
 | ||
|  |     text_type = unicode
 | ||
|  |     range_type = xrange
 | ||
|  |     string_types = (str, unicode)
 | ||
|  |     integer_types = (int, long)
 | ||
|  | 
 | ||
|  |     iterkeys = lambda d: d.iterkeys()
 | ||
|  |     itervalues = lambda d: d.itervalues()
 | ||
|  |     iteritems = lambda d: d.iteritems()
 | ||
|  | 
 | ||
|  |     import cPickle as pickle
 | ||
|  |     from cStringIO import StringIO as BytesIO, StringIO
 | ||
|  |     NativeStringIO = BytesIO
 | ||
|  | 
 | ||
|  |     exec('def reraise(tp, value, tb=None):\n raise tp, value, tb')
 | ||
|  | 
 | ||
|  |     from itertools import imap, izip, ifilter
 | ||
|  |     intern = intern
 | ||
|  | 
 | ||
|  |     def implements_iterator(cls):
 | ||
|  |         cls.next = cls.__next__
 | ||
|  |         del cls.__next__
 | ||
|  |         return cls
 | ||
|  | 
 | ||
|  |     def implements_to_string(cls):
 | ||
|  |         cls.__unicode__ = cls.__str__
 | ||
|  |         cls.__str__ = lambda x: x.__unicode__().encode('utf-8')
 | ||
|  |         return cls
 | ||
|  | 
 | ||
|  |     def encode_filename(filename):
 | ||
|  |         if isinstance(filename, unicode):
 | ||
|  |             return filename.encode('utf-8')
 | ||
|  |         return filename
 | ||
|  | 
 | ||
|  | 
 | ||
|  | def with_metaclass(meta, *bases):
 | ||
|  |     """Create a base class with a metaclass."""
 | ||
|  |     # This requires a bit of explanation: the basic idea is to make a
 | ||
|  |     # dummy metaclass for one level of class instantiation that replaces
 | ||
|  |     # itself with the actual metaclass.
 | ||
|  |     class metaclass(type):
 | ||
|  |         def __new__(cls, name, this_bases, d):
 | ||
|  |             return meta(name, bases, d)
 | ||
|  |     return type.__new__(metaclass, 'temporary_class', (), {})
 | ||
|  | 
 | ||
|  | 
 | ||
|  | try:
 | ||
|  |     from urllib.parse import quote_from_bytes as url_quote
 | ||
|  | except ImportError:
 | ||
|  |     from urllib import quote as url_quote
 |