~ubuntu-branches/debian/sid/pyrlp/sid

« back to all changes in this revision

Viewing changes to rlp/utils_py2.py

  • Committer: Package Import Robot
  • Author(s): Ben Finney
  • Date: 2017-07-15 05:25:42 UTC
  • Revision ID: package-import@ubuntu.com-20170715052542-a20zzsypt1qfecq1
Tags: upstream-0.5.1
ImportĀ upstreamĀ versionĀ 0.5.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import abc
 
2
import struct
 
3
import codecs
 
4
import binascii
 
5
 
 
6
 
 
7
class Atomic(object):
 
8
 
 
9
    """ABC for objects that can be RLP encoded as is."""
 
10
    __metaclass__ = abc.ABCMeta
 
11
 
 
12
 
 
13
Atomic.register(str)
 
14
Atomic.register(bytearray)
 
15
Atomic.register(unicode)
 
16
 
 
17
bytes_to_str = str
 
18
ascii_chr = chr
 
19
 
 
20
 
 
21
def str_to_bytes(value):
 
22
    if isinstance(value, (bytes, bytearray)):
 
23
        return bytes(value)
 
24
    elif isinstance(value, unicode):
 
25
        return codecs.encode(value, 'utf8')
 
26
    else:
 
27
        raise TypeError("Value must be text, bytes, or bytearray")
 
28
 
 
29
 
 
30
def _old_int_to_big_endian(value):
 
31
    cs = []
 
32
    while value > 0:
 
33
        cs.append(chr(value % 256))
 
34
        value /= 256
 
35
    s = ''.join(reversed(cs))
 
36
    return s
 
37
 
 
38
 
 
39
def packl(lnum):
 
40
    if lnum == 0:
 
41
        return b'\0'
 
42
    s = hex(lnum)[2:]
 
43
    s = s.rstrip('L')
 
44
    if len(s) & 1:
 
45
        s = '0' + s
 
46
    s = binascii.unhexlify(s)
 
47
    return s
 
48
 
 
49
int_to_big_endian = packl
 
50
 
 
51
 
 
52
def big_endian_to_int(value):
 
53
    if len(value) == 1:
 
54
        return ord(value)
 
55
    elif len(value) <= 8:
 
56
        return struct.unpack('>Q', value.rjust(8, '\x00'))[0]
 
57
    else:
 
58
        return int(encode_hex(value), 16)
 
59
 
 
60
 
 
61
def is_integer(value):
 
62
    return isinstance(value, (int, long))
 
63
 
 
64
 
 
65
def decode_hex(s):
 
66
    if isinstance(s, bytearray):
 
67
        s = str(s)
 
68
    if not isinstance(s, (str, unicode)):
 
69
        raise TypeError('Value must be an instance of str or unicode')
 
70
    return s.decode('hex')
 
71
 
 
72
 
 
73
def encode_hex(s):
 
74
    if isinstance(s, bytearray):
 
75
        s = str(s)
 
76
    if not isinstance(s, (str, unicode)):
 
77
        raise TypeError('Value must be an instance of str or unicode')
 
78
    return s.encode('hex')
 
79
 
 
80
 
 
81
def safe_ord(s):
 
82
    if isinstance(s, int):
 
83
        return s
 
84
    return ord(s)