annotate Lib/xdrlib.py @ 4566:6403c94de50d legacy-trunk

Added safeguard against failure in __del__.
author Guido van Rossum <guido@python.org>
date Wed, 27 Nov 1996 19:39:58 +0000
parents 91c696457fd4
children 6f1a120ae9c0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
4045
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
1 """Implements (a subset of) Sun XDR -- eXternal Data Representation.
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
2
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
3 See: RFC 1014
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
5 This module will conditionally use the _xdrmodule.so module to get
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
6 support for those representations we can't do much with from Python.
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
7
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
8 """
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
9
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
10 import struct
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
11 from types import LongType
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
12
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
13 # use C layer XDR libraries for some data types if available
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
14 try:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
15 import _xdr
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
16 except ImportError:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
17 _xdr = None
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
18
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
19 # this test is done to see if machine representation is the same as
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
20 # network representation. if so, we can use module struct for packing
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
21 # some data types
4159
df63985c1ca9 No double underscores for globals please
Guido van Rossum <guido@python.org>
parents: 4046
diff changeset
22 _USE_MACHINE_REP = (struct.pack('l', 1) == '\0\0\0\1')
4045
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
23
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
24 # exceptions
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
25 class Error:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
26 """Exception class for this module. Use:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
27
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
28 except xdrlib.Error, var:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
29 # var has the Error instance for the exception
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
30
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
31 Public ivars:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
32 msg -- contains the message
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
33
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
34 """
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
35 def __init__(self, msg):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
36 self.msg = msg
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
37 def __repr__(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
38 return repr(self.msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
39 def __str__(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
40 return str(self.msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
41
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
42
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
43 class ConversionError(Error):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
44 pass
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
45
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
46
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
47
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
48 class Packer:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
49 """Pack various data representations into a buffer."""
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
50
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
51 def __init__(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
52 self.reset()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
53
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
54 def reset(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
55 self.__buf = ''
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
56
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
57 def get_buffer(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
58 return self.__buf
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
59 # backwards compatibility
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
60 get_buf = get_buffer
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
61
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
62 def pack_uint(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
63 self.__buf = self.__buf + \
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
64 (chr(int(x>>24 & 0xff)) + chr(int(x>>16 & 0xff)) + \
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
65 chr(int(x>>8 & 0xff)) + chr(int(x & 0xff)))
4159
df63985c1ca9 No double underscores for globals please
Guido van Rossum <guido@python.org>
parents: 4046
diff changeset
66 if _USE_MACHINE_REP:
4045
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
67 def pack_uint(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
68 if type(x) == LongType:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
69 x = int((x + 0x80000000L) % 0x100000000L - 0x80000000L)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
70 self.__buf = self.__buf + struct.pack('l', x)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
71
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
72 pack_int = pack_uint
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
73 pack_enum = pack_int
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
74
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
75 def pack_bool(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
76 if x: self.__buf = self.__buf + '\0\0\0\1'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
77 else: self.__buf = self.__buf + '\0\0\0\0'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
78
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
79 def pack_uhyper(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
80 self.pack_uint(int(x>>32 & 0xffffffff))
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
81 self.pack_uint(int(x & 0xffffffff))
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
82
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
83 pack_hyper = pack_uhyper
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
84
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
85 def pack_float(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
86 raise ConversionError('Not supported')
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
87 def pack_double(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
88 raise ConversionError('Not supported')
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
89 # get these from the C layer if available
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
90 if _xdr:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
91 def pack_float(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
92 try: self.__buf = self.__buf + _xdr.pack_float(x)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
93 except _xdr.error, msg:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
94 raise ConversionError(msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
95 def pack_double(self, x):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
96 try: self.__buf = self.__buf + _xdr.pack_double(x)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
97 except _xdr.error, msg:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
98 raise ConversionError(msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
99
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
100 def pack_fstring(self, n, s):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
101 if n < 0:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
102 raise ValueError, 'fstring size must be nonnegative'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
103 n = ((n+3)/4)*4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
104 data = s[:n]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
105 data = data + (n - len(data)) * '\0'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
106 self.__buf = self.__buf + data
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
107
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
108 pack_fopaque = pack_fstring
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
109
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
110 def pack_string(self, s):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
111 n = len(s)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
112 self.pack_uint(n)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
113 self.pack_fstring(n, s)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
114
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
115 pack_opaque = pack_string
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
116 pack_bytes = pack_string
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
117
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
118 def pack_list(self, list, pack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
119 for item in list:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
120 self.pack_uint(1)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
121 pack_item(item)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
122 self.pack_uint(0)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
123
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
124 def pack_farray(self, n, list, pack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
125 if len(list) <> n:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
126 raise ValueError, 'wrong array size'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
127 for item in list:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
128 pack_item(item)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
129
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
130 def pack_array(self, list, pack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
131 n = len(list)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
132 self.pack_uint(n)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
133 self.pack_farray(n, list, pack_item)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
134
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
135
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
136
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
137 class Unpacker:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
138 """Unpacks various data representations from the given buffer."""
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
139
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
140 def __init__(self, data):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
141 self.reset(data)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
142
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
143 def reset(self, data):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
144 self.__buf = data
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
145 self.__pos = 0
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
146
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
147 def get_position(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
148 return self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
149
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
150 def set_position(self, position):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
151 self.__pos = position
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
152
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
153 def done(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
154 if self.__pos < len(self.__buf):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
155 raise Error('unextracted data remains')
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
156
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
157 def unpack_uint(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
158 i = self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
159 self.__pos = j = i+4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
160 data = self.__buf[i:j]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
161 if len(data) < 4:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
162 raise EOFError
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
163 x = long(ord(data[0]))<<24 | ord(data[1])<<16 | \
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
164 ord(data[2])<<8 | ord(data[3])
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
165 # Return a Python long only if the value is not representable
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
166 # as a nonnegative Python int
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
167 if x < 0x80000000L:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
168 x = int(x)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
169 return x
4159
df63985c1ca9 No double underscores for globals please
Guido van Rossum <guido@python.org>
parents: 4046
diff changeset
170 if _USE_MACHINE_REP:
4045
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
171 def unpack_uint(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
172 i = self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
173 self.__pos = j = i+4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
174 data = self.__buf[i:j]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
175 if len(data) < 4:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
176 raise EOFError
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
177 return struct.unpack('l', data)[0]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
178
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
179 def unpack_int(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
180 x = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
181 if x >= 0x80000000L:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
182 x = x - 0x100000000L
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
183 return int(x)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
184
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
185 unpack_enum = unpack_int
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
186 unpack_bool = unpack_int
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
187
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
188 def unpack_uhyper(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
189 hi = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
190 lo = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
191 return long(hi)<<32 | lo
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
192
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
193 def unpack_hyper(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
194 x = self.unpack_uhyper()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
195 if x >= 0x8000000000000000L:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
196 x = x - 0x10000000000000000L
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
197 return x
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
198
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
199 def unpack_float(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
200 raise ConversionError('Not supported')
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
201 def unpack_double(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
202 raise ConversionError('Not supported')
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
203 # get these from the C layer if available
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
204 if _xdr:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
205 def unpack_float(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
206 i = self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
207 self.__pos = j = i+4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
208 data = self.__buf[i:j]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
209 if len(data) < 4:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
210 raise EOFError
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
211 try: return _xdr.unpack_float(data)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
212 except _xdr.error, msg:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
213 raise ConversionError(msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
214
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
215 def unpack_double(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
216 i = self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
217 self.__pos = j = i+8
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
218 data = self.__buf[i:j]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
219 if len(data) < 8:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
220 raise EOFError
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
221 try: return _xdr.unpack_double(data)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
222 except _xdr.error, msg:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
223 raise ConversionError(msg)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
224
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
225 def unpack_fstring(self, n):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
226 if n < 0:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
227 raise ValueError, 'fstring size must be nonnegative'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
228 i = self.__pos
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
229 j = i + (n+3)/4*4
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
230 if j > len(self.__buf):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
231 raise EOFError
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
232 self.__pos = j
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
233 return self.__buf[i:i+n]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
234
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
235 unpack_fopaque = unpack_fstring
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
236
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
237 def unpack_string(self):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
238 n = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
239 return self.unpack_fstring(n)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
240
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
241 unpack_opaque = unpack_string
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
242 unpack_bytes = unpack_string
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
243
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
244 def unpack_list(self, unpack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
245 list = []
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
246 while 1:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
247 x = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
248 if x == 0: break
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
249 if x <> 1:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
250 raise ConversionError('0 or 1 expected, got ' + `x`)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
251 item = unpack_item()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
252 list.append(item)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
253 return list
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
254
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
255 def unpack_farray(self, n, unpack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
256 list = []
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
257 for i in range(n):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
258 list.append(unpack_item())
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
259 return list
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
260
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
261 def unpack_array(self, unpack_item):
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
262 n = self.unpack_uint()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
263 return self.unpack_farray(n, unpack_item)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
264
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
265
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
266 # test suite
4046
eb9fc404c066 Rename __test() to _test().
Guido van Rossum <guido@python.org>
parents: 4045
diff changeset
267 def _test():
4045
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
268 p = Packer()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
269 packtest = [
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
270 (p.pack_uint, (9,)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
271 (p.pack_bool, (None,)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
272 (p.pack_bool, ('hello',)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
273 (p.pack_uhyper, (45L,)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
274 (p.pack_float, (1.9,)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
275 (p.pack_double, (1.9,)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
276 (p.pack_string, ('hello world',)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
277 (p.pack_list, (range(5), p.pack_uint)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
278 (p.pack_array, (['what', 'is', 'hapnin', 'doctor'], p.pack_string)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
279 ]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
280 succeedlist = [1] * len(packtest)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
281 count = 0
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
282 for method, args in packtest:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
283 print 'pack test', count,
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
284 try:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
285 apply(method, args)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
286 print 'succeeded'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
287 except ConversionError, var:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
288 print 'ConversionError:', var.msg
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
289 succeedlist[count] = 0
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
290 count = count + 1
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
291 data = p.get_buffer()
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
292 # now verify
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
293 up = Unpacker(data)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
294 unpacktest = [
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
295 (up.unpack_uint, (), lambda x: x == 9),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
296 (up.unpack_bool, (), lambda x: not x),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
297 (up.unpack_bool, (), lambda x: x),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
298 (up.unpack_uhyper, (), lambda x: x == 45L),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
299 (up.unpack_float, (), lambda x: 1.89 < x < 1.91),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
300 (up.unpack_double, (), lambda x: 1.89 < x < 1.91),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
301 (up.unpack_string, (), lambda x: x == 'hello world'),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
302 (up.unpack_list, (up.unpack_uint,), lambda x: x == range(5)),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
303 (up.unpack_array, (up.unpack_string,),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
304 lambda x: x == ['what', 'is', 'hapnin', 'doctor']),
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
305 ]
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
306 count = 0
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
307 for method, args, pred in unpacktest:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
308 print 'unpack test', count,
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
309 try:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
310 if succeedlist[count]:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
311 x = apply(method, args)
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
312 print pred(x) and 'succeeded' or 'failed', ':', x
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
313 else:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
314 print 'skipping'
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
315 except ConversionError, var:
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
316 print 'ConversionError:', var.msg
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
317 count = count + 1
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
318
96e0a7204e31 XDR interface, evolved from Demo/rpc/xdr.py by Barry.
Guido van Rossum <guido@python.org>
parents:
diff changeset
319 if __name__ == '__main__':
4046
eb9fc404c066 Rename __test() to _test().
Guido van Rossum <guido@python.org>
parents: 4045
diff changeset
320 _test()