~dkuhlman/python-training-materials/Materials

« back to all changes in this revision

Viewing changes to python-3.5.1-docs-html/_sources/library/xdrlib.txt

  • Committer: Dave Kuhlman
  • Date: 2016-02-11 21:17:09 UTC
  • Revision ID: dkuhlman@davekuhlman.org-20160211211709-03yaen3cjempbi2m
Updated Python 2.7 docs; added Python 3.5 docs

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
:mod:`xdrlib` --- Encode and decode XDR data
 
2
============================================
 
3
 
 
4
.. module:: xdrlib
 
5
   :synopsis: Encoders and decoders for the External Data Representation (XDR).
 
6
 
 
7
 
 
8
.. index::
 
9
   single: XDR
 
10
   single: External Data Representation
 
11
 
 
12
**Source code:** :source:`Lib/xdrlib.py`
 
13
 
 
14
--------------
 
15
 
 
16
The :mod:`xdrlib` module supports the External Data Representation Standard as
 
17
described in :rfc:`1014`, written by Sun Microsystems, Inc. June 1987.  It
 
18
supports most of the data types described in the RFC.
 
19
 
 
20
The :mod:`xdrlib` module defines two classes, one for packing variables into XDR
 
21
representation, and another for unpacking from XDR representation.  There are
 
22
also two exception classes.
 
23
 
 
24
 
 
25
.. class:: Packer()
 
26
 
 
27
   :class:`Packer` is the class for packing data into XDR representation. The
 
28
   :class:`Packer` class is instantiated with no arguments.
 
29
 
 
30
 
 
31
.. class:: Unpacker(data)
 
32
 
 
33
   ``Unpacker`` is the complementary class which unpacks XDR data values from a
 
34
   string buffer.  The input buffer is given as *data*.
 
35
 
 
36
 
 
37
.. seealso::
 
38
 
 
39
   :rfc:`1014` - XDR: External Data Representation Standard
 
40
      This RFC defined the encoding of data which was XDR at the time this module was
 
41
      originally written.  It has apparently been obsoleted by :rfc:`1832`.
 
42
 
 
43
   :rfc:`1832` - XDR: External Data Representation Standard
 
44
      Newer RFC that provides a revised definition of XDR.
 
45
 
 
46
 
 
47
.. _xdr-packer-objects:
 
48
 
 
49
Packer Objects
 
50
--------------
 
51
 
 
52
:class:`Packer` instances have the following methods:
 
53
 
 
54
 
 
55
.. method:: Packer.get_buffer()
 
56
 
 
57
   Returns the current pack buffer as a string.
 
58
 
 
59
 
 
60
.. method:: Packer.reset()
 
61
 
 
62
   Resets the pack buffer to the empty string.
 
63
 
 
64
In general, you can pack any of the most common XDR data types by calling the
 
65
appropriate ``pack_type()`` method.  Each method takes a single argument, the
 
66
value to pack.  The following simple data type packing methods are supported:
 
67
:meth:`pack_uint`, :meth:`pack_int`, :meth:`pack_enum`, :meth:`pack_bool`,
 
68
:meth:`pack_uhyper`, and :meth:`pack_hyper`.
 
69
 
 
70
 
 
71
.. method:: Packer.pack_float(value)
 
72
 
 
73
   Packs the single-precision floating point number *value*.
 
74
 
 
75
 
 
76
.. method:: Packer.pack_double(value)
 
77
 
 
78
   Packs the double-precision floating point number *value*.
 
79
 
 
80
The following methods support packing strings, bytes, and opaque data:
 
81
 
 
82
 
 
83
.. method:: Packer.pack_fstring(n, s)
 
84
 
 
85
   Packs a fixed length string, *s*.  *n* is the length of the string but it is
 
86
   *not* packed into the data buffer.  The string is padded with null bytes if
 
87
   necessary to guaranteed 4 byte alignment.
 
88
 
 
89
 
 
90
.. method:: Packer.pack_fopaque(n, data)
 
91
 
 
92
   Packs a fixed length opaque data stream, similarly to :meth:`pack_fstring`.
 
93
 
 
94
 
 
95
.. method:: Packer.pack_string(s)
 
96
 
 
97
   Packs a variable length string, *s*.  The length of the string is first packed
 
98
   as an unsigned integer, then the string data is packed with
 
99
   :meth:`pack_fstring`.
 
100
 
 
101
 
 
102
.. method:: Packer.pack_opaque(data)
 
103
 
 
104
   Packs a variable length opaque data string, similarly to :meth:`pack_string`.
 
105
 
 
106
 
 
107
.. method:: Packer.pack_bytes(bytes)
 
108
 
 
109
   Packs a variable length byte stream, similarly to :meth:`pack_string`.
 
110
 
 
111
The following methods support packing arrays and lists:
 
112
 
 
113
 
 
114
.. method:: Packer.pack_list(list, pack_item)
 
115
 
 
116
   Packs a *list* of homogeneous items.  This method is useful for lists with an
 
117
   indeterminate size; i.e. the size is not available until the entire list has
 
118
   been walked.  For each item in the list, an unsigned integer ``1`` is packed
 
119
   first, followed by the data value from the list.  *pack_item* is the function
 
120
   that is called to pack the individual item.  At the end of the list, an unsigned
 
121
   integer ``0`` is packed.
 
122
 
 
123
   For example, to pack a list of integers, the code might appear like this::
 
124
 
 
125
      import xdrlib
 
126
      p = xdrlib.Packer()
 
127
      p.pack_list([1, 2, 3], p.pack_int)
 
128
 
 
129
 
 
130
.. method:: Packer.pack_farray(n, array, pack_item)
 
131
 
 
132
   Packs a fixed length list (*array*) of homogeneous items.  *n* is the length of
 
133
   the list; it is *not* packed into the buffer, but a :exc:`ValueError` exception
 
134
   is raised if ``len(array)`` is not equal to *n*.  As above, *pack_item* is the
 
135
   function used to pack each element.
 
136
 
 
137
 
 
138
.. method:: Packer.pack_array(list, pack_item)
 
139
 
 
140
   Packs a variable length *list* of homogeneous items.  First, the length of the
 
141
   list is packed as an unsigned integer, then each element is packed as in
 
142
   :meth:`pack_farray` above.
 
143
 
 
144
 
 
145
.. _xdr-unpacker-objects:
 
146
 
 
147
Unpacker Objects
 
148
----------------
 
149
 
 
150
The :class:`Unpacker` class offers the following methods:
 
151
 
 
152
 
 
153
.. method:: Unpacker.reset(data)
 
154
 
 
155
   Resets the string buffer with the given *data*.
 
156
 
 
157
 
 
158
.. method:: Unpacker.get_position()
 
159
 
 
160
   Returns the current unpack position in the data buffer.
 
161
 
 
162
 
 
163
.. method:: Unpacker.set_position(position)
 
164
 
 
165
   Sets the data buffer unpack position to *position*.  You should be careful about
 
166
   using :meth:`get_position` and :meth:`set_position`.
 
167
 
 
168
 
 
169
.. method:: Unpacker.get_buffer()
 
170
 
 
171
   Returns the current unpack data buffer as a string.
 
172
 
 
173
 
 
174
.. method:: Unpacker.done()
 
175
 
 
176
   Indicates unpack completion.  Raises an :exc:`Error` exception if all of the
 
177
   data has not been unpacked.
 
178
 
 
179
In addition, every data type that can be packed with a :class:`Packer`, can be
 
180
unpacked with an :class:`Unpacker`.  Unpacking methods are of the form
 
181
``unpack_type()``, and take no arguments.  They return the unpacked object.
 
182
 
 
183
 
 
184
.. method:: Unpacker.unpack_float()
 
185
 
 
186
   Unpacks a single-precision floating point number.
 
187
 
 
188
 
 
189
.. method:: Unpacker.unpack_double()
 
190
 
 
191
   Unpacks a double-precision floating point number, similarly to
 
192
   :meth:`unpack_float`.
 
193
 
 
194
In addition, the following methods unpack strings, bytes, and opaque data:
 
195
 
 
196
 
 
197
.. method:: Unpacker.unpack_fstring(n)
 
198
 
 
199
   Unpacks and returns a fixed length string.  *n* is the number of characters
 
200
   expected.  Padding with null bytes to guaranteed 4 byte alignment is assumed.
 
201
 
 
202
 
 
203
.. method:: Unpacker.unpack_fopaque(n)
 
204
 
 
205
   Unpacks and returns a fixed length opaque data stream, similarly to
 
206
   :meth:`unpack_fstring`.
 
207
 
 
208
 
 
209
.. method:: Unpacker.unpack_string()
 
210
 
 
211
   Unpacks and returns a variable length string.  The length of the string is first
 
212
   unpacked as an unsigned integer, then the string data is unpacked with
 
213
   :meth:`unpack_fstring`.
 
214
 
 
215
 
 
216
.. method:: Unpacker.unpack_opaque()
 
217
 
 
218
   Unpacks and returns a variable length opaque data string, similarly to
 
219
   :meth:`unpack_string`.
 
220
 
 
221
 
 
222
.. method:: Unpacker.unpack_bytes()
 
223
 
 
224
   Unpacks and returns a variable length byte stream, similarly to
 
225
   :meth:`unpack_string`.
 
226
 
 
227
The following methods support unpacking arrays and lists:
 
228
 
 
229
 
 
230
.. method:: Unpacker.unpack_list(unpack_item)
 
231
 
 
232
   Unpacks and returns a list of homogeneous items.  The list is unpacked one
 
233
   element at a time by first unpacking an unsigned integer flag.  If the flag is
 
234
   ``1``, then the item is unpacked and appended to the list.  A flag of ``0``
 
235
   indicates the end of the list.  *unpack_item* is the function that is called to
 
236
   unpack the items.
 
237
 
 
238
 
 
239
.. method:: Unpacker.unpack_farray(n, unpack_item)
 
240
 
 
241
   Unpacks and returns (as a list) a fixed length array of homogeneous items.  *n*
 
242
   is number of list elements to expect in the buffer. As above, *unpack_item* is
 
243
   the function used to unpack each element.
 
244
 
 
245
 
 
246
.. method:: Unpacker.unpack_array(unpack_item)
 
247
 
 
248
   Unpacks and returns a variable length *list* of homogeneous items. First, the
 
249
   length of the list is unpacked as an unsigned integer, then each element is
 
250
   unpacked as in :meth:`unpack_farray` above.
 
251
 
 
252
 
 
253
.. _xdr-exceptions:
 
254
 
 
255
Exceptions
 
256
----------
 
257
 
 
258
Exceptions in this module are coded as class instances:
 
259
 
 
260
 
 
261
.. exception:: Error
 
262
 
 
263
   The base exception class.  :exc:`Error` has a single public attribute
 
264
   :attr:`msg` containing the description of the error.
 
265
 
 
266
 
 
267
.. exception:: ConversionError
 
268
 
 
269
   Class derived from :exc:`Error`.  Contains no additional instance variables.
 
270
 
 
271
Here is an example of how you would catch one of these exceptions::
 
272
 
 
273
   import xdrlib
 
274
   p = xdrlib.Packer()
 
275
   try:
 
276
       p.pack_double(8.01)
 
277
   except xdrlib.ConversionError as instance:
 
278
       print('packing the double failed:', instance.msg)
 
279