/usr/lib/python3/dist-packages/pymodbus/compat.py is in python3-pymodbus 1.3.2-1.
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 | '''
Python 2.x/3.x Compatibility Layer
-------------------------------------------------
This is mostly based on the jinja2 compat code:
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
import struct
#---------------------------------------------------------------------------#
# python version checks
#---------------------------------------------------------------------------#
IS_PYTHON2 = sys.version_info[0] == 2
IS_PYTHON3 = sys.version_info[0] == 3
IS_PYPY = hasattr(sys, 'pypy_translation_info')
IS_JYTHON = sys.platform.startswith('java')
#---------------------------------------------------------------------------#
# python > 3.3 compatability layer
#---------------------------------------------------------------------------#
if not IS_PYTHON2:
#-----------------------------------------------------------------------#
# portable builtins
#-----------------------------------------------------------------------#
int2byte = lambda b: struct.pack('B', b)
byte2int = lambda b: b
unichr = chr
range_type = range
text_type = str
string_types = (str,)
iterkeys = lambda d: iter(d.keys())
itervalues = lambda d: iter(d.values())
iteritems = lambda d: iter(d.items())
get_next = lambda x: x.__next__()
#-----------------------------------------------------------------------#
# module renames
#-----------------------------------------------------------------------#
from io import BytesIO, StringIO
NativeStringIO = StringIO
ifilter = filter
imap = map
izip = zip
intern = sys.intern
import socketserver
#-----------------------------------------------------------------------#
# decorators
#-----------------------------------------------------------------------#
implements_to_string = lambda x: x
#---------------------------------------------------------------------------#
# python > 2.5 compatability layer
#---------------------------------------------------------------------------#
else:
#-----------------------------------------------------------------------#
# portable builtins
#-----------------------------------------------------------------------#
int2byte = chr
byte2int = ord
unichr = unichr
text_type = unicode
range_type = xrange
string_types = (str, unicode)
iterkeys = lambda d: d.iterkeys()
itervalues = lambda d: d.itervalues()
iteritems = lambda d: d.iteritems()
get_next = lambda x: x.next()
#-----------------------------------------------------------------------#
# module renames
#-----------------------------------------------------------------------#
from cStringIO import StringIO as BytesIO, StringIO
NativeStringIO = BytesIO
from itertools import imap, izip, ifilter
intern = intern
import SocketServer as socketserver
#-----------------------------------------------------------------------#
# decorators
#-----------------------------------------------------------------------#
def implements_to_string(klass):
klass.__unicode__ = klass.__str__
klass.__str__ = lambda x: x.__unicode__().encode('utf-8')
return klass
|