/usr/lib/python3/dist-packages/genshi/compat.py is in python3-genshi 0.7-6.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 | # -*- coding: utf-8 -*-
#
# Copyright (C) 2006-2009 Edgewall Software
# All rights reserved.
#
# This software is licensed as described in the file COPYING, which
# you should have received as part of this distribution. The terms
# are also available at http://genshi.edgewall.org/wiki/License.
#
# This software consists of voluntary contributions made by many
# individuals. For the exact contribution history, see the revision
# history and logs, available at http://genshi.edgewall.org/log/.
"""Various Python version compatibility classes and functions."""
import sys
from types import CodeType
IS_PYTHON2 = (sys.version_info[0] == 2)
# This function should only be called in Python 2, and will fail in Python 3
if IS_PYTHON2:
def stringrepr(string):
ascii = string.encode('ascii', 'backslashreplace')
quoted = "'" + ascii.replace("'", "\\'") + "'"
if len(ascii) > len(string):
return '' + quoted
return quoted
else:
def stringrepr(string):
raise RuntimeError(
'Python 2 compatibility function. Not usable in Python 3.')
# We need to test if an object is an instance of a string type in places
if IS_PYTHON2:
def isstring(obj):
return isinstance(obj, str)
else:
def isstring(obj):
return isinstance(obj, str)
# We need to differentiate between StringIO and BytesIO in places
if IS_PYTHON2:
from io import StringIO
try:
from io import StringIO as BytesIO
except ImportError:
BytesIO = StringIO
else:
from io import StringIO, BytesIO
# We want to test bytestring input to some stuff.
if IS_PYTHON2:
def wrapped_bytes(bstr):
assert bstr.startswith('b')
return bstr[1:]
else:
def wrapped_bytes(bstr):
assert bstr.startswith('b')
return bstr
# We do some scary stuff with CodeType() in template/eval.py
if IS_PYTHON2:
def get_code_params(code):
return (code.co_nlocals, code.co_stacksize, code.co_flags,
code.co_code, code.co_consts, code.co_names, code.co_varnames,
code.co_filename, code.co_name, code.co_firstlineno,
code.co_lnotab, (), ())
def build_code_chunk(code, filename, name, lineno):
return CodeType(0, code.co_nlocals, code.co_stacksize,
code.co_flags | 0x0040, code.co_code, code.co_consts,
code.co_names, code.co_varnames, filename, name,
lineno, code.co_lnotab, (), ())
else:
def get_code_params(code):
return (code.co_nlocals, code.co_kwonlyargcount, code.co_stacksize,
code.co_flags, code.co_code, code.co_consts, code.co_names,
code.co_varnames, code.co_filename, code.co_name,
code.co_firstlineno, code.co_lnotab, (), ())
def build_code_chunk(code, filename, name, lineno):
return CodeType(0, code.co_nlocals, code.co_kwonlyargcount,
code.co_stacksize, code.co_flags | 0x0040,
code.co_code, code.co_consts, code.co_names,
code.co_varnames, filename, name, lineno,
code.co_lnotab, (), ())
# Compatibility fallback implementations for Python < 2.6
try:
next = next
except NameError:
def next(iterator):
return iterator.__next__()
# Compatibility fallback implementations for Python < 2.5
try:
all = all
any = any
except NameError:
def any(S):
for x in S:
if x:
return True
return False
def all(S):
for x in S:
if not x:
return False
return True
|