blob: d8316827c1a96d5733e6333029a001bd940257ef [file] [log] [blame]
Fred Drake20417b71997-12-17 14:17:35 +00001\section{Standard Module \sectcode{xdrlib}}
Guido van Rossume47da0a1997-07-17 16:34:52 +00002\label{module-xdrlib}
Guido van Rossum40006cf1996-08-19 22:58:03 +00003\stmodindex{xdrlib}
4\index{XDR}
Fred Drake3c3d7ce1998-01-08 04:00:30 +00005\index{External Data Representation}
Guido van Rossum40006cf1996-08-19 22:58:03 +00006
Guido van Rossum40006cf1996-08-19 22:58:03 +00007
8
Fred Drakeff79a211998-03-14 06:30:13 +00009The \module{xdrlib} module supports the External Data Representation
Fred Drakec5891241998-02-09 19:16:20 +000010Standard as described in \rfc{1014}, written by Sun Microsystems,
Guido van Rossum40006cf1996-08-19 22:58:03 +000011Inc. June 1987. It supports most of the data types described in the
Fred Drakeae18e9f1997-10-24 21:14:36 +000012RFC.
Guido van Rossum40006cf1996-08-19 22:58:03 +000013
Fred Drakeff79a211998-03-14 06:30:13 +000014The \module{xdrlib} module defines two classes, one for packing
Guido van Rossum40006cf1996-08-19 22:58:03 +000015variables into XDR representation, and another for unpacking from XDR
16representation. There are also two exception classes.
17
Fred Drakeff79a211998-03-14 06:30:13 +000018\begin{classdesc}{Packer}{}
19\class{Packer} is the class for packing data into XDR representation.
20The \class{Packer} class is instantiated with no arguments.
21\end{classdesc}
22
23\begin{classdesc}{Unpacker}{data}
24\code{Unpacker} is the complementary class which unpacks XDR data
25values from a string buffer. The input buffer is given as
26\var{data}.
27\end{classdesc}
28
Guido van Rossum40006cf1996-08-19 22:58:03 +000029
30\subsection{Packer Objects}
Fred Drakeff79a211998-03-14 06:30:13 +000031\label{xdr-packer-objects}
Guido van Rossum40006cf1996-08-19 22:58:03 +000032
Fred Drakeff79a211998-03-14 06:30:13 +000033\class{Packer} instances have the following methods:
Guido van Rossum40006cf1996-08-19 22:58:03 +000034
35\begin{funcdesc}{get_buffer}{}
36Returns the current pack buffer as a string.
37\end{funcdesc}
38
39\begin{funcdesc}{reset}{}
40Resets the pack buffer to the empty string.
41\end{funcdesc}
42
43In general, you can pack any of the most common XDR data types by
Fred Drake3c3d7ce1998-01-08 04:00:30 +000044calling the appropriate \code{pack_\var{type}()} method. Each method
Guido van Rossum40006cf1996-08-19 22:58:03 +000045takes a single argument, the value to pack. The following simple data
Fred Drakeff79a211998-03-14 06:30:13 +000046type packing methods are supported: \method{pack_uint()},
47\method{pack_int()}, \method{pack_enum()}, \method{pack_bool()},
48\method{pack_uhyper()}, and \method{pack_hyper()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +000049
Guido van Rossum40006cf1996-08-19 22:58:03 +000050\begin{funcdesc}{pack_float}{value}
51Packs the single-precision floating point number \var{value}.
52\end{funcdesc}
53
54\begin{funcdesc}{pack_double}{value}
55Packs the double-precision floating point number \var{value}.
56\end{funcdesc}
57
58The following methods support packing strings, bytes, and opaque data:
59
Fred Drake3c3d7ce1998-01-08 04:00:30 +000060\begin{funcdesc}{pack_fstring}{n, s}
Guido van Rossum40006cf1996-08-19 22:58:03 +000061Packs a fixed length string, \var{s}. \var{n} is the length of the
62string but it is \emph{not} packed into the data buffer. The string
63is padded with null bytes if necessary to guaranteed 4 byte alignment.
64\end{funcdesc}
65
Fred Drake3c3d7ce1998-01-08 04:00:30 +000066\begin{funcdesc}{pack_fopaque}{n, data}
Guido van Rossum40006cf1996-08-19 22:58:03 +000067Packs a fixed length opaque data stream, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +000068\method{pack_fstring()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +000069\end{funcdesc}
70
71\begin{funcdesc}{pack_string}{s}
72Packs a variable length string, \var{s}. The length of the string is
73first packed as an unsigned integer, then the string data is packed
Fred Drakeff79a211998-03-14 06:30:13 +000074with \method{pack_fstring()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +000075\end{funcdesc}
76
77\begin{funcdesc}{pack_opaque}{data}
78Packs a variable length opaque data string, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +000079\method{pack_string()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +000080\end{funcdesc}
81
82\begin{funcdesc}{pack_bytes}{bytes}
Fred Drakeff79a211998-03-14 06:30:13 +000083Packs a variable length byte stream, similarly to \method{pack_string()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +000084\end{funcdesc}
85
86The following methods support packing arrays and lists:
87
Fred Drakeff79a211998-03-14 06:30:13 +000088\begin{funcdesc}{pack_list}{list, pack_item}
Guido van Rossum40006cf1996-08-19 22:58:03 +000089Packs a \var{list} of homogeneous items. This method is useful for
90lists with an indeterminate size; i.e. the size is not available until
91the entire list has been walked. For each item in the list, an
92unsigned integer \code{1} is packed first, followed by the data value
93from the list. \var{pack_item} is the function that is called to pack
94the individual item. At the end of the list, an unsigned integer
95\code{0} is packed.
96\end{funcdesc}
97
Fred Drakecce10901998-03-17 06:33:25 +000098\begin{funcdesc}{pack_farray}{n, array, pack_item}
Guido van Rossum40006cf1996-08-19 22:58:03 +000099Packs a fixed length list (\var{array}) of homogeneous items. \var{n}
100is the length of the list; it is \emph{not} packed into the buffer,
Fred Drakeff79a211998-03-14 06:30:13 +0000101but a \exception{ValueError} exception is raised if
102\code{len(\var{array})} is not equal to \var{n}. As above,
103\var{pack_item} is the function used to pack each element.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000104\end{funcdesc}
105
Fred Drakecce10901998-03-17 06:33:25 +0000106\begin{funcdesc}{pack_array}{list, pack_item}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000107Packs a variable length \var{list} of homogeneous items. First, the
108length of the list is packed as an unsigned integer, then each element
Fred Drakeff79a211998-03-14 06:30:13 +0000109is packed as in \method{pack_farray()} above.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000110\end{funcdesc}
111
112\subsection{Unpacker Objects}
Fred Drakeff79a211998-03-14 06:30:13 +0000113\label{xdr-unpacker-objects}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000114
Fred Drakeff79a211998-03-14 06:30:13 +0000115The \class{Unpacker} class offers the following methods:
Guido van Rossum40006cf1996-08-19 22:58:03 +0000116
117\begin{funcdesc}{reset}{data}
118Resets the string buffer with the given \var{data}.
119\end{funcdesc}
120
121\begin{funcdesc}{get_position}{}
122Returns the current unpack position in the data buffer.
123\end{funcdesc}
124
125\begin{funcdesc}{set_position}{position}
126Sets the data buffer unpack position to \var{position}. You should be
Fred Drakeff79a211998-03-14 06:30:13 +0000127careful about using \method{get_position()} and \method{set_position()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000128\end{funcdesc}
129
Barry Warsaw102dc411996-12-04 22:05:42 +0000130\begin{funcdesc}{get_buffer}{}
131Returns the current unpack data buffer as a string.
132\end{funcdesc}
133
Guido van Rossum40006cf1996-08-19 22:58:03 +0000134\begin{funcdesc}{done}{}
Fred Drakeff79a211998-03-14 06:30:13 +0000135Indicates unpack completion. Raises an \exception{Error} exception
Guido van Rossum40006cf1996-08-19 22:58:03 +0000136if all of the data has not been unpacked.
137\end{funcdesc}
138
Fred Drakeff79a211998-03-14 06:30:13 +0000139In addition, every data type that can be packed with a \class{Packer},
140can be unpacked with an \class{Unpacker}. Unpacking methods are of the
Fred Drake3c3d7ce1998-01-08 04:00:30 +0000141form \code{unpack_\var{type}()}, and take no arguments. They return the
Fred Drake040e5651997-10-24 21:15:55 +0000142unpacked object.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000143
Guido van Rossum3f247ad1996-09-27 17:11:24 +0000144\begin{funcdesc}{unpack_float}{}
145Unpacks a single-precision floating point number.
146\end{funcdesc}
147
148\begin{funcdesc}{unpack_double}{}
149Unpacks a double-precision floating point number, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +0000150\method{unpack_float()}.
Guido van Rossum3f247ad1996-09-27 17:11:24 +0000151\end{funcdesc}
152
Guido van Rossum40006cf1996-08-19 22:58:03 +0000153In addition, the following methods unpack strings, bytes, and opaque
154data:
155
156\begin{funcdesc}{unpack_fstring}{n}
157Unpacks and returns a fixed length string. \var{n} is the number of
158characters expected. Padding with null bytes to guaranteed 4 byte
159alignment is assumed.
160\end{funcdesc}
161
162\begin{funcdesc}{unpack_fopaque}{n}
163Unpacks and returns a fixed length opaque data stream, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +0000164\method{unpack_fstring()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000165\end{funcdesc}
166
Guido van Rossum3f247ad1996-09-27 17:11:24 +0000167\begin{funcdesc}{unpack_string}{}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000168Unpacks and returns a variable length string. The length of the
169string is first unpacked as an unsigned integer, then the string data
Fred Drakeff79a211998-03-14 06:30:13 +0000170is unpacked with \method{unpack_fstring()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000171\end{funcdesc}
172
173\begin{funcdesc}{unpack_opaque}{}
174Unpacks and returns a variable length opaque data string, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +0000175\method{unpack_string()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000176\end{funcdesc}
177
178\begin{funcdesc}{unpack_bytes}{}
179Unpacks and returns a variable length byte stream, similarly to
Fred Drakeff79a211998-03-14 06:30:13 +0000180\method{unpack_string()}.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000181\end{funcdesc}
182
183The following methods support unpacking arrays and lists:
184
185\begin{funcdesc}{unpack_list}{unpack_item}
186Unpacks and returns a list of homogeneous items. The list is unpacked
187one element at a time
188by first unpacking an unsigned integer flag. If the flag is \code{1},
189then the item is unpacked and appended to the list. A flag of
190\code{0} indicates the end of the list. \var{unpack_item} is the
191function that is called to unpack the items.
192\end{funcdesc}
193
Fred Drakecce10901998-03-17 06:33:25 +0000194\begin{funcdesc}{unpack_farray}{n, unpack_item}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000195Unpacks and returns (as a list) a fixed length array of homogeneous
196items. \var{n} is number of list elements to expect in the buffer.
197As above, \var{unpack_item} is the function used to unpack each element.
198\end{funcdesc}
199
200\begin{funcdesc}{unpack_array}{unpack_item}
201Unpacks and returns a variable length \var{list} of homogeneous items.
202First, the length of the list is unpacked as an unsigned integer, then
Fred Drakeff79a211998-03-14 06:30:13 +0000203each element is unpacked as in \method{unpack_farray()} above.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000204\end{funcdesc}
205
206\subsection{Exceptions}
Fred Drake4b3f0311996-12-13 22:04:31 +0000207\nodename{Exceptions in xdrlib module}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000208
209Exceptions in this module are coded as class instances:
210
211\begin{excdesc}{Error}
Fred Drakeff79a211998-03-14 06:30:13 +0000212The base exception class. \exception{Error} has a single public data
213member \member{msg} containing the description of the error.
Guido van Rossum40006cf1996-08-19 22:58:03 +0000214\end{excdesc}
215
216\begin{excdesc}{ConversionError}
Fred Drakeff79a211998-03-14 06:30:13 +0000217Class derived from \exception{Error}. Contains no additional instance
Guido van Rossum40006cf1996-08-19 22:58:03 +0000218variables.
219\end{excdesc}
220
221Here is an example of how you would catch one of these exceptions:
222
Fred Drake19479911998-02-13 06:58:54 +0000223\begin{verbatim}
Guido van Rossum40006cf1996-08-19 22:58:03 +0000224import xdrlib
225p = xdrlib.Packer()
226try:
227 p.pack_double(8.01)
228except xdrlib.ConversionError, instance:
229 print 'packing the double failed:', instance.msg
Fred Drake19479911998-02-13 06:58:54 +0000230\end{verbatim}